Learn
Lesson · Latency and the Tail · Budgets and limits

Packet Loss and Throughput

A single TCP flow cannot sustain more than about (MSS/RTT) × 1/√p, where p is the loss rate. At 1460-byte segments, a 100 ms round trip and one percent loss that is 1.168 Mbit/s — on a link of any capacity whatever. Filling a ten-gigabit link under those conditions needs 8 562 parallel streams, which is why a slow cross-region copy is usually a flow-count problem rather than a bandwidth one.

Mathis bound rate ≤ (MSS / RTT) × 1/√p 1460 B, 100 ms, p = 1%: 1.168 Mbit/s, whatever the link is streams to fill 10 Gbit/s = ⌈10 000 / 1.168⌉ = 8 562 halve the loss → × √2 ≈ 1.414 halve the RTT → × 2 the square root is why this is the one rounded figure on the course
One flow’s ceiling, and the square root in it

Core ideas

What this lesson establishes

The hard idea is that a link’s capacity is an upper bound on what all flows together can do, and says almost nothing about what one flow will do.

1

A flow’s rate is bounded by its round trip and its loss

A congestion-controlled sender grows its window until a loss, then cuts it. Averaged over that cycle the sustainable rate comes out proportional to MSS/RTT and inversely proportional to √p. The link capacity does not appear in the expression at all, which is the entire surprise.

2

The round trip enters linearly and the loss as a square root

Halving the round-trip time doubles the bound: the same 1460 B at 1% loss gives 1.168 Mbit/s at 100 ms and 11.680 Mbit/s at 10 ms. Halving the loss multiplies it by √2, about 1.414. Doubling the loss from 1% to 2% gives 0.826 Mbit/s, not 0.584 — and 0.584 is what doubling the round trip would give instead.

3

Parallel streams are how the gap is closed

If one flow is bounded at 1.168 Mbit/s and the link carries 10 000 Mbit/s, then ⌈10 000 / 1.168⌉ = 8 562 concurrent flows are needed to use it. That figure is the honest reason bulk transfer tools open many connections, and it is a number to compute before concluding that a link was mis-sold.

The material

One flow, bounded by two numbers that are not the link

Where the square root comes from, what it does to the arithmetic, and the one place this course rounds.

A team copies a dataset between two regions over a ten-gigabit link and measures a little over a megabit a second. The link is not the problem, the disks are not the problem, and nothing is broken. The transfer is using one TCP connection over a 100 ms round trip with one percent packet loss, and that combination has a ceiling.

Definition · Mathis bound

For a loss rate p, a maximum segment size MSS and a round-trip time RTT, a single congestion-controlled flow sustains at most approximately (MSS / RTT) × (1 / √p). It is a bound on the average rate over many congestion cycles, derived from the sawtooth of window growth and halving; it ignores timeouts, receive-window limits and the slow-start phase, so a real flow achieves this or less.

MSS = 1460 B RTT = 100 ms p = 1% = 1/100 MSS / RTT = 1460 B / 0.1 s = 14 600 B/s 1 / √p = 1 / √0.01 = 10 bound = 14 600 × 10 = 146 000 B/s = 146 000 × 8 / 10⁶ = 1.168 Mbit/s link 10 000 Mbit/s streams = ⌈10 000 / 1.168⌉ = 8 562

The bound is 1.168 Mbit/s and the link is 10 Gbit/s. The flow is using about one ten-thousandth of the capacity that was bought, and buying more capacity changes the numerator of nothing. What would change the answer is a shorter round trip, a lower loss rate, a larger segment, or more flows — and the 8 562 figure prices the last of those exactly.

The square root, and why it matters more than it looks

  • p = 0.1% — bound 3.694 Mbit/s, 2 708 streams to fill the link
  • p = 0.5% — bound 1.652 Mbit/s, 6 054 streams
  • p = 1% — bound 1.168 Mbit/s, 8 562 streams
  • p = 2% — bound 0.826 Mbit/s, 12 108 streams
  • p = 5% — bound 0.522 Mbit/s, 19 145 streams

Loss enters as 1/√p, so a factor of two in loss is a factor of √2 in throughput, not a factor of two. Going from 1% to 2% takes the bound from 1.168 to 0.826 Mbit/s — it multiplies by 1/√2 ≈ 0.707, and a reader who expected 0.584 has applied the wrong rule. Going the other way is the same story in reverse: halving the loss buys 41% more throughput, not 100% more, which is why loss reduction has diminishing returns and round-trip reduction does not.

Example · The two levers, priced against each other

At 1460 B and 1% loss, moving the round trip from 100 ms to 10 ms — a nearer region — takes the bound from 1.168 to 11.680 Mbit/s, exactly ten times, because RTT is in the denominator linearly. Moving the loss from 1% to 0.1% — a tenfold improvement in a much harder quantity — takes it to 3.694 Mbit/s, a factor of √10 ≈ 3.16. Distance is the more powerful lever by a factor of three, and it is also the one “The Speed-of-Light Floor” said was the only one physics cares about.

One honesty note about the arithmetic, because this lesson is the exception on this course. Every other figure in these eleven labs is an exact fraction: percentiles are ranks, convolutions are enumerated pairs, and budgets are subtractions. This bound contains √p, and a square root of a rational is usually irrational — √(1/50), the root needed at two percent loss, has no rational value at all. So the mathis mode computes its root by Newton’s method to fifteen decimal places and says on its face that it has done so. Every figure on that panel inherits the rounding, and no other page on the course does.

Two limits on the model itself. It is a bound on the average rate, so a real flow reaches it at best and usually less: retransmission timeouts, a receive window too small for the bandwidth-delay product, and slow start all cost more. And it describes loss-based congestion control; a flow using a rate-based or delay-based controller is not governed by this sawtooth and is not described by this formula. Read it as the ceiling a classical flow cannot pass, which is exactly the use it gets put to.

