news 2026/4/18 9:41:31

TCP 拥塞控制算法详解:CUBIC、BBR 及传统算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP 拥塞控制算法详解:CUBIC、BBR 及传统算法

TCP 拥塞控制算法详解:CUBIC、BBR 及传统算法

目录

  1. CUBIC 拥塞控制算法
  2. BBR 拥塞控制算法
  3. CUBIC 与 BBR 对比总结
  4. 传统算法:TCP Tahoe
  5. 传统算法:TCP Reno
  6. 传统算法:TCP NewReno
  7. 传统算法:TCP SACK
  8. 传统算法总结对比
  9. 从传统到现代的演进

一、CUBIC 拥塞控制算法

1.1 背景

CUBIC 是一种基于窗口的拥塞控制算法,是对传统BIC(Binary Increase Congestion Control)的改进。在 Linux 内核中被广泛采用(自 Linux 2.6.19 引入),尤其在**高带宽、高延迟(长肥网络,LFN)**环境中表现良好,是许多现代操作系统的默认 TCP 拥塞控制算法。

1.2 特点

  • 以时间为基准的窗口增长:使用立方函数调整拥塞窗口(cwnd),而非线性或指数增长。
  • 对高 BDP 网络友好:适合高速、长距离网络。
  • 窗口增长与丢包相关,但不完全依赖丢包作为拥塞的唯一信号。

1.3 工作原理

  • 发生丢包时:CUBIC 将拥塞窗口降至W_max × β(β 一般约 0.7)。
  • 之后:不再线性增加 cwnd,而是按三次函数(关于时间差 t)快速增长,较快接近上次最大窗口W_max,再缓慢逼近新平衡点。
  • 公式(简化):
    W(t) = C(t − K)³ + W_max
    其中:W(t)为 t 时刻的拥塞窗口;C为缩放常数;K为达到 W_max 所需时间;t为自上次丢包以来的时间。

1.4 优点

  • 在高带宽延迟网络中性能优于传统算法。
  • 可扩展性好,适合数据中心和互联网骨干网。

1.5 缺点

  • 仍主要依赖丢包作为拥塞信号,难以区分排队延迟与真正拥塞。
  • 在存在较大缓冲队列的网络中可能引起较高延迟(bufferbloat)。

二、BBR 拥塞控制算法

2.1 背景

BBR(Bottleneck Bandwidth and RTT)由 Google 提出(2016 年),旨在解决传统基于丢包的算法(如 CUBIC)在高延迟、高带宽环境下效率低下的问题,并改善bufferbloat

2.2 特点

  • 不依赖丢包作为拥塞判断,而是基于**瓶颈带宽(BtlBw)往返时延(RTprop)**动态调整发送速率。
  • 主动探测网络带宽和最小 RTT,通过建模网络状态实现高效传输。
  • 显著减少排队延迟,提高响应速度和吞吐量。

2.3 工作原理

BBR 周期性地在两种模式之间切换:

  • PROBE_BW(带宽探测):逐步增加发送速率以探测可用带宽。
  • PROBE_RTT(最小 RTT 探测):定期降低发送速率以测量最小 RTT(反映无排队时的网络延迟)。

BBR 控制两个关键参数:

  • BtlBw:当前路径所能承载的最大数据传输率(瓶颈带宽估计)。
  • RTprop:路径上的最短往返时间(最小 RTT)。

拥塞窗口的调整不直接依据丢包,而是使发送速率尽量匹配估计的瓶颈带宽,同时避免过多排队延迟。

2.4 优点

  • 在高带宽、高延迟、高缓冲网络中性能优越。
  • 降低网络延迟和抖动,提升用户体验。
  • 减少因拥塞窗口过大造成的 bufferbloat。
  • 特别适用于视频流、大文件传输等对带宽敏感的场景。

2.5 缺点

  • 多 BBR 流竞争时可能存在公平性问题。
  • 部署需要操作系统支持(Linux kernel ≥ 4.9 支持较好)。
  • 部分网络设备对非传统拥塞控制算法支持不佳。

