TCP Throughput = Window Size / RTT

Your bandwidth doesn't determine your speed — your window size and round-trip time do. Drag the sliders to see why.

64 KB / 167 ms = 3.07 Mbps
167 ms
64 KB

What's happening on the wire

Data packets →
← ACK packets
Idle (waiting for ACK)

Current: Guatemala → Germany

RTT~167 ms
Window64 KB
Pipe BW1 Gbps
3.07 Mbps

Alternative: Guatemala → US-East

RTT~70 ms
Window64 KB
Pipe BW1 Gbps
7.31 Mbps

The key insight

It doesn't matter if your pipe is 1 Gbps — TCP must wait for each ACK before sending the next window of data. At 167 ms RTT with a 64 KB window, your sender is idle 99.7% of the time, waiting for permission to send more. Reducing RTT (closer server) or increasing the window size (TCP tuning) directly increases throughput.

How TCP windowing works

TCP uses a sliding window to control how much data can be "in flight" (sent but not yet acknowledged). The sender transmits up to window_size bytes, then stops and waits until it receives an ACK from the receiver.

Each ACK takes one full RTT (round-trip time) to arrive. So in every RTT interval, you can send at most one window's worth of data. That gives us: throughput = window_size / RTT.

This is the bandwidth-delay product problem. To fully utilize a 1 Gbps link at 167 ms RTT, you'd need a window of ~20.9 MB — far beyond the typical 64 KB default. Without tuning, you'll never come close to your link's capacity.