TCP四次挥手
为什么需要四次挥手?
因为TCP是全双工的协议,连接的两端可以同时发送和接受数据,所以每一端都必须独立的关闭自己的“发送通道”,这就需要四次交互。
服务器刚收到客户端的FIN时,往往还有数据没发完。
什么时候可以三次挥手?
有一种特殊情况:如果服务器收到客户端FIN时,已经没有数据要发了,那么可以将ACK和FIN合并。
看起来像三次挥手
[!note]
- Client → Server: FIN
- Server → Client: ACK + FIN (合并!)
- Client → Server: ACK
为什么会有TIME WAIT状态,为什么是2MSL时间?
只有主动断开连接的一方才有TIME WAIT状态
目的:
确保最后一个ACK能到达服务器,如果没有到达服务器的话,服务端会重新发送FIN。
MSL:Maximum Segment Lifetime,一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户端都没有收到FIN,那么客户端推断ACK成功被接受,则结束TCP连接。