为什么上图中的客户端在TIME-WAIT状态必须等待2MSL时间呢?
(1)为了保证客户端发送的最后一个ACK能够成功到达服务器。但是这个ACK有可能会发生丢失,导致处于LAST-ACK状态下的服务器接收不到对自己发送的FIN+ACK的确认ACK,所以服务器会超时重传,而恰好再2MSL时间内客户端能再一次收到FIN+ACK。如果A在TIME-WAIT状态不等待2MSL而直接断开连接的话无法再次受到服务器重传的FIN+ACK,导致服务器接收不到ACK,无法正常进入CLOSED状态。
(2)A发送完ACK后在TIME-WAIT阶段等待2MSL时间后可以使本链接本次产生的所有报文段都从网络中消失,不会出现新的连接使用旧连接的报文段的情况
什么是2MSL
MSL翻译成中文是“报文的最大生存时间”,即超过这个时间报文会被丢弃。
实际应用中的MSL对应的一般是30s,1min,2min