Skip to content

Watch one connection find its speed

The trace

Four series, one x-axis. A vertical read at any instant is exact.

First time hereA run is already loaded — the same one the home page walks through. Drag the buffer slider down towards 0.2 × BDP and watch two things happen at once: the sawtooth gets shallower, and the utilisation figure below the chart falls. That is the whole buffer-sizing trade in one gesture. Then push it up to 8 and watch the RTT panel instead.
Start from

20 Mbps, 50 ms round trip, a buffer sized to the pipe. The textbook sawtooth.

How much fits in the wire

20.0 Mbps × 50.0 ms ÷ 8 = 122.1 KiB = 86 × MSS

Capacity times round trip, divided by eight because capacity is quoted in bits and everything else here in bytes. That is how much data can be in transit at once, so it is the amount worth having in flight — and the number the buffer below is measured against. Send less and the wire idles; send more and the extra waits in a queue.

The link
Bandwidth20.0 Mbps
1 Mbps200 Mbps

How fast the narrowest link on the path can forward packets — the .

One-way delay25.0 ms · Base RTT 50.0 ms
1 ms200 ms

Distance, as time. Doubled it is the — the fastest a round trip can possibly be.

Buffer122.1 KiB · 1.00 × BDP
0.05 × BDP8 × BDP

How much may wait at the bottleneck. Read it as a multiple of the : below 0.5 the link goes idle, above 1 the extra is pure latency.

Random loss0
05%

Packets dropped for reasons other than a full queue — radio interference, a bad cable. Leave at zero to see congestion alone.

The sender

The rule the sender uses to decide how fast to go. All of them run through one identical sender, so this compares algorithms and not implementations. CBR is the exception and the control case: it is not an algorithm at all but a source that ignores every signal, pinned just above capacity — watch it fill the buffer and stay there.

The bottleneck queue

What the bottleneck does when it runs out of room. DropTail waits until it is full; RED and CoDel drop early on purpose — .

Run settings30 s · #1
Duration30 s
5 s120 s

How long to simulate. Longer runs show more sawtooth cycles and take longer to compute.

Seed#1
164

Which this run used. Same settings and same seed give a byte-identical result.

Read straight down at any moment to see why the window did what it did. The window climbs, the queue fills beneath it, the RTT climbs with the queue, and when the buffer overflows a loss marks all four at once.

Simulating packets…