TCP四次挥手
四次挥手过程
TCP通过四次挥手断开连接。
第一次:客户端打算关闭连接,会发送一个TCP首部FIN置1的报文,之后客户端进入FIN_WAIT_1状态。
第二次:服务端收到该报文后向客户端发送ACK报文,接着服务端进入CLOSED_WAIT状态。
客户端收到ACK后进入FIN_WAIT_2状态。
第三次:服务端处理完数据后发送FIN报文,之后服务器进入LAST_ACK状态。
第四次:客户端回应ACK,服务器收到后进入CLOSED,客户端等待2MSL后也进入CLOSED。
等待2MSL是为了如果ACK丢失能收到服务端重发的FIN报文。
为什么需要 等待2MSL?
主动发起关闭连接的一方会有TIME_WAIT状态。
1.防止旧连接的数据包。
如果没有下次建立连接可能接收到上次连接延迟的数据包,造成数据错乱的问题。
2.保证连接正常关闭。
确保最后的ACK被服务端收到,