各位,我们知道 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