我知道 Windows 和 Linux 中 TCP 堆栈的实现是不同的。Windows 使用称为 TCP Reno 的拥塞控制算法,而 Linux 使用 Cubic。
当这两种协议共存于同一网络时,它们有何不同?Cubic(Linux)是否更具攻击性,最终可能会获得更高的带宽份额?
答案1
请注意,拥塞控制算法仅影响上行流量,因此仅影响上行带宽。
话虽如此,Cubic 实际上更具攻击性,尤其是对于具有高带宽延迟积的网络。Linux 实现中甚至内置了一条规则,以便在相同情况下永远不会使用比 reno 更小的发送速率:
Linux Cubic 算法还包含确保立方算法至少与标准 TCP 一样激进的代码
——利斯、肖顿、麦卡拉格,Cubic-TCP 的实验评估
因此,当您在观看 Youtube 视频时下载 Windows 更新时,您的 Youtube 流量可能会耗尽您的微软流量,而您对此无能为力。
答案2
首先,你所说的并不符合事实:
- Linux 内核版本 2.6.18 以下使用比克默认情况下。
- Linux 内核 2.6.19 及更高版本使用立方体默认情况下。
- Linux 的 TCP 拥塞控制机制是可插拔,例如您可以随时更改它们。
- Windows XP 及更早版本使用 TCP Reno(或新里诺)
- Windows Vista 及更高版本还具有复合TCP,该功能在 Server 2008 中默认启用,如果需要,可以在 Vista 和 Windows 7 中启用。
全部这些算法可以根据可用的网络带宽、延迟、可用内存等进行自我调整。它们还有许多配置参数可让您手动调整它们。
因此,如果不考虑具体的网络拓扑、所用的硬件和软件等,您无法真正比较两者。这并不是说其中一个比另一个更好,或者会占用更大的可用带宽份额。的确,CUBIC 不如 BIC 激进,但在实践中,其他考虑因素往往比使用哪种 TCP 拥塞算法更重要。
除非您尝试调整范围非常狭窄且不寻常的网络场景,否则这些算法都可以运行得足够好并且开箱即用。