TCP 慢启动和拥塞控制以及如何修改它们

TCP 慢启动和拥塞控制以及如何修改它们

我正在尝试更改 CentOS5 机器上的 tcp 慢启动协议的行为 (uname -r => 2.6.18-238.12.1.el5)。我读到以下命令将我的 icwnd 更改为 8:

ip route change default via 1.2.3.4 dev eth1 initcwnd 8
echo "4094 $((8*16384)) 4194304" > /proc/sys/net/ipv4/tcp_wmem

(注意:tcp_wmem 部分或多或少是我的猜测,我认为只要它足够大,确切的数字并不重要)

但是,就其本身而言,这似乎没有任何效果。它最初发送 8 个段,现在仍然只发送 3 个。进一步阅读后,我发现 tcp 慢启动与拥塞控制并行工作,因此如果 ssthresh < cwnd,则使用拥塞控制协议,否则使用慢启动(至少,这是我的理解)。我做了以下操作来找出我的默认 ssthresh 设置为什么:

[root@host ~]# cat /proc/sys/net/ipv4/tcp_congestion_control 
bic
[root@host ~]# cat /sys/module/tcp_bic/parameters/initial_ssthresh 
0

看到 ssthresh 为 0,我想增加它,以便它大于 icwnd,这反过来会导致内核使用慢启动,这将使用其默认值 8 个窗口。所以我做了以下事情:

[root@host ~]# echo 13140 > /sys/module/tcp_bic/parameters/initial_ssthresh

但行为仍然没有任何变化。有人知道我做错了什么吗?

(每次更改后,我都会重新启动用于测试此操作的 apache 进程)。编辑:我也会在更改之间执行 ip route flush cache

答案1

我读了一些关于这个主题的内容,我认为需要内核版本 2.6.33 才能设置自定义 cwnd。我在这篇博文中找到了它:http://www.igvita.com/2011/10/20/faster-web-vs-tcp-slow-start/

如果 TCP 慢启动确实很慢,那么我们难道不能让它更快吗?事实证明,直到最近,Linux TCP 堆栈本身都被硬编码为从仅 3 或 4 个数据包的拥塞窗口 (cwnd) 开始,这相当于大约 4kb(每个数据包约 1360 字节)。

这里还有一些关于将其添加到内核的讨论:http://kerneltrap.org/mailarchive/linux-netdev/2009/10/26/6258693

我找不到任何有关如何进行设置的有用信息,但这是我今天遇到的......

答案2

您必须升级到 centos6.2。

根据 rhel 文档:

TCP 初始拥塞窗口默认值

在 Red Hat Enterprise Linux 6.2 中,根据 RFC 5681,TCP 初始拥塞窗口默认值现在设置为 10。此外,TCP 和 CCID-2 通用的初始窗口代码也已合并。

相关内容