TCP三次握手与四次断开的状态转换说明

    TCP主要针对 C/S 模型中端到端面向连接的协议,发起连接请求和断开连接请求的可以是服务端,也可以是客户端(通常是客户端)。但此处不指定谁主动发起请求、谁被动接收请求,统一用A,B两主机来表示它们之间建立连接与断开连接的过程。

三次握手
TCP三次握手与四次断开的状态转换说明

说明:
1、A发起连接请求(SYN=1,seq=x),从 CLOSED 进入 SYN_SENT 状态;
2、B收到请求,回复响应报文(SYN=1,seq=y;ACK=1,ack=x+1),从 CLOSED 进入 SYN_RCVD状态;
3、A收到相应报文,回复应答报文(ACK=1,ack=y+1),从 SYN_SENT 进入 ESTABLISHED 状态;B收到应答报文后从 SYN_RCVD 进入 ESTABLISHED 状态,此时两主机建立连接。


四次断开
TCP三次握手与四次断开的状态转换说明

说明:
1、A发起断开连接请求报文(FIN=1,fin=m),从 ESTABLISHED 进入FIN_WAIT_1 状态;
2、B收到断开请求报文,发送应答报文(ACK=1,ack=m+1),从 ESTABLISHED 进入 CLOSE_WAIT 状态;A收到B的应答报文后进入 FIN_WAIT_2 状态;
3、紧接着B也发送断开请求报文(FIN=1,fin=n),进入 LAST_ACK 状态(等待A的应答报文);
4、A收到B的断开请求报文,回复应答报文(ACK=1,ack=n+1),进入 TIME_WAIT 状态,2MSL超时(Linux的默认MSL=60秒)后进入 CLOSED 状态;B收到A的应答报文后直接进入 CLOSED 状态,此时两主机断开连接。


附: TCP更加完整的状态转换图(摘自百度图片)
TCP三次握手与四次断开的状态转换说明