三、CUBIC 与 BBR 对比总结

特性CUBICBBR
拥塞判断依据丢包带宽 & 延迟(不依赖丢包)
拥塞窗口增长方式基于时间的立方函数基于带宽/延迟模型的速率控制
对延迟的敏感性较低,易受 bufferbloat 影响高,能显著降低延迟
适用场景高带宽延迟网络、通用场景高速网络、实时业务、视频流、云应用
公平性较好多 BBR 流间可能存在竞争问题
默认支持Linux 默认(老版本)需手动开启(Linux 4.9+ 支持)

四、传统算法:TCP Tahoe

4.1 背景

Tahoe 是最早的 TCP 拥塞控制算法之一(约 1988 年),是 TCP Reno 的前身,首次引入拥塞控制的基本思想。

4.2 核心机制

  • 慢启动(Slow Start):初始 cwnd 较小,每经过一个 RTT,cwnd 翻倍(指数增长),直到达到慢启动阈值ssthresh
  • 拥塞避免(Congestion Avoidance):当 cwnd ≥ ssthresh 后,改为线性增长(每 RTT 加 1)。
  • 快速重传(Fast Retransmit):收到3 个重复 ACK时,立即重传丢失的数据包,无需等待超时。
  • 发生丢包时:将ssthresh 减半;将cwnd 设为 1,重新进入慢启动。

4.3 缺点

  • 一旦检测到丢包就回到慢启动,性能急剧下降。
  • 没有「快速恢复」机制,带宽利用率不高。

五、传统算法:TCP Reno

5.1 背景

Reno 在 Tahoe 基础上加入快速恢复,约 1990 年前后提出,广泛用于早期 Internet。

5.2 核心机制

继承 Tahoe 的慢启动、拥塞避免和快速重传,并新增:

  • 快速恢复(Fast Recovery)
    当收到 3 个重复 ACK 时:
    • 设置ssthresh = max(cwnd/2, 2)
    • 设置cwnd = ssthresh
    • 每收到一个重复 ACK,cwnd 增加 1(有上限);
    • 重传丢失报文;
    • 当收到新 ACK(确认新数据)时,退出快速恢复,cwnd 设为 ssthresh,进入拥塞避免。
  • 超时处理:若发生超时重传,ssthresh 设为 cwnd/2,cwnd 重置为 1,重新进入慢启动。

5.3 优点与缺点

  • 优点:相比 Tahoe,丢包恢复更快,网络利用率更高。
  • 缺点:对同一窗口内多个包丢失处理有限;在高 BDP 网络中扩展性不足;仍基于「丢包=拥塞」模型。

六、传统算法:TCP NewReno

6.1 背景

NewReno 改进 Reno 在同一窗口内多包丢失时的表现(RFC 2582)。

6.2 核心机制

  • Reno 在快速恢复过程中只能恢复一个丢包;若有多个丢包,会多次触发快速重传和窗口重置。
  • NewReno 修改快速恢复逻辑,使发送方在一次fast recovery 中可连续重传所有丢失的包,直到全部被确认才退出恢复状态。

6.3 优点与缺点

  • 优点:多包丢失场景下吞吐量更高;向后兼容 Reno。
  • 缺点:实现更复杂;仍受限于丢包检测,难以很好适应高带宽、低丢包率网络。

七、传统算法:TCP SACK

7.1 背景

SACK(Selective Acknowledgment)不是完整的拥塞控制算法,而是配合 Reno/NewReno 的增强机制(RFC 2018、RFC 2883)。

7.2 工作机制

  • 接收方通过 TCP 选项中的SACK字段报告已收到的非连续数据块。
  • 发送方据此只重传真正丢失的段,而不是从最近确认点之后的所有数据。

