Linux 内核参数:net ipv4 tcp tw recycle

小夏 数码 更新 2024-03-04

问题症状:

Linux服务器收到SYN请求报文后,不响应ACK,导致客户端建立TCP连接失败。

您可以通过netstat命令查看系统协议统计信息,发现很多请求因时间戳而被拒绝

通过帮助找出有相同的人遇到此问题:

是通过调整 sysctl -w netipv4.tcp tw recycle=0 来解决这个问题。

发现该问题是由 Linux TCP TW 回收 TCP 时间戳设置引起的。 如果在Linux内核源码中开启了TCP TW回收TCP时间戳,则同一源IP主机的套接字连接请求中的时间戳必须在60秒内递增。

我这边和其他同事通过公司的出口访问问题服务器(NAT网关只有1个IP地址),因为时间戳时间是从系统开机到当前时间,所以我和其他同事的时间戳肯定是不一样的; 根据 SYN 报文的源代码,当同时启用 TCP TW Recycle 和 TCP TimeStamp 时,Timestamp 较大的主机成功访问 servern,而 TimeStamp 较小的主机无法访问 servern。

已解决:回声"0" > /proc/sys/net/ipv4/tcp_tw_recycle

理论补充:1.净ipv4.tcp_timestamps

TCP时间戳的本质是记录数据包的发送时间。 基本步骤如下:

当发送方发送数据时,它会在数据包中放置一个时间戳(指示发送时间)。

接收方收到报文后,将接收到的时间戳返回给对应ACK报文的发送方

收发ACK报文后,可以使用NOW - ACK报文中的时间戳获取准确的RTT

时间戳是一个双向选项,当一方未启用时,它会停用双方。 例如,客户端发送的 SYN 数据包包含 timestamp 选项,但服务器未启用此选项。 回复的 syn-ack 没有 timestamp 选项,客户端后续回复的 ACK 没有 timestamp 选项。 当然,如果客户端发送的 SYN 数据包不包含时间戳,则时间戳将在两个方向上被禁用。

TCP 数据包中 Timestamp 的值是从系统启动时间到当前时间的(毫秒级)时间戳。

参数:0:已停用。

1:启用(系统默认值)。

2、net.ipv4.tcp_tw_recycle

处于 TCP 规范中指定的时间等待中的 TCP 连接必须等待 2 MSL 时间。 但是,在 Linux 中,如果启用了 TCP TW 回收,则 Time Wait 的 TCP 连接不会等待 2MSL 时间(RTO 或 60S),从而实现快速复用(**处于 Time Wait 状态的 TCP 连接)。 这可能会导致连接从以前的连接接收数据。 为此,Linux 会在启用 TCP TW 回收时记录时间等待连接的对等信息,包括 IP 地址和时间戳。 这样,当内核收到相同IP的SYN报文时,会比较时间戳,检查SYN报文的时间戳是否滞后,如果滞后,就会扔掉(以为是旧连接的数据)。 这在大多数情况下是可以的,但是对于我们实际的客户端-服务器服务,访问我们服务的用户一般位于NAT之后,如果多个用户在NAT之后访问同一服务,则可能会因时间戳滞后而丢失连接。

参数:0:禁用(系统默认值)。

1:已启用。 默认值:

使用默认值确定

查看内核参数。

方法一:使用“proc sys”目录,通过cat命令查看对应文件的内容。 “proc sys”目录是Linux内核启动后生成的伪目录,目录下的net文件夹存放了当前系统中所有有效的内核参数,目录树结构与参数的全称相关,如netipv4.TCP TW Recycle,对应 proc sys net IPv4 TCP TW recycle,文件内容为参数值。 cat /proc/sys/net/ipv4/tcp_tw_recycle

方法二:通过“etc sysctl”。conf“文件。 执行以下命令,查看当前系统中生效的所有参数。 /usr/sbin/sysctl -a

修改内核参数。

方法一:使用proc sys目录下的echo命令修改内核参数对应的文件。 该方法修改后的参数值仅在当前运行中生效,重启后会重置为原始参数值,一般用于临时校验。 要永久生效,请参阅方法 2。 echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle。

方法二:通过“etc sysctl”。conf“文件。 该方法修改后的参数值永久生效。 (建议第二个选项)。

相似文章

    Linux 主线内核支持 Google Tensor GS101 芯片 Pixel 6

    根据 Phoronix 的一份报告,Google Tensor GS SoC 于 年推出,搭载在 Google Pixel 智能手机上。时隔两年多,主线 Linux 内核终于将在即将到来的 Linux 中发布支持 GS SoC 和 Pixel ,共 个内核周期。这意味着 Linux 内核将为这些设备...

    Linux 内核学习 1 编译并启动最小化系统

    Linux 内核是操作系统的核心组件,负责管理硬件资源,为系统调用提供接口,协调用户空间与硬件之间的交互。内核位于操作系统的最低层,直接与硬件交互,为上层提供服务。Linux 内核是开源的 并符合 GPL 通用公共 Licese 开源许可证。内核 在撰写本文时,当前内核主线的最新版本是 rc。硬件管...

    Linux系统报错网络服务作业失败怎么办?

    在 Linux 系统上启动网络服务时遇到 job for network.service failed 该错误通常是由网络配置问题引起的。若要解决此问题,可以按照以下步骤进行故障排除和修复 .检查网络模板 首先,在终端中输入命令,检查网络模板是否有问题。sudo nano etc network i...

    改进自己的内核

    我现在正在读一本书,是 金刚经 这本书我已经读了两年了,我打算读一辈子。现在,我感觉自己受益匪浅,可以放下很多放不下的事情。我会一直读下去,相信有一天,我一定能放下一切。看书可以改进内核,改进内核有什么好处?它稳定,不受外界影响。现在的我还不够强壮,有些事情我处理不了,但我比两年前强壮多了。继续努力...

    地球内核自转反转?!?

    地球内核自转反转?自年以来,科学家们发现了这一神秘现象。你有没有想过,我们脚下的地球心脏,地球的内核,有一天会突然改变它的自转方向?这个看似天方夜谭的想法最近在科学界引起了不小的轰动。自年以来,一系列神秘的自然现象出现,迫使科学家重新审视地核的运动。地核的自转对地球磁场 气候甚至地壳运动都有至关重要...