← networks book ⊞ All topics

Bandwidth vs Throughput vs Latency vs Jitter

Four words everyone uses interchangeably that measure completely different things. Two of them are rates — bandwidth and throughput, in bits per second. Two are times — latency and jitter, in milliseconds. Rates and times cannot be traded for each other, which is why the most expensive mistake in network performance work is buying more bandwidth for a problem that was never about bandwidth. The question that prevents it: is this workload latency-bound or bandwidth-bound?

Key Components

Bandwidth
The maximum rate a link can carry, in bits/sec. It is a ceiling, not a speed: it says how many bits can be in motion side by side, never how quickly any one of them arrives. Quoted in bits (Mbps), while files are measured in bytes (MB) — a factor of 8 apart.
Throughput
The rate actually achieved, in bits/sec. Always ≤ bandwidth, pushed below it by header overhead, congestion, packet loss and retransmission, and — less obviously — by latency itself. Throughput is what you measure; bandwidth is what you bought.
Latency (and RTT)
The time for data to travel, in milliseconds. It is the sum of four delays: propagation (distance ÷ signal speed, ~200,000 km/s in fiber — a physics floor), transmission (packet size ÷ bandwidth), queuing in router buffers, and processing at each hop. Usually quoted as round-trip time (RTT) — what ping reports — roughly twice the one-way figure. A workload is latency-bound when its finish time is dominated by round trips, and bandwidth-bound when it is dominated by bits/sec.
Jitter
The variation in latency from packet to packet, in milliseconds. Average latency can be excellent while jitter is terrible. It is irrelevant to file transfers — TCP reassembles in order and only the total matters — and lethal to real-time media, where irregular arrival becomes audible stutter.
Bandwidth-delay product (BDP)
BDP = bandwidth × RTT: the amount of data that can be "in flight" at one time. It is the volume of the pipe rather than its width, and it is the one place where a rate and a time multiply into something meaningful. It sets how much a sender must be willing to have unacknowledged before it is forced to stop and wait.

Concrete Example

Take a single satellite internet plan: 200 Mbps bandwidth, 600 ms RTT. One link, one set of numbers, and two workloads that it treats in opposite ways.

Workload A — download a 40 GB game
  transfer  = 40 GB × 8 = 320,000 Mb ÷ 200 Mbps = 1,600 s
  latency   = 0.6 s paid once at the start
  total     ≈ 1,600.6 s        → latency is 0.04% of the job

Workload B — a video call
  every gesture, word and frame waits a full 600 ms round trip
  bandwidth used ≈ 3 Mbps out of 200 available
  total     → unusable, and 2 Gbps would not change it

The same link is excellent and unusable at once. Nothing about the plan changed between the two runs; what changed is which quantity the work depends on. The download is bandwidth-bound — one round trip amortized over 1,600 seconds of streaming bits. The call is latency-bound — thousands of round trips, each paid in full, using a rounding error of the available capacity.

The same split explains the most common disappointment in consumer networking: upgrading a home connection and finding that the web feels identical. A typical page pulls 80 small resources, and the ones that matter arrive over a handful of sequential round trips:

Page load, 100 ms RTT, resources fetched over 10 sequential round trips

  round trips   10 × 100 ms      = 1,000 ms   ← pure waiting
  bytes         2 MB at 100 Mbps =   160 ms

  upgrade 100 Mbps → 1 Gbps:
  round trips   10 × 100 ms      = 1,000 ms   ← unchanged
  bytes         2 MB at 1 Gbps   =    16 ms
                                   ---------
  total 1,160 ms → 1,016 ms       (12% better for 10× the bandwidth)

A tenfold bandwidth increase removed 144 ms from a 1,160 ms page load, because 86% of that page load was never bandwidth at all. It was distance and round trips. This is why so much of modern protocol design is a war on round trips rather than a hunt for capacity: HTTP/2 multiplexing removes serialized requests, connection reuse removes repeated handshakes, TLS 1.3 cuts setup to one round trip, QUIC to zero on resumption, and CDNs attack the RTT itself by moving the content physically closer.

That last one is the deepest point. Propagation delay is distance ÷ ~200,000 km/s, so New York to London is about 28 ms one-way, permanently. No amount of money buys a shorter speed-of-light path. It only buys a shorter distance — which is precisely, and only, what a CDN sells.

Visual Model

Picture a highway between two cities. The number of lanes is your bandwidth — how many cars can travel abreast. The length of the road is your latency — how long any single car takes to get from end to end. The cars actually arriving per hour at the far end is throughput, and how irregularly spaced those arrivals are is jitter.

Now hold the picture and ask the question that settles the whole topic: if you add lanes, does the road get shorter? It does not. You can widen a 3,000 km highway to twelve lanes and every car still drives 3,000 km. That is the entire reason "upgrade to gigabit" so often changes nothing — and the reason the only real fix for a long road is to move the destination closer, which is a CDN.

Drag the two sliders below and watch which numbers move. Adding lanes transforms the bulk transfer and barely touches the interactive page. Shortening the road does the reverse. Watch the third readout especially: with a fixed send window, a long road can cap your throughput far below the lanes you paid for.

