在我的局域网中,我有一个运行 Samba 服务器的路由器,我的 PC 连接到该路由器。
我在将文件从我的电脑上传到 samba 服务器时使用了 wireshark。
以下是 wireshark 结果的快捷方式,
可以看出,在服务器回复第 7560 帧后,我的电脑发送了几个全尺寸的数据包(帧大小为 1514 字节)。
但在第 7560 帧中,公布的窗口大小为 94 字节。
上述情况在整个结果中都会发生。
因此,我无法理解的是,我的电脑如何能够发送近 30000 多个字节,而来自服务器的最后一个数据包只通告一个 94 字节的窗口。
答案1
窗口大小受网络缓冲区大小影响,Linux 2.6 中的默认设置应该没问题,如果网络缓冲区太小,请使用千兆以太网的以下推荐值
sysctl -w net.ipv4.tcp_rmem="40960 1048560 4194304"
sysctl -w net.ipv4.tcp_wmem="40960 196608 4194304"
sysctl -w net.core.rmem_max=4194304
sysctl -w net.core.wmem_max=4194304
更多细节 http://honglus.blogspot.com/2010/01/double-network-throughput-by-tuning.htm
您可以使用 iperf 检测窗口大小,如果它报告服务器本地网卡正常,那么可能是路由器或应用程序的问题
答案2
我认为这TCP 窗口缩放在工作中 - 它可能已在连接设置时协商,但未被 Wireshark 考虑在内。因此,公布的窗口大小不是 94 字节,而是 (2^X) * 94 其中X是缩放因子。