TCPのデータ転送における処理の流れ

トランスポート層のプロトコルについて

全体の流れ

TCPのデータ通信の処理の流れは以下の通りです。

1. コネクションの確立

TCPでは確実にデータを届ける(信頼性の高い通信を実現する)ために、データの転送を行う前に、
送信元と宛先間(エンドツーエンド)で無事に通信できるか通信の状態を確認します。

確認した結果、無事に通信できそうな場合、送信元と宛先の間のコネクション(仮想的な通信の接続状態)を形成し、
この一連の流れを「コネクションの確立」と呼びます。

コネクションの確立は「3ウェイハンドシェイク」という手法で実現されます。詳しくは次ページで紹介します。

2. データの転送

※転送の仕組みについて次節で詳しく後述します。

3. コネクションの切断

データの転送が終わり次第、コネクションは切断(コネクションの開放)されます。

コネクションの確立(3ウェイハンドシェイク)

1. 送信元から宛先へコネクション(接続)の要求

送信元から宛先へコネクション(接続)の要求をします。
この時、TCPヘッダのコントロールフラグ内にある「SYN(通信の接続を要求するフィールド)」の値が
「1」の状態でセグメント(データ)を送信します。

2. 宛先から送信元へ承認

送られてきたセグメントの「SYN」の値が「1」であることから、宛先はコネクション確立の要求を受けたと判断します。
この要求に対して承認した旨を、再度、送信元に伝えます。

この時、宛先はヘッダ内の「ACK」を「1」に設定(要求に対して承認したことを伝えるため)した上で、送信元にデータを送ります

3. 送信元から宛先へ承認の承認

承認を受け、送信元から宛先へ、承認したことを承認する連絡をします。

この時、通信の接続要求は済んでいるので「SYN」は「0」に設定し、承認するため「ACK」を「1」に設定した上で、
送信元から宛先へセグメントを送信します。

  1. 送信元から宛先へコネクション(接続)の要求
  2. 宛先から送信元へ承認
  3. 送信元から宛先へ承認の承認

データの転送方法、転送サイズについて

受信者の状況や通信の経路によって、一度に送れるデータのサイズは異なります。そのため、TCPやIPなどのプロトコルでは、一度にデータを全部送らず、データを分割して送る仕組みになっています。

一度に送ることができるサイズの最大値について、イーサネットのフレームでは「MTU」と呼び、TCPでは「MSS」と呼びます。

「MSS」のサイズは一般的には「1460バイト」ですが、これはイーサネットのフレームの最大値である「MTU」が「1500バイト」であるためです。残りの40バイトは、「TCPヘッダ」が「20バイト」、「IPヘッダ」が「20バイト」となります。


NEXT>> TCPの信頼性の高い通信を実現するための制御