gor.bio wiki

TCP Congestion Control

The mechanisms that let TCP share network capacity fairly, adjusting each connection's sending rate in response to congestion signals.

Category: Networking · Created: 2026-08-16 · Updated: 2026-08-16

Illustration: Using dynamic traffic assignment in the development of a congestion management system - DPLA - 11ddc30b9d554b5d6df7ada6551fda00
Illustration: Using dynamic traffic assignment in the development of a congestion management system - DPLA - 11ddc30b9d554b5d6df7ada6551fda00 · Image: Ziliaskopoulos, Athanasios K, Northwestern University (Evanston, Ill.). Dept. of Civil Engineering, Northwestern Univers, Public domain, via Wikimedia Commons.

A network link has finite capacity, and when senders collectively try to send more traffic than a link or router can forward, queues fill up and packets are dropped. TCP congestion control is the set of mechanisms that detect this overload and adjust each connection's sending rate, so that many connections can share a network without collapsing it. It was introduced in the late 1980s after "congestion collapse" events on the early Internet.

Each TCP connection maintains a congestion window (cwnd): the number of bytes that may be in flight without an acknowledgement. The window starts small and grows as long as the network delivers packets. Growth follows the AIMD principle — additive increase, multiplicative decrease. On packet loss, the window is multiplied by a factor (typically halved, or reset to one segment on a timeout), while in the absence of loss it grows, either exponentially or linearly depending on the phase.

New connections use slow start: cwnd begins at one or a few segments and doubles every round trip until it reaches the slow-start threshold, at which point the connection switches to congestion avoidance and grows the window by roughly one segment per round trip. This probes the available capacity quickly at first, then approaches it cautiously. Loss is treated as the signal that the network is full, and the window is reduced in response.

The classic Reno variant halves the window on three duplicate acknowledgements (a sign of a single lost segment) and restarts from one segment on a timeout (a sign of severe loss). CUBIC, the default on Linux for many years, grows the window along a cubic curve so that connections recover quickly after a reduction on high-bandwidth links. More recent developments include Explicit Congestion Notification (ECN), which lets routers mark packets instead of dropping them, and Google's BBR, which models the bottleneck bandwidth and round-trip time directly rather than treating loss as the only signal.

Congestion control is what keeps the Internet stable under load: it is the reason aggressive senders cannot permanently starve well-behaved ones, and why a TCP connection shares capacity with millions of others instead of overrunning them.

Tags

congestion networking performance tcp

Related articles

This text may be freely copied, modified, and reused. See Content Reuse.