TIME_WAIT
四次挥手时,先发送FIN报文就会处于TIME_WAIT状态,这个是为了处理第三次挥手时,对方没有收到第四次挥手,从而多次发送第三次挥手(FIN报文)的情况,经过2MSL之后这个状态就会结束。一般的话,是客户端先向服务器发送FIN报文,则就是客户端处于TIME_wait状态。如果是服务器先发送FIN报文,会出现问题,先发送的就会处于那个TIME_WAIT的状态。服务器断开连接后,重启,会有一段时间重启不上,也就是那个bind()函数出错,得隔一段时间才能恢复,这个情况也可以设置一个TCP的可选项来关掉这个TIME_WAIT状态。
CLOSE_WAIT
这个是被动关闭连接方才有的状态。被动方收到FIN报文会立即返回ACK报文表示已接收到断开请求。
如果被动关闭连接方还有数据要发送就会进入CLOSE_WAIT状态。