CLOSE_WAIT
TCP关闭连接时四次挥手的过程,如下图所示(图来自网络):
?...有图可知,主动方发起关闭请求也就是FIN包后,被动方接收到包,被动方接着进入CLOSE_WAIT状态,接着被动方发送FIN包告知主动方自己已关闭后进入LAST_ACK状态....,也就是一开始图上另一个项目发请求出现的Address already in use (Bind failed)错误....因为TCP是可靠的通信,在主动方回复ACK时如果由于网络问题该包发送失败,那么被动方就会进行FIN重传,此时重传会遇到两个场景:
主动方已关闭,旧的TCP连接已经消失,那么系统只能回复RST包....主动方已关闭,然后利用此端口建立了新的连接.也就是旧的TCP关闭,新的TCP已建立,那么就会造成信道的不可靠.
因此超时等待机制是必要的,
参考
浅谈CLOSE_WAIT