Skip to content

第6章:拥塞控制与队列管理

网络负载的反馈

拥塞控制管理共享网络中的注入速率。若所有发送者只在丢包后原速重传,额外副本会继续占用链路,使有效吞吐量下降。重传需要与降低负载配合。

反馈有不同形式:丢包、时延增长、显式拥塞通知 ECN。信号发生在路径某处,但发送方通常只观察到端到端结果,因而需要一个控制过程,而不是读取一个全网精确状态。

TCP Reno 的窗口变化

经典慢启动每个 RTT 大致使拥塞窗口翻倍,直至阈值或拥塞事件;拥塞避免阶段每 RTT 大致增加一个 MSS。遇到特定丢包信号时,窗口按比例减少。实际行为还取决于 ACK、重传恢复和具体实现。

用离散模型 ww+1w\leftarrow w+1、丢包时 ww/2w\leftarrow w/2 表示加性增、乘性减。若窗口在 W/2W/2WW 之间往复,一轮约经过 W/2W/2 个 RTT,发送量约为

3W4W2=3W28.\frac{3W}{4}\cdot\frac W2=\frac{3W^2}{8}.

若理想化为每轮恰丢一个包,则 p8/(3W2)p\approx8/(3W^2),平均吞吐量与 1/(RTTp)1/(RTT\sqrt p) 同阶。这只是固定 RTT、长连接、Reno 式窗口锯齿下的近似,不适用于所有拥塞控制算法。

公平性与不同 RTT

多个流共享链路时,“公平”需要定义。按流公平与按用户公平不同:同一用户开十条连接,可能得到比一条连接更多的份额。经典基于 ACK 的算法还可能偏向 RTT 较短的流。

公平并不自动等于低延迟。所有流都公平地排在很长的队列中,交互请求仍可能很慢。因此路由器的调度与队列管理也是服务质量的一部分。

AQM、ECN 与缓冲

尾丢弃只在缓冲满时丢包,可能让队列长期占满。主动队列管理在缓冲完全耗尽之前丢弃或标记,给发送方更早的反馈。ECN 需要端点和路径相应支持,且发送方必须响应标记。

按流排队可隔离不同流的队列,再结合调度减少大流对短请求的影响。它不能创造额外带宽,链路长期超载时仍要限速、排队或拒绝部分负载。

现代算法还可能估计瓶颈带宽和最小 RTT。比较算法时需要同时测吞吐量、排队时延、丢包、竞争公平性和不同路径条件,不能只测一次下载速度。

练习

  1. RTT 翻倍但丢包率不变,以上 Reno 模型预测的吞吐量如何变化?
  2. 流量控制与拥塞控制分别保护谁?
  3. 为什么扩大缓冲不能长期解决 200 Mbit/s 输入共享 100 Mbit/s 输出的问题?

上次更新: