ネットワークの基礎講座
TCP(トランスミッション制御プロトコル)
ウィンドウ(フロー)制御
これまで説明してきたメカニズムだけではデータ転送速度はネットワークの帯域(と誤り率や遅延)で制限されており、受けての状況が念頭におかれていない。しかしながら受けての処理能力やバッファ用メモリ領域などの理由で、送信量を制限する必要もでてくる。ブロードバンドが普及するとますますこれが問題となる。セグメント・ヘッダにあるWindowというフィールドはそのため(これをフロー、つまり流量制御という)に用意されている。基本的に受けてはこれからどれだけまでのデータが受付可能かをこのフィールドにセットすると、送信側はそれ以上のデータを相手がACKを返す前に送信することを控える。
下図を見ていただきたい。
TCPのウインドウによるフロー制御はオクテット(バイト)単位でなされる。一方転送はセグメント単位でなされる。従ってTCPのフロー制御は一寸ややこしくなっている。TCPはセグメントを作るときはWindowも配慮しなければならない。
受け側のホストはACKとともにWindowをセットする。各ACKメッセージにウインドウ・サイズをセットして構わない。上図では、Windowで表示された枠はこの受けてからの要求でこのコネクションに適用されているウインドウを示す。送り手はこのウインドウ内のデータはACKが帰ってくる前に相手に送信して構わない。このウインドウの左端の送信済みデータが相手からACKされるとこのウインドウを右にシフトさせる。なお、Window値はなるべく大きな値のほうが効率が上がる。
受け側はWindow値を決めたら、それに対応したサイズの受信バッファを用意する。これをRWINと呼ぶ。ブロードバンドの場合のインターネットのダウンロード速度改善のためには、このRWINの値とPPPに影響を与えるIPのMTUの値が重要となる。
自分の環境で最適なRWINの値を求めるには: ダウンロードしたい先のホストにpingをかけ、平均ラウンド・トリップ時間をmsで求める。これに低速回線の場合は50%増やす。この値に伝送速度(kbps)をかけ8で割る。 例えば折り返し時間が50msだとし、必要な回線速度が1500Kbpsだとしたら、 RWIN
= 50 x 1.5 x 1500 / 8 = 14063 但しWindows
95/98/NTのデフォルト値は8192、Windows
Me 及び
2000の場合は16384となっているので、それ以下の値を選択しても意味がないので避けること。 |