繁体   English   中英

当存在状态为“ TIME_WAIT”的tcp连接时,无法建立tcp连接

[英]tcp connection can't be established when there is a tcp connection with state `TIME_WAIT`

我编写了一个简单的tcp客户端和服务器并运行它们,我注意到当我使用ctrl+c结束程序时,tcp连接将被关闭,但是tcp连接状态类似于TIME_WAIT然后如果我再次运行tcp客户端和服务器,则tcp无法再次建立连接总是由tcp服务器发送RST数据包我必须等待一段时间,直到可以建立下一个tcp连接

这是什么原因?如何解决这个问题?

此外,我注意到在一台主机上,当tcp连接处于状态FIN_WAIT_2即使它没有收到FIN ,tcp连接也会在一段时间后关闭,为什么?

谢谢

解决此问题的方法是设置SO_REUSEADDR套接字选项。 这告诉堆栈允许对碰巧处于TIME_WAIT状态的地址进行绑定。

TIME_WAIT状态的原因似乎是为了让散乱的数据包到达一段时间。 如果堆栈不能确保正常关闭连接,则可能有数据包在传输中,或者发送方甚至可能正在主动发送更多数据。 堆栈希望避免将这些数据包与新绑定的连接的流量混合在一起。

这是将SO_REUSEADDR用于TCP和UDP的一个很好的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM