What is TCP Window Scaling?

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 <acronym title="2^31">2^31^</acronym> 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 <acronym title="SYNchronization">SYN</acronym> 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.

My Bookshelf

Reading Now

Other Stuff