TCP Congestion Control

In October 1986 the early Internet suffered what came to be called a congestion collapse: the throughput on the link between Lawrence Berkeley Laboratory and the University of California at Berkeley, just a few hundred yards apart, dropped from 32 kbit/s to 40 bit/s, a factor of a thousand. The network was not broken in any hardware sense. It was saturated with retransmissions, with senders pumping more packets into an already overloaded network and making the situation worse. Van Jacobson and Michael Karels diagnosed the problem and devised a cure, presented in their 1988 SIGCOMM paper “Congestion Avoidance and Control.”

The core insight is that a TCP connection should treat packet loss as a signal of congestion and use it to find the right sending rate. The paper introduced a small set of algorithms layered onto existing TCP. Slow start governs the opening of a connection: rather than blasting a full window of data immediately, the sender starts with a tiny congestion window and increases it exponentially, doubling roughly each round-trip until it senses a limit. This lets the connection quickly but safely discover how much the network can carry.

Once the window grows large, the sender switches from slow start to congestion avoidance, increasing the window only linearly, by about one segment per round-trip. When a loss is detected, the window is cut sharply. This pattern of linear growth and multiplicative reduction is known as Additive Increase, Multiplicative Decrease, or AIMD, and it is what gives TCP its characteristic sawtooth throughput curve. AIMD is provably fair and stable when many connections share a bottleneck, which is why it became the backbone of Internet traffic control.

Two later refinements completed the classic picture. Fast retransmit lets a sender infer a lost packet from the arrival of duplicate acknowledgments rather than waiting for a timeout, and fast recovery governs how the window is managed afterward, avoiding a full collapse back to slow start. RFC 5681, “TCP Congestion Control” (September 2009), specifies all four algorithms as the standard behavior and notes that the underlying mechanisms “were devised in” the Jacobson 1988 and 1990 work.

The importance of these algorithms is hard to overstate. TCP carries the overwhelming majority of Internet traffic, and without congestion control a network of millions of independent senders would repeatedly drive itself into collapse. Because the algorithms live in the endpoints rather than in the routers, they let the network scale without central coordination: each connection independently probes for its fair share and backs off when it overshoots. Decades of research has produced newer congestion control variants, but they all descend from the framework Jacobson and Karels set out in 1988.

Sources

Last verified June 8, 2026