Audited ·Last updated 28 Jul 2026·5 citations·Tier 2·0 uses

Bandwidth-Delay Product Calculator — Bits in Flight and TCP Window Size

Compute the bandwidth-delay product from capacity and RTT, in bits, bytes, kB and KiB — plus the TCP receive window and scale factor needed to fill it.

Bandwidth-Delay Product Calculator

The capacity of the slowest hop on the path, not the speed of your own link. If any hop between the endpoints is narrower, that is the number that matters.
Rate unit
Full round trip, not one-way — the figure ping reports. Use the RTT under load if you can get it; queueing inflates it and the inflated value is what TCP actually experiences.
ms
In bytes, so there is no prefix ambiguity. 65,535 is the largest window advertisable without the window scale option; the maximum with scaling is 1 GiB.
bytes
Bandwidth-delay product
100,000,000
Capacity in bits per second multiplied by round-trip time in seconds — the number of bits the path holds in flight at once.
BDP in bytes
12,500,000 B
BDP in kB (decimal)
12,500 kB
BDP in KiB (binary)
12,207.0313 KiB
Single-flow throughput ceiling
5.2428 Mbps
Share of the link one flow can use
0.52
Window scale shift needed
8
Verdict
Window-limited: 12500000 bytes are in flight on this path, but a 65535-byte receive window lets one TCP flow reach only 5.2428 Mbps — 0.52% of the link. Raise the receive window to at least 12500000 bytes, which needs window scaling with a shift of 8.

Background.

The bandwidth-delay product is the amount of data a network path holds in flight at any instant — bits that have left the sender and not yet been acknowledged. RFC 6349 defines it in one sentence: the product of a data link's capacity in bits per second and its end-to-end delay in seconds. Multiply, and you have the number of bits the pipe contains. It matters because TCP will only ever have one receive window of unacknowledged data outstanding, so if the window is smaller than the BDP, the sender stalls waiting for acknowledgements and the link sits idle no matter how fast it is.

That is the whole explanation for the most common complaint in networking: a fast link that feels slow over distance. The default here shows it in one line. A 1 Gbps path with a 100 ms round trip holds 100,000,000 bits — 12.5 million bytes — in flight. A TCP receiver that has not negotiated window scaling can advertise at most 65,535 bytes, because the header's Window field is 16 bits wide. Divide that window by the round trip and a single connection tops out at 5.24 Mbps: about half of one percent of a gigabit link. Nothing is broken, nothing is congested, and the file still crawls.

The fix is RFC 7323's window scale option, which multiplies the advertised window by a power of two agreed at connection setup. This calculator reports the shift count needed to cover the BDP — 8 at the defaults, meaning the window must be scaled by 256. The option's exponent is capped at 14, giving a maximum window of 1 GiB, so on extreme paths (400 Gbps across an ocean, say) even a fully scaled single flow cannot fill the pipe and parallel streams become the only answer. The calculator saturates the shift at 14 and says so rather than reporting an impossible value.

Units are given four ways on purpose, because this is where the arithmetic usually goes wrong. Link rates are always bits per second with decimal prefixes: a megabit per second is 10⁶ bit/s. Window sizes are always bytes. Dividing bits by eight is therefore mandatory, not optional. And once you are in bytes, kB and KiB diverge — 1,000 versus 1,024 — which is why the BDP appears here in both. RFC 6349 quotes its T3 example's required window as about 138 KB in the decimal sense; the same figure is 134.9 KiB in the binary sense your operating system's buffer settings probably use.

One scope note. The RTT you enter should be the one TCP actually experiences, which is not always the idle ping figure. Queueing at a congested hop inflates round-trip time, sometimes by an order of magnitude, and an inflated RTT inflates the BDP proportionally. Likewise, the bandwidth to use is the bottleneck — the narrowest hop on the path — not the capacity of your own access link. And the ceiling this page reports is a window-limited ceiling only: it assumes no loss. Real throughput on a lossy long path is usually far lower, because congestion control shrinks the effective window on every loss event, which is exactly why loss hurts long paths so much more than short ones.