The misconception it exists to correct is short enough to state in one sentence: a ten-gigabit link does not give a ten-gigabit flow. The link capacity is a bound on the aggregate; a single connection is bounded by its own round-trip time and loss rate, and those two numbers were never on the invoice.

Interactive

Packet loss and throughput

One flow's ceiling, which the link rate has nothing to do with

The loss-limited bound on one flow(MSS ÷ RTT) × 1 ÷ √p — the one rounded figure on this course
one flowthe linkrounded, not exact

Method

Bounding one flow

Four steps, and the fourth is the one that stops the wrong invoice being blamed.

1

Get MSS, RTT and the loss rate for the actual path

The segment size is typically 1460 B on a standard ethernet path and larger with jumbo frames. The round trip and the loss rate come from measurement, not from the contract, and the loss rate is the one people most often do not have.

2

Compute MSS / RTT in bytes a second

Keep the round trip in seconds for this line. 1460 B / 0.1 s is 14 600 B/s. This is the per-round-trip rate of one segment, and it is the whole of the bound when the loss rate is one hundred percent.

3

Multiply by 1 / √p and convert to bits

The square root is the step to do carefully: √0.01 = 0.1, so 1/√p is 10, not 100. Multiply by eight and divide by 10⁶ for megabits a second, and expect a figure far below the link rate.

4

Divide the link capacity by the bound to get the stream count

Round up. ⌈10 000 / 1.168⌉ = 8 562 says how many concurrent flows the link needs before its capacity is reachable at all — and if that number is implausible, the fix is the round trip or the loss, not the link.

One flow against a large link

Score 0 / 0

One flow over a 10 Gbit/s intercontinental link

The link is enormous, the transfer is slow, and nothing is broken. The bound explains it in four lines.

path MSS 1460 B RTT 100 ms loss p = 1% = 1/100 link 10 000 Mbit/s MSS / RTT = 1460 / 0.1 = 14 600 B/s 1 / √p = 1 / √0.01 = 1 / 0.1 = 10 bound = 14 600 × 10 = 146 000 B/s = 146 000 × 8 / 10⁶ = 1.168 Mbit/s utilisation of the link by one flow: 1.168 / 10 000 ≈ 0.0117% streams to fill it: ⌈10 000 / 1.168⌉ = 8 562 what changes it: RTT 100 → 10 ms bound → 11.680 Mbit/s × 10 loss 1% → 0.1% bound → 3.694 Mbit/s × √10 ≈ 3.16 loss 1% → 2% bound → 0.826 Mbit/s × 1/√2 ≈ 0.707 link 10 → 40 Gbit/s bound → 1.168 Mbit/s unchanged

The last line is the one to keep. Quadrupling the link changes the bound by nothing at all, because the link capacity does not appear in the formula. Every hour spent on a bandwidth upgrade for a single-stream transfer is an hour spent on a term that is not in the expression.

The × √10 ≈ 3.16 line is the one that gets misread. A tenfold reduction in loss — from one percent to one in a thousand, which is a serious network engineering achievement — buys a factor of three in throughput. Meanwhile moving the endpoint from 100 ms to 10 ms away buys a factor of ten. The square root is not a detail of the formula; it is the reason the two levers are ranked the way they are.

For a faded rehearsal, take a jumbo-frame path: MSS = 9000 B, RTT = 40 ms, p = 0.5%, over a 1 Gbit/s link. The supplied first move is MSS / RTT = 9000 / 0.04 = 225 000 B/s. Compute 1/√p, the bound in megabits a second, and the number of streams needed to fill the link. Then say which single change — halving the round trip or halving the loss — buys more, and by what factor. Check the figures on the lab’s sliders before opening the quiz.

Common mistakes

1
Expecting one flow to reach the link rateA 10 Gbit/s link gives one flow 1.168 Mbit/s at a 100 ms round trip and one percent loss, because neither the capacity nor the price appears in the bound. The link rate bounds every flow together; the Mathis bound bounds each one separately, and the two can differ by four orders of magnitude.
2
Treating loss as linearDoubling the loss does not halve the throughput, it multiplies it by 1/√2. Halving the loss does not double it, it multiplies by 1.414. Every plan built on the linear reading over-promises what a loss reduction will achieve and under-values moving the endpoint closer.
3
Quoting the bound as an exact figure1/√p is irrational for most loss rates — √(1/50) has no rational value — so the lab computes it by Newton’s method and labels the panel accordingly. It is also a bound on an average rate, so a real flow achieves it at best. Quote it as a ceiling, to three or four significant figures, and not as a prediction.

Check your understanding

✓
Finish when a slow single-stream transfer makes you ask for the loss rate, not the link rate.

You should be able to compute (MSS/RTT) × 1/√p for a described path, convert it to megabits a second, work out how many parallel streams a given link would need, and say which of the round trip and the loss rate is the more valuable thing to improve and by what factor.

Note: That is the course. Latency had a floor set by distance, a multiplier set by the round-trip count, and a shape set by the longest path through the stage graph; the tail turned out to be a rank rather than an average, to amplify under fan-out and shrink under hedging, and to refuse to add across stages; and the budget held all of it, with a timeout and a retry count fitted inside. What none of it explained is where the tail came from in the first place. Queues and Utilisation is the answer: the tail is what waiting in line looks like, and it is a function of how busy the server is.

Kept in this browser only, for you. Nothing is sent anywhere and nothing checks it. Carry it to another device.

Feedback and recommendations

Something to change about this lesson? Write it down, tick it off when it is handled, and export the list when you want to act on it. Kept in this browser only: nothing is sent anywhere, and nobody is notified.

No recommendations yet for this lesson.