有没有办法在 ubuntu 服务器上以比默认 TCP 窗口大小更大的大小启动?
我看到例如有一些参数/proc/sys/net/ipv4/
:
/proc/sys/net/ipv4/tcp_window_scaling (which is 1)
/proc/sys/net/ipv4/tcp_adv_win_scale (2)
/proc/sys/net/ipv4/tcp_slow_start_after_idle (1)
/proc/sys/net/ipv4/tcp_window_scaling (1)
答案1
由于 TCP 是全双工的,因此有两个初始拥塞窗口 (IW),一个用于发送,一个用于接收。它们可以使用路由命令进行设置,但是我在查看数据包捕获后发现它在 2.6.32 中不起作用。在我的桌面 (3.0.0) 上,IW 默认较高(10 个数据包),所以我没有在更高版本中测试这一点,因为这就是我想要的增加值。
ip route
但从理论上讲,这些可以通过以下方式设置:
sudo ip route add <DEST IP> via <GATEWAY IP> proto static initcwnd 10
对于发送 IW。对于接收 IW,更改initcwnd
为initrwnd
。
如果此方法有效,我相信您应该在 TCP 握手的 SYN 或 SYN/ACK 数据包(取决于发送/接收窗口)中反映新的窗口大小。由于拥塞窗口是内部的,与 TCP 标头中的窗口不同,因此判断其是否有效的唯一方法是在更高延迟的连接上进行测试,看看是否发送了更多初始数据包。我最近一直在自己研究这个问题,因此作为免责声明,我对所有这些都持 100% 肯定的态度。
此后,窗口大小应随默认 Linux 参数缩放,而不会导致任何窗口绑定问题。除非您有捕获显示您经常遇到窗口绑定的情况(如果是这种情况,接收器将发送大量数据包Win 0
),否则您可能不想弄乱这一点。
答案2
有net.ipv4.tcp_wmem
和net.ipv4.tcp_rmem
。您可以使用读取这些变量的值,sysctl -n
也可以使用设置它们sysctl
。
一个很好的介绍是这里。