What is bandwidth-delay product calculator?

The bandwidth-delay product is capacity multiplied by delay, and the result is a quantity of data rather than a rate. RFC 6349 gives the formula as BDP in bits equals round-trip time in seconds times bottleneck bandwidth in bits per second. Physically, it is the volume of the pipe: how many bits are simultaneously somewhere on the wire, in a queue, or in a buffer between the two endpoints. Its practical importance comes entirely from how sliding-window protocols work. TCP allows a sender to have at most one receive window's worth of unacknowledged data outstanding at any moment. If that window is smaller than the BDP, the sender transmits a window, stops, and waits a full round trip for the first acknowledgement before it can send more — so its maximum rate is window divided by round-trip time, regardless of how much capacity is available. Networks where the BDP is large relative to a default window are called long fat networks, and they are common: any intercontinental path, any satellite link, and any high-speed link over more than a few hundred kilometres qualifies. The historical constraint is the TCP header itself, whose Window field is only 16 bits wide and therefore cannot express a window above 65,535 bytes. RFC 7323's window scale option removes that ceiling by agreeing a left-shift at connection setup, up to a maximum exponent of 14, which allows windows up to 1 GiB.

How to use this calculator.

  1. Enter the bottleneck bandwidth — the capacity of the slowest hop between the two endpoints, not your own link speed. If a 100 Mbps hop sits in the middle of a gigabit path, enter 100 Mbps.
  2. Enter the round-trip time in milliseconds, as ping reports it. Prefer the RTT measured under load: queueing inflates delay, and the inflated figure is the one TCP experiences.
  3. Enter the TCP receive window in bytes. Leave it at 65,535 to see what an unscaled connection can do; raise it to your configured buffer size to see what your actual system will reach.
  4. Read the BDP in bytes — that is the minimum window a single flow needs to keep the path full — and compare it to the window you entered.
  5. If the verdict says window-limited, use the reported window scale shift. A shift of 8 means the advertised window is multiplied by 256, so 65,535 becomes just under 16.8 MB.
  6. If the shift reads 14, the path's BDP exceeds the largest window TCP can express. No single connection can fill it; use parallel streams or a protocol that is not window-bound.

The formula.

BDP(bits) = BB × RTT W_min = BDP ⁄ 8 T_max = min(BB, W × 8 ⁄ RTT)

Start by putting both terms in base units. Capacity converts to bits per second with decimal factors — Kbps × 10³, Mbps × 10⁶, Gbps × 10⁹ — and round-trip time converts from milliseconds to seconds by dividing by 1,000. Multiply them and the result is bits, because bits-per-second times seconds cancels the seconds. That is the BDP, exactly as RFC 6349 writes it.

Divide by eight for bytes, because every window and buffer size in every operating system is in bytes while every link rate is in bits. This single division is the most common error in the whole topic, and it is a factor of eight in either direction. From bytes, divide by 1,000 for decimal kilobytes or by 1,024 for binary kibibytes; both are shown because the sources disagree — RFC 6349 quotes its own example in decimal KB, while socket buffer settings are conventionally binary.

The throughput ceiling comes from the sliding window. A sender may have at most one window of unacknowledged bytes outstanding, so in the worst case it sends a window, then waits one full round trip for the acknowledgement that frees it. Its long-run rate is therefore window ÷ RTT. Converted to bits per second that is window × 8 ÷ RTT. This calculator caps that at the link rate, because a window larger than the BDP does not make the link faster — it simply stops being the binding constraint — and reporting utilisation above 100% would be meaningless.

The window scale shift is found by iteration rather than by a logarithm, so the answer is an exact integer. It is the smallest exponent s from 0 to 14 for which 65,535 × 2ˢ is at least the BDP in bytes. Sixty-five thousand five hundred and thirty-five is not arbitrary: RFC 7323 states that the TCP header uses a 16-bit field to report the receive window, so the largest window that can be used is 2¹⁶, and the largest value the field can actually hold is 65,535. The exponent ceiling of 14 is also stated in that RFC, which caps the maximum permissible receive window at 1 GiB.

