windows 下不同版本的 iperf 给出完全不同的结果

Alb*_*ata 5 networking windows iperf tcp

测量从 Windows 客户端到 Solaris 服务器的 TCP 输出:
使用 iperf 1.7.0 的 WXP SP3 --> 返回平均 90Mbit 左右
相同的客户端、相同的服务器,但用于 Windows 的 iperf 2.0.5 --> 返回平均 8.5 Mbit

连接到其他服务器时也观察到类似的差异(W2008、W2003)

当同一工具的不同版本提供截然不同的结果时,很难得出某些结论。

下面的例子:

C:\temp>iperf -v(来自 iperf.fr)
iperf 版本 2.0.5(2010 年 7 月 8 日)pthreads

C:\temp>iperf -c Solaris10
连接到Solaris10 的客户端,TCP 端口 5001
TCP 窗口大小:64.0 KByte(默认值)

[ 3] 本地 10.172.181.159 端口 2124 与 10.172.180.209 端口 5001 连接
[ ID] 间隔传输带宽
[ 3] 0.0-10.2 秒 10.6 MBytes 8.74 Mbits/sec

性能糟糕,但现在我使用旧的iperf从同一主机(Windows XP SP3 32 位和 100Mbit)到同一服务器(运行 iperf 2.0.5 的 Solaris 10/sparc 64 位和 1Gbit,默认窗口为 48k)进行测试

C:\temp>1iperf -v
iperf 版本 1.7.0 (2003 年 3 月 13 日) win32 线程

C:\temp>1iperf.exe -cSolaris10 -w64k
连接到Solaris10的客户端,TCP端口5001
TCP窗口大小:64.0KByte

[1208] 本地 10.172.181.159 端口 2128 与 10.172.180.209 端口 5001 连接
[ID] 间隔传输带宽
[1208] 0.0-10.0 秒 112 MBytes 94.0 Mbits/sec

因此,一个具有 64k 窗口的 iperf 表示 8.75Mbit,而具有相同窗口大小的旧 iperf 表示 94.0Mbit。这些结果经过反复测试是恒定的。

根据我的测试,启动窗口大小为“x”的 iperf(old) 和窗口大小为“x”的 iperf(new) 不会产生相同或非常接近的结果,而是会产生完全不同的结果。我看到的唯一区别是旧编译为 win32 线程与 pthreads,但并行性(-P 10)似乎在两者中都有效。

任何人都有线索或可以推荐一个可以提供我可以信任的结果的工具吗?

编辑:查看(旧)iperf 的跟踪,它将 SYN 数据包中的 TCP 窗口缩放标志设置为 3,当我运行(新)iperf 时,它在初始数据包中设置为 0。通过交换对窗口大小进行快速分析显示(旧)iperf 来回移动,但大多在 32k,而(新)iperf 大部分保持在 64k。也许它会帮助某人把这些点联系起来。

小智 0

这并不算是一个正确的答案,但您是否尝试过确保 Solaris 端的 iperf 版本与您在 Windows 上运行的版本相匹配。我无法在 linux 上使用 iperf 2.0.4 和在 windows 上使用 2.0.5 重现此问题。因此,我怀疑您所看到的行为与 Solaris 机器上使用的版本与 Windows 的最新版本不能很好地兼容有关。