TCP通信の最大ウィンドウサイズの大きさはいくつなの?最近のOS Windows Server 2008や2012では

ローカルネットワークと異なりWANの場合は、ネットワーク帯域があってもデータ転送量のスループットが上がらない事がある。
こういったケースに登場してくるキーワードが

  • 遅延
  • TCPウィンドウサイズ

です。
Windows XPの時代では、TCPウィンドウサイズの大きさは64Kbytesと言われてきましたが、
最近のOSでも同じく64Kbytesなのでしょうか?

 

結論、最近のOSでは64Kbytes以上サポートされる!鍵はTCPウィンドウスケーリング

image
Windows 2000 および Windows Server 2003 の TCP 機能について

  • Windows 2000 Server
  • Windows Server 2003

時代は、TCP最大ウィンドウサイズは64Kbytesと言われてきました。
”最大”なので、場合によってはもっと小さいウィンドウサイズで通信することもあります。

しかし、

  • Windows Visa
  • Windows Server 2008

以降では、最大TCPウィンドウサイズは64Kbytes以上を使うことが出来ます!
ただし、送信側・受信側のOSが「ウィンドウスケーリングオプション」をサポートしている場合です。

 

TCPウィンドウサイズの64Kbytesとはどこで指定されているのでしょうか?

image
基礎から学ぶWindowsネットワーク:第15回 信頼性のある通信を実現するTCPプロトコル(2) (2/3) - @IT

実は、TCPウィンドウサイズとは、TCPパケットの中に「ウィンドウ・サイズ」を決める領域(スペース)があるのです。
このパケット内のスペース(16bit)で指定できる最大値がちょうど64Kbytesなんです。
なので、TCPウィンドウサイズは最大64Kbytesで、TCPプロトコルでしか出てこないサイズなんです。

image

TCPパケットを送り合うOSがこのサイズをパケットに入れて送るわけです。
なので、TCPパケットを送り合うOSが決めているサイズとも言えます。

 

最大TCPウィンドウサイズを更に拡張した規格、RFC1323(ウィンドウスケーリング)

image

TCPパケット内の「オプション部」の領域(スペース)を利用して、最大TCPウィンドウサイズを拡張した規格が、「ウィンドウスケーリング」と呼ばれます。
この規格をサポートしているOSの場合は、最大TCPウィンドウサイズの64Kbytesを更に超えるウィンドウサイズを使用することが出来ます。
TCPウィンドウスケーリングの規格上、最大ウィンドウサイズを1GBまで拡張できます(あくまで理論上)

ウィンドウスケーリングを利用すると、ウィンドウサイズの計算は(ウィンドウスケーリングの値をNとすると)

64Kbyte * 2 ^ N

で計算できます。
もちろん、送信側と受信側のOSでウィンドウスケーリングが使用できた場合です。

image

 

Windows Vista以降のOSでは自動でTCPウィンドウサイズが最適化チューニングされる

image
The Cable Guy: TCP 受信ウィンドウ自動チューニング

Windows Vista以降のOSでは(Windows Server 2008やWindows Server 2012でも)、規定でTCPウィンドウスケーリングは有効になっています。
また、OSが通信状態をみて自動でTCPウィンドウサイズを最適化調整されるとのことです。
詳細は見つけられませんでしたが・・・
Windows Vistaでは最大ウィンドウサイズは16MBまで許可するとのことでした。

なるほどねー。

image

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です