Skip to content
Optimal Lab

Networking · interactive

TCP flow control

The receiver has room for 8 segments. With every acknowledgement it tells the sender how much room is left (the receive window), and the sender never sends more than that. Here the receiving app gets busy for a few ticks.

tickreceiver bufferwindowsent1642443244225 busy026 busy007 busy008 busy009 busy001020112212221322142215221622

“busy”: the app is busy (ticks 5–9), reads nothing. The sender would like to send 4 a tick.

5 ticks with a zero window · 28 sent · nothing dropped

While the app is busy the buffer fills and the window shrinks to 0. The sender stops completely instead of overflowing the receiver, then resumes when the app reads.

  1. 1

  2. 2

  3. 3

    The sender pauses and occasionally probes until the receiver opens the window again. Nothing is lost.

    This is backpressure at the transport level.

  4. 4

In production

Tools and technologies

Flow control is built into TCP and QUIC.

Not tied to one language — use these names when you search docs or design a system.