我有一台服务器,该服务器具有到交换机的10GbE连接,还有10个客户端,每个客户端有1GbE连接到同一交换机。
在每个客户端上并行运行nuttcp时,我可以以接近线速的速度将10个TCP数据流同时推送到服务器(即,同时从所有10个客户端上每秒传输100兆字节)。
但是,当我反转方向并将数据从服务器发送到客户端时(即10个TCP流,一个流向每个客户端),TCP重传急剧上升,性能下降到每秒30、20甚至10兆字节每个客户。我想增加这些数字,因为这种流量模式代表了我关心的某些应用程序。
我已经验证了我的服务器能够通过与类似服务器的10GbE连接执行相同的实验来饱和10GbE链接。我已经验证我的任何端口上都没有错误。
最后,当我强行限制(限制)接收器的TCP窗口大小时,我可以获得更高的带宽(30-40兆字节/秒);如果将其钳位得非常低,我可以将重传次数设为零(带宽非常低)。
因此,我有理由相信我会超出交换机中的缓冲区,导致由于拥塞而导致数据包丢失。但是,我认为TCP的拥塞控制应该可以很好地解决此问题,最终稳定在线速的50%以上。
所以我的第一个问题很简单:哪种TCP拥塞控制算法最适合我的情况?有很多可用的方法,但是它们似乎主要针对有损网络,高带宽高延迟网络或无线网络……这些都不适合我的情况。
第二个问题:还有什么我可以尝试的吗?