AIMD sawtooth — the canonical algorithm. Halves on loss, grows linearly in CA.
Three TCP congestion-control algorithms running over identical lossy links. Same link parameters, three very different sending strategies — sawtooth, cubic recovery, and model-based pacing.
"How fast can I send before the network breaks?" Each algorithm answers differently:
0.5%. Watch Reno's cwnd carve a sawtooth — that's AIMD on display.2%. Reno collapses; CUBIC holds higher; BBR barely flinches because it doesn't react to loss.200ms. BBR's PROBE_BW pacing remains visible; the loss-based algorithms slow their growth.cubic; Reno toggles between slow-start / congestion-avoidance; BBR cycles through startup → drain → probe-bw.Beanfield runs fiber. The TCP stack on every customer's laptop chooses one of these (or a relative). On a clean fiber link with low loss, all three look similar; the differences appear when wifi sneezes, when buffer-bloat shows up at a peering point, or when an upstream provider starts dropping at 0.5%.
Streaming services adopted BBR because it doesn't need loss to "find the rate" — it holds high throughput on paths that would have collapsed Reno.
AIMD sawtooth — the canonical algorithm. Halves on loss, grows linearly in CA.
Cubic recovery toward W_max. More aggressive than Reno on high-BDP paths.
Models bottleneck bandwidth + RTprop. Reacts to delay, not loss. Cycles pacing through PROBE_BW.
→ Each flow runs on its own copy of the link — there's no fairness comparison here, just isolated behaviour. Dropping LOSS to 0% gives you a clean view of each algorithm's growth phase; raising it to 1–2% reveals their backoff signatures.