linux 通过 /etc/sysctl.conf 进行 initcwnd 和 initrwnd

linux 通过 /etc/sysctl.conf 进行 initcwnd 和 initrwnd

各位,我们知道 3.x 内核的 TCP 默认连接值更高,例如 initcwnd 和 initrwnd。对于 2.x 的朋友,有没有办法在 /etc/sysctl.conf 中设置这些值,而不是使用 ip route 方式?

而不是以下内容:

sudo ip route change default via 192.168.1.1 dev eth0  proto static initcwnd 10

有没有办法在 /etc/sysctl.conf 中设置相同的内容?

谢谢

答案1

虽然没有完全回答这个问题,但在 2017 年 12 月,支持改变这些价值观的是已添加到 systemd-networkd因此您现在可以将其放入/etc/systemd/network/*.network以使其持久化:

[Route]
Gateway=_dhcp4
InitialCongestionWindow=10          # initcwnd
InitialAdvertisedReceiveWindow=10   # initrwnd

如果您希望此部分适用于通过 DHCP 提供的网关,则Gateway=_dhcp4需要此行。否则,请将这些行添加到您手动指定网关地址的现有部分。[Route]Initial*[Route]

答案2

通过“通过 sysctl.conf”,你的意思是你想让这些设置在每次启动时都应用吗?

如果是这样,您可以编写/sbin/ifup-local运行任何命令作为接口启动的最后一部分。ifup脚本使用接口名称作为参数来调用它。

因此你/sbin/ifup-local可以包含:

#!/bin/bash
if [[ "$1" == "eth0" ]]
then
  ip route change default via 192.168.1.1 dev eth0 proto static initcwnd 10
fi

至少这在 RHEL/CentOS 上有效。我还没有尝试过 Deb/Ubu/其他。

答案3

对于 CentOS 7,ifup 中调用的脚本是 /sbin/ifup-pre-local 。因此我只需创建脚本 /sbin/ifup-pre-local :

#!/bin/bash

defrt=`ip route | grep "^default" | head -1`
ip route change $defrt initcwnd 10

并且在所有重启和网络重启时都会设置 initcwnd。

答案4

在 RHEL/CentOS/Oracle/Scientific Linux 和其他基于 EL 的发行版上:

简单,只需不要在 /etc/sysconfig/network-scripts/ifcfg-eth0 文件中指定 GATEWAY=。然后在相同位置创建第二个名为 route-eth0 的文件,并在其中写入网关:

  default via 192.168.0.1 initcwnd 10 initrwnd 10

此方法:

  • 将网络配置保存在一个地方,以便将来在服务器移动/升级时可以轻松找到。
  • 避免创建不寻常的 /sbin/ 脚本将要10年后被遗忘
  • 不依赖于 systemd

相关内容