RFC Errata
RFC 7323, "TCP Extensions for High Performance", September 2014
Source of RFC: tcpm (wit)
Errata ID: 5585
Status: Held for Document Update
Type: Editorial
Publication Format(s) : TEXT
Reported By: Marco Caspers
Date Reported: 2018-12-27
Held for Document Update by: Mirja Kühlewind
Date Held: 2019-03-18
Section 2.2 says:
2.2. Window Scale Option The three-byte Window Scale option MAY be sent in a <SYN> segment by a TCP. It has two purposes: (1) indicate that the TCP is prepared to both send and receive window scaling, and (2) communicate the exponent of a scale factor to be applied to its receive window. Thus, a TCP that is prepared to scale windows SHOULD send the option, even if its own scale factor is 1 and the exponent 0. The scale factor is limited to a power of two and encoded logarithmically, so it may be implemented by binary shift operations. The maximum scale exponent is limited to 14 for a maximum permissible receive window size of 1 GiB (2^(14+16)).
It should say:
2.2. Window Scale Option The three-byte Window Scale option MAY be sent in a <SYN> segment by a TCP. It has two purposes: (1) indicate that the TCP is prepared to both send and receive window scaling, and (2) communicate the exponent of a scale factor to be applied to its receive window. Thus, a TCP that is prepared to scale windows SHOULD send the option, even if its own scale factor is 1 and the exponent 0. The scale factor is limited to a power of two and encoded logarithmically, so it may be implemented by binary shift operations. The maximum scale exponent is limited to 14 for a maximum permissible receive window size of approximately 1 GiB ((2^30-1) - (2^14-1)).
Notes:
Left shift inserts zero's on the right hand side so the maximum window size is actually 16KiB shy of 1 GiB. The exact calculation would be ((2^30-1) - (2^14-1)). As it is stated as "approximately 1 GiB" the text is not incorrect but it would be good to provide the complete calculation in a document update to avoid invalid implementations.