TCP报文首部
TCP四次挥手过程(图片来自小林coding)
- 第一次挥手:客户端想要断开连接,首先向服务端发送一个TCP首部的FIN置为1的报文,之后客户端进入 FIN_WAIT_1 状态
- 第二次挥手:服务端收到报文后,向服务端发送ACK应答报文,之后进入 CLOSE_WAIT 状态,客户端收到ACK报文后,进入 TIME_WAIT_2 状态
- 第三次挥手:服务端也准备断开连接,向客户端发送一个FIN报文,之后进入 LAST_ACK 状态
- 第四次挥手:客户端收到FIN报文后,返回一个ACK报文,之后进入 TIME_WAIT 状态,服务端收到ACK报文后,进入 CLOSE 状态,此时服务端已经完成了连接的关闭
客户端经过2*MSL时间后,进入 CLOSE 状态,此时客户端也完成了连接的关闭
MSL(Maximum Segment Lifetime,报文最大生存时间)
2MSL:从客户端接收到FIN后发送ACK开始计时的。如果在这个时间段内,服务器没有收到ACK应答报文段,会重发FIN报文段。这样一来,可以确保服务端可以收到ACK报文,同时2MSL的时间确保了这个TCP连接产生的所有报文段在网络中都消失,旧连接的报文不会被误认为是新连接的一部分