What this arithmetic does not model. It assumes a lossless path. Real TCP congestion control halves or otherwise reduces its effective window on loss, and on a long path each reduction costs a full round trip to recover from, so measured throughput on a lossy long fat network falls far below the window-limited ceiling — that sensitivity is the reason loss on intercontinental paths is so much more damaging than the same loss rate across a data centre. It also ignores the sender's own send buffer, which must be at least as large as the receive window for the window to be usable, and it assumes a single flow: n parallel connections each get their own window, which is precisely why download accelerators and parallel-stream file transfer tools exist.

A worked example.

Example

A 1 Gbps path with a 100 ms round trip — roughly a transatlantic link — and a TCP receiver that has not negotiated window scaling. Capacity is 1,000 Mbps = 1 × 10⁹ bit/s, and the round trip is 0.1 seconds. The bandwidth-delay product is 10⁹ × 0.1 = 100,000,000 bits, which is 12,500,000 bytes, which is 12,500 kB decimal or 12,207.03125 KiB binary. That is how much data is in flight when the pipe is full. Now the window: 65,535 bytes is the largest an unscaled TCP receiver can advertise, because the header's Window field is only 16 bits wide. Multiply by 8 and you get 524,280 bits per round trip; divide by 0.1 seconds and one connection can sustain 5,242,800 bit/s, or 5.2428 Mbps. Against a 1,000 Mbps link that is 0.52428% utilisation. A gigabit path, an idle link, no congestion and no packet loss — and a single TCP transfer runs at five megabits, because it spends 99.5% of every round trip waiting for an acknowledgement. To fix it the receiver must advertise at least 12,500,000 bytes, and since that is 191 times the unscaled maximum, window scaling must be negotiated: the smallest shift that reaches it is 8, because 65,535 × 2⁷ = 8,388,480 falls short while 65,535 × 2⁸ = 16,776,960 clears it. With that shift in place the link, not the window, becomes the constraint. As a cross-check, RFC 6349's own worked example uses a 44.21 Mbps T3 at 25 ms and states a BDP of about 1,105,000 bits and a minimum window of about 138 KB; this calculator returns 1,105,250 bits and 138.15625 kB for those inputs, and a required shift of 2.

rtt Ms100
bandwidth1,000
tcp Window Bytes65,535
bandwidth UnitMbps

Frequently asked questions.

