Skip to main content
networking

Congestion

Network congestion occurs when traffic exceeds link or buffer capacity, causing packet loss and increased latency. TCP congestion control algorithms (Cubic, BBR, Reno) dynamically adjust sending rate to avoid overwhelming the network. Persistent congestion degrades all traffic on the shared path.

Definition

Congestion happens when the aggregate traffic on a link exceeds its capacity. Router buffers fill, queuing delay increases, and eventually packets are dropped. TCP detects congestion through packet loss (timeout or triple duplicate ACKs) and reduces its congestion window (cwnd) to lower the sending rate. The congestion control algorithm determines how aggressively the sender probes for available bandwidth and how quickly it backs off. Cubic (Linux default) uses a cubic function to grow cwnd. BBR (Google's algorithm) estimates bandwidth and RTT directly rather than relying on loss signals. Bufferbloat occurs when oversized router buffers delay packets instead of dropping them – TCP cannot detect congestion, latency grows to seconds, and interactive traffic suffers. The solution is Active Queue Management (AQM) like CoDel or fq_codel.

Examples

  • tc qdisc add dev eth0 root fq_codel – enables fair queuing with CoDel AQM
  • ss -i shows cwnd and retransmission stats per connection
  • iperf3 -c host measures achievable throughput (limited by congestion window)

Related Protocols

Related Terms