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:
- Monitor network conditions (queue length, packet loss rate, delay)
- Inform relevant nodes (explicit feedback or implicit signal)
- 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 ().
Slow Start
begins at MSS and doubles each RTT until a threshold () is reached or loss occurs. Exponential growth.
Congestion Avoidance
After , grows by MSS per RTT (additive increase). On loss, and resets to (TCP Tahoe) or (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).