TCP 连接(三次握手)与断开(双向断开)

参考文档 TCP连接的建立与释放

TCP创建连接:三次握手

TCP 连接(三次握手)与断开(双向断开)
TCP创建连接:三次握手

 

所谓的三次握手,其实是客户端与服务器间的三次数据交互。其中,前两次握手的报头控制位SYN=1(表示双方都同意建立连接),后两次握手ACK=1(除第一次握手,随后所有的请求ACK均为1,包括之后的数据请求)。

 

TCP断开连接:双向断开

TCP 连接(三次握手)与断开(双向断开)
TCP断开连接:双向断开

 

u - 客户端发送的最后1字节的编号

v - 服务器发送的最后1字节的编号

w - 半开半闭状态服务器发送的最后1字节的编号

从上图可以看出,断开连接需要双向确认:客户端发起报头控制位FIN=1(表示数据传输完毕)的请求,服务器做出对应应答,但此时连接状态为 半开半闭 ,服务器仍然可以给客户端传输数据;待服务器发送完所有数据后,也向客户端发出报头控制位FIN=1的请求,客户端收到请求后,回复报文给服务器。但此时连接仍未断开,进入 时间等待(4min?) 状态(若最后一次回复给服务器的报文中途丢失,可以重发)。

 

TCP建立连接与断开连接共同点:

1. 除第一次请求外,所有请求报头控制位ACK=1;

2. 不论客户端或服务器,做出应答时其ack(确认序号)为对方请求的seq(请求序号)+1.