Enable BBR: Boost TCP Throughput on High-Latency Links

Switch your Linux server to Google's BBR congestion control to squeeze more throughput out of long-distance, lossy connections.

If your server sits a long way from its users, or the path between them drops packets now and then, you may notice that transfers crawl even though the bandwidth looks generous. In cases like these, switching your TCP congestion control algorithm to BBR often delivers an immediate improvement.

What Is BBR

BBR (Bottleneck Bandwidth and Round-trip propagation time) is a congestion control algorithm developed by Google and merged into the Linux kernel. Traditional algorithms such as CUBIC and Reno treat packet loss as the signal for congestion: the moment a packet drops, they back off sharply. But on intercontinental or wireless paths, loss often reflects line quality rather than real congestion, so these algorithms misread it and throttle the connection for no good reason.

BBR takes a different approach. It continuously measures the link's bottleneck bandwidth and round-trip time (RTT), then actively estimates the ideal sending rate instead of waiting for loss before it slows down. On high-latency links with light-to-moderate loss, BBR therefore tends to sustain higher and steadier throughput.

Prerequisite: Check Your Kernel Version

BBR requires Linux kernel 4.9 or newer. Check it first:

uname -r

Any version at 4.9 or above works, which covers Ubuntu 18.04+ and Debian 10+ out of the box. Next, confirm the kernel actually offers BBR:

sysctl net.ipv4.tcp_available_congestion_control

You should see bbr in the output. If it's missing, try loading the module:

sudo modprobe tcp_bbr

Turn BBR On

BBR is best paired with the fq (Fair Queue) packet scheduler. Apply both to the running system first, so you can verify them right away:

sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

Make It Persist in /etc/sysctl.conf

The settings above are lost on reboot. Write the two lines into /etc/sysctl.conf (or /etc/sysctl.d/99-bbr.conf) so they load automatically at boot:

echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

sysctl -p reloads the configuration file immediately.

Verify It's Active

Confirm that the active congestion control algorithm is now BBR:

sysctl net.ipv4.tcp_congestion_control

Expected output:

net.ipv4.tcp_congestion_control = bbr

You can also check that the queueing discipline is fq:

sysctl net.core.default_qdisc

Where It Helps and Where It Doesn't

  • Best case: high-latency paths (cross-border, cross-continent) with headroom to spare, especially when mild-to-moderate packet loss is in play. That's where the gains are most dramatic.
  • Limited gain: same-datacenter, low-latency links are already fast, so BBR rarely makes a noticeable difference.
  • Keep in mind: BBR only affects TCP traffic your server sends; the other end needs no changes. It can't raise your physical bandwidth ceiling or fix severe congestion. The change takes effect instantly with no reboot and carries little risk, and you can switch back to cubic at any time if the results disappoint.

Summary

BBR is a congestion control algorithm that ships with the Linux kernel and works out of the box, and it shines on high-latency, loss-prone links. The whole process is just three steps: confirm your kernel is 4.9 or newer, use sysctl to set fq and bbr, then persist them to a config file and verify. A handful of commands is all it takes to give your server steadier throughput on long-distance transfers.