HomeDeveloper & IT › Bandwidth-Delay Product Calculator

Bandwidth-Delay Product Calculator

Computes the bandwidth-delay product (bits in flight) of a network path from its bandwidth and round-trip time, the TCP receive window needed to fill it, and the throughput a given window size can achieve.

When to use

You are tuning TCP buffers (net.core.rmem_max, SO_RCVBUF) for a long-fat network, or want to know why a single TCP stream is slow over a high-latency link.

Do not use when: You need transfer time for a file (use download-time) or unit conversion of data sizes (use data-storage); the model ignores packet loss and congestion control.

Formula

bdp_bits = bandwidth_mbps × 10⁶ × rtt_ms / 1000; bdp_bytes = bdp_bits / 8; max_throughput_mbps = min(bandwidth_mbps, window_kib × 1024 × 8 / (rtt_ms / 1000) / 10⁶)

A TCP sender can have at most one window of unacknowledged data per RTT, so throughput ≤ window / RTT; the window must equal the BDP to saturate the link (RFC 7323 window scaling allows windows up to 1 GiB).

Inputs

ParameterTypeUnitRequiredDescription
bandwidth_mbpsnumberMbit/syesBottleneck link rate in megabits per second (10⁶ bit/s). Range: > 0, ≤ 10000000
rtt_msnumbermsyesRound-trip latency (ping) in milliseconds. Range: > 0, ≤ 100000
window_kibnumberKiBnoOptional receive window size in KiB (1024 bytes) to compute the throughput it allows; 64 is the classic un-scaled maximum. Range: > 0, ≤ 1000000000

Outputs

OutputTypeUnitDescription
bdp_bitsnumberbitbandwidth × RTT: bits that must be in flight to keep the link busy.
bdp_bytesnumberbytesbdp_bits / 8.
bdp_kibnumberKiBbdp_bytes / 1024.
bdp_mibnumberMiBbdp_bytes / 1048576.
recommended_window_bytesnumberbytesMinimum receive/congestion window (= bdp_bytes) for one stream to reach full bandwidth.
window_scaling_requiredbooleantrue when the window exceeds 65,535 bytes, the limit without the RFC 7323 window-scale option.
max_throughput_mbpsnumberMbit/swindow_kib × 1024 × 8 / RTT, capped by the bandwidth (only when window_kib is given).
link_utilization_percentnumber%max_throughput / bandwidth × 100 (only when window_kib is given).

Example

100 Mbit/s, 50 ms: {"bandwidth_mbps":100,"rtt_ms":50}{"bdp_bits":5000000,"bdp_bytes":625000,"bdp_kib":610.35,"recommended_window_bytes":625000,"window_scaling_required":true}

100 Mbit/s, 50 ms with a 64 KiB window: {"bandwidth_mbps":100,"rtt_ms":50,"window_kib":64}{"bdp_bytes":625000,"max_throughput_mbps":10.49,"link_utilization_percent":10.49}

GET https://tttkmbb.com/api/v1/calculate/bandwidth-delay-product?bandwidth_mbps=100&rtt_ms=50

Machine access

Sources

FAQ

Why is my 1 Gbit/s transfer to another continent so slow?

With 150 ms RTT the BDP is 18.75 MB; a default 64 KiB–4 MiB window allows only 3.5–224 Mbit/s per stream. Raise the socket buffer limits or use parallel streams.

Is the RTT the ping time?

Yes, use the round-trip time reported by ping (or the TCP RTT from ss -i), not the one-way latency.

What does window scaling do?

The 16-bit TCP window field caps the window at 65,535 bytes; RFC 7323 multiplies it by up to 2¹⁴, allowing the megabyte windows that fast, long paths need.

Related calculators