我一直在 Linux(使用 3.5 内核)中试验 TCP 参数。基本上关于这个连接:
服务器:数据中心的千兆上行链路,从另一个数据中心测试时,实际带宽(由于共享上行链路)约为 70 MB/s。
客户端:连接到 200mbit 光纤的千兆本地局域网。获取测试文件实际上达到了 20 MB/s。
延迟:往返约 50 毫秒。
远程服务器用作 10 到 100mb 范围内的文件的文件服务器。我注意到使用 10 的 initcwnd 时,这些文件的传输时间受到 TCP 慢启动的严重影响,需要 3.5 秒才能加载 10mb(达到最高速度:3.3 MB/s),因为它开始缓慢然后加速,但是它在达到最大速度之前完成。我的目标是调整这些文件的最小加载时间(因此不是最高的原始吞吐量或最低的往返延迟,如果这会减少加载文件所需的实际时间,我愿意牺牲两者)
所以我尝试了一个简单的计算来确定理想的 initcwnd 应该是什么,忽略任何其他连接和可能对其他人的影响。带宽延迟积为 200 Mbit/s * 50ms = 10 Mbit 或 1.310.720 字节。考虑到 initcwnd 以 MSS 为单位设置,并假设 MSS 大约为 1400 字节,这将需要设置:1.310.720 / 1400 = 936
这个值与默认值相差很远(Linux 中为 10*MSS,Windows 中为 64kb),因此将其设置为这样感觉并不是一个好主意。像这样配置它的预期缺点是什么?例如: