webrtc弱网-BBRv1算法原理

BBRv1(Bottleneck Bandwidth and Round-trip propagation time)是 Google 于 2016 年提出的拥塞控制算法,其核心思想是摒弃传统算法依赖丢包作为拥塞信号的范式,转而直接测量网络路径的瓶颈带宽和传播延迟,将发送速率与飞行中的数据量精确匹配到链路容量,从而在保证高吞吐的同时实现极低排队延迟。

一、核心模型:两个关键参数

BBR 将网络路径抽象为两个动态特征量:

参数 物理含义 测量方法
BtlBW 路径上的瓶颈带宽(最大传输速率) 使用窗口化最大值滤波器,从 ACK 返回的交付速率(delivery rate)中持续跟踪
RTprop 无排队状态下的传播延迟(最小 RTT) 使用窗口化最小值滤波器,从 RTT 采样中持续跟踪

网络路径的容量由 BDP(带宽延迟积)= BtlBW × RTprop 给出。

BBR 的目标是让发送速率 = BtlBW,飞行中的数据量 ≈ BDP,此时数据恰好填满管道,既不造成队列堆积(延迟最小),又能充分利用带宽。


二、状态机:四个阶段循环

BBR 通过一个状态机在不同阶段执行不同的发送策略,持续跟踪 BtlBW 和 RTprop 的变化。

复制代码
        ┌─────────────────────────────────────────┐
        │                                         │
        ▼                                         │
   ┌──────────┐      ┌─────────┐                  │
   │ STARTUP  │ ──►  │  DRAIN  │                  │
   └──────────┘      └─────────┘                  │
        │                   │                     │
        │                   ▼                     │
        │              ┌──────────┐               │
        └────────────► │ PROBE_BW │ ◄───────┐     │
                       └──────────┘         │     │
                            │               │     │
                            ▼               │     │
                       ┌──────────┐         │     │
                       │PROBE_RTT │ ────────┘     │
                       └──────────┘               │
                            │                     │
                            └─────────────────────┘

1. STARTUP(启动阶段)

  • 目标:快速探测到瓶颈带宽。

  • 行为 :每个 RTT 内发送速率翻倍(实际使用增益 gain = 2.77),直到带宽不再增长。

  • 退出条件:连续三次带宽增长 < 25%,即认为已接近带宽上限。

2. DRAIN(排空阶段)

  • 目标:将启动阶段在缓冲区中累积的排队数据全部排空。

  • 行为:发送速率降低,让飞行中的数据量降至 BDP 附近。

  • 触发:自动跟随 STARTUP,一旦启动完成即进入排空。

3. PROBE_BW(带宽探测阶段)------ 主要运行状态

  • 目标:在稳定运行中持续探测带宽是否增加。

  • 行为:以 8 个相位为一个周期(8-phase cycle):

    • 前 6 个相位使用 gain = 1.25(超速探测),尝试提升速率;

    • 中间 1 个相位使用 gain = 0.75(减速排空);

    • 最后 1 个相位使用 gain = 1.0(平稳发送)。

  • 当超速探测时若检测到 RTT 增加(出现队列),会立即进入排空,确保延迟不失控。

4. PROBE_RTT(延迟探测阶段)

  • 目标:重新测量最小 RTT,避免 RTprop 被长期排队数据"污染"。

  • 触发条件:超过 10 秒未刷新 RTprop。

  • 行为:将飞行中的数据量强制降至 4 个 MSS(约 4 KB),持续约 200ms,在此期间收集新的最小 RTT。

  • 退出:RTprop 更新后,根据当前带宽状态返回 STARTUP(如果带宽未满载)或 PROBE_BW(如果已满载)。


三、发送控制:两个核心机制

BBR 不依赖于 ACK 中的显式拥塞信号,而是通过两个独立参数控制发送:

  1. 发送速率(pacing rate)
    pacing_rate = gain × BtlBW

    其中 gain 由当前状态决定(如 STARTUP 为 2.77,PROBE_BW 为 1.25/0.75/1.0)。

    采用精确的 pacing 机制,使数据平滑发出,避免突发加剧队列。

  2. 飞行中数据量(cwnd)
    cwnd = gain × BDP,其中 BDP = BtlBW × RTprop。

    飞行数据量被严格限制,防止过量数据进入网络形成长期队列。


四、BBRv1 的优势

优势 说明
高吞吐 不依赖丢包回退,在丢包率较高(如无线网络)时仍能保持高带宽利用率
低延迟 主动将队列长度维持在接近零,排队延迟极低
快速收敛 STARTUP 阶段指数增长,比传统 AIMD 快几个数量级
抗随机丢包 丢包不触发降速,适合无线/移动网络

五、BBRv1 的缺陷

缺陷 表现
与 TCP 共存不公平 在共享瓶颈链路时,BBRv1 会侵占 CUBIC/Reno 流的带宽,导致对方饥饿
浅缓冲区下高重传 在小缓冲区网络(如部分家用路由器、移动基站)中,BBRv1 的探测机制极易填满缓冲区,引发大量丢包和重传,浪费带宽
RTT 不公平 短 RTT 流在竞争时会获得更高带宽,长 RTT 流被压制
缺乏丢包回退 在存在真正拥塞(而非误码)时,BBRv1 不主动退让,可能加剧拥塞
对 ECN 利用不充分 未原生设计利用 ECN 信号来早期拥塞感知

相关推荐
MobotStone3 小时前
我的 AI 代码清理方法论:从原型到生产,只需 5 步
算法·程序员·架构
ivy159868377156 小时前
芯锦科技 HP9116 QC3+多协议USB快充接口芯片
网络·单片机·嵌入式硬件·5g·p2p
沐苏瑶10 小时前
Java 搜索型数据结构全解:二叉搜索树、Map/Set 体系与哈希表
java·数据结构·算法
ZoeJoy811 小时前
算法筑基(二):搜索算法——从线性查找到图搜索,精准定位数据
算法·哈希算法·图搜索算法
Alicx.11 小时前
dfs由易到难
算法·蓝桥杯·宽度优先
_日拱一卒11 小时前
LeetCode:找到字符串中的所有字母异位词
算法·leetcode
云泽80812 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
Wilber的技术分享12 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
邪神与厨二病13 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和