不要在linux上启用net.ipv4.tcp_tw_recycle参数

不要在linux上启用net.ipv4.tcp_tw_recycle参数

发布于 2015/07/27  莿鸟栖草堂

本文为翻译英文BLOG《Coping with the TCP TIME-WAIT state on busy Linux servers》,但并非完整的翻译,译者CFC4N对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同。翻译的目的,是为了加深自己知识点的记忆,以及分享给其他朋友,或许对他们也有帮助。文章比较长,没耐心请点关闭。

不要启用 net.ipv4.tcp_tw_recycle

linux 内核文档中,对net.ipv4.tcp_tw_recycle的描述并不是很明确。

tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)[译者注:来自linux man tcp的描述]
Enable fast recycling of TIME-WAIT sockets. Enabling this option is not recommended since this causes
problems when working with NAT (Network Address Translation).
启用TIME-WAIT状态sockets的快速回收,这个选项不推荐启用。在NAT(Network Address Translation)网络下,会导致大量的TCP连接建立错误。

与其功能相似的参数net.ipv4.tcp_tw_reuse,手册里稍微有点描述,如下:

tcp_tw_reuse (Boolean; default: disabled; since Linux 2.4.19/2.6)
Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. It
should not be changed without advice/request of technical experts.
//从协议设计上来看,对于TIME-WAIT状态的sockets重用到新的TCP连接上来说,是安全的。(用于客户端时的配置)

这里的注释说明非常的少,我们发现,网上很多linux参数调整指南都建议把这些参数net.ipv4.tcp_tw_recycle 设置1「启用」,用于快速减少在TIME-WAIT状态TCP连接数。
但是,在TCP(7)手册中,参数net.ipv4.tcp_tw_recycle 非常蛋疼,尤其是在普通用户家中,有多台设备,或者网吧、公司等多台设备,共用同一个NAT设备环境下,TW回收选项是很有问题的面向公共服务器作为它不会把手连接两台不同的计算机上,这问题很难发现,无从下手。

Enable fast recycling of TIME-WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation).
启用TIME-WAIT状态sockets的快速回收,这个选项不推荐启用。在NAT(Network Address Translation)网络下,会导致大量的TCP连接建立错误。如果没有技术大神的指点的话,千万不要去改动他。

下文将给予更详细的解释,希望可以纠正互联网上错误的观点,尤其是转载比较多的内容,搜索时,往往排在前面,使用者往往接触到的都是不严谨的或者是错误的知识点。

正如此文,在 net.ipv4.tcp_tw_recycle 控制参数中,尽管很多地方写的是ipv4,但对ipv6同样实用。此外,我们这里聊的是Linux TCP协议栈,在linux上可能会受到Netfilter影响,稍微有差异。

关于TCP连接的TIME-WAIT状态,它是为何而生,存在的意义是什么?

让我们回忆一下,什么是TCP TIME-WAIT状态?如下图

这图中的流程不是很好理解,再看一张流程更清晰的图

TCP状态流程图

当TCP连接关闭之前,首先发起关闭的一方会进入TIME-WAIT状态,另一方可以快速回收连接。
可以用ss -tan来查看TCP 连接的当前状态

[cfc4n@localhost ~]#$ ss -tan
State      Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port
LISTEN     0      128                                   127.0.0.1:9000                                         *:*
TIME-WAIT  0      0                                     127.0.0.1:9000                                 127.0.0.1:60274
TIME-WAIT  0      0                                     127.0.0.1:9000                                 127.0.0.1:60273
CLOSE-WAIT 431    0                                 115.29.188.27:60002                            110.75.102.62:80
ESTAB      0      208                               115.29.188.27:22                              180.167.20.210:2455
CLOSE-WAIT 221    0                                 115.29.188.27:42489                            42.156.166.25:80
FIN-WAIT-2 0      0                                 115.29.188.27:80                             222.246.178.104
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值