TCP/IPを使ってデータを正確に転送するには、通信エラーの検出と回復の機能のほかに、流量調整の機能が必須である。流量が調整できないとネットワークを無駄に混雑させたり、受け取り側の処理が間に合わなくなるためだ。ここではTCPの流量調整について説明する。
重要な流量の調整
データの転送は、送り手と受け手が調子を合わせる必要がある。送り手が急ぎすぎると取りこぼしが生じるし、逆の場合は回線の使い方が非効率的になる。このため、通信システムには、(1)ネットワークを流れるデータ量の調整(フロー制御)と、(2)ネットワークの渋滞の解消(ふくそう制御)、の2つの機能が必須とされている。
まず、フロー制御は、受信ホストの処理能力に合わせて、発信ホストのデータ量を調整する機能を指す。フロー制御がないと、送信側は受信側の能力を考えずにデータを流し続けるため、受信側がデータを取りこぼす危険性が生じる。そのため、TCPではウィンドウ制御(Window flow Control)により、受信側が受信可能なデータ量を送信側へ通知してデータ量を調整する仕組みが採用されている。
次に、ふくそう制御は、ネットワークが過負荷により伝送の遅延を生じる状態(輻輳:ふくそう)を未然に防止したり、ふくそうを速やかに解消する機能を指す。ふくそう制御がないと、ネットワークにデータが滞留して相手に届くまでの時間が長くなり、最悪の場合はまったくメッセージが流れなくなってしまう。そのため、TCPでは倍数減少(Multiple decrease)とスロースタート(Slow-start)により、送信されるデータを絞り込み、ネットワークの負荷を速やかに軽減する手法が採用されている。
TCPのフロー制御
TCPはデータ転送の信頼性を確保するため、確認応答(ACK)を利用している。しかし、「1つのメッセージを送信したらそれへの確認応答を待つ」というもっとも単純な手法では、ネットワークの伝送遅延が大きいと送信側に待ち時間が必要なため、転送のスループットが大幅に下がる。この欠点を回避するため、実際のTCPでは、それぞれの確認応答を待たずに複数のセグメントを送信する「スライディングウィンドウ」という手法を利用する。スライディングウィンドウでは、受信ホストが複数のセグメントを受信した場合に、順序通りに正しく受け取った最後のセグメントに対してだけ確認応答を返せばよく、途中のセグメントに対して確認応答を返す必要がない。スライディングウィンドウによって、通信回線の帯域をより効率的に利用することができる。
ここで、TCPではスライディングウィンドウの大きさ(ウィンドウサイズ、確認応答を待たずに連続して送り出すことのできるデータ量)を可変としている。具体的には、受信ホストは確認応答の中に「次に受信ホストが受信可能なデータの量」を記入し、送信ホストに指示する(ウィンドウ通知)。送信ホストはウィンドウ通知を見て、前回よりも増えていればウィンドウサイズを増やしてより多くのセグメントを送信し、前回よりも減っていればウィンドウサイズを減らして少ないセグメントを送信する。このTCPのフロー制御の仕組みを、ウィンドウ制御と呼ぶ。
(次ページ、「TCPのふくそう制御」に続く)
この連載の記事
-
第8回
ネットワーク
HTTP、FTP、SMTP、SIPはどう動くの? -
第6回
ネットワーク
TCPのコネクションとはなんですか? -
第5回
ネットワーク
TCPのキモはコネクションとポート番号 -
第4回
ネットワーク
ルータの向こうに広がるネットワーク -
第3回
ネットワーク
特別なIPアドレスって知っていますか? -
第2回
ネットワーク
TCP/IPはどのように普及していったの? -
第1回
ネットワーク
TCP/IPの基礎の基礎を理解していますか? -
ネットワーク
TCP/IPまるわかり - この連載の一覧へ