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 に設定してやる必要がある。
- レジストリエディタで
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
を開く。 - メニューから [編集]→[新規]→[DWORD 値] を選ぶ。
- "New Value #1" みたいな名前で値が作られるので、名前を
TcpWindowSize
に変える。 - ダブルクリックすると [DWORD 値の編集] ダイアログが表示される。[ベース] で [16 進] を選んでから [値のデータ] に
FFFF
と入力する (または、[ベース] で [10 進] を選んでから、[値のデータ] に65535
と入力する)。
[2005-04-25 追記] 上記の設定値について、「64K だから、65536 に設定すればいい」と書いているページがいくつかあるが、これは (たぶん) 間違い。Microsoft サポート情報 120642 によれば、TcpWindowSize の設定値は 0〜65535 (0xFFFF) の範囲でなければならない。
詳細
このレジストリ項目については、下記のサポート情報で説明されている。
- 224829 - Windows 2000 および Windows Server 2003 の TCP 機能について
- 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" で検索すれば、記事がいろいろひっかかる。