26. How is the TCP Receive Window (RWIN) value calculated and why ?
For a brief history: Prior to RFC 1323, setting RWIN size was limited to a 16-bit number (16 bits allocated in the TCP headers). Therefore, the size ranged from 0 to 65,535 (or 2^16 - 1).
When RFC 1323 was drafted, to increase the size of RWIN, they did not simply add more bits. Instead, they added a "scale factor" that had to be multiplied by the 16-bit unscaled RWIN number and added this scale factor to an additional TCP Options header. This scale factor is defined as a power of 2.
Because of this standard, to get a RWIN value over 65535, you must use Window Scaling. This takes a 16-bit number, and multiplies it by the scale factor to get the full RWIN value.
TCP Optimizer not only uses a 16-bit number and a scale factor for RWIN, as per the standards, but it also optimizes the unscaled RWIN value before scaling it. This facilitates for large size unscaled RWIN values, which help optimize your connection for non-TCP Options compliant nodes. Combine this with making the unscaled (and the ful) RWIN values multiple of MSS, and you get the algorithm the program uses, optimizing RWIN on 3 different levels.
If all the above sounds like a buncha gibberish, simply trust us, it works :)