AIMD is a feedback model with a stated operating regime
Relate congestion windows, acknowledgment clocks, additive growth, multiplicative reduction, and recovery behavior without assuming every transport uses Reno.
On this page
The question for today
What you’ll understand
- Estimate a window-limited sending rate with explicit units.
- Explain Reno-style additive increase and multiplicative decrease in their proper regime.
- Distinguish congestion avoidance, fast recovery, timeout recovery, and other controllers.
A sender shares links with traffic it cannot directly observe. Congestion control adjusts its offered load using partial feedback from that shared path. The congestion window limits outstanding data rather than reserving bandwidth. A simple increase-and-decrease picture is useful because it explains probing and restraint, but it becomes misleading when presented as a universal law of TCP. Start with a named Reno-style model and keep its assumptions visible.
A congestion window is permission, not a reservation
The congestion window, often called cwnd, bounds data allowed outstanding by the sender's congestion controller. Receiver flow control, pacing, available application data, and local resources can impose tighter limits. A 100,000-byte congestion window does not promise that a router has reserved those bytes or that the receiver can accept them. When a sender has enough data and acknowledgments return steadily, bytes leaving the outstanding set allow more bytes to enter. This acknowledgment clock couples transmission opportunities to observed delivery, but compressed or delayed ACKs can make the resulting timing uneven.
A rough rate estimate divides usable outstanding bytes by RTT. It is a ceiling-like model for a window-limited steady flow, not an equality that survives arbitrary loss, startup, or receiver stalls. Increasing a window when the bottleneck is already busy may mostly add waiting bytes. RTT can then grow because the queue grows, so a higher numerator need not produce a proportional increase in delivered useful bytes per second. Compare goodput, minimum and loaded RTT, loss, and limiting state together before concluding that a larger window improved the user's transfer.
Separate additive probing from slow start and recovery
In Reno-style congestion avoidance, the window grows roughly one maximum-sized segment per RTT under suitable acknowledgment behavior. A common per-ACK approximation adds the square of the sender maximum segment size divided by the current window. The resulting change is small for each ACK but accumulates over a flight. Slow start is a different phase with more rapid, approximately exponential growth under ideal conditions. Calling slow start additive increase hides the very burst of discovery that often determines whether a short transfer ever reaches the path's available capacity.
After the classic fast-retransmit signal, the threshold is based on roughly half the outstanding flight, subject to a two-segment floor, and fast recovery temporarily adjusts the congestion window to account for presumed departures. On timer expiry, RFC 5681's congestion window falls to no more than one full-sized segment; it is not simply left at half its old value. The familiar sawtooth therefore compresses several distinct rules into a sketch. Other controllers, including CUBIC, use different growth mechanisms. Identify the controller, recovery method, and phase before applying a numerical model to a real sender.
Feedback can indicate a queue without locating it
A loss signal can result from congestion, but a sender generally lacks a perfect map from that event to a particular router and cause. Explicit Congestion Notification can convey congestion without requiring a drop when the path and endpoints support it. Wireless corruption, reordering, and receiver limitations complicate diagnosis. Even the classic intuition of competing flows converging toward equal shares has assumptions about controllers, RTTs, bottlenecks, and synchronized conditions. Equal connection counts are not automatically fair to users whose applications open different numbers of flows or need different completion-time targets.
Use independent queue-lab runs to isolate capacity pressure. Reset, explicitly set both λ=3 and μ=2, predict growth from four units at t=0, then Play or Step. Reset again, re-set both λ=1 and μ=2, and predict draining to zero at t=4 seconds before playback. Changing a control retains elapsed time and recomputes from four, not from the previously displayed backlog. These are separate constant-rate runs, without AIMD, an ACK clock, loss detection, or fairness logic. Explain which sender measurements would reconstruct an actual cwnd sawtooth instead of labeling either queue curve as one.
Work it through
An idealized Reno avoidance cycle
Assume full-sized 1,000-byte segments, constant 0.05-second RTT, a continuously backlogged Reno-style flow in congestion avoidance, and no receiver limit. Its steady window grows from ten to twenty segments before a qualifying loss.
At ten segments, W=10,000 bytes and W/R=200,000 bytes per second. At twenty segments the corresponding ideal rate is 400,000 bytes per second.
At roughly one segment of growth per RTT, ten segment increments take about ten RTTs, or 0.5 seconds. This ignores ACK-policy and recovery transients.
With 20,000 bytes actually outstanding, the classic threshold bound is max(10,000,2,000)=10,000 bytes. This is a threshold calculation, not a statement that timeout cwnd remains 10,000 bytes.
The sketch illustrates additive probing and a multiplicative threshold reduction under named assumptions. It does not predict a different controller's exact behavior.
The living notebook
Explore the model
Interactive lab · queue
Over-offering before feedback reacts
For EACH independent run select Reset, explicitly re-set BOTH rates, predict, then Play or Step: compare (λ,μ)=(3,2) with (1,2). Both start at backlog four and t=0; the latter empties at t=4 seconds. Editing rates retains t and recomputes a new constant-rate curve, not a piecewise history. Neither run executes AIMD, compares TCP algorithms, or infers fair shares.
- Fluid backlog
- 4
- Net rate · λ − μ
- −1 /s
- M/M/1 mean residence
- 1 s
Fluid backlog starts at 4 and follows max(0, 4 + (λ − μ)t). The separate M/M/1 residence-time formula assumes Poisson arrivals, exponential service and λ < μ. Parameter changes pause playback and recompute the model at the current elapsed time. Reset restores both parameters and returns time to zero. Playback starts paused. Adjust either parameter, then choose Play or Step.
Look forPersistent offered load above service grows a queue; a controller's feedback rules determine how and when the sender responds.
Pause & reason
Check your understanding
Your turn
Try it yourself
A window-limited flow has 64,000 usable outstanding bytes and RTT 0.08 seconds. Estimate its rate ceiling. What happens to that ceiling if RTT doubles while the window remains fixed?
Take a moment to make a prediction or work it out on paper. Open a hint when you need one.
Give me a hint
Divide bytes by seconds twice; do not assume the physical bottleneck rate changes with RTT.
Compare with the solution
The first estimate is 800,000 bytes per second. At 0.16 seconds it is 400,000 bytes per second. The modeled ceiling halves because credit turns over more slowly; a physical link's capacity may be unchanged, and the actual flow can still be limited by application supply or another constraint.
Keep the idea
Take it with you
- A congestion window limits outstanding load without reserving bottleneck service.
- Reno avoidance, slow start, fast recovery, and timeout recovery have different rules.
- AIMD intuition needs a named algorithm, feedback regime, and explicit assumptions.
Read further
Original sources and deeper explanations to follow at your own pace.
Optional progress, saved in this browser when available. Revisit any lesson at any time.
Lesson not marked complete.