Calculate the bandwidth-delay product, the TCP window size a path needs to fill it, and the throughput packet loss leaves you, using the Mathis equation.
Round-trip times for common network paths. Measure your own with ping or mtr — these are starting points, not substitutes.
| Path | Typical RTT |
|---|---|
| Same data centre | 0.5 ms |
| Same region (under 100 km) | 5 ms |
| Cross-country | 50 ms |
| Transatlantic | 80 ms |
| Transpacific | 150 ms |
| Geostationary satellite | 600 ms |
The 16-bit TCP window field stops at 65,535 bytes. Anything larger needs window scaling (RFC 7323), which every current operating system negotiates by default.
| Window | Bytes |
|---|---|
| 16 KiB | 16,384 bytes |
| 64 KiB (default) | 65,535 bytes |
| 128 KiB | 131,072 bytes |
| 256 KiB | 262,144 bytes |
| 1 MiB | 1,048,576 bytes |
| 16 MiB | 16,777,216 bytes |
The loss-limited ceiling uses the Mathis equation, which RFC 3649 states for loss rates up to 1%. MSS defaults to 1460 bytes, which is a 1500-byte Ethernet MTU less the IPv4 and TCP headers — if your path is tunnelled, size it with the MTU calculator
This models a single TCP stream in congestion avoidance. Parallel streams, hardware offload, middleboxes and application behaviour all move the real figure; measure before committing to a change.
You might also find these calculators useful
Calculate network latency: propagation, transmission, and processing delays
See what your packet loss does to throughput, calls, video and games
Effective MTU and TCP MSS from real protocol overhead
How much internet speed you need, and how long a transfer takes
The bandwidth-delay product is how much data a path holds in flight at any instant, and therefore the smallest TCP window that can keep the link busy. Give it a bandwidth and a round-trip time and this calculator returns the BDP, the window you need, and the throughput a single TCP stream will actually reach once window size and packet loss are taken into account.
BDP is bandwidth multiplied by round-trip time. A 1 Gbps link with an 80 ms RTT holds 10 MB in flight, so a sender using the default 64 KiB window can have only 64 KiB outstanding before it must stop and wait for an acknowledgement — reaching about 6.5 Mbps on a gigabit circuit. That is the single most common reason a fast link feels slow over distance, and it is a configuration problem rather than a capacity one. TCP throughput is then the smallest of three ceilings: the link rate, the window divided by the RTT, and the loss-limited rate given by the Mathis equation.
Throughput
Work out the real per-stream throughput for transcontinental backup and database replication before scheduling a window.
Estimate transfer time from a realistic TCP ceiling rather than from the circuit rate on the invoice.
Derive the receive-buffer value to set, instead of copying a number from an unrelated tuning guide.
Tunnels reduce MSS and often add loss. Both ceilings move, and this shows by how much.
The window must be at least the BDP or the sender stalls waiting for acknowledgements. Below that, adding bandwidth changes nothing.
If a path is window-limited or loss-limited, a faster circuit buys no throughput at all. The calculator says which of the three ceilings is binding.
A single TCP stream over a long path rarely reaches the circuit rate. Knowing the real ceiling in advance decides whether you need parallel streams or a different transport.
High RTT and packet loss both slow a transfer, and the fixes are opposite. The loss-limited and window-limited ceilings are shown separately so you can see which one you are hitting.
Multiply the bandwidth by the round-trip time, in consistent units. For bytes, divide the bandwidth in bits per second by 8, then multiply by the RTT in seconds: a 100 Mbps link with a 50 ms RTT gives 100,000,000 ÷ 8 × 0.05 = 625,000 bytes, or about 610 KiB. That is the amount of data in flight on the path, and the minimum window a single TCP stream needs to keep the link busy.
It is the same quantity as the bandwidth-delay product — bandwidth multiplied by a time, usually the round-trip time. The result is an amount of data, not a rate, which is why it is measured in bytes or bits rather than bits per second. It is sometimes called the pipe capacity, because it is literally how much the pipe holds.
Bandwidth is how much data the path can carry per second; latency is how long one packet takes to cross it. They are independent: a satellite link can have high bandwidth and high latency at the same time. TCP is affected by both together, because it must pause after each window until an acknowledgement returns — which is exactly what the bandwidth-delay product measures.
At least the bandwidth-delay product. Below that the sender runs out of permitted unacknowledged data and idles until an acknowledgement arrives, so throughput becomes window ÷ RTT regardless of the link speed. Above the BDP there is no further gain, only memory used. On modern operating systems the receive buffer is auto-tuned and usually needs no manual setting; the number matters when you are raising a hard maximum or sizing a middlebox.
One of three ceilings is binding. Either the window is smaller than the bandwidth-delay product, so the sender stalls between acknowledgements; or packet loss is triggering congestion control, which caps throughput at roughly MSS ÷ RTT × 1.2247 ÷ √loss; or the link really is the limit. This calculator shows all three and names which one is binding.
By roughly the square root of the loss rate — the Mathis equation gives throughput ≤ MSS ÷ RTT × 1.2247 ÷ √p. On a 1 Gbps link with an 80 ms RTT, 0.01% loss caps a single stream near 18 Mbps, which is under 2% of the circuit. RFC 3649 states this response function for loss rates up to 1%; above that, retransmission timeouts dominate and the figure becomes an indication rather than a prediction.
The TCP header carries the window in a 16-bit field, so it cannot express more than 65,535 bytes. Window scaling, defined in RFC 7323 — which obsoleted RFC 1323 in 2014 — adds a shift factor negotiated during the handshake, allowing windows up to about 1 GiB. It is enabled by default on every current operating system, but it is negotiated at connection setup, so a middlebox that strips the option silently caps the whole connection at 64 KiB.
Ping the destination itself, not the first hop or the default gateway, and take a median over several samples rather than one. Use mtr or pathping to see where the delay accumulates. Measure under normal load: a path measured while idle understates the RTT that TCP actually experiences when queues are filling.