BBR (Bottleneck Bandwidth and RTT) (BBR)
A congestion control algorithm developed by Google that models the network path to find optimal sending rate. Unlike loss-based algorithms like CUBIC, BBR targets maximum throughput without filling buffers.
Full Explanation
BBR is a congestion control algorithm that takes a fundamentally different approach from traditional loss-based algorithms. Instead of ramping up speed until packets get dropped (like CUBIC and Reno do), BBR continuously estimates the bottleneck bandwidth and round-trip time of the network path. It then targets a sending rate that maximizes throughput without stuffing router buffers.
Traditional congestion control (CUBIC, Reno) interprets packet loss as congestion. The problem is that on modern networks with deep buffers, loss-based algorithms fill those buffers before backing off. This causes bufferbloat: high throughput but terrible latency. BBR avoids this by probing for bandwidth and RTT independently and keeping the sending rate at the point where both are optimal.
BBR operates in four phases. Startup: quickly ramps up to find the available bandwidth (similar to slow start). Drain: reduces the queue that built up during startup. ProbeBW: steady state where it periodically probes for more bandwidth by briefly increasing the sending rate. ProbeRTT: periodically reduces the sending rate to get a clean RTT measurement without queuing delay.
For CDNs, BBR is significant because it improves performance on exactly the kinds of links where CDN edge servers deliver content. Long-distance paths with high bandwidth-delay products (like transcontinental or satellite links) see major improvements. Paths with mild loss (mobile networks, congested last-mile) also benefit because BBR doesn't interpret random loss as congestion.
Google deployed BBR on YouTube's servers and saw 4% higher throughput globally. More impressively, they saw 14% higher throughput in developing regions where networks have higher loss rates. CDN providers that enable BBR on their edge servers see similar improvements, especially for large file downloads and video streaming.
BBRv2 (later renamed BBRv3) addresses fairness concerns from the original BBR. BBRv1 could be unfair to CUBIC flows sharing the same bottleneck, sometimes taking more than its fair share of bandwidth. BBRv3 adds loss responsiveness and better coexistence with loss-based algorithms. Most CDN deployments now target BBRv3.
Examples
# Check current congestion control algorithm on Linux
sysctl net.ipv4.tcp_congestion_control
# net.ipv4.tcp_congestion_control = cubic
# Enable BBR
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w net.core.default_qdisc=fq
# Make persistent across reboots
echo 'net.ipv4.tcp_congestion_control=bbr' | \
sudo tee -a /etc/sysctl.d/99-bbr.conf
echo 'net.core.default_qdisc=fq' | \
sudo tee -a /etc/sysctl.d/99-bbr.conf
sudo sysctl -p /etc/sysctl.d/99-bbr.conf
# Verify BBR is loaded
sysctl net.ipv4.tcp_available_congestion_control
# reno cubic bbr
# Check BBR state for active connections
ss -tin | grep bbr
# Shows BBR-specific info: bw, mrtt, pacing_rate
# Nginx: BBR applies at the OS level, no app config needed
# Just enable BBR on the server running your CDN edge
Frequently Asked Questions
A congestion control algorithm developed by Google that models the network path to find optimal sending rate. Unlike loss-based algorithms like CUBIC, BBR targets maximum throughput without filling buffers.
# Check current congestion control algorithm on Linux
sysctl net.ipv4.tcp_congestion_control
# net.ipv4.tcp_congestion_control = cubic
# Enable BBR
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w net.core.default_qdisc=fq
# Make persistent across reboots
echo 'net.ipv4.tcp_congestion_control=bbr' | \
sudo tee -a /etc/sysctl.d/99-bbr.conf
echo 'net.core.default_qdisc=fq' | \
sudo tee -a /etc/sysctl.d/99-bbr.conf
sudo sysctl -p /etc/sysctl.d/99-bbr.conf
# Verify BBR is loaded
sysctl net.ipv4.tcp_available_congestion_control
# reno cubic bbr
# Check BBR state for active connections
ss -tin | grep bbr
# Shows BBR-specific info: bw, mrtt, pacing_rate
# Nginx: BBR applies at the OS level, no app config needed
# Just enable BBR on the server running your CDN edge
Related CDN concepts include:
- Latency — The time delay between a request and the start of its response. For CDNs, it's …
- TCP (TCP) — Transmission Control Protocol. The reliable, ordered, connection-oriented transport protocol underneath HTTP/1.1 and HTTP/2. TCP's three-way …
- Throughput — The actual amount of data transferred per unit of time. Unlike bandwidth (maximum capacity), throughput …
- CWND (Congestion Window) (CWND) — The TCP sender-side limit on how much unacknowledged data can be in flight. Controls throughput …