CUBIC 模型动态演示

参考 bbr-model-demo.html 的交互形式,演示 CUBIC 的窗口增长模型:慢启动、三次函数拥塞避免、TCP-friendly 参考线、丢包后的乘性下降,以及 Wmax / K / ssthresh 的变化。

状态机与链路动画

SLOW START每个 ACK 增 1 MSS
CUBIC CA三次函数增长
RECOVERY丢包降窗

实时变量

Mode
SLOW
指数增长
cwnd
10 pkt
发送窗口
ssthresh
慢启动边界
Wmax
0 pkt
上次丢包前窗口
K
0.00s
三次曲线拐点
CUBIC target
0 pkt
Wcubic(t)
Throughput
0 Mbps
ACK 滑窗估计
RTT / Inflight
0ms / 0
队列会推高 RTT

窗口曲线

cwnd / target / tcp-friendly cwndtargetfriendly

吞吐量

Throughput (Mbps) throughput

RTT 曲线

RTT (ms) sampleRTT

CUBIC 更新路径

1. 慢启动 cwnd += 1 packet per ACK,窗口在每个 RTT 近似翻倍,直到超过 ssthresh 或遇到丢包。
2. 丢包事件 记录 Wmax,计算 ssthresh=β*cwnd,窗口乘性下降到 β*cwnd
3. 拥塞避免Wcubic(t) 作为目标窗口,ACK 到来时让 cwnd 逐步追向目标。
4. TCP-friendly 同时计算 West(t)=Wmax*β+3β/(2-β)*(t/rtt),目标取三次曲线和友好线中较大值。

事件日志

说明

当前 Hysteria 仓库只接受 bbrreno,测试里明确把 cubic 当作不支持配置。这个页面是独立的 CUBIC 教学模型,不代表仓库中已有 CUBIC 实现。
  • app/cmd/client_test.go / app/cmd/server_test.go: congestion.type: cubic 会报 unsupported。
  • core/internal/congestion/utils.go: 当前自定义拥塞控制入口只安装 BBR 或 Brutal;reno 走 quic-go 默认路径。
  • 本页使用标准 CUBIC 模型公式做可视化,重点展示窗口如何随 ACK 和 loss 演化。