Hebikuzure's Tech Memo

2013年1月12日

Windows の TCP ウィンドウ スケーリング ヒューリスティック

Filed under: Windows Info — hebikuzure @ 10:56 午後

Hotfix improves TCP window scaling in Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2
http://support.microsoft.com/kb/2780879/en-us


興味深いマイクロソフト サポート技術情報を見つけたので紹介します。

TCP プロトコルではコネクションを確立するために 3 Way ハンドシェイク (SYN –> SYN ACK –> ACK) を行います。クライアントからの SYN にサーバーが応答できなかった場合、クライアントは SYN パケットを再送して再接続を試みますが、Windows 7 以前のバージョンの実装では 2 回目の SYN  再送でサーバーと接続できた場合、このコネクションではウィンドウ スケーリングが無効になります。この動作と、この動作を変更できる修正プログラム (hotfix) について説明しているのが、サポート技術情報 2780879 です。

ウィンドウ スケーリングとは RFC 1323 で定義されている TCP の広帯域ネットワークへの最適化手法で、元々の TCP で設定できるウィンドウ サイズ (送信先からの応答なしに連続して送信できるサイズ) の最大値である65,535 バイトを、1 ギガバイトまで拡張できる方法です。

参考
Windows 2000 および Windows Server 2003 の TCP 機能について
http://support.microsoft.com/kb/224829/JA

なお、Windows Vista / Windows Server 2003 移行のバージョンでは、ウィンドウ サイズは自動調整されるので、上記サポート技術情報に記載されている TCPWindowSize レジストリ値は利用されません。(TCP 受信ウィンドウ自動チューニング http://technet.microsoft.com/ja-jp/magazine/2007.01.cableguy.aspx)

このウィンドウ スケーリングの通知が SYN パケット内で設定されているのですが、上記のように SYN パケットの再送が2回行われると、ウィンドウ スケーリングは無効になり、TCP ウィンドウの最大サイズは 65,535 バイトに制限されます。

この動作を緩和し、より多くのネットワーク環境でウィンドウ スケーリングが機能するよう動作を変更するのが、サポート技術情報 2780879 で提供されているhotfix です。この hotfix を適用すると、netsh コマンドにサブ コマンドが追加され、SYN パケット再送時のウィンドウ スケーリングの動作を指定できます。

  • netsh int tcp set heuristics enabled : SYN パケット再送時のウィンドウ スケーリングを有効にします
  • netsh int tcp set heuristics disabled : SYN パケット再送時のウィンドウ スケーリングを無効にします (既定の動作)

さて、このサポート技術情報と hotfix は対象が「Windows Vista, Windows Server 2008, Windows 7, or Windows Server 2008 R2」となっているので、Windows 8 / Windows Server 2012 ではどうなっているのかと思って確認したら、これらの新しい Windows では、既定で上記のコマンドが有効になっており、この機能の事を「ウィンドウ スケーリング ヒューリスティック」と呼んでいました。つまりこの hotfix は Windows 8 / Windows Server 2012 で搭載された TCP の新機能のバックポートだったのです。

この手のバックポートは他にもありそうですし、これからもちょこちょこ出てくるかもしれませんね。

WordPress.com で無料サイトやブログを作成.