TCP Receive Window Auto-Tuning Level feature in Windows

Windows 10Windows 8.1Windows 8

Summary


In Windows Vista, Windows Server 2008, and later versions of Windows, the TCP Receive Window size is negotiated by a feature that is named TCP Receive Window Auto-Tuning Level. This feature can negotiate a defined Receive Window size for every TCP communication during the TCP Handshake.

This feature also makes full use of other features to improve network performance, including the rest of the TCP options that are defined in RFC 1323. This enables Windows-based computers to negotiate TCP Receive Window sizes that are smaller but are scaled at a defined value, depending on the configuration. This feature makes the sizes easier to handle for networking devices.

Note Unlike in versions of Windows that are earlier than Windows 10 or Windows Server 2019, the TCP Receive Window size can no longer be configured through the registry.

Review and configure TCP Receive Window Auto-Tuning Level


TCP Receive Window Auto-Tuning Level settings can be reviewed and configured in a Command Prompt window or in Windows PowerShell.

Using netsh commands

To review the current settings, run the following command at a command prompt:

netsh interface tcp show global

The output should resemble the following:


Using PowerShell

To review the current settings, run the following command in PowerShell:

Get-NetTCPSetting | Select SettingName,AutoTuningLevelLocal

The output should resemble the following:


The default status is Normal. The following table list the available values for this feature.

Value Comments
disabled Set the TCP receive window at its default value.
highlyrestricted Set the TCP receive window to grow beyond its default value, but do so very conservatively.
restricted Set the TCP receive window to grow beyond its default value, but limit such growth in some scenarios.
normal Set the TCP receive window to grow to accommodate almost all scenarios.
experimental Set the TCP receive window to grow to accommodate extreme scenarios.


You can set the values by running the following command at a command prompt:

netsh interface tcp set global autotuninglevel=<Insert value here>


Or, you can set the values by running the following command in PowerShell:

Set-NetTCPSetting -AutoTuningLevelLocal <Enter value here>

More information


TCP Receive Window size is the basis of AutoTuningLevel negotiation. TCP Receive Window size is determined by whether the application is defined for it.

Note Some applications define the amount of data that the window should use.

If the application does not define the size, a default size is determined by link speed, as follows:

  • Less than 1 megabits per second (Mbps): 8 kilobytes (KB)
  • 1 Mbps to 100 Mbps: 17 KB
  • 100 Mbps to 10 gigabits per second (Gbps): 64 KB
  • 10 Gbps or faster: 128 KB

For example, on a computer that has a 1 Gbps network adapter installed, the window size should be 64 KB.

If you use an application to capture network packets, you should see the following captures reported for different Window Auto-Tuning Level settings.


Summary of level values

The different values for AutoTuningLevel are as follows.

Level Value
Normal (default) 0x8 (scale factor of 8)
Restricted 0x4 (scale factor of 4)
Highly Restricted 0x2 (scale factor of 2)
Disabled No scale factor available
Experimental 0xE (scale factor of 14)

 

Troubleshooting

You may experience an issue in which the network device is not compliant with the TCP window scale option, as defined in RFC 1323 and, therefore, doesn't support the scale factor. In such cases, refer to this KB article or contact the Support team for your network device vendor.

References