advanced24 min studyLesson 184 in Engineering

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

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.

Xflight≈WR,Xuseful≤min⁡(C,WR,Xsource,Xsink)X_{\rm flight}\approx\frac{W}{R},\qquad X_{\rm useful}\leq\min\left(C,\frac{W}{R},X_{\rm source},X_{\rm sink}\right)
W is usable flight bytes, R is feedback time in seconds, and C, X_source, X_sink are byte-per-second capacities under a simple steady model. Retransmission overhead, scheduling, and transient recovery can reduce useful throughput below these bounds.↔ Scroll wide equations horizontally.

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.

W←W+M2W per suitable ACK,H≤max⁡(F2,2M)W\leftarrow W+\frac{M^2}{W}\ \text{per suitable ACK},\qquad H\leq\max\left(\frac{F}{2},2M\right)
This illustrates classic congestion-avoidance growth and the RFC 5681 upper bound for the reduced threshold H at a qualifying loss event. M, W, F, and H are bytes; F is actual outstanding flight, and the equations do not describe timeout cwnd or every controller.↔ Scroll wide equations horizontally.

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.

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.

  1. 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.

  2. 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.

  3. 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 result

The sketch illustrates additive probing and a multiplicative threshold reduction under named assumptions. It does not predict a different controller's exact behavior.

Explore the model

Interactive lab

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.

Over-offering before feedback reactsFluid backlog starts at 4 and follows max(0, 4 + (λ − μ)t). The separate M/M/1 residence-time formula assumes Poisson arrivals, exponential service and λ < μ. Current readings: Fluid backlog: 4; Net rate · λ − μ: −1 /s; M/M/1 mean residence: 1 s. All parameters are adjustable with the labeled controls below.02.557.51001.534.56Elapsed time · sFluid backlogλ < μ
Fluid backlogCurrent time
Fluid backlog
4
Net rate · λ − μ
−1 /s
M/M/1 mean residence
1 s
t = 0 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.

Check your understanding

Under classic RFC 5681 timeout recovery, why is 'the congestion window just halves' an incomplete description?

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.

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.