本文最后更新于308 天前,其中的信息可能已经过时,如有错误请发送邮件到3260245294@qq.com
net.ipv4.tcp_tw_recycle
参数在 Linux 中与 TCP 协议有关,特别是与处理 TIME_WAIT 套接字有关。这个参数如何影响端口连接,主要体现在以下几个方面:
- TIME_WAIT 状态和端口重用: 在 TCP 中,当一个连接关闭后,套接字会进入 TIME_WAIT 状态一段时间(通常是最大报文段生存时间的两倍,默认为 60 秒)。这样做是为了确保网络上任何延迟的数据包都能到达或被丢弃。
tcp_tw_recycle
选项旨在允许更快地重用这些 TIME_WAIT 套接字。 - 对端口可用性的影响: 启用
tcp_tw_recycle
可以导致套接字更快地被重用,因此可以更有效地利用可用端口。这在高负载服务器中特别有用,因为那里可能会出现端口耗尽的情况。 - NAT(网络地址转换)问题: 然而,启用
tcp_tw_recycle
可能会在使用 NAT 的环境中引起问题。NAT 设备通常根据元组(源 IP、源端口、目的 IP、目的端口)来跟踪连接。启用tcp_tw_recycle
后,端口的快速重用可能会导致 NAT 表中出现冲突或不匹配,从而导致连接问题或数据包丢失。 - 弃用: 由于 NAT 问题以及它可能引起的不可预测行为,
tcp_tw_recycle
在较新的 Linux 内核中已被弃用。相反,通常使用tcp_tw_reuse
,这是一种允许重用 TIME_WAIT 套接字的更安全选项,但不会像tcp_tw_recycle
那样积极地回收它们。
总之,虽然 tcp_tw_recycle
可以提高端口使用效率并减少 TIME_WAIT 状态下的套接字数量,但它也可能导致连接问题,特别是在 NAT 环境中。
拓展内容
- net.ipv4.tcp_tw_reuse
- 示例:将其设置为
1
(sysctl -w net.ipv4.tcp_tw_reuse=1
) 可以在高性能服务器上加速 TIME_WAIT 套接字的重用,有助于处理大量短暂连接,但可能影响在 NAT 环境下的连接稳定性。
- net.ipv4.tcp_fin_timeout
- 示例:将其减少到
30
秒 (sysctl -w net.ipv4.tcp_fin_timeout=30
) 会使 TCP 连接更快地关闭,但可能导致在网络延迟高的情况下连接被过早断开。
- net.ipv4.tcp_keepalive_time
- 示例:将其设置为
120
秒 (sysctl -w net.ipv4.tcp_keepalive_time=120
) 可以减少保持活动包的发送间隔,有助于维护空闲连接,但可能增加网络流量。
- net.ipv4.tcp_max_syn_backlog
- 示例:增加值到
1024
(sysctl -w net.ipv4.tcp_max_syn_backlog=1024
) 可以允许更多的半打开连接,有助于高流量服务器处理大量的连接请求,但可能增加对系统资源的需求。
- net.ipv4.tcp_synack_retries
- 示例:将其减少到
3
(sysctl -w net.ipv4.tcp_synack_retries=3
) 可以减少在放弃连接之前发送的 SYN-ACK 重试次数,这可能导致在网络条件差的环境下连接建立失败。
- net.ipv4.tcp_orphan_retries
- 示例:设置为
1
(sysctl -w net.ipv4.tcp_orphan_retries=1
) 将减少放弃孤儿套接字前的重试次数,这可以释放资源,但也可能导致更多的连接被非正常终止。
- net.ipv4.tcp_retries1 和 net.ipv4.tcp_retries2
- 示例:将
tcp_retries2
设置为5
(sysctl -w net.ipv4.tcp_retries2=5
) 会减少在放弃尝试建立连接前的全局重试次数,这可能导致在不稳定网络上连接更快失败。
- net.core.somaxconn
- 示例:将其增加到
1024
(sysctl -w net.core.somaxconn=1024
) 可以提高服务器的并发连接处理能力,但如果超出服务器处理能力,可能导致性能下降或不稳定。
- net.ipv4.tcp_no_metrics_save
- 示例:将其设置为
1
(sysctl -w net.ipv4.tcp_no_metrics_save=1
) 将停止保存 TCP 连接的度量信息,这可能导致 TCP 连接的性能优化不再基于过往的连接数据。
- net.ipv4.tcp_mtu_probing
- 示例:启用 MTU 探测 (
sysctl -w net.ipv4.tcp_mtu_probing=1
) 可以帮助自动发现最佳 MTU 大小,减少分片,提高网络效率,但在某些网络配置下可能导致连接问题。
- 示例:启用 MTU 探测 (
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.