Visual trace
Watch the window edges move
Start with a normal pipeline, then switch to full-window, zero-window, and loss scenarios.
Trace sender windows, receiver windows, cumulative ACKs, zero-window backpressure, and bandwidth-delay limits
Follow the sender's left edge, next sequence number, receiver advertised window, and cumulative ACK as TCP keeps data moving without overflowing the receiver.
Visual trace
Start with a normal pipeline, then switch to full-window, zero-window, and loss scenarios.
No bytes are in flight yet. The sender can transmit while SND.NXT stays below SND.UNA plus the usable window.
The effective sender limit is the smaller of the receiver's advertised window and the congestion-control cap.
The receiver advertises space. The sender gets permission to place bytes in flight.
SND.NXT advances as segments are transmitted before earlier ACKs return.
An ACK names the next expected byte, so all lower bytes are confirmed.
A smaller rwnd reduces the usable send window and slows the stream.
rwnd = 0 pauses new data; a persist probe checks whether space has returned.
Cumulative ACKs cannot jump a gap, so duplicate ACKs repeat the same next byte.
It is a moving byte range. Bytes below the left edge are ACKed; bytes inside the range may be sent; bytes beyond it must wait.
ACK 1600 means the receiver has every byte before 1600 and wants byte 1600 next. It does not need one ACK per segment.
The receiver advertises available buffer space. A small rwnd protects memory but can leave the link under-used.
Small RAM, radio duty cycle, and long RTT links make window size a real design trade-off for telemetry gateways and devices.
Quick reference
Use these rules to check each scenario before opening the deeper notes.
| Check | Formula or rule | Meaning |
|---|---|---|
| Allowed byte range | SND.UNA through SND.UNA + send_limit - 1 | The sender must not place new bytes beyond the right edge. |
| Available send room | send_limit - (SND.NXT - SND.UNA) | How many more bytes can be sent before an ACK arrives. |
| Bandwidth-delay product | BDP = bandwidth x RTT | A window smaller than BDP cannot keep the path full. |
Set rwnd to 3 segments and press Step until the sender waits. Which readout reaches zero first?
Use the Lost segment scenario. Why does ACK stay at the missing byte even when later segments arrive?
Raise RTT to 700 ms. Compare the effective window with the BDP target and decide whether the path is under-filled.
This workbench groups bytes into equal teaching segments so the state is readable. TCP sequence and ACK numbers count bytes; SYN and FIN also consume one sequence number, but this page focuses on established data transfer.
Real TCP sender behavior is also limited by congestion control. The congestion cap control is included so you can see why the usable window is normally the smaller of receiver flow control and congestion-control state.
Classic TCP window fields are 16 bits, so TCP Window Scale is used when larger receive windows are needed. Zero-window probing is simplified here as a one-byte persist probe; exact timers are implementation dependent.
Delayed ACK, selective acknowledgment, retransmission timeout, and fast retransmit can change the detailed trace. The cumulative ACK behavior shown here remains the baseline mental model.
Sources
Use these when checking terminology, formulas, and TCP edge cases.