BBR 模型动态演示

基于本仓库 core/internal/congestion/bbr 的核心公式做教学模拟:状态机、发包 pacing、ACK/loss、带宽样本、RTT 样本、pacing rate 和 congestion window。

状态机与链路动画

STARTUP快速探测带宽
DRAIN排空队列
PROBE_BW周期探测
PROBE_RTT重测 minRTT

实时变量

Mode
STARTUP
gain 2.89 / 2.00
Bandwidth Estimate
0 Mbps
max filter
Pacing Rate
0 Mbps
estimate * pacingGain
Congestion Window
0 KB
bytes in flight 上限
minRTT / sampleRTT
0 / 0 ms
最小 RTT 10s 过期
bytesInFlight
0 KB
未确认数据
Last sendRate
0 Mbps
发送曲线斜率
Last ackRate
0 Mbps
ACK 曲线斜率

速率曲线

Bandwidth / Pacing estimatepacingsample

窗口 (CWND / Inflight)

CWND / Inflight (KB) cwndinflight

RTT 曲线

RTT (ms) sampleRTTminRTT

ACK 到来后的计算路径

1. 找到 packetNumber 对应的发送快照 connectionStateMap.GetEntry(packetNumber)
2. 计算发送侧斜率 sendRate = ΔtotalBytesSent / ΔsendTime
3. 计算 ACK 侧斜率 ackRate = ΔtotalBytesAcked / ΔackTime
4. 生成样本并更新模型 bandwidthSample = min(sendRate, ackRate),再更新 maxBandwidthminRTTpacingRatecwnd

事件日志

对应源码

  • core/internal/congestion/utils.go: UseConfigured 默认安装 BBR,UseBBR 调用 conn.SetCongestionControl
  • core/internal/congestion/bbr/bbr_sender.go: BBR 状态机、pacing rate、cwnd、recovery window。
  • core/internal/congestion/bbr/bandwidth_sampler.go: 发包快照、ACK 后的 sendRate / ackRate / RTT sample。
  • core/internal/congestion/common/pacer.go: token bucket pacing,决定什么时候还有发送预算。