The original TCP specification included a window size no larger than 64 KB. This limitation was introduced by the 16 bit header that specified window size. To achieve the recommended 1 MB window size, RFC 1323 TCP extensions must be enabled. The rest of this post is a somewhat detailed elaboration of how the RFC 1323 TCP window scaling option works.
The TCP window scaling option in RFC 1323 allows for a maximum window size of 1
GB. This particular limitation is derived from the original design of TCP that
requires a data segment's sequence number to be within the first 2^31
bytes (2
GB) of the window. If the sequence number does not appear in that area, the data
segment is considered old and discarded. To guarantee the sequence number is
always withing the first 2^31^ bytes, RFC 1323 requires the maximum window size
to be less than 2^30
bytes.
The TCP window scaling option works by including a scale factor in a SYN
packet.
This scale factor informs the receiver that the sender is willing to do window
scaling and offers a scale factor for the communication. The scale factor is used
to shift the window field before the data segment is sent. The scale factor is
limited to 14 to guarantee the window is less than the 2^31
maximum. Thus,
2^14 * (2^16 - 1) < 2^31
(or (2^16 - 1) << 14 < 2^31
, if you prefer).
All of this is just a highly involved way of saying that in order to increase window size beyond the 64 KB limit, RFC 1323 window scaling options must be enabled. Most operating systems support this option, but not all of them have it enabled by default. When in doubt, make sure and enable it.