从队头阻塞、拥塞控制、故障冗余与乱序重装四个角度,对比单径传输与多径并发的工程差异,并给出可复现的对比测试方法。结论先行:多径并发不是"更快的协议",而是一种把可用资源用满并保留冗余的组织方式。
要理解多径并发的价值,先要看清单径传输绕不开的三件事。
其一是吞吐受单链路容量约束。一条路径的可用带宽由这条路径上最窄的一段决定。即便两端接入带宽都很充裕,中间某段链路的容量也可能成为瓶颈。更麻烦的是,这条路径上还有其他流量在共享,实际可用带宽随他人行为波动,用户无法控制。
其二是拥塞控制只能在一条路上做文章。标准拥塞控制的目标是探测可用带宽并避免过载,它的手段是调整发送窗口。当窗口增长到瓶颈容量时,继续增长只会推高排队时延直至丢包。此时算法只能维持,不能突破——因为没有第二条路可以走。
其三是没有冗余。路径上任何一台设备的故障、任何一条链路的抖动,都会直接影响会话。重路由需要时间,而传输层重建连接需要更多时间。对于实时业务,这就是可感知的中断。
针对容量约束,多径做的是聚合。把数据切成子流分散到多条路径上,总吞吐不再由单条最窄链路决定,而由多条路径的合计容量决定。这不是"提速magic",而是把原本闲置的路径容量纳入使用。
针对拥塞控制,多径做的是分流。当某条路径接近饱和,把新产生的流量分配到其他路径比继续在饱和路径上争夺更有效。这要求拥塞控制从单路径视角升级为连接视角:不仅要避免单路径过载,还要决定在路径之间如何分配总量。
针对冗余,多径天然具备。某条路径失效时,其余路径仍可承载流量。关键在于迁移速度:如果每次迁移都要重建连接,冗余的价值就被重建耗时吃掉了。因此多径实现必须配套预热与快速迁移机制。
多径不是免费的。不同路径的时延不同,子流到达顺序必然乱序,接收端必须按序号重装。这引入了一个新的时延分量:重装等待。
缓冲区窗口的设定是一个真实的权衡。窗口太小,迟到的子流被判为丢失并触发重传,重传又占用带宽并可能加剧拥塞;窗口太大,整体时延被最慢路径拖住,多径反而比单径更慢。工程上的做法是让窗口与路径时延差挂钩:时延差小则窗口收紧,时延差大则相应放宽,同时对时延差超过阈值的路径组合做拆分处理。
另一个约束是子流粒度。包级轮询会让不同路径的拥塞控制互相干扰,也会放大乱序;整流分配则退化为单径。中间粒度的块分配是实践中更常见的折中。
不建议用单次测速的峰值数字做对比,峰值受瞬时链路状态影响很大。更可靠的做法是固定变量、观察分布:
按这套方法通常会观察到两个规律。第一,晚高峰时段多径的相对改善大于空闲时段,因为空闲时各路径质量接近,聚合收益有限。第二,在本地出口带宽接近饱和的网络里,多径对吞吐的改善有限,但对稳定性(时延尖峰次数)的改善仍然存在——因为它提供的是冗余,而不只是容量。
多径并发的定位应该被准确理解:它不是一种"更快"的传输协议,而是对可用路径资源的重新组织。它的收益在三种条件下最明显——存在多条质量不等的可用路径、单路径存在明显的拥塞时段、业务对中断敏感需要冗余。
反过来,当网络里只有一条质量稳定的路径,或者本地出口本身已经成为瓶颈时,多径的收益会显著缩小。这也是我们建议用户自行实测的原因:网络环境差异太大,任何统一结论都不可靠,只有自己的测量结果才作数。