{"success":true,"version":"v1","request":{"tool":"get_calculator_schema","calculator_id":"bandwidth-delay-product"},"result":{"entity_type":"calculator","id":"bandwidth-delay-product","calculator_id":"bandwidth-delay-product","canonical_url":"https://tttkmbb.com/developer/bandwidth-delay-product","name":"Bandwidth-Delay Product Calculator","title":"Bandwidth-Delay Product Calculator – TCP Window Size and Achievable Throughput from Bandwidth and RTT","category":"developer","category_name":"Developer & IT","tool_name":"calculate_bandwidth_delay_product","featured_mcp_tool":false,"description":"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.","use_when":"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.","inputs":[{"name":"bandwidth_mbps","label":"Bandwidth","type":"number","unit":"Mbit/s","required":true,"max":10000000,"exclusive_min":0,"description":"Bottleneck link rate in megabits per second (10⁶ bit/s).","example":100},{"name":"rtt_ms","label":"Round-trip time","type":"number","unit":"ms","required":true,"max":100000,"exclusive_min":0,"description":"Round-trip latency (ping) in milliseconds.","example":50},{"name":"window_kib","label":"TCP window","type":"number","unit":"KiB","required":false,"max":1000000000,"exclusive_min":0,"description":"Optional receive window size in KiB (1024 bytes) to compute the throughput it allows; 64 is the classic un-scaled maximum.","example":64}],"outputs":[{"name":"bdp_bits","label":"BDP (bits)","type":"number","unit":"bit","decimals":0,"description":"bandwidth × RTT: bits that must be in flight to keep the link busy."},{"name":"bdp_bytes","label":"BDP (bytes)","type":"number","unit":"bytes","decimals":0,"description":"bdp_bits / 8."},{"name":"bdp_kib","label":"BDP (KiB)","type":"number","unit":"KiB","decimals":2,"description":"bdp_bytes / 1024."},{"name":"bdp_mib","label":"BDP (MiB)","type":"number","unit":"MiB","decimals":4,"description":"bdp_bytes / 1048576."},{"name":"recommended_window_bytes","label":"Recommended TCP window","type":"number","unit":"bytes","decimals":0,"description":"Minimum receive/congestion window (= bdp_bytes) for one stream to reach full bandwidth."},{"name":"window_scaling_required","label":"Window scaling needed","type":"boolean","decimals":4,"description":"true when the window exceeds 65,535 bytes, the limit without the RFC 7323 window-scale option."},{"name":"max_throughput_mbps","label":"Throughput with given window","type":"number","unit":"Mbit/s","decimals":2,"description":"window_kib × 1024 × 8 / RTT, capped by the bandwidth (only when window_kib is given)."},{"name":"link_utilization_percent","label":"Link utilisation","type":"number","unit":"%","decimals":2,"description":"max_throughput / bandwidth × 100 (only when window_kib is given)."}],"input_schema":{"type":"object","properties":{"bandwidth_mbps":{"description":"Bottleneck link rate in megabits per second (10⁶ bit/s). Unit: Mbit/s.","type":"number","maximum":10000000,"exclusiveMinimum":0,"examples":[100],"x-unit":"Mbit/s"},"rtt_ms":{"description":"Round-trip latency (ping) in milliseconds. Unit: ms.","type":"number","maximum":100000,"exclusiveMinimum":0,"examples":[50],"x-unit":"ms"},"window_kib":{"description":"Optional receive window size in KiB (1024 bytes) to compute the throughput it allows; 64 is the classic un-scaled maximum. Unit: KiB.","type":"number","maximum":1000000000,"exclusiveMinimum":0,"examples":[64],"x-unit":"KiB"}},"additionalProperties":false,"required":["bandwidth_mbps","rtt_ms"]},"output_schema":{"type":"object","properties":{"bdp_bits":{"description":"bandwidth × RTT: bits that must be in flight to keep the link busy. Unit: bit.","type":"number","x-unit":"bit"},"bdp_bytes":{"description":"bdp_bits / 8. Unit: bytes.","type":"number","x-unit":"bytes"},"bdp_kib":{"description":"bdp_bytes / 1024. Unit: KiB.","type":"number","x-unit":"KiB"},"bdp_mib":{"description":"bdp_bytes / 1048576. Unit: MiB.","type":"number","x-unit":"MiB"},"recommended_window_bytes":{"description":"Minimum receive/congestion window (= bdp_bytes) for one stream to reach full bandwidth. Unit: bytes.","type":"number","x-unit":"bytes"},"window_scaling_required":{"description":"true when the window exceeds 65,535 bytes, the limit without the RFC 7323 window-scale option.","type":"boolean"},"max_throughput_mbps":{"description":"window_kib × 1024 × 8 / RTT, capped by the bandwidth (only when window_kib is given). Unit: Mbit/s.","type":"number","x-unit":"Mbit/s"},"link_utilization_percent":{"description":"max_throughput / bandwidth × 100 (only when window_kib is given). Unit: %.","type":"number","x-unit":"%"}}},"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⁶)","method":"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).","sources":[{"name":"Bandwidth-delay product (Wikipedia)","url":"https://en.wikipedia.org/wiki/Bandwidth-delay_product","type":"reference","retrieved_at":"2026-09-24"},{"name":"RFC 7323 – TCP Extensions for High Performance (window scaling)","url":"https://www.rfc-editor.org/rfc/rfc7323","type":"standard","retrieved_at":"2026-09-24"}],"freshness":{"type":"static","max_age_seconds":null,"note":"Deterministic formula with fixed constants; results never go stale. Inputs supplied by the caller determine the output."},"examples":[{"name":"100 Mbit/s, 50 ms","inputs":{"bandwidth_mbps":100,"rtt_ms":50},"expected":{"bdp_bits":5000000,"bdp_bytes":625000,"bdp_kib":610.35,"recommended_window_bytes":625000,"window_scaling_required":true},"url":"https://tttkmbb.com/api/v1/calculate/bandwidth-delay-product?bandwidth_mbps=100&rtt_ms=50"},{"name":"100 Mbit/s, 50 ms with a 64 KiB window","inputs":{"bandwidth_mbps":100,"rtt_ms":50,"window_kib":64},"expected":{"bdp_bytes":625000,"max_throughput_mbps":10.49,"link_utilization_percent":10.49},"url":"https://tttkmbb.com/api/v1/calculate/bandwidth-delay-product?bandwidth_mbps=100&rtt_ms=50&window_kib=64"}],"faq":[{"q":"Why is my 1 Gbit/s transfer to another continent so slow?","a":"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."},{"q":"Is the RTT the ping time?","a":"Yes, use the round-trip time reported by ping (or the TCP RTT from ss -i), not the one-way latency."},{"q":"What does window scaling do?","a":"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."}],"tags":["bandwidth delay product","tcp window size","bdp calculator","tcp throughput","rtt","buffer size"],"related":[{"calculator_id":"download-time","reason":"Time to move a file at a given throughput."},{"calculator_id":"data-storage","reason":"Convert bytes, KiB and MiB."},{"calculator_id":"subnet-calculator","reason":"Other network-engineering arithmetic."}],"links":{"html":"https://tttkmbb.com/developer/bandwidth-delay-product","markdown":"https://tttkmbb.com/developer/bandwidth-delay-product.md","json":"https://tttkmbb.com/developer/bandwidth-delay-product.json","api":"https://tttkmbb.com/api/v1/calculate/bandwidth-delay-product","schema":"https://tttkmbb.com/api/v1/calculators/bandwidth-delay-product","openapi":"https://tttkmbb.com/openapi.json","mcp":"https://tttkmbb.com/mcp"},"version":"v1","updated_at":"2026-09-24"},"timestamp":"2026-09-24T03:44:13Z"}