Congestion Avoidance and Control
Van Jacobson1988SIGCOMM 1988
Read it on doi.org(opens in a new tab)Why this one
Read this after End-to-End Arguments in System Design, because Jacobson shows what that philosophy looks like when the network is on fire. The key idea is not just exponential backoff. It is that a sender can infer shared resource pressure from loss and timing, then adapt without a central coordinator. People often reduce TCP congestion control to a bag of tricks: slow start, congestion window, retransmit timers. The useful lesson is deeper: stability comes from feedback loops whose signals are cheap, local, and hard to fake. If you build queues, APIs, job runners, crawlers, or LLM serving systems, you are building congestion control whether you admit it or not. This paper is worth an evening because it turns overload from a moral failure, send less, into an engineering problem: measure the right pain, react conservatively, recover carefully.
What to take away
- Slow start probes capacity instead of assuming it, which prevents new flows from dumping a full window into a stressed network.
- The congestion window is a local control variable for a global shared resource, adjusted from loss and acknowledgments.
- Good overload control needs both avoidance and recovery, not just retries with bigger sleep intervals.
Reads with
- End-to-End Arguments in System Design
gives the philosophy jacobson turns into a working feedback loop
- The Tail at Scale
applies the same overload lesson to latency in large fanout services