状态机与链路动画
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),再更新 maxBandwidth、minRTT、pacingRate、cwnd。
事件日志
对应源码
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,决定什么时候还有发送预算。