TCP的协议文档对TCP的一些规定:文档名称-RFC793 

TCP消息头的控制位

URG:紧急指针字段有效

ACK:确认头部字段有效

PSH:强制函数

RST:重置链接

SYN:同步系列号码

FIN:再没有来自发送者的数据

TCP连接过程的各种状态及意义

LISTEN:等待任何从远端TCP和端口的连接请求

SYN-SENT:发送一个连接请求以后等待一个匹配的连接请求

SYN-RECEIVED:发送一个连接请求并收到匹配的连接请求以后等待连接请求被确认

ESTABLISHED:表示一个打开的连接,接收的数据可以传递给用户,连接的数据传输的正常阶段

FIN-WAIT-1:等待远端的TCP连接终止请求,或者等待之前发送的连接终止请求确认

FIN-WAIT-2:等待远端TCP的连接终止请求

CLOSE-WAIT:等待本地用户的连接终止请求

CLOSING:等待远端的TCP连接终止请求确认

LAST-ACK:等待发送给远端的TCP连接终止请求的确认(包括字节的连接终止请求确认)

TIME-WAIT:等待足够的时间以确认远端TCP收到它的连接终止请求的确认

CLOSED:不在连接状态

四次握手协议的过程以及状态变化

1.A端发送FIN通知B端关闭,A端进入WAIT-1状态

2.B端收到FIN后发送给A端FIN消息以及回复A端FIN的ACK消息,同时进入CLOSE状态

3.A端收到B端的FIN和FIN-ACK消息以后切换至CLOSE状态,A端回复B端的FIN-ACK消息以后进入WAIT-2状态

4.B端收到A端的FIN-ACK消息后进入最后的等待阶段,会等待2MSL时长,保证数据全部传送和接收,之后才是真正关闭

三次握手的作用

防止老的重复连接发起导致的混乱,RST消息就是为了处理这种特殊的消息,在同步状态和非同步状态收到RST的TCP端采取不同的措施

TCP的半打开状态

TCP连接的两端没有数据交互,且其中一端异常关闭(比如服务器断电,应用程序异常终止不算异常关闭,操作系统会在fd变为0时自动关闭socket,完成四次握手),此时对端并不知道链接已关闭,这种场景叫做半打开连接。半打开连接中保持打开的一端向socket发送任何数据都会导致收到一个RST消息,RST消息期望收到消息的一端关闭连接。

关闭一个连接时如何确保数据已经全部发送或者接收?

用户需要持续读取数据直到TCP告诉用户已经没有数据可读,手动关闭连接后,TCP仍会保持一段时间,保证用户的数据全部送达,这个期间需要持续从关闭的连接读取数据。

socket断开连接的四次握手及常见过程解析的更多相关文章

  1. Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠s ...

  2. TCP三次握手连接与四次握手断开

    http://blog.csdn.net/whuslei/article/details/6667471(三次握手与四次握手) 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机. 如 ...

  3. 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义

    为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...

  4. 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手

    TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...

  5. tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?

    用wireshark 抓包,看看tcp 断开连接的过程.  以前书上说tcp断开连接,4次握手,可我为什么wireshark 只能抓到3个包? 百度一下,别人也有类似的疑问. [求助]书上和网上的资料 ...

  6. TCP\IP三次握手连接,四次握手断开分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  7. HTTP 三次握手  建立连接 和  四次握手断开连接

    三次握手建立连接    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确 ...

  8. socket中TCP的三次握手连接和四次握手释放

    三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...

  9. TCP断开连接(四次挥手)

    四次挥手 ACK建立连接之后都为1. 1.A发送释放连接报文段,FIN=1. 2.B收到并回复确认,TCP进入半关闭状态,即此时B能向A发送,但是A无法向B发送数据. 3.当B传输完所有数据之后,发送 ...

随机推荐

  1. BZOJ2252: [2010Beijing wc]矩阵距离

    题解: 我脑子里都是翔??? bfs一下就行了 我居然还想什么kd tree!真是too naive,,, #include<cstdio> #include<cstdlib> ...

  2. buildroot linux filesystem 初探

    /****************************************************************************** * buildroot linux fi ...

  3. 【解决方案】jquery live的change事件在IE下失效

    $("#spanChildSec select").live("change", function () {              //处理内容       ...

  4. c & c++中const

    1 const的基本用法 常变量:  const 类型说明符 变量名 #在c语言中,仍是一个变量.c++中则变为一个常量,比如可以设置为数组的长度 常引用:  const 类型说明符 &引用名 ...

  5. operator.itemgetter的用法【转】

    operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [,, ...

  6. Creating SharePoint 2010 Event Receivers in Visual Studio 2010

    转:http://msdn.microsoft.com/en-us/library/gg252010(v=office.14).aspx Summary:  Learn how to create a ...

  7. HDU 2056 Rectangles

    Rectangles Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. C# Read/Write another Process' Memory z

    http://www.codeproject.com/Articles/670373/Csharp-Read-Write-another-Process-Memory This article aim ...

  9. 联通光纤上网配置+华为HG8240光猫+TL-WR842N

    最近搬家改用北京联通宽带,光纤入户的那种.联通送的光猫是华为HG8240,没看到天线,应该是不带无线路由.然后自己再买了个TP-Link的TL-WR842N,用来组局域网,也供ipad.kindle. ...

  10. (原创)LAMP教程4-用VirtualBox安装64位的centos6.4

    (原创)LAMP教程4-用VirtualBox安装64位的centos6.4 好的,今天就要开始正式的讲一些有营养的东西了,是的,没有错就是讲如何用VirtualBox安装64位的centos6.4 ...