TCP连接状态分析

                                 TCP连接状态

 
 

TCP连接

Client主动发送SYN,请求连接,然后进入SYN_SENT状态,等待回复。

Server收到SYN后,回复ACK+SYN,然后进入SYN_RCVD状态。

Client收到ACK+SYN后,再回复个ACK,然后进入ESTABLISHED状态。

最后Server收到ACK后,也进入ESTABLISHED状态。至此,完成建立连接。

TCP连接状态分析

TCP断开

Client收到应用层的关闭信号后,发送FIN包给Server,然后client进入FIN_WAIT-1状态(等待Server的回应)。

Server收到FIN后,通知应用层关闭连接,并回复给Client一个ACK,然后Server进入CLOSE_WAIT状态(等待应用层关闭连接)。

Client收到ACK后,进入FIN_WAIT-2状态(什么也不做,等待Server的FIN)。

Server等待应用层关闭连接后,发送FIN,然后进入LAST_ACK状态(等待Client的ACK)。

Client收到FIN后,发送ACK,然后进入TIME_WAIT状态,等待2个MSL时间后关闭连接。

Server收到ACK后关闭连接。

MSL是什么?

maximum segment life time,TCP报文最大生存时间,RFC 793中规定MSL为2分钟。那2个MSL就是4分钟,TIME_WAIT状态要持续4分钟,然后关闭连接。


为什么要有TIME_WAIT状态?

如果Client回复的ACK丢失,Server将重发FIN,这是就需要Client能够响应并重发ACK,否则Client会发送RST,结果server认为发生错误。TCP作为可靠的协议,就必须确保两端都已关闭连接,所以Client必须进入TIME_WAIT状态并且等待时间要足够长。