当前位置:  开发笔记 > 编程语言 > 正文

设置TIME_WAIT TCP

如何解决《设置TIME_WAITTCP》经验,为你挑选了3个好方法。

我们正在尝试调整通过TCP接受消息的应用程序,并使用TCP进行一些内部消息传递.在进行负载测试时,我们注意到响应时间显着降低(然后完全停止),因为对系统进行了更多的同时请求.在此期间,我们看到很多TCP连接处于TIME_WAIT状态,有人建议将TIME_WAIT环境变量从默认的60秒降低到30.

据我所知,该TIME_WAIT设置实质上设置了在关闭连接后TCP资源再次可用于系统的时间.

我不是一个"网络人",对这些事情知之甚少.我需要很多联系帖子中的内容,但是"笨拙"了一下.

我想我明白为什么这个TIME_WAIT值不能设置为0,但可以安全地设置为5吗?10岁呢?什么决定了这个值的"安全"设置?

为什么这个值的默认值为60?我猜想比我聪明的人有充分的理由选择这个作为合理的默认值.

关于压倒这个价值的潜在风险和好处,我还应该知道什么呢?

paxdiablo.. 93

TCP连接由元组指定(源IP,源端口,目标IP,目标端口).

在会话关闭之后存在TIME_WAIT状态的原因是因为在你去往你的路上(或者你可能会请求某种响应),网络中可能仍有实时数据包输出.如果你要重新创建相同的元组并且其中一个数据包出现,它将被视为连接的有效数据包(并且可能由于排序而导致错误).

因此,TIME_WAIT时间通常设置为数据包最大年龄的两倍.此值是在网络丢弃数据包之前允许的数据包的最大年龄.

这保证了,在允许您创建与同一元组的连接之前,属于该元组的先前化身的所有数据包将会死亡.

这通常决定了你应该使用的最小值.最大数据包年龄由网络属性决定,一个例子是卫星寿命高于LAN生存期,因为数据包还有很长的路要走.



1> paxdiablo..:

TCP连接由元组指定(源IP,源端口,目标IP,目标端口).

在会话关闭之后存在TIME_WAIT状态的原因是因为在你去往你的路上(或者你可能会请求某种响应),网络中可能仍有实时数据包输出.如果你要重新创建相同的元组并且其中一个数据包出现,它将被视为连接的有效数据包(并且可能由于排序而导致错误).

因此,TIME_WAIT时间通常设置为数据包最大年龄的两倍.此值是在网络丢弃数据包之前允许的数据包的最大年龄.

这保证了,在允许您创建与同一元组的连接之前,属于该元组的先前化身的所有数据包将会死亡.

这通常决定了你应该使用的最小值.最大数据包年龄由网络属性决定,一个例子是卫星寿命高于LAN生存期,因为数据包还有很长的路要走.


它的真实姓名是最大段寿命,MSL.不确定您是否可以在Windows中更改此功能,或者即使您应该更改此功能 - 也可以根据网络特性进行设置.Windows认为Windows设置为120秒.所有TCP参数都在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters中.

2> Len Holgate..:

通常,只有发出"主动关闭"的端点才会进入TIME_WAIT状态.因此,如果可能,请让您的客户端发出活动关闭,这将使TIME_WAIT保留在客户端而不是服务器上.

请参见此处:http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html和http://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/了解详细信息(后者还解释了为什么由于协议设计并不总是考虑到TIME_WAIT而无法考虑).


好的一点,服务器仍然需要等待其FIN的ACK,但这应该花费更少的时间.启动程序关闭会话也是一种很好的做法,因为只有它通常知道它何时完成.

3> Darron..:

Pax对于TIME_WAIT的原因是正确的,以及为什么要注意降低默认设置.

更好的解决方案是改变用于套接字始发端的端口号.一旦你这样做,你就不会真正关心等待个别套接字的时间.

对于侦听套接字,尽管有TIME_WAIT套接字,但您可以使用SO_REUSEADDR来允许侦听套接字绑定.


我会赞成以"Pax是正确的"这个短语开头的任何答案.:-)
对于具有数千个活动套接字的非常活跃的机器,实际上可以在TIME_WAIT中占用所有临时端口.一旦发生这种情况,在某些套接字完成等待之前,您无法再打开任何连接.减少TIME_WAIT持续时间可以帮助很多.正如Len Holgate所提到的,如果可能的话,让客户端启动主动关闭会好得多,因为这完全避免了服务器的TIME_WAIT职责.
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有