This TCP Congestion Algorithm Could Speed Up Your High-Latency Links (with a twist)

What is a TCP Congestion Control Algorithm?

Every time data is sent over the Internet using TCP, the protocol needs to figure out how fast it can go without overwhelming the network. That’s the job of a congestion control algorithm.

These algorithms regulate the rate at which data is transmitted based on feedback from the network. If the network is congested and packets are being dropped or delayed, the algorithm slows down. If there’s room to send more data, it speeds up.

Think of it as cruise control for your internet traffic. The goal is to find the right speed that keeps everything flowing smoothly — without causing bottlenecks, excessive delays, or dropped packets.

Different algorithms use different signals to detect congestion. Some rely on packet loss, others watch latency trends, and newer ones try to model the path entirely. This is where the difference between classic approaches like Cubic and newer ones like BBR becomes important.

Why congestion control still matters

Every byte on the Internet travels through buffers of limited size. When senders push data faster than the path can drain, packets queue, drop, or both. Congestion control algorithms decide how fast to send so that everyone gets a fair share without overwhelming the network. Over the years we have moved from Reno to New Reno, from Vegas to Westwood, and today, most Linux servers ship with Cubic as the default.

A refresher on Cubic

Cubic replaced Reno in Linux 2.6. It relies on packet loss to detect congestion. The window of in-flight data grows following a cubic function of time, which allows quick recovery after loss while remaining friendly to peers. Cubic is mature, easy to reason about, and well-studied. Because it reacts to drops, it can fill buffers (extra queueing delay) yet it shares bandwidth fairly with other Cubic or Reno flows.

BBR comes to disrupt

BBR (Bottleneck Bandwidth and Round Trip time) changes the rule of the book. Instead of watching for loss, it continuously models the link. It measures the best bandwidth it has seen along with the lowest round-trip time, and targets the product of the two (the BDP) as its operating point. The result is shorter queues and lower latency on long fat pipes, especially when packet loss is caused by noise, not congestion.

BBR is now part of the Linux kernel (v4.9 and later). A proposed v2 improves fairness when multiple BBR flows compete with Cubic, but it is still experimental.

Cubic vs BBR at a glance

Recent tests show that on a loopback path with random delay, Cubic sustained around 3 Gbps while BBR averaged about 1.7 Gbps and exhibited larger variance. Yet on lossy long-haul links such as satellite broadband, BBR often cuts tail latency by double-digit percentages.

Quick guide: enabling BBR on Ubuntu (for a lab only)

Warning: These steps alter global networking. Use them on a non-production host or a test VM, and roll back when done.

Step 1: Check your kernel

uname -r     # needs 4.9 or newer; 5.15+ recommended

Step 2: Load the Fair Queuing scheduler

sudo modprobe sch_fq

Step 3: Enable BBR

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

Step 4: Verify

sysctl net.ipv4.tcp_congestion_control   # should print bbr

Step 5: Run traffic tests

Use tools like iperf3 to observe throughput and latency.

Step 6: Revert

Replace bbr with cubic in the file above, run sudo sysctl -p, and unload sch_fq if desired.

Advanced: To experiment with BBR v2 you must compile or install a kernel with tcp_bbr2 support and set net.ipv4.tcp_congestion_control=bbr2. This remains a moving target and is not advised for service hosts.

Practical advice

Last Words…

BBR is a leap toward model-driven congestion control, promising low delay and high goodput on tough links. Yet it trades predictability and compatibility for speed. Keep Cubic as the default in everyday workloads, and reserve BBR for workloads that really need very high throughput over very long latency networks.

Join the conversation on LinkedIn