Tom*_*mas 9 linux tcp tcp-slow-start
我一直在 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),因此将其设置为这样感觉并不是一个好主意。像这样配置它的预期缺点是什么?例如:
这样配置的预期缺点是什么?例如:
Run Code Online (Sandbox Code Playgroud)Will it affect other users of the same network?
更改 initcwnd 将影响:
Run Code Online (Sandbox Code Playgroud)Could it create unacceptable congestion for other connections?
当然。
Run Code Online (Sandbox Code Playgroud)Flood router-buffers somewhere on the path?
并非无关紧要,但除非它们是您的路由器,否则我会关注与您更接近的问题。
Run Code Online (Sandbox Code Playgroud)Increase the impact of small amounts of packet-loss?
当然,它可以做到这一点。
结果是,这会增加有意或无意的丢包成本。任何能够完成 3 次握手(以低投资(数据量)输入输出大量数据)的人都可以更轻松地使用 DOS,使您的服务器更简单。
它还会增加需要重新传输一堆数据包的机会,因为突发中的第一个数据包将丢失。