RFC Errata
RFC 7323, "TCP Extensions for High Performance", September 2014
Source of RFC: tcpm (wit)
Errata ID: 5586
Status: Rejected
Type: Technical
Publication Format(s) : TEXT
Reported By: Marco Caspers
Date Reported: 2018-12-27
Rejected by: Mirja Kühlewind
Date Rejected: 2020-03-06
Section 2.3 says:
Since the max window is 2^S (where S is the scaling shift count) times at most 2^16 - 1 (the maximum unscaled window), the maximum window is guaranteed to be < 2^30 if S <= 14. Thus, the shift count MUST be limited to 14 (which allows windows of 2^30 = 1 GiB). If a Window Scale option is received with a shift.cnt value larger than 14, the TCP SHOULD log the error but MUST use 14 instead of the specified value. This is safe as a sender can always choose to only partially use any signaled receive window. If the receiver is scaling by a factor larger than 14 and the sender is only scaling by 14, then the receive window used by the sender will appear smaller than it is in reality.
It should say:
Since the max window is 2^S (where S is the scaling shift count) times at most 2^16 - 1 (the maximum unscaled window), the maximum window is guaranteed to be < 2^30-2^14 if S <= 14. Thus, the shift count MUST be limited to 14 (which allows windows of 2^30-2^14 ~ 1 GiB). If a Window Scale option is received with a shift.cnt value larger than 14, the TCP SHOULD log the error but MUST use 14 instead of the specified value. This is safe as a sender can always choose to only partially use any signaled receive window. If the receiver is scaling by a factor larger than 14 and the sender is only scaling by 14, then the receive window used by the sender will appear smaller than it is in reality.
Notes:
Shifting is inserting zeroes on the right hand side. Thus for S = 14 the 14 right most bits are zero and thus the calculation 2^30 is invalid for the guaranteed maximum window size.
Correct calculation formulae is (2^30 - 1) - (2^14 -1).
Which can be simplified to 2^30 - 2^14.
--VERIFIER NOTES--
That section is for illustration purposes only, and not intended as an exact value for the maximum supported window size.
It is correct that the maximum supported window size is 2^30-2^14, but the requirement is, that the window size has to remain smaller than 2^30.