Windows 2000 and XP are built on NT technology and both are
generally better optimized for networking than Windows 9x and even NT4.
Regardless, both XP and 2000 are still configured with respect to Ethernet
rather than high-speed Internet connections, where latency plays a major role in
throughput.
Here, you will find specific information on how to optimize the
Windows 2000/XP Registry for Cable Modems, DSL, or any similar type of broadband
Internet connection.
Customizing the Windows Registry assumes some proficiency in tuning Windows
configuration files. If you don't feel comfortable editing it don't do it.
Editing the Windows 2000/XP Registry
To edit the Registry, you need to use an editor, such as Regedit.
As with
previous Windows versions, it can be accessed from the Start Menu ( START > Run
> type "Regedit" ).
Note that most of the values recommended on these pages are
not present in the Registry by default and you might have to add them manually.
Also, for most of the tweaks to take effect you must Reboot.
It is strongly recommended that you backup your Registry before editing. The
easiest way to backup your Registry is from within the Registry Editor, just
choose "Export Registry File" from the pull-down menu.
Recommended settings for Windows 2000 / XP
Windows 2000 & XP, unlike NT supports large windows as described in RFC1323 (
the 'RcvWindow' has a maximum value of 2**30 rather than 64K), and includes some
other improvements over its predecessors you can use to speed up any TCP/IP
transfers.
The best settings are listed in red, the descriptions and other
options are added to provide you with better understanding and enable you to
customize your settings.
All the following entries, unless otherwise noted should be placed in the
Windows 2000/XP Registry under the key
The value of TCP Window in the Windows 2000 Registry is DWORD, representing
number of bytes, with range from 0 to 2^30.
The recommended values (in red)
optimize TCP for any high speed Internet connection and work best in most cases,
however if you'd like to use a custom value follow these guidelines:
For best results, the TCPWindow should be a multiple of MSS (Maximum Segment
Size). MSS is generally MTU - 40, where MTU (Maximum Transmission Unit) is the
largest packet size that can be transmitted.
MTU is usually 1500 (1492 for PPPoE
connections). To determine the MTU value of your ISP, check out the Advanced
Registry Editing section of our site.
There are three places in the Windows 2000 Registry where you can add the TCP
Window parameter.
HKLM/SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
GlobalMaxTcpWindowSize="256960" (DWORD, number of bytes) Valid range is from MSS
to 2^30. Add the value as a decimal.
Note: For best results RWIN has to be a
multiple of MSS lower than 65535 times a scale factor that's a power of 2, i.e.
44 x 1460 = 64240 x 2^2 = 256960. If you choose to use a RWIN lower than 65535,
you can simply make it multiple of MSS and turn scaling off (Tcp1323Opts=0)
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
TcpWindowSize="256960" (DWORD, number of bytes) Valid range is from MSS to 2^30.
Add the value as a decimal. TcpWindowSize can also exist under
TcpipParametersInterface - if added at this location, it overrides the global
setting for this particular .
Note (10/20/00): Seems MS has found another bug in
Windows 2000, the TCPWindowSize should be configured with the global setting (GlobalMaxTcpWindowsSize)
rather than this one - Q263088
Note: For best results RWIN has to be a multiple of MSS lower than 65535 times a
scale factor that's a power of 2, i.e. 44 x 1460 = 64240 x 2^2 = 256960. If you
choose to use a RWIN lower than 65535, you can simply make it multiple of MSS
and turn scaling off (Tcp1323Opts=0)
Tcp1323Opts
Tcp1323Opts is a necessary setting in order to enable Large TCPWindow support as
described in RFC 1323. Without this parameter, the TCPWindow is limited to 64K.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Tcp1323Opts="1" (DWORD, recommended setting is 1. The possible settings are 0 -
Disable RFC 1323 options, 1 - Window scaling but no Timestamp options, 3 -
Window scaling and Time stamp options.)
Note: Tcp1323Opts="3" might help in some cases where there is increased packet
loss, however generally you'll achieve better throughput with Tcp1323Opts="1",
since Timestamps add 12 bytes to the header of each packet.
DefaultTTL
DefaultTTL determines the time in seconds and the number of hops a packet lives.
While it does not directly affect speed, a larger value increases the amount of
time it takes for a packet to be considered lost, discarded and retransmitted.
A
value that's too small can cause packets to distant servers not to reach their
destination at all.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
DefaultTTL="64" (DWORD, recommended setting is 64. Other settings that are
widely used are 128 and 32)
EnablePMTUDiscovery
When set to 1 (True), TCP attempts to discover MTU automatically over the path
to a remote host.
Setting this parameter to 0 causes MTU to default to 576 which
reduces overall performance over high speed connections. Note that this setting
is different than our Windows 9x recommendation.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
EnablePMTUDiscovery="1" (DWORD - boolean, valid settings are 0-->False and
1-->True. Many connections perform better with this entry at 1, however, if you
prefer to set your upstream to send fixed 1500 packets, you might want to use 0
instead).
When set at 1, establishing connections and initial transfer speed
might slow down a bit, however you will get better throughput if somewhere in
the path large packets need to be fragmented.
EnablePMTUBHDetect
Setting this parameter to 1 (True) enables "black hole" routers to be detected,
however it also increases the maximum number of retransmissions for a given
segment. In most cases you'd want to keep BHDetect to 0 (False).
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
EnablePMTUBHDetect="0" (DWORD - boolean, valid settings are 0-->False and
1-->True. Recommended setting is 0)
SackOpts
This parameter controls whether or not SACK (Selective Acknowledgement) support
is enabled, as specified in RFC 2018. SACK is especially important for
connections using large TCP Window sizes.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
SackOpts="1" (DWORD - boolean, recommended setting is 1. Possible settings are 0
- No Sack options or 1 - Sack Option enabled).
TcpMaxDupAcks
This parameter determines the number of duplicate ACKs that must be received for
the same sequence number of sent data before "fast retransmit" is triggered to
resend the segment that has been dropped in transit.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
TcpMaxDupAcks="2" (DWORD - range 1-3, recommended setting is 2).
Additional TCP/IP Related Parameters
The additional TCP related parameters are not necessary in most cases, and you
shouldn't expect any drastic improvements, however we added them for those of
you who like experimenting.
You might be able to gain that last bit of
performance, or customize your TCP/IP behavior even more with those. Keep in
mind you should familiarize yourself with what the parameters mean and how they
affect your connection before changing their values
MTU
Setting MTU overrides the default MTU for the network interface it is added to.
Note that if EnablePMTUDiscovery is set to 1, TCP will use the smaller value of
this local MTU and the "Discovered" MTU of the underlying network connection.
If
you'd rather use only the MTU value specified here, you'd have to disable
PMTUDiscovery, which would prevent your system from detecting the network MTU.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
MTU="1500" (DWORD, valid range is from 68 to <MTU network of>).
Windows 2000 Web Patch
According to the HTTP specs, only limited number of simultaneous connections are
allowed, while loading pages. To increase that number, you can add the following
entries to the Registry (they are not present by default):
Note: Keep in mind that although those values work fine in most cases, they
exceed the HTTP specs and therefore might cause problems with some websites. If
you experience problems, just remove the entries.
While these entries might
improve web page loading considerably, they tend to strain webservers more and
have no effect on throughput.
Increase bandwidth by tweaking QoS in Windows XP Pro
The following tweak applies only to Windows XP Professional edition.
The default system behaviour is that all 100% bandwidth is available.
However if
there is a running application that indicates to the OS it needs to send high
priority/real time data, then as long as it has the socket open, Windows XP will
restrict “best effort” traffic to 80% of the bandwidth so that high priority
traffic can be accommodated.
Basically, applications can make this request to
the operating system for QoS support using the QoS application programming
interfaces (APIs) in Windows and this only applies if a specific app is
requesting QoS.
If you'd like to change how much bandwidth is reserved for QoS (the default is
20% of the total bandwidth), do the following:
1. Make sure you're logged in as "Administrator" (not just any account with
admin privileges).
2. Navigate to START>Run and type: gpedit.msc
3. Navigate to Local Computer Policy > Administrative Templates > Network > QOS
Packet Scheduler
4. In the right window, double-click the limit reservable bandwidth setting
5. On the setting tab, check the enabled setting.
6. Where it says "Bandwidth limit %", change it to read 0 (or whatever
percentage you want to reserve for high priority QoS data)
7. Click OK, close gpedit.msc
Under START > My Computer > My Network Connections > View Network Connections,
right-click on your connection and under Properties (where it lists your
protocols), make sure QOS Packet Scheduler is enabled.
You need to reboot for changes to take effect.
Note: This tweak applies only to The Professional version of Windows XP.