ubuntu – 将tcp_tw_recycle / reuse设置为1有什么后果?

我在配置文件中将tcp_tw_recycle / reuse设置为1.

这样做的后果是什么?

如果重新使用tcp套接字,是否会带来安全风险?即2个不同的连接都可能发送数据?

它是否适用于具有重新连接机会的短期连接?

认情况下,当tcp_tw_reuse和tcp_tw_recycle都被禁用时,内核将确保处于TIME_WAIT状态的套接字将保持足够长的时间 – 足够长以确保属于未来连接的数据包不会被误认为是未来的数据包.旧连接.

启用tcp_tw_reuse时,可以在TIME_WAIT状态到期之前使用套接字,内核将尝试确保没有关于TCP序列号的冲突.如果启用tcp_timestamps(a.k.a. PAWS,用于防止包装序列号),它将确保不会发生这些冲突.但是,您需要在两端启用TCP时间戳(至少,这是我的理解).有关详细信息,请参阅definition of tcp_twsk_unique.

启用tcp_tw_recycle后,内核会变得更加激进,并会对远程主机使用的时间戳进行假设.它将跟踪具有TIME_WAIT状态连接的每个远程主机使用的最后一个时间戳,并允许在时间戳正确增加时重新使用套接字.但是,如果主机使用的时间戳发生更改(即及时扭转),则SYN数据包将以静方式丢弃,并且连接将无法建立(您将看到类似于“connect timeout”的错误).如果你想深入研究内核代码,definition of tcp_timewait_state_process可能是一个很好的起点.

现在,时间戳永远不会回溯;除非:

>主机重新启动(但是,当它重新启动时,TIME_WAIT套接字可能已经过期,因此它将是一个非问题);
> IP地址很快被其他东西重用(TIME_WAIT连接会保持一点,但是其他连接可能会被TCP RST攻击并释放一些空间);
>网络地址转换(或智能防火墙)涉及连接的中间.

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

有人推荐到leave tcp_tw_recycle alone,but enable tcp_tw_reuse and lower tcp_timewait_len.我同意:-)

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...