四次挥手最后TIME_WAIT是为什么?
1.假设主动关闭方无TIME-WAIT状态会发生什么?
若主动关闭方不进入TIME-WAIT,且最后一个 ACK接收失败,那么被动关闭方会重传FIN包。由于该连接在主动关闭方已认为关闭,无法识别该FIN包。协议栈会认为对端疯了,还没建立连接你给我来个FIN?
于是回复一个RST包给对端,被动关闭方就收到一个错误(connection reset by peer)
Broken pipe:
收到RST后,还继续往该连接写数据,会触发broken pipe 错误!
2.等待2MSL的目的:
1. 在服务端未收到ACK(第三次握手)超时后,再次发送FIN报文,客户端接到重发的FIN报文,可再次发送ACK。
2. 防止已经断开的连接1在链路中残留的FIN包终止掉新的连接(该连接重用五元组)【发生概率低,但由于seq循环重用,也是有可能的】
3. 防止链路上已经关闭的连接残余数据包干扰正常的数据包造成数据流不正常!