Why is my transfer slow on a fast link over a long distance?
Almost always because the TCP receive window is smaller than the bandwidth-delay product. A sender can have only one window of unacknowledged data outstanding, so its ceiling is window divided by round-trip time — the link rate never enters the equation until the window is big enough to reach it. On a 1 Gbps path at 100 ms, an unscaled 65,535-byte window caps a single flow at 5.24 Mbps, or half a percent of the link. Enter your real numbers above: if the verdict says window-limited, no amount of extra bandwidth will help until the window grows.
What TCP window size do I need to fill my link?
At least the bandwidth-delay product in bytes, which is what this calculator's second output gives you. Anything smaller leaves the sender idle for part of every round trip; anything larger simply means the link becomes the constraint instead. In practice, set the receive buffer somewhat above the BDP to absorb RTT variation, and remember the sender's send buffer must be at least as large as the receive window for the window to be usable at all. On modern systems both are usually auto-tuned, and the useful thing this figure tells you is whether the auto-tuning ceiling on your machine is high enough.
What is window scaling and when do I need it?
The TCP header's Window field is 16 bits, so a receiver cannot advertise more than 65,535 bytes in it. RFC 7323 adds a window scale option, negotiated in the SYN handshake, that left-shifts the advertised value by an agreed exponent — so the real window becomes the field value times two to the power of that shift. You need it whenever the BDP exceeds 65,535 bytes, which is any path faster than about 5 Mbps at 100 ms. The RFC caps the exponent at 14, for a maximum permissible window of 1 GiB. This calculator reports the smallest shift that covers your BDP, and saturates at 14 when even that is not enough.
Should I use bits or bytes for the BDP?
Both, which is why the calculator gives both. The BDP falls out of the formula in bits, because bandwidth is in bits per second — RFC 6349 states it that way. But every window and buffer setting you will actually configure is in bytes, so you divide by eight. Getting this wrong is a factor-of-eight error in either direction and is the single most common mistake in the topic. Once in bytes, note that kB and KiB differ by 2.4%: the RFC quotes about 138 KB for its T3 example using decimal thousands, while socket buffer sizes are usually thought of in binary. Both figures are shown here for that reason.
What is a long fat network?
A path whose bandwidth-delay product is large enough that default TCP settings cannot fill it — high capacity combined with high latency. Intercontinental fibre, geostationary satellite links, and any high-speed link over more than a few hundred kilometres all qualify. The defining symptom is that a single connection achieves a small fraction of the available capacity while the link shows no congestion. RFC 7323 exists specifically to make TCP work on these paths, adding both window scaling and better round-trip-time measurement.
Does a bigger window always mean faster transfers?
Only up to the bandwidth-delay product. Beyond that the link is the constraint, and this calculator caps the reported utilisation at 100% to make that explicit. Setting buffers far above the BDP wastes memory per connection and, on a congested path, can make things worse by allowing more data to pile up in intermediate queues — the bufferbloat problem, which inflates RTT and hurts every interactive flow sharing the path. Size to the BDP with a reasonable margin, not to the largest number your kernel will accept.
Why does my measured throughput fall short of the ceiling shown here?
Because this is a lossless, single-flow, window-limited ceiling and reality includes loss. TCP congestion control cuts its effective window on every loss event, and on a long path each recovery costs at least a full round trip, so throughput on a lossy long fat network falls dramatically below the window bound — a loss rate that is invisible inside a data centre can halve throughput across an ocean. Other gaps: the bottleneck may not be the hop you assumed, the RTT under load may be much higher than your idle ping, the sender's send buffer may be smaller than the receiver's window, and middleboxes sometimes strip the window scale option from the SYN, silently forcing the connection back to 65,535 bytes.

References& sources.

  1. [1]RFC 6349, 'Framework for TCP Throughput Testing' (IETF, 2011), §2. Source of the definition implemented here — 'Bandwidth-Delay Product (BDP) refers to the product of a data link's capacity (in bits per second) and its end-to-end delay (in seconds)' — the expression 'BDP (bits) = RTT (sec) x BB (bps)', and the worked example of a 44.21 Mbps T3 at 25 ms RTT giving approximately 1,105,000 bits and a minimum required receive window of about 138 KB. This calculator returns 1,105,250 bits and 138.15625 kB for those inputs.
  2. [2]RFC 7323, 'TCP Extensions for High Performance' (IETF, 2014). Source of both window constants: 'The TCP header uses a 16-bit field to report the receive window size to the sender. Therefore, the largest window that can be used is 2^16 = 64 KiB', and 'The maximum scale exponent is limited to 14 for a maximum permissible receive window size of 1 GiB (2^(14+16))'. The shift count reported by this calculator is the smallest exponent in that range covering the computed BDP.
  3. [3]RFC 9293, 'Transmission Control Protocol (TCP)' (IETF, 2022). The current TCP specification, which obsoletes RFC 793 and six other documents. Source of the header layout containing the 16-bit Window field and the Data Offset field discussed above.
  4. [4]RFC 5136, 'Defining Network Capacity' (IETF, 2008). Establishes what the bandwidth term in the BDP formula must be read as — IP-layer capacity, 'the maximum number of IP-layer bits that can be transmitted … divided by I' — and warns that 'literature often overloads the term bandwidth to refer to what we have described as capacity in this document'.
  5. [5]NIST, 'Prefixes for binary multiples'. Source of the kB versus KiB distinction the two byte outputs make explicit (kibi = 2¹⁰ = 1,024), and of the convention that for a megabit per second 'all telecommunications engineers use it to mean 10⁶ bit/s'.

In this category

Embed

Quanta Pro

Paid features are coming later.

  • All 590 calculators remain free
  • No billing is enabled
Coming soon