7.3 优点与缺点

  • 优点:大幅改善多包丢失的恢复效率;与 NewReno 结合形成「NewReno + SACK」效果更好。
  • 缺点:协议更复杂;并非所有设备都支持 SACK。

八、传统算法总结对比

算法拥塞控制机制多包丢失处理快速恢复是否考虑延迟出现年代
Tahoe慢启动 + 拥塞避免 + 快速重传1988
Reno+ 快速恢复一般~1990
NewReno改进快速恢复,支持多包丢失1999 (RFC)
SACK(+)提供细粒度重传信息更好(配合)1996+

传统算法的总体评价

  • 优点:简单、易实现、广泛部署;在低带宽、低延迟、丢包频繁的网络中有效;奠定了后续发展基础。
  • 缺点:基于「丢包=拥塞」的保守模型;cwnd 调整反应较慢,吞吐量易剧烈波动;忽略延迟变化,易导致 bufferbloat;难以应对数据中心、视频流、云服务等高要求场景。

九、从传统到现代的演进

Tahoe → Reno → NewReno (+SACK) → CUBIC → BBR ↑ ↑ 传统丢包驱动模型 现代模型驱动/测量驱动

CUBIC 和 BBR 代表了两种不同理念:前者仍以丢包驱动为主,后者采用测量驱动(带宽与 RTT)的模型。随着对实时性和高带宽需求的增长,BBR 等新一代算法得到越来越广泛的应用。实际部署中应根据网络特点和业务需求选择合适的拥塞控制策略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:53:59

7个维度深度解析:Lenovo Legion Toolkit如何超越Vantage

7个维度深度解析:Lenovo Legion Toolkit如何超越Vantage 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 问题引入…

作者头像 李华
网站建设 2026/4/18 5:05:58

Fish Speech 1.5应用案例:打造个性化AI语音播报系统

Fish Speech 1.5应用案例:打造个性化AI语音播报系统 1. 为什么需要一个“会说话”的AI播报系统? 你有没有遇到过这些场景: 每天要为几十条新闻摘要生成语音版,人工配音成本高、周期长;电商后台需要为上千款商品自动…

作者头像 李华
网站建设 2026/4/18 7:36:22

Qwen3-VL:30B企业级开发:Java微服务集成最佳实践

Qwen3-VL:30B企业级开发:Java微服务集成最佳实践 1. 为什么Java微服务需要Qwen3-VL:30B这样的多模态能力 在企业数字化转型的深水区,我们常常遇到这样的情景:客服系统只能处理文字工单,却无法理解用户上传的产品故障截图&#x…

作者头像 李华
网站建设 2026/4/18 7:57:31

深度学习项目训练环境镜像:快速搭建PyTorch开发环境教程

深度学习项目训练环境镜像:快速搭建PyTorch开发环境教程 你是否还在为每次新项目都要重装CUDA、PyTorch、torchvision而头疼?是否曾因版本不兼容导致ImportError: libcudnn.so.8: cannot open shared object file卡在凌晨两点?是否试过在服务…

作者头像 李华
网站建设 2026/4/18 7:53:13

大模型时代:如何用数学思维解码日常生活的复杂问题

1. 数学思维:日常生活的隐形操作系统 我们每天都在不自觉地使用数学思维,就像手机运行着看不见的操作系统。早上选择最快的地铁线路时,你其实在用图论中的最短路径算法;超市比较商品单价时,你在进行单位换算的数学运算…

作者头像 李华
网站建设 2026/4/15 20:50:31

Transformer attention mask错位、FlashAttention内核静默降级、分布式梯度同步时序漂移——Python大模型调试终极故障图谱(2024 Q3最新12类硬核案例)

第一章:Python大模型调试的底层认知与方法论 大模型调试并非传统软件调试的简单延伸,而是融合了计算图追踪、内存生命周期管理、梯度传播验证与分布式状态一致性校验的复合型工程实践。其核心挑战在于:模型行为高度依赖动态计算图构建、自动微…

作者头像 李华