Bandwidth Delay Product Calculator
Calculate the Bandwidth Delay Product (BDP) to optimize TCP window size, buffer allocation, and network throughput for any link configuration.
About
The Bandwidth Delay Product (BDP) quantifies the maximum volume of data in transit on a network link at any instant. It is the product of a link's BW (capacity in bits per second) and its RTT (round-trip time in seconds). A misconfigured TCP receive window smaller than the BDP forces the sender to idle while waiting for acknowledgements, throttling throughput well below the physical capacity of the pipe. This is the core bottleneck on high-latency WAN links, satellite connections, and transcontinental fibre paths. Getting this number wrong means paying for bandwidth you cannot use.
This calculator computes BDP in bits and bytes, derives the minimum TCP window size required for full utilization, and estimates actual link utilization given a user-specified window. It assumes a single TCP flow with no packet loss. Real deployments should also factor in TCP options overhead (40 bytes with timestamps), and note that the Linux kernel auto-tunes tcp_rmem up to 6 MB by default. Satellite links with RTT exceeding 600 ms routinely produce BDP values that exceed the classic 65,535-byte TCP window, requiring RFC 1323 window scaling.
Formulas
The Bandwidth Delay Product is the fundamental capacity metric for any network pipe. It represents the total data "in flight" at full utilization.
Where BDP is expressed in bits, BW is the link bandwidth in bits/s, and RTT is the round-trip time in seconds. Converting to bytes for TCP window sizing:
Link utilization with a given TCP window size W:
Where U is utilization in %, and W is the TCP receive window in bytes. If W โฅ BDPbytes, the link is fully utilized. The classic TCP window field is 16 bits, capping at 65,535 bytes. RFC 1323 window scaling extends this to 1 GB using a scale factor up to 14.
Reference Data
| Link Type | Typical Bandwidth | Typical RTT | BDP (approx.) | Min TCP Window |
|---|---|---|---|---|
| LAN (Ethernet) | 1 Gbps | 0.5 ms | 62.5 KB | 64 KB |
| Metro Ethernet | 1 Gbps | 5 ms | 625 KB | 640 KB |
| 10G LAN | 10 Gbps | 0.2 ms | 250 KB | 256 KB |
| Domestic WAN (US) | 100 Mbps | 30 ms | 375 KB | 384 KB |
| Transatlantic Fibre | 1 Gbps | 80 ms | 10 MB | 10 MB |
| Transpacific Fibre | 1 Gbps | 150 ms | 18.75 MB | 19 MB |
| GEO Satellite | 50 Mbps | 600 ms | 3.75 MB | 4 MB |
| LEO Satellite (Starlink) | 100 Mbps | 40 ms | 500 KB | 512 KB |
| DSL | 20 Mbps | 25 ms | 62.5 KB | 64 KB |
| 4G LTE | 50 Mbps | 50 ms | 312.5 KB | 320 KB |
| 5G (Sub-6 GHz) | 500 Mbps | 10 ms | 625 KB | 640 KB |
| 5G (mmWave) | 2 Gbps | 5 ms | 1.25 MB | 1.3 MB |
| T1 Leased Line | 1.544 Mbps | 40 ms | 7.72 KB | 8 KB |
| T3 / DS3 | 44.736 Mbps | 40 ms | 223.68 KB | 224 KB |
| OC-48 / STM-16 | 2.488 Gbps | 20 ms | 6.22 MB | 6.3 MB |
| 100G Data Center | 100 Gbps | 0.1 ms | 1.25 MB | 1.3 MB |
Frequently Asked Questions
ping report RTT directly.net.core.rmem_max and net.ipv4.tcp_rmem (third value) to at least the BDP in bytes. For a 12.5 MB BDP: sysctl -w net.core.rmem_max=13107200 and sysctl -w net.ipv4.tcp_rmem="4096 87380 13107200". Ensure tcp_window_scaling is 1 (enabled by default since Linux 2.6.17).