Step 1 of N
Sender on-ramp lanes = bandwidth 8 lanes · 1000 Mbps ceiling cars on the road at once = bandwidth × RTT = BDP BDP = 0 MB Receiver off-ramp road length = latency RTT 100 ms · ~10,000 km of fiber uneven spacing between arrivals = jitter same average latency, inconsistent arrival → stutter in real-time media bandwidth-bound: 1 GB download latency-bound: page, 30 round trips throughput, 64 KB window

Loading…

The third readout is the one that surprises people. A sender may only keep a limited amount of data unacknowledged — a window. If that window is smaller than the BDP, the sender fills the road, stops, and waits for the far end's acknowledgement to travel all the way back before it may send again. With a 64 KB window and a 600 ms RTT, throughput is pinned near 0.9 Mbps no matter how many lanes exist. The road is wide and long, and mostly empty. That configuration has a name: a long fat network, and it is the cleanest proof that latency limits throughput.

Deeper — Edge Cases & Gotchas

Bits versus bytes — the most common practical error

Bandwidth is sold in bits per second; files are measured in bytes. Eight bits to the byte, so the headline number divides by 8 before it means anything about a download:

  100 Mbps  →  12.5 MB/s      (theoretical ceiling)
    1 Gbps   →  125  MB/s
   10 Gbps   →  1.25 GB/s

A user reporting "I pay for 100 Mbps but only get 11 MB/s" is seeing correct behaviour: 12.5 MB/s is the ceiling and header overhead takes the rest. The lower-case b and upper-case B are doing all the work in that sentence.

Why throughput sits below bandwidth

Four independent taxes, only one of which is usually noticed:

  • Header overhead — every layer adds bytes that are not payload. Small packets pay proportionally more.
  • Congestion — the bottleneck is whichever link on the path is narrowest, not the one you bought.
  • Loss and retransmission — a lost packet costs its own bytes again, plus at least one round trip of delay.
  • Latency itself — via the window-versus-BDP ceiling above. This is the one that gets missed, because it looks like a bandwidth problem and is not one.

Jitter, and the buffer that trades latency to remove it

Two links can both average 40 ms while behaving completely differently: one varying by 2 ms, the other by 35 ms. For a file transfer the two are indistinguishable. For a voice call the second is unusable, because playback needs a packet every 20 ms and a late packet is as bad as a lost one. The standard fix is a jitter buffer: hold arriving packets for a few milliseconds so that late ones catch up and playback stays smooth. Note what it costs — the buffer adds latency to remove jitter, and it must be sized for the worst variation, so higher jitter means a bigger buffer means more delay. That trade is also why QoS exists: give the small, jitter-sensitive voice packets priority in router queues over bulk traffic that would never notice waiting.

RTT versus one-way

Latency is usually quoted as RTT because that is what is easy to measure — ping needs no clock synchronisation between the two ends. One-way delay is roughly half, and it is what a stream of media actually experiences. Interactive protocols pay in RTTs, so budget in RTTs: any handshake, any request-then-response, any acknowledgement is a full round trip.

Anti-pattern: diagnosing "the site is slow" by upgrading the server's network link, without first establishing whether the workload is latency-bound or bandwidth-bound.
Symptom:  page takes 1.2 s, users complain
Action:   upgrade server uplink 1 Gbps → 10 Gbps
Measured: link utilization was 4% before, 4% after
Result:   1.2 s → 1.19 s

The actual profile:
  DNS + TCP + TLS setup   3 round trips  = 300 ms
  sequential resources    7 round trips  = 700 ms
  bytes on the wire       2 MB @ 1 Gbps  =  16 ms   ← the only part upgraded

Why it fails: 16 ms of that page load was bandwidth. The remaining 1,000 ms was round trips, and round trips are set by distance and protocol design, not capacity. The two conditions need opposite fixes — a bandwidth-bound workload wants more lanes, a latency-bound workload wants fewer round trips and a shorter road (connection reuse, multiplexing, TLS 1.3, an edge cache). Measure link utilization first: a saturated link is a bandwidth problem, an idle link with a slow page is a latency problem, and only one of them is for sale.

Anti-pattern: treating "high bandwidth" as a synonym for "low latency" when specifying a link — the satellite trap.
Link A:  25 Mbps,  20 ms RTT     Link B:  200 Mbps, 600 ms RTT
"B is 8× faster"  →  false for every interactive workload
  SSH keystroke echo:      A 20 ms      B 600 ms   (unusable)
  Video call round trip:   A fine       B fine as a monologue only
  40 GB download:          A 3.6 hours  B 27 minutes

Why it fails: bandwidth and latency are independent axes, and "fast" names neither of them. A geostationary satellite hop is ~35,800 km each way — the propagation delay is a consequence of orbital geometry, and no capacity upgrade touches it. Specify both numbers, always, and state which one the workload depends on.

Test Yourself

A satellite plan offers 200 Mbps with a 600 ms RTT. Which workload does it serve well, and why?

Two links both average 40 ms latency. Link A varies by 2 ms, link B by 35 ms. Which is worse for a video call, and why doesn't the equal average rescue it?

A 1 Gbps link with a 200 ms RTT is measured at 2.6 Mbps, with no packet loss and an idle path. What would you check first, and what would adding more bandwidth do?