TCP关闭的时候,会在发起端收到对端fin报文后,会进入time wait状态。原因就是如果发起端在收到fin报文后,发送的ACK报文丢失的情况下,那此时对端又会重新发送fin报文,但此时发起端已经关闭了连接,只能发送rst报文,那对端的状态就会乱,所有才有了time wait这个时间状态,等待两个MSL.
fin
A----------------->B CLOSE_WAIT
ack
FIN_WAIT_1 A<-----------------B
fin
FIN_WAIT_2 A<-----------------B LAST_ACK
| ack
Time Wait |------------------->CLOSED
|
CLOSED |