TCP受信窓(RWIN)の最適化

1. TCPの基本法則(帯域遅延積) 
2. 最適TCP受信窓(RWIN)サイズの計算 
3. MS-WindowsでのTCP受信窓その他の設定方法



1. TCPの基本法則(帯域遅延積)
上にグラフ化されている関係式(帯域遅延積):
TCP受信窓サイズ(B) = 125[データ帯域(Mb/s)][往復遅延時間(ms)]

 例えば、Win95/98/NTの RWIN既定値 8KB で、往復遅延時間 100ms の相手ホストから受信すると、どれだけ広帯域なアクセス手段を使っても、TCP/IP実効データ帯域(=最高データ受信速度)は約 0.655Mbps = 655kbps が上限になる。また、往復遅延時間が 200ms の相手ホストなら約 328kbps が上限。

 これはTCPの基本法則であるため、アクセス手段とネットワーク環境が、より高い速度でのデータ受信を可能にするものであれば、TCP受信窓(RWIN)サイズを充分大きな値に設定することが必要

 また実際の環境では、必ずパケットロスがあり、正常に到達しなかったパケットを相手ホストが再送信しながら、同時に次のデータ転送を途切れず円滑に行なう必要がある。したがって、受信バッファーであるTCP受信窓は、一部訂正の必要なデータブロックをバッファー内に保持しながら、さらに次のデータブロックの送信を要求できるように、上の帯域遅延積よりも大きなサイズ(約1.5倍以上)を確保しておく必要がある。(SACK機能が前提) ただし、受信窓領域とブロック訂正用領域とが別管理されている場合には、その必要がない。

 さらに現在のTCP環境では、送信側も混雑窓(cwnd)と呼ばれる送信調整バッファーを持ち、経路のデータ帯域と品質に合わせて送信量をコントロールしている。ただし先送り送信量の上限は、受信側が毎回指示する残り TCP受信窓サイズであるため、過小受信窓サイズは望まない帯域制限を引起こす。しかし受信窓サイズが過大な状況は、かなりの範囲まで送信側でカバーして転送を最適化してくれる。

 
0                       帯域遅延積                             
|----------------------------|---------------------------> RWIN
  受信側が運転するデータ輸送   送信側が運転するデータ輸送      

 
・TCPの現況に関するお薦め日本語文献 (PDF形式) - Y.Nishida, TCP詳説要点版

(TCP受信窓の詳細説明については追加予定)



2. 最適TCP受信窓(RWIN)サイズの計算
 
1. 使用PCまたはルータなどで決まるMTU(単位:バイト)
 MTU = バイト  (わからない時は SpeedGuide.netで調べる)
2. 日常使用範囲での遠方ホストへ
  下で計算されるデータサイズの pingを打った時の
  往復時間(RTT、単位:ミリ秒)
  • 遠方ホストの例:(データ転送状況が計測可能で転送条件が良好なもの)
     www.geocities.com www.megapath.net monitor.dslreports.com 
    ・ ここで言う遠方ホストは時間距離つまり往復時間の長いホスト。 
  • 往復時間(RTT)を調べるための pingのデータサイズ = バイト
    ・ 下りパケットサイズ=MTU、上りパケットサイズ=40バイトの RTT を推定するためのICMPエコー要求データサイズ。
    MS-Windows命令では『 ping -l データサイズ 相手ホスト 』に設定する。
    ExPing(MS-Windows用お薦め)では <環境>→<ブロックサイズ> に設定する。

 RTT = ms

3. アクセス手段の下り実効最大TCP/IPデータ帯域(単位:キロビット/秒)
  • 下りデータ帯域は、普段「受信速度」や「下り速度」と呼んでいるもの。
    ・ここでは「速度」が RTTに直結する概念のため、より正確な「データ帯域」を使用。

    ・クルマで荷物を運ぶ時の往復時間(走行速度に依存)と荷物の輸送速度(積載量、同時に使用する車両台数、道路の車線数などにも依存)の関係とほぼ同じ。 
  • まだ RWIN調整を行なっていない場合はスペック値などを設定する。
       例: ISDN(1B)=64 kbps、G.lite-ADSL=1536 kbps

    その後、得られた最適RWINサイズに PCを調整し、近い計測サイトで下り実効最大データ帯域を調べて再計算・再設定する。

 下りデータ帯域 = kbps

★ 最適TCP受信窓サイズ(単位:バイト)
 最適RWIN = バイト ( = ×MSS )
  • RWINの通常サイズ限界は 65,535バイト。 
  • 両側ホストが rfc1323の窓拡大オプションに対応していれば 1,073,725,440バイト まで定義できる。しかし設定で 256KB やそれ以下が限度となっている相手ホストも多い。また窓拡大オプションを使って 65536バイト以上のRWINを指定したが、相手ホストが窓拡大オプションに対応していない場合、MS-Windowsでは RWIN=65535 が使用される。 
  • 2で任意の相手ホストへのRTTを与えれば、その相手ホストへの最適RWINが計算できる。遠方ホストのRTTで決めた最適RWINを使用すれば、より近いホストについてRWIN不足による帯域制限は起きない。しかし、その近いホストに最適化した時と比べると、平均受信速度が少し低下する場合もある(リンク特性や相手ホストの送信特性によって反応が異なる)。 
  • 最適RWINは、「帯域遅延(往復)積の2倍」をMSSの整数倍(かつ窓拡大率の倍数)に丸めたもの。2倍」という帯域遅延積の倍率は概数。TCP/IP専門家の見解と実測結果から暫定的に決定。以前の「2倍」はMS-Windowsの実装と合わないことが判明したため、現在新版を準備中。 



3. MS-WindowsでのTCP受信窓その他の設定方法
 
必要なTCP/IPドライバのアップデート
[Win95]
 DUN1.3 … TCP/IP機能をWin98同等にするため必要

    さらに Winsock2(英語版のみ) が必要との情報もある。
    Winsock2英語版をインストールし、TCPメニューが英語化されネットワーク設定変更に問題が生じた時:
    1.英語版メニュー Windows\System\Mstcp.dll を Mstcp.dll.eng などに改名
    2.元の日本語版メニュー Windows\ws2backup\mstcp.dll を Windows\System\ フォルダ下にコピー。

 Vtcp.386rfc1323機能バグ再送タイマ・バグ を修正するため必要(DUN1.3の後) 
[Win98/98SE]
 Vtcp.386rfc1323機能バグ再送タイマ・バグ を修正するため必要
 
[WinNT4.0] … 再送タイマ・バグ その他 を修正するには Service Pack 6 以降が必要

Dr.TCPによるTCP受信窓その他の設定方法
Dr.TCP - MS-Windows汎用TCP/IP設定ツール

Dr.TCPによるTCP/IP設定

(1) 設定変更後は必ず
→[Apply(適用)]
→[Exit(終了)]
→Windowsの終了
→コンピュータを再起動する

(2) 再起動したら必ず
  SpeedGuide.net
 で設定を確認

              Dr.TCPの各項目説明


05/31/2001, 最終更新日 07/23/2001, oso@st.rim.or.jp