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 信号来早期拥塞感知

相关推荐
huainingning17 分钟前
交换机通过ftp下载文件或者传输文件到ftp服务器
运维·服务器·网络
可编程芯片开发23 分钟前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星32 分钟前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮36 分钟前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home840741 分钟前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>1 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC2 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC2 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师2 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法
花生了什么事o2 小时前
DNS:把域名翻译成 IP 的层级查询机制
网络·网络协议·tcp/ip