What is the difference between TcpWindowSize, DefaultReceiveWindow, RWIN, etc. ?
Tags: TcpWindowSize, DefaultReceiveWindow, RWIN
There are 3-4 places in the Windows Registry that affect the TCP Window. Under Windows XP/2k/2k3 they are: TcpWindowSize, GlobalMaxTcpWindowSize, DefaultReceiveWindow (in the AFD Registry branch). The TCP Window is also refered to as TCP Receive Window, or RWIN for short.
TCP packet headers negotiate one value, the size of the TCP Window. There is only one 16-bit spot in TCP packet headers reserved for this value (up to 2^16, or 65535). There is an additional scale factor in an optional header introduced by RFC 1323 (Tcp1323 Options). With this optional header addition, one can obtain TCP Window values larger than 65535 by multiplying the original unscaled 16-bit TCP Window by a scale factor that's a power of 2. So technically, TCP headers contain one unscaled TCP Window value, and an optional scale factor.
The 3-4 places in the Windows Registry all affect this one TCP Window value in TCP headers. One registry parameter sets it globally, another for each network adapter, one copy in the AFD branch of the Registry, etc. Also, in different versions of Windows, different Registry values take precedence and go out in the actual TCP packets during the TCP handshake. Even though there might be some difference in how Windows handles the different Registry parameters internally, ultimately it uses one of them and that ONE goes out to the network. Which one depends on the Windows version.
Ultimatey they all affect the same one value that exists in TCP packets.
Note: Under Windows XP SP2, the "DefaultReceiveWindow" value in the AFD branch of the Registry takes precedence over the RWIN values in the TCP branch. Under SP1, it is the other way around, the values in the TCP branch override the AFD value and go out in TCP packet headers.