news 2026/4/17 1:38: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/16 10:14:30

Windows任务栏美化终极指南:从视觉革命到性能优化

Windows任务栏美化终极指南:从视觉革命到性能优化 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 作为技术玩家,你…

作者头像 李华
网站建设 2026/4/16 10:14:36

深度解读提示工程架构师在AI与提示工程协同创新中的创新体系

深度解读提示工程架构师:AI与提示工程协同创新的“桥梁设计师” 一、引入:当AI遇到“不会说话的人类” 清晨的咖啡馆里,产品经理小杨盯着电脑屏幕皱起眉头——他刚用ChatGPT写了三版产品文案,结果要么太官方像说明书,要…

作者头像 李华
网站建设 2026/4/15 15:54:37

取证调研新利器:寻音捉影精准提取音频关键线索

取证调研新利器:寻音捉影精准提取音频关键线索 在刑侦现场回放三十段采访录音,在庭审准备中翻找三小时会议里的半句证词,在舆情分析时逐帧筛查百条播客中的敏感表述——这些曾让调查人员眉头紧锁的“听觉苦役”,如今只需一次点击…

作者头像 李华
网站建设 2026/4/15 10:04:07

卷积神经网络优化美胸-年美-造相Z-Turbo:图像质量提升

卷积神经网络优化美胸-年美-造相Z-Turbo:图像质量提升 1. 为什么需要卷积神经网络来优化图像质量 最近用美胸-年美-造相Z-Turbo生成图片时,发现一个有意思的现象:模型本身已经很强大了,但有时候生成的细节还是不够理想。比如人物…

作者头像 李华
网站建设 2026/4/16 10:14:38

Qwen3-ASR-0.6B开发实战:Qt桌面应用集成

Qwen3-ASR-0.6B开发实战:Qt桌面应用集成 1. 为什么要在Qt里集成语音识别 你有没有想过,让桌面软件听懂用户说话?不是那种需要联网、等几秒才出结果的云服务,而是本地运行、响应迅速、隐私可控的语音交互。最近试用Qwen3-ASR-0.6…

作者头像 李华