希望有人可以澄清我关于 TCP 窗口大小的疑问,以及它是否会导致我通过 iPerf 实现的吞吐量缓慢。
我在从客户端(win 2016 服务器)到服务器(备份设备可能是 Linux)进行标准 iPerf 测试时从客户端捕获了 Wireshark 数据 - 网络速度为 10gb。我似乎只获得了 1-2gbit/秒的吞吐量。试图找出可能的原因。
在三次握手过程中,客户端公布其窗口大小为 64k,缩放因子为 4。而服务器公布其窗口大小为 14k,缩放因子为 128。
我注意到,随着传输的进行,客户端的窗口大小增加到 212,992,而服务器的窗口大小增加到 3,142,016。传输中的最大字节数为 242,032。
然后,我直接在两个通过 10gb 接口连接到单个交换机的 Windows 2016 虚拟机之间重复了相同的测试。结果相似,传输中的字节数似乎从未超过约 242k。
我一直以为三次握手期间公布的窗口大小就是最大限制。但事实似乎并非如此,因为窗口大小由于某些拥塞算法而逐渐增加(?),直到达到某个限制,飞行字节最大值为 242k。因此,尽管我的接收窗口(3MB)有足够的空间,但我从未能够拥有超过 242k 的未确认字节。
我认为路径中存在某些因素导致拥塞窗口受限,我想这就是我们正在努力解决的问题。我将在同一交换机上的两个 Windows 服务器虚拟机之间重复相同的 iPerf 测试和捕获,只是为了看看它是否能够推得更高或显示类似的症状。
提前致谢。
TCP 参数的输出。我确实修改了接收窗口自动调节级别进入实验阶段。确实有些不同,吞吐量达到 4gb,但还远未达到 10gb。
TCP Global Parameters ---------------------------------------------- Receive-Side Scaling State : enabled Chimney Offload State : disabled NetDMA State : disabled Direct Cache Access (DCA) : disabled Receive Window Auto-Tuning Level : normal Add-On Congestion Control Provider : default ECN Capability : enabled RFC 1323 Timestamps : disabled Initial RTO : 3000 Receive Segment Coalescing State : enabled Non Sack Rtt Resiliency : disabled Max SYN Retransmissions : 2 TCP Fast Open : disabled