When too many senders transmit too fast, network routers become overloaded, leading to packet loss and reduced throughput for everyone. Individual flow control can’t prevent this because the bottleneck is the network, not the receiver.
A set of algorithms that detect network congestion and reduce sending rate to prevent overwhelming the network, then increase rate when congestion clears.
- Sender maintains a congestion window (cwnd) limiting unacknowledged data
- Effective window = min(receive window, congestion window)
- Slow start: exponentially increase cwnd until packet loss detected
- Congestion avoidance: linearly increase cwnd after slow start threshold
- Fast retransmit: retransmit on duplicate ACKs without waiting for timeout
- Fast recovery: halve cwnd and continue after fast retransmit
- Network-driven: responds to network congestion signals (loss, delay)
- Uses congestion window separate from flow control window
- Multiple algorithms: slow start, congestion avoidance, fast retransmit, fast recovery
- Essential for internet stability
- Built from: Sliding Window Protocol — window-based mechanism
- Built from: Packet Loss — primary congestion signal
- Builds into: TCP — implements congestion control
- Related: Flow Control — receiver-based vs network-based
- Contrasts with: Flow Control — different control objective
- Bufferbloat: large router buffers hide congestion, causing high latency
- TCP fairness: different TCP variants compete differently for bandwidth
- Congestion control vs congestion avoidance: detection vs prevention strategies