https://www.cnblogs.com/crbhf/p/15121656.html

第一种回答

理论上,四个报文都发送完毕,就可以直接进入 CLOSE 状态了,但是可能网络是不可靠的,有可能最后一个 ACK 丢失,所以TIME_WAIT 状态就是用来重发可能丢失的 ACK 报文。

第二种回答

对应这样一种情况,最后客户端发送的 ACK = 1 给服务端的过程中丢失了,服务端没收到,服务端怎么认为的?我已经发送完数据了,怎么客户端没回应我?是不是中途丢失了?然后服务端再次发起断开连接的请求,一个来回就是2MSL。

客户单端服务器端发送的 ACK = 1 丢失,服务器端等待 1MSL 没收到,然后重新发送消息需要 1MSL 。如果再次接收到服务端的消息,则重启 2MSL 计时器,发送确认请求。客户端只需要等待 2MSL ,如果没有再次收到服务器端的消息,就说明服务端已经接收到自己的确认消息;此时双方都关闭的连接,TCP 四次分手完毕。