ローカルネットワークと異なりWANの場合は、ネットワーク帯域があってもデータ転送量のスループットが上がらない事がある。
こういったケースに登場してくるキーワードが
- 遅延
- TCPウィンドウサイズ
です。
Windows XPの時代では、TCPウィンドウサイズの大きさは64Kbytesと言われてきましたが、
最近のOSでも同じく64Kbytesなのでしょうか?
レジュメ
結論、最近のOSでは64Kbytes以上サポートされる!鍵はTCPウィンドウスケーリング
Windows 2000 および Windows Server 2003 の TCP 機能について
- Windows 2000 Server
- Windows Server 2003
時代は、TCP最大ウィンドウサイズは64Kbytesと言われてきました。
”最大”なので、場合によってはもっと小さいウィンドウサイズで通信することもあります。
しかし、
- Windows Visa
- Windows Server 2008
以降では、最大TCPウィンドウサイズは64Kbytes以上を使うことが出来ます!
ただし、送信側・受信側のOSが「ウィンドウスケーリングオプション」をサポートしている場合です。
TCPウィンドウサイズの64Kbytesとはどこで指定されているのでしょうか?
基礎から学ぶWindowsネットワーク:第15回 信頼性のある通信を実現するTCPプロトコル(2) (2/3) - @IT
実は、TCPウィンドウサイズとは、TCPパケットの中に「ウィンドウ・サイズ」を決める領域(スペース)があるのです。
このパケット内のスペース(16bit)で指定できる最大値がちょうど64Kbytesなんです。
なので、TCPウィンドウサイズは最大64Kbytesで、TCPプロトコルでしか出てこないサイズなんです。
TCPパケットを送り合うOSがこのサイズをパケットに入れて送るわけです。
なので、TCPパケットを送り合うOSが決めているサイズとも言えます。
最大TCPウィンドウサイズを更に拡張した規格、RFC1323(ウィンドウスケーリング)
TCPパケット内の「オプション部」の領域(スペース)を利用して、最大TCPウィンドウサイズを拡張した規格が、「ウィンドウスケーリング」と呼ばれます。
この規格をサポートしているOSの場合は、最大TCPウィンドウサイズの64Kbytesを更に超えるウィンドウサイズを使用することが出来ます。
TCPウィンドウスケーリングの規格上、最大ウィンドウサイズを1GBまで拡張できます(あくまで理論上)
ウィンドウスケーリングを利用すると、ウィンドウサイズの計算は(ウィンドウスケーリングの値をNとすると)
64Kbyte * 2 ^ N
で計算できます。
もちろん、送信側と受信側のOSでウィンドウスケーリングが使用できた場合です。
Windows Vista以降のOSでは自動でTCPウィンドウサイズが最適化チューニングされる
The Cable Guy: TCP 受信ウィンドウ自動チューニング
Windows Vista以降のOSでは(Windows Server 2008やWindows Server 2012でも)、規定でTCPウィンドウスケーリングは有効になっています。
また、OSが通信状態をみて自動でTCPウィンドウサイズを最適化調整されるとのことです。
詳細は見つけられませんでしたが・・・
Windows Vistaでは最大ウィンドウサイズは16MBまで許可するとのことでした。
なるほどねー。