一起聊聊BBR

张开发
2026/4/6 1:54:38 15 分钟阅读

分享文章

一起聊聊BBR
小新好的在BBR之前TCP常用的拥塞控制算法是cubic但是cubic有天生的缺陷仅仅采用丢包来检测拥塞无法区分 真拥塞 和 假丢包假丢包就是我们说的链路抖动导致误减窗、性能浪费。妮妮那BBR是怎么解决的呢小新BBR采用带宽延时的双指标双指标通过实时探测网络最大可用带宽BW和最小往返延迟RTT得到BDP也就是Bandwidth-Delay Product计算方式BDPMax BW x Min Rtt以BDP作为拥塞窗口上限当inflight值大于BDP就认为拥塞发生。妮妮哦我来总结一下几个重要的参数1. 最大带宽Max BW2. 最小Min RTT3.BDP, BDPMax BW x Min RTT; 4. inflight发送方发送出去的报文且还没有收到ack。当Inflight的大小 BDP认为拥塞发生。小新BBR的第一个版本有不少缺点1. 多流竞争公平性短板,与 CUBIC、Reno 等丢包驱动算法共存时BBR v1 不依赖丢包减窗会持续占用带宽导致传统TCP流被挤压带宽占比极低;2.高丢包场景表现疲软,丢包不敏感导致带宽浪费BBR v1 仅以 “带宽 延迟” 判断拥塞不将丢包作为核心信号高丢包场景如卫星网、弱网中重传数据占用带宽但窗口不收缩实际有效带宽利用率大幅下降;3.延迟估计, 最小 RTTmin_rtt校准滞后BBR v1 依赖历史最小RTT评估链路基础延迟但网络延迟波动大如移动网络切换、链路拥堵缓解时min_rtt更新不及时导致窗口计算偏差;4.带宽突变响应慢当网络带宽突然提升如从4G切换到5G或下降时BBR v1 的带宽探测周期较长无法快速调整窗口导致短期带宽浪费或拥塞妮妮那后续是否BBR拥塞算法有改良和升级呢小新有的BBRV2对V1进行不少改进。1.同算法多流公平性BBR v1 中多个流会因RTT微小差异抢占不均BBR v2 引入 “pacing gain 动态调节” 机制当检测到多个BBR流竞争时自动降低 “带宽探测阶段” 的发送速率增益从 v1 的 2.0 降至 1.252.优化高丢包场景BBR v2 引入 “丢包 - 带宽关联检测”若丢包伴随带宽下降判定为 “拥塞型丢包”则按比例收缩窗口丢包率每升 1%窗口减 5%若丢包不影响带宽判定为 “链路干扰丢包”则仅暂停加窗不收缩窗口避免过度牺牲带宽3.延迟估计优化BBR v2 采用 “滑动窗口过滤”仅保留最近10个RTT中的最小值过滤短时突发延迟同时当网络状态稳定连续5个RTT延迟无波动时强制更新min_rtt确保基础延迟估计误差小于10ms。4.带宽突变响应慢BBR v1 每8个RTT探测一次带宽BBR v2 将探测周期缩短在保持8 RTT 完整周期的基础上通过子状态优化实现每2 RTT 一次带宽试探提升了动态响应能力。妮妮那我总结一下BBR v2 保留了v1 “高带宽利用率” 的核心优势同时补齐了公平性、丢包适配、动态响应等短板。那后续是否BBR拥塞算法有改良和升级呢小新BBR V3做了进一步的优化。1.公平性优化BBR V3 引入 随机化 ProbeBW周期2-8 RTT 动态调整打破多流同步探测导致的全局拥塞。同时通过 cwnd_gain动态缩放从固定 2.0 调整为基于队列长度的自适应系数避免RTT较小的流被过度压制使多流带宽分配误差控制在5%以内2.带宽预测的机器学习增强采用 滑动窗口 梯度检测双重机制仅保留最近10个RTT中的最小值并过滤短时突发延迟如临时队列堆积3.动态网络适应性BBR V3 将带宽探测周期从V2的8个RTT 缩短至 2个RTT4. ProbeRTT 机制的重构BBR V3 废除固定 10s 的 ProbeRTT周期改为 事件触发 随机间隔5-15s。当检测到队列长度超过目标值的1.5倍时立即触发ProbeRTT排空队列避免全局同步拥塞妮妮那我总结一下BBR V3 通过 「模型 智能预测」「动态协作」 的架构革新解决了V2在公平性、动态响应和极端场景下的局限性。听说人工智能也开始应用与拥塞控制小新是的传统的拥塞控制是由固定的公式如 CUBIC的三次函数、BBR 的 BDP 模型。但是机器学习的逻辑是融合多维度特征带宽波动、RTT 梯度、队列长度、丢包率、流量类型训练模型预测 “未来 1-2 个 RTT是否会拥塞”。妮妮那当前是否有些机器学习的拥塞控制开源可以用于学习的呢小新嗯有的不少开源项目正在探索机械学习用于拥塞控制这里推荐两个项目可以供大家研究。妮妮如果觉得内容对你有用请一键三连谢谢大家。更多文章可以关注公众号《音视频小号》

更多文章