拥塞控制方法?

访客 网络编程 2

本文目录导读:

  1. 经典的端到端拥塞控制(基于丢包检测)
  2. 基于延迟的拥塞控制
  3. 基于速率控制的拥塞控制
  4. 网络辅助的拥塞控制
  5. 现代拥塞控制算法的比较
  6. 总结与选择建议

拥塞控制是网络传输中至关重要的一环,目的是在网络负载过高时,避免数据包大量丢失和传输延迟急剧增加,从而保证网络的稳定性和公平性。

拥塞控制方法通常可以分为两大类:端到端拥塞控制(主要由发送端实现,如TCP)和网络辅助拥塞控制(需要路由器等中间设备的支持)。

以下是主要的拥塞控制方法及其核心原理:

经典的端到端拥塞控制(基于丢包检测)

这是TCP协议最传统、应用最广泛的方法,它通过检测“数据包丢失”作为网络发生拥塞的信号。

  1. 慢启动
    • 目标:探测网络可用带宽的初始值。
    • 机制:连接建立时,拥塞窗口(cwnd)初始值很小(通常为1个MSS),每收到一个ACK,cwnd翻倍,因此cwnd呈指数增长,直到发生丢包或达到慢启动阈值(ssthresh)。
  2. 拥塞避免
    • 目标:在接近网络容量时缓慢增加窗口,避免拥塞。
    • 机制:当cwnd >= ssthresh时,进入拥塞避免阶段,每收到一个ACK,cwnd增加 1/cwnd(即每个RTT增加1个MSS),窗口呈线性增长
  3. 快速重传
    • 目标:快速恢复丢失的数据包,不必等待超时。
    • 机制:当发送端收到 3个重复的ACK(表示后续数据包已到达,但序号为X的数据包丢失),立即重传该数据包,而不必等待重传计时器超时。
  4. 快速恢复
    • 目标:在检测到单个丢包后,维持网络吞吐量,避免直接回到慢启动。
    • 机制:发生快速重传后:
      • ssthresh = cwnd / 2
      • cwnd = ssthresh + 3(保存已收到的重复ACK)
      • 之后每收到一个重复ACK,cwnd+1
      • 当收到新数据的ACK时,cwnd = ssthresh(进入拥塞避免)。

经典算法的演进:

  • Tahoe:检测到丢包后,直接将cwnd重置为1,进入慢启动。
  • Reno:引入了快速恢复,比Tahoe性能更好。
  • NewReno:针对多个数据包丢失的情况进行优化。
  • CUBIC:Linux默认算法,使用三次函数代替线性增长,在高带宽长延迟网络(大BDP网络)中性能优异。

基于延迟的拥塞控制

这种方法不再等待丢包,而是通过监测RTT(往返时间)延迟变化来预判拥塞。

  • Vegas:比较期望吞吐量与实际吞吐量,如果实际吞吐量低于期望值,说明网络开始拥塞,主动减少窗口。
  • BBR (Bottleneck Bandwidth and Round-trip propagation time):由Google开发,是当前非常先进的算法。
    • 思路:不依赖丢包,而是探测瓶颈带宽(BBR.BW)最小RTT
    • 工作模式:通过周期性探测(ProbeBW、ProbeRTT等)来保持报文在管道中正好填满瓶颈链路,但又不排队,这使得BBR在高带宽(如光钎)和有一定丢包率(如无线网络)的环境下,能获得极高的吞吐量和极低的延迟。

基于速率控制的拥塞控制

发送端不再依赖ACK来驱动发送,而是基于一个计算出的发送速率来发送数据包。

  • TCP BBR:实际上也属于速率控制,它明确计算出一个发送速率(pacing rate)来平滑发送,避免突发。
  • QUIC:其拥塞控制算法(如 NewReno、BBR)也是基于速率调度的。

网络辅助的拥塞控制

需要网络设备(如路由器、交换机)参与,向发送端发送明确的拥塞信号。

  1. 显式拥塞通知

    • 路由器在IP头中设置CE(拥塞经历)标记。
    • 接收端将该标记反馈给发送端(通过在TCP头中的ECN标志)。
    • 发送端收到ECN后,像对待丢包一样降低窗口。
  2. 基于速率的拥塞控制(如 ATM的ABR)

    • 交换机根据当前队列长度计算一个允许的速率(ER),并将其填入一个控制帧中。
    • 发送端严格按照该速率发送,这在复杂网络(如ATM网络)中实现,但TCP/IP网络中较少应用。

现代拥塞控制算法的比较

算法 核心信号 适用场景 优点 缺点
CUBIC 丢包 通用,高带宽长延迟 Linux默认,曲线平滑,公平性好 在高丢包率链路(如无线)性能下降
BBR 带宽 & RTT 大带宽、长延迟、高丢包 高吞吐,低延迟 对Buffer不足的网络不友好(可能饿死),公平性控制较复杂
Vegas RTT 低延迟、无丢包 延迟极低,主动避免拥塞 在竞争环境下容易被其他算法“欺负”
Reno 丢包 经典,基础 简单,标准 丢包恢复慢,不适用于高BDP网络
DCTCP ECN 数据中心网络 低队列积压,低延迟 需要交换机支持ECN

总结与选择建议

  • 通用互联网CUBIC(Linux/Mac/iOS默认)表现均衡。
  • 高速长距离(如跨国、卫星链路)BBRBBRv2 效果显著。
  • 低延迟场景(如Web浏览、视频会议)BBRTCP Vegas
  • 数据中心(追求极低延迟和高吞吐)DCTCPBBR(配合ECN)。
  • 高丢包无线网络(Wi-Fi、4G/5G)BBR 比CUBIC更好,因为它不把丢包简单地当成拥塞。

核心思想总结:

  1. 丢包即拥塞:经典方法,简单但反应滞后。
  2. 延迟即拥塞:预判拥塞,反应迅速,但可能与其他算法竞争不公。
  3. 带宽+延迟:BBR为代表,主动探测,现代网络首选。
  4. 网络辅助:显式通知,效率最高,但需要中间设备升级。

标签: 拥塞控制 流量整形

抱歉,评论功能暂时关闭!