Understanding TCP BBR congestion control

Sep 12, 2026 · 8 min read · networking

Most congestion control algorithms treat packet loss as the signal to slow down. On modern networks with deep buffers, that heuristic breaks: the pipe stays full, latency climbs, and throughput collapses. BBR takes a different approach — it builds a model of the path (bottleneck bandwidth and round-trip propagation time) and paces packets to match it.

Enabling BBR on Linux

On kernels 4.9 and later it only takes two sysctl knobs:

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

Verify with sysctl net.ipv4.tcp_congestion_control and confirm the qdisc with tc qdisc show. BBR needs pacing, which is why the fq scheduler matters.

When it helps most

Caveats

BBR is not magic. It competes for buffer space like everything else, and early versions were unfair to CUBIC flows sharing a bottleneck. Measure with your real workload — iperf3, retransmit counters and RTT histograms tell you more than any blog post (including this one).