我正在尝试提高我的一台海外服务器的吞吐量,在使用 wireshark 监控服务器和我的家用电脑之间的传输后,我确信窗口大小存在问题。
对于 ftp 传输,我得到的接收窗口大小为 14720。
Window size value: 115
Calculated window size: 14720
Window size scaling factor: 128
我的发送窗口如下所示:
Window size value: 65335
Calculated window size: 261340
Window size scaling factor: 4
那么我该如何修复 rwindow?我已经检查了服务器上的 linux tcp 设置,一切似乎都很正常。时间戳已打开,syncookies 已关闭,缩放已打开,sacks 已打开,拥塞控制方法为 cubic,最大接收和发送窗口大小为 3mb。我尝试更改默认的 tcp_wmem 和 tcp_rmem 值,但没有任何效果。
编辑:
当我关闭服务器上的自动调整和/或窗口缩放时,窗口缩小到 14600,这基本上是 MSS 的 10 倍。
5337 4.268584 2.2.2.2 1.1.1.1 FTP 106 Response: 227 Entering Passive Mode (2,2,2,2,240,15).
5338 4.268640 1.1.1.1 2.2.2.2 TCP 74 59855 > 61455 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=431721460 TSecr=0 WS=128
5364 4.300368 1.1.1.1 2.2.2.2 TCP 54 57609 > ftp [ACK] Seq=217 Ack=648 Win=15744 Len=0
5480 4.346856 2.2.2.2 1.1.1.1 TCP 66 61455 > 59855 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=128
5481 4.346867 1.1.1.1 2.2.2.2 TCP 54 59855 > 61455 [ACK] Seq=1 Ack=1 Win=14720 Len=0
5482 4.346893 1.1.1.1 2.2.2.2 FTP 70 Request: STOR 100mb.bin
5570 4.428061 2.2.2.2 1.1.1.1 FTP 109 Response: 150 Opening BINARY mode data connection for 100mb.bin
5571 4.428078 1.1.1.1 2.2.2.2 TCP 54 57609 > ftp [ACK] Seq=233 Ack=703 Win=15744 Len=0
5572 4.428155 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
5573 4.428166 1.1.1.1 2.2.2.2 FTP-DATA 1514 FTP Data: 1460 bytes
5662 4.505384 2.2.2.2 1.1.1.1 TCP 60 61455 > 59855 [ACK] Seq=1 Ack=1461 Win=8832 Len=0
5663 4.505392 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
5664 4.505421 2.2.2.2 1.1.1.1 TCP 60 61455 > 59855 [ACK] Seq=1 Ack=2921 Win=11776 Len=0
5665 4.505429 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
5666 4.505535 2.2.2.2 1.1.1.1 TCP 60 61455 > 59855 [ACK] Seq=1 Ack=4381 Win=14720 Len=0
5667 4.505543 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
5734 4.583769 2.2.2.2 1.1.1.1 TCP 60 61455 > 59855 [ACK] Seq=1 Ack=5841 Win=17536 Len=0
5735 4.583778 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
5736 4.583781 2.2.2.2 1.1.1.1 TCP 60 61455 > 59855 [ACK] Seq=1 Ack=7301 Win=20480 Len=0
5737 4.583787 1.1.1.1 2.2.2.2 FTP-DATA 2974 FTP Data: 2920 bytes
答案1
从 2.6.17(或大约)Linux 内核开始,默认缩放因子被增大。这样做的缺点是似乎有些路由器/防火墙等不能正确处理 TCP 窗口缩放(rfc 只有大约 16 年的历史)。如果您必须遍历这些设备之一,那么您需要关闭窗口缩放,否则速度会变得非常慢。
在 Redhat/Redhat 类系统上,“修复”方法是:
/bin/cat <<'EOT'>>/etc/sysctl.conf
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
EOT
/sbin/sysctl -p
答案2
嗯。你能给我们提供更多信息吗?比如……
TCP 发布 {Reno、Vegas 等} 传输方向 { 桌面 -> 服务器、服务器->桌面、其他} 您使用什么进行测量?iperf?harpoon?