TCPの接続と流量制御
TCP(Transmission Control Protocol)は、二つのアプリケーション間で順序どおりに欠けのないデータを届けるためのトランスポート層のプロトコルである。コネクションの確立と終了、シーケンス番号と確認応答による信頼性の確保、ウィンドウによるフロー制御、ネットワークの混雑に応じた輻輳制御の四つが要点となる。以下では、各仕組みの原理と判断の基準を順に整理する。
接続の確立と状態遷移
TCPは3ウェイハンドシェイクによってコネクションを確立する。クライアントがSYNを送り、サーバがSYNとACKを返し、クライアントがACKを返すことで双方が通信可能な状態になる。サーバ側では、接続要求を待ち受けるLISTEN状態のときに届いたSYNを受け付け、その後SYN-RECEIVED状態に移って相手からのACKを待つ。
一方、接続を開始する側はSYNを送信した後、応答を待つ状態であるSYN-SENTに入る。TIME-WAITは接続を終了する際に用いられる状態であり、接続要求を受け付ける段階ではない。状態名を見て、接続の確立段階か終了段階かを区別できることが重要である。
シーケンス番号と確認応答の関係
TCPのシーケンス番号は、送信するデータの先頭位置をオクテット単位で示す。送信側が確認応答を待たずに続けて送る場合、次のセグメントのシーケンス番号は直前のシーケンス番号に送信データのオクテット数を加えた値になる。 SYNやFINも番号を消費するため、データ長だけで計算すると誤る点に注意が必要である。
受信確認番号は、受信したデータのシーケンス番号そのものではなく、次に受け取りたい番号を示す。そのため、受信確認番号と受信したシーケンス番号の大小関係だけで再送の要否を判断することはできない。再送は受信状況やタイムアウトなどに基づいて行われる。シーケンス番号と受信確認番号はいずれも32ビットの値である。
ウィンドウによるフロー制御
フロー制御は、受信側の処理能力を超えて送りすぎないように送信量を制限する仕組みである。TCPでは受信側が通知するウィンドウサイズが受信可能なデータ量を示し、送信側はその範囲内であれば確認応答を待たずに続けてデータを送れる。 ウィンドウ制御では、確認応答を受け取った分だけ送信可能な範囲を先へ進めるため、複数のデータブロックをまとめて連続して送信できる。 同様の内容は別の回でも問われている。
この節の続き
- 輻輳制御の仕組みとアルゴリズム
- 実際の場面と判断の目安
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む