欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

断开连接时,time_wait状态的解释和验证

程序员文章站 2022-03-02 15:27:42
...
[img]http://lin-style.iteye.com/upload/picture/pic/16073/8f0b8c72-a1b2-3c14-87b4-a63cda96b15a.jpg[/img]

time_wait状态的解释和验证:在TCP同步双工断开连接中,假设没有time-wait这个状态,那么在最后一个FIN N发送时,主动关闭方接到后,返回ack N+1.那么这个时候如果N+1这个包在没有正确达到,那么对方会一直处于LAST ACK的状态,而发送方因为没tim_wait这个状态,已经认为是正确发送了就退出了,造成接收方一直等待。 加入time_wait后,time_wait本身这个值也代表这个一个包在网络上能生存的时间,接收方就可以简单认为在这个时间内没收到N+1的包就可以认为
这次断开是失败的,那么要重新发送FIN N的***。而这个时候time_wait端也要将状态改为接
收这个FIN的状态,以进行下一次发送

对重复连接的socket连接:设想下,假设没这个time_wait,你刚退出这个套接字,四次断开还未
完成,你或许在CLOSE_WAIT就退出了,然后又马上连接,发出你的ACK。这个后果是很严重的,而
对方可能认为你还处于刚才的四次断开状态呢。。

第一无法验证。对第二个验证如下:在客户端bind一个sockaddr_in,指定端口。在断开时,马上再次连接,发现连接不起来
[[email protected] client]$ ./client.exe 127.0.0.1 9000
fds
fds
fds
fds
fds
fds
[[email protected] client]$ ./client.exe 127.0.0.1 9000
[[email protected] client]$ ./client.exe 127.0.0.1 9000
[[email protected] client]$ ./client.exe 127.0.0.1 9000

这个时候端口处于
127.0.0.1:9005          127.0.0.1:9000          TIME_WAIT
相关标签: Socket