Windows 2000 で Windows Update するとネットが遅くなる現象

Windows 2000 に対して、Windows Update で MS05-019 (KB893066) をあてると、通信スループットが低下する現象が見つかっている。場合によっては 25% くらいになってしまうらしい。
原因と回避策を調べようとすると、意外と情報が散らばっててめんどくさい。

TCP/IP脆弱性により、リモートでコードが実行され、サービス拒否が起こる (893066) (MS05-019)
http://www.microsoft.com/japan/technet/security/bulletin/MS05-019.mspx
890345 - Security update 893066 returns the default size of the TCP receive window in Windows 2000 to the pre-SP3 default size of 17,520 bytes
http://support.microsoft.com/kb/890345/en-us

[2005-04-29 追記] MS05-019 (KB893066) を Windows 2000/XP で適用すると、通信スループット低下以外にも問題が発生することがあるらしい (HTTP がまったく使えなくなるなど)。このパッチをアンインストールすることで回復する場合もあるようだが、念のため適用を遅らせた方が無難かもしれない。

原因

原因は、TCP ウィンドウサイズのデフォルト値。Windows 2000 SP2 までは 17,520 バイトだった。Windows 2000 SP3 からは 64KB に変更されているのに、この Update をあてると元に戻ってしまうらしい。

回避方法

回避策としては、Update 実行後に、レジストリをいじって、明示的に 64KB に設定してやる必要がある。

  1. レジストリエディタで HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters を開く。
  2. メニューから [編集]→[新規]→[DWORD 値] を選ぶ。
  3. "New Value #1" みたいな名前で値が作られるので、名前を TcpWindowSize に変える。
  4. ダブルクリックすると [DWORD 値の編集] ダイアログが表示される。[ベース] で [16 進] を選んでから [値のデータ] に FFFF と入力する (または、[ベース] で [10 進] を選んでから、[値のデータ] に 65535 と入力する)。

[2005-04-25 追記] 上記の設定値について、「64K だから、65536 に設定すればいい」と書いているページがいくつかあるが、これは (たぶん) 間違い。Microsoft サポート情報 120642 によれば、TcpWindowSize の設定値は 0〜65535 (0xFFFF) の範囲でなければならない。

詳細

このレジストリ項目については、下記のサポート情報で説明されている。

224829 - Windows 2000 および Windows Server 2003TCP 機能について
http://support.microsoft.com/default.aspx?scid=kb;ja;224829
120642 - Windows NT および Windows 2000 での TCP/IP および NBT の設定
http://support.microsoft.com/default.aspx?scid=kb;ja;120642

なお、Windows 2000 SP3 の場合、TcpWindowSize を設定しても場合によって効かないことがあるらしい (SP4 で修正された) ほか、ネットワークインタフェースごとに設定値を変えるとうまく効かないことがあるらしい。

810382 - TCPWindowSize の値を変更してもデフォルトの TCP ウィンドウ サイズが使用され続ける
http://support.microsoft.com/default.aspx?scid=kb;ja;810382
263088 - Windows 2000接続受け付け時に TCPWindowSize レジストリ パラメータが使用されない
http://support.microsoft.com/default.aspx?scid=kb;ja;263088

上記の手順ではデフォルトの 64KB に戻したが、環境によって適切な値は異なる。適当な値をセットするとかえってパフォーマンスが落ちる場合もあるので注意が必要だ。

169789 - 100-MB ネットワークで衝突の割合が高い
http://support.microsoft.com/default.aspx?scid=kb;ja;169789

よくわからない場合は "RWIN" で検索すれば、記事がいろいろひっかかる。