首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除与tcp_tw_recycle的连接

删除与tcp_tw_recycle的连接
EN

Stack Overflow用户
提问于 2012-01-17 11:31:41
回答 1查看 37.5K关注 0票数 28

问题摘要

我们有一个设置,其中有很多(每秒800到2400次)(进入linux机器的连接),并且在客户机和服务器之间有一个NAT设备。因此,在系统中留下了这么多的TIME_WAIT套接字。为了克服这个问题,我们将tcp_tw_recycle设置为1,但这导致了开始连接的下降。在浏览网络后,我们确实找到了使用tcp_tw_recycle和NAT设备删除帧的原因。

决心尝试

然后,我们尝试将tcp_tw_reuse设置为1,它运行良好,在相同的设置和配置中没有任何问题。

但是文档指出,当通过TCP状态感知节点(如防火墙、NAT设备或负载平衡器)的连接可能会看到丢弃的帧时,不应该使用tcp_tw_recycle和tcp_tw_reuse。联系越多,你就越有可能看到这个问题。

查询

1)在这种情况下可以使用tcp_tw_reuse吗? 2)如果不能,tcp_tw_reuse代码的哪一部分会阻止tcp_tw_reuse用于这种场景? 3)一般来说,tcp_tw_recycle和tcp_tw_reuse之间有什么区别?

EN

回答 1

Stack Overflow用户

发布于 2012-10-04 02:00:23

默认情况下,当禁用tcp_tw_reusetcp_tw_recycle时,内核将确保处于TIME_WAIT状态的套接字保持足够长的时间,以确保属于未来连接的数据包不会被误认为旧连接的晚期数据包。

当您启用tcp_tw_reuse时,可以在TIME_WAIT状态的套接字过期之前使用它们,并且内核将尝试确保对TCP序列号没有冲突。如果启用tcp_timestamps (a.k.a )。爪子,为了防止被包装的序列号),它将确保这些冲突不会发生。但是,您需要在两端启用TCP时间戳(至少,这是我的理解)。有关血淋淋的细节,请参阅独一无二

当您启用tcp_tw_recycle时,内核变得更加咄咄逼人,并将对远程主机使用的时间戳进行假设。它将跟踪每个具有TIME_WAIT状态连接的远程主机使用的最后一个时间戳),并允许在时间戳正确增加的情况下重用套接字。但是,如果主机使用的时间戳更改(即返回时间),SYN数据包将被静默丢弃,并且连接不会建立(您将看到类似于“连接超时”的错误)。如果您想深入研究内核代码,流程可能是一个很好的起点。

现在,时间戳不应该回到过去;除非:

  • 主机将被重新启动(但是,当主机重新启动时,TIME_WAIT套接字可能已经过期,因此不会出现问题);
  • IP地址被其他东西快速重用(TIME_WAIT连接会停留一点,但其他连接可能会被TCP RST击中,这会腾出一些空间);
  • 网络地址转换(或智能裤子防火墙)涉及到连接的中间。

在后一种情况下,您可以在同一个IP地址后面有多个主机,因此,不同的时间戳序列(或者,所述时间戳由防火墙在每个连接上随机处理)。在这种情况下,一些主机将随机无法连接,因为它们被映射到服务器的TIME_WAIT桶具有较新的时间戳的端口。这就是为什么文档告诉您"NAT设备或负载平衡器可能会因为设置而开始丢弃帧“。

有些人建议不要使用tcp_tw_recycle,但要启用tcp_tw_reuse和较低的tcp_fin_timeout。我同意:-)

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8893888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档