禁用Linux TCP接收窗口自动调整

10

我正在使用 linux (2.6.43.8-1.fc15.i686.PAE),并且遇到了禁用TCP接收窗口自动调整的问题。

我试图找到一个特定的设置,强制客户端广告一个固定的接收窗口。 我尝试给net.core.rmem_max(/proc/sys/net/core/rmem_max)和net.core.rmem_default(/proc/sys/net/core/rmem_default)以及ipv4.tcp_rmem(net.ipv4.tcp_rmem)赋予相同的值,但在检查广告窗口(使用wireshark)时,它绝对不会改变任何东西....

这是为了研究TCP行为,如果有人能够回答我,我将非常感激。

提前致谢

PS:我使用了此文章来调整参数

1个回答

9

关闭TCP接收缓冲区大小的自动调整。在接收方进行如下设置:

$ sudo sysctl net.ipv4.tcp_moderate_rcvbuf=0

或者

$ sudo echo 0 > /proc/sys/net/ipv4/tcp_moderate_rcvbuf

1
非常感谢您快速明确的回答。这也给了我一个指针,指向这个页面,其中详细解释了所有参数。然而,尽管尝试了两个cmd(并仍将前面提到的参数保持相同的值),我可以观察到我的客户端广告TCP窗口正在增加(在我的实验中,我下载了一个60MB的对象,并从17536 win开始,最终达到1049805)。有人知道这可能来自哪里吗?提前致谢 - HorusH
1
你应该禁用TCP窗口缩放 echo 0 > /proc/sys/net/ipv4/tcp_window_scaling - Satish
3
取消接收窗口自动调整:<br/> $sudo echo 0 > /proc/sys/net/ipv4/tcp_moderate_rcvbuf <br/>
  • 将自动调整最小值、默认值和最大值设置为 4000000 <br/> $sudo echo 4000000 4000000 4000000 > /proc/sys/net/ipv4/tcp_rmem <br/>
  • 将 rmem_default 和 rmem_max 均设置为 4000000 <br/> $sudo echo 4000000 > /proc/sys/net/core/rmem_default <br/> $sudo echo 4000000 > /proc/sys/net/core/rmem_max <br/>
  • 将广告接收窗口的第一个值覆盖为足够高以超过 4MB 的值 <br/> $ip route change default via 0.0.0.0 dev eth0 proto static initrwnd 5000
- HorusH
0.0.0.0 是默认网关地址(在此更改),窗口缩放必须重新激活。 - HorusH
3
sudo echo foo > xxx 永远不会按预期工作,因为重定向(>)是由 shell 完成的。以 root 身份运行 echo 不会实现任何目的。您可能想要使用这个命令:echo foo | sudo tee xxx - Léo Lam
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接