现在的位置: 首页 > 综合 > 正文

TCP四次挥手

2014年09月29日 综合 ⁄ 共 827字 ⁄ 字号 评论关闭

在socket编程中,任何一方执行close()操作即可产生挥手操作,即关闭socket链接。由于TCP是全双工的,关闭一端需要两次挥手,关闭两端共需要四次挥手。

TCP报文头部格式中有以下标志位

        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
        (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
                (A)URG:紧急指针(urgent pointer)有效。
                (B)ACK:确认序号有效。
                (C)PSH:接收方应该尽快将这个报文交给应用层。
                (D)RST:重置连接。
                (E)SYN:发起一个新连接。
                (F)FIN:释放一个连接。
        需要注意的是:
                (A)不要将确认序号Ack与标志位中的ACK搞混了。
                (B)确认方Ack=发起方Req+1,两端配对。

具体挥手过程:

主机A主动请求关闭A到B的链接。

第一次:主机A发送位码为FIN=1,seq number=X 的数据包到B主机,表示请求中断主机A到主机B的链接,主机B由SYN=1知道,A要求关闭连接;
第二次:主机B收到关闭连接请求后,向A发送ack=1,ack number=X+1(主机A的seq+1) 和seq=Y的包;

接下来B主机重复 第一次和第二次的握手来关闭B到A的链接。

第三次:主机B发送位码为FIN=1,seq number=Y+1 的数据包到A主机,表示请求中断主机B到主机A的链接,主机A由SYN=1知道,B要求关闭连接;

第四次:主机A收到关闭连接请求后,向B发送ack=1,ack number=Y+2 (主机B的seq+1) 和seq=X+1的包;

至此,TCP链接关闭。

抱歉!评论已关闭.