全1482文字

 第3回までで、TCPの基本は理解できただろう。ただしTCPの世界は奥が深い。効率良くデータを転送するために、様々な工夫が加えられている。その一端を覗いてみよう。

 ここでは、受信側が受け取れる量を送信元に通知することでデータを効率良く送れるようにするフロー制御と、再送の効率を上げる工夫を紹介する。

受信側から転送ペースを調節する

 まずはフロー制御から。TCPでは、データを載せたTCPパケットを連続して転送できる。ただし、際限なく連続して転送するとちょっと困ったことが起こる(図1)。

図1●受信できる量を通知することで転送効率を上げる
図1●受信できる量を通知することで転送効率を上げる
TCPでは連続受信できるデータ量をウインドウサイズとして連絡し合う。的確に連続転送することで転送時間を短くできる。こうした処理を「フロー制御」と呼ぶ。
[画像のクリックで拡大表示]

 TCPスタックは、受け取ったデータをいったん受信バッファーにためて届け先となるアプリケーションに引き取ってもらう。際限なくデータが転送されてくると、受信バッファーからデータがあふれてしまう。

 そこでTCPでは、連続して受信できるデータ量を「ウインドウサイズ」というバイト単位の値でお互いに通知し合うことになっている。一挙に大量のデータが届いたり、送信先のアプリケーションが受信バッファーからデータを引き取るのが遅れると、受信バッファーの空きが小さくなる。通知するウインドウサイズを空きに応じて変更することで、データを受信しきれなくなることを防ぐわけだ。