Size the TCP receive window for a given bandwidth and RTT, and find the window scale factor it needs.
A sender may have at most one window of unacknowledged data outstanding, so the window has to cover everything the pipe holds for one round trip. The 16-bit window field stops at 65,535 bytes, so anything larger needs the RFC 7323 window scale option, which multiplies the advertised value by 2^shift. On any long fat pipe the window, not the link, sets the ceiling: a 64 KB window over 40 ms RTT tops out near 13 Mbit/s no matter how much bandwidth you bought.
TCP Window Size
window = bandwidth × RTT ÷ 8, and the scale factor is ceil(log2(window ÷ 65535)).
Throughput ceiling
throughput ceiling = window ÷ RTT
window = bandwidth × RTT ÷ 8, and the scale factor is ceil(log2(window ÷ 65535)). A sender may have at most one window of unacknowledged data outstanding, so the window has to cover everything the pipe holds for one round trip. The 16-bit window field stops at 65,535 bytes, so anything larger needs the RFC 7323 window scale option, which multiplies the advertised value by 2^shift.
On any long fat pipe the window, not the link, sets the ceiling: a 64 KB window over 40 ms RTT tops out near 13 Mbit/s no matter how much bandwidth you bought.
This calculator takes 3 inputs: Link bandwidth, Round-trip time, Maximum segment size. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.
Because throughput is capped at window ÷ RTT. If the receive window or the socket buffer is small, a single TCP stream cannot fill the link regardless of its capacity — the fix is window scaling and larger buffers, not more bandwidth.