Congestion

2 min read Last updated Sat Jun 27 2026 08:46:52 GMT+0000 (Coordinated Universal Time)

A network is congested when offered traffic approaches or exceeds network capacity.

Congestion causes:

  • Increased queuing delay
  • Packet loss (buffer overflow)
  • Reduced throughput (can drop to near zero under severe congestion)

Congestion Control

Open Loop Control

Prevents congestion before it occurs. No runtime monitoring. Policies set at design time.

Mechanisms:

  • Admission control: reject new flows if capacity is insufficient
  • Traffic shaping: enforce rate limits at the source (leaky bucket, token bucket)
  • Scheduling: prioritize traffic classes to avoid starvation

Closed Loop Control

Detects congestion and reacts to it.

Steps:

  1. Monitor network conditions (queue length, packet loss rate, delay)
  2. Inform relevant nodes (explicit feedback or implicit signal)
  3. Take corrective action (reduce sending rate)

Feedback types:

  • Explicit
    Network sends a signal to the source. Examples: choke packets (router sends ICMP source quench), ECN (Explicit Congestion Notification bits in IP header).
  • Implicit
    Source infers congestion from observable signals. Example: TCP infers congestion from packet loss or RTT increase.

TCP Congestion Control

TCP implements closed-loop congestion control using a congestion window (cwndcwnd).

Slow Start

cwndcwnd begins at 11 MSS and doubles each RTT until a threshold (ssthreshssthresh) is reached or loss occurs. Exponential growth.

Congestion Avoidance

After ssthreshssthresh, cwndcwnd grows by 11 MSS per RTT (additive increase). On loss, ssthresh=cwnd/2ssthresh = cwnd / 2 and cwndcwnd resets to 11 (TCP Tahoe) or cwnd=ssthreshcwnd = ssthresh (TCP Reno fast recovery).

Random Early Detection

RED is a router-side active queue management algorithm. Drops packets probabilistically before the queue is full, signaling congestion to TCP sources before buffers overflow. Avoids the global synchronization problem (many TCP flows cutting rate simultaneously when a full buffer drops many packets at once).

Was this helpful?