Congestion control is just one part of TCP's reliability toolkit
Alongside congestion control, TCP relies on sequence numbers, acknowledgments, and retransmission timers to guarantee that data arrives complete and in order. Congestion control specifically addresses network-wide fairness and stability -- without it, a handful of aggressive senders could degrade a shared link for everyone else.
You can often see which algorithm you're using -- but rarely change it
Most consumer operating systems and browsers don't expose a control for switching congestion algorithms, since the setting is usually more consequential on servers than on client devices. Linux servers can typically list and switch available algorithms (such as Cubic or BBR) through kernel parameters, which is why the choice matters most for the operators of busy websites, video platforms, and CDNs.
How to see what your Linux machine is doing
On Linux, the command sysctl net.ipv4.tcp_congestion_control shows the default algorithm, and net.ipv4.tcp_available_congestion_control lists the ones loaded. The ss tool with the -i option prints per-connection details such as the current congestion window, round-trip time, and retransmission counts, which is useful when diagnosing a slow transfer. Changing the default usually requires administrator rights and is applied system-wide, so test on a non-critical machine first and measure with the traffic you actually serve.
QUIC and the move of congestion control into applications
QUIC, standardized as RFC 9000 in 2021, runs on top of UDP and implements its own loss recovery and congestion control inside the application library, rather than relying on the operating system. This lets browsers and servers update algorithms without waiting for a kernel upgrade, and the specification describes a default controller similar to New Reno, while implementations commonly offer Cubic or BBR as well. For users it means the same principles described on this page apply to HTTP/3 traffic, even though the code is in a different place.
Frequently Asked Questions
Can I switch which congestion control algorithm my device uses?
On Linux, yes -- the kernel exposes a setting to choose between algorithms like Cubic and BBR. Windows, macOS, and most mobile operating systems don't expose this to end users, and in practice the server side of a connection usually has more influence over perceived speed than the client side.
Does congestion control apply to video calls and game traffic sent over UDP?
UDP itself has no built-in congestion control, so a poorly-behaved UDP application can keep pushing data even when the network is congested, hurting everyone sharing that link. Modern protocols built on top of UDP, such as QUIC, implement their own congestion control logic to behave more responsibly.
Is packet loss always a sign of congestion?
No. Loss can come from congestion, but also from wireless interference, faulty cables, or overloaded devices. Classic TCP assumes loss means congestion, which is why it can slow down needlessly on poor wireless links.
Why does a download start slowly and then speed up?
That is slow start at work. The connection begins with a small window and grows it quickly, so small files may finish before the transfer has reached its full speed. This is also one reason why many short connections are often slower than a few long ones, and why connection reuse matters in protocols such as HTTP/2.
Does a faster internet plan fix slow single downloads?
Not always. A single connection can be limited by the round-trip time, the window size, or loss on the path, rather than by the plan's bandwidth. A download from a distant server might not fill your connection even if the plan is large, while a nearby server or a CDN could.
What does the sawtooth pattern in a throughput graph mean?
It is the visual result of additive growth followed by a sharp cut after a loss. A smoother or flatter line usually indicates a different algorithm, such as one that adjusts based on delay or measured bandwidth, or a path with plenty of spare capacity.