TCPのデータ転送における処理の流れ
トランスポート層のプロトコルについて
全体の流れ
TCPのデータ通信の処理の流れは以下の通りです。
1. コネクションの確立
TCPでは確実にデータを届ける(信頼性の高い通信を実現する)ために、データの転送を行う前に、
送信元と宛先間(エンドツーエンド)で無事に通信できるか通信の状態を確認します。
確認した結果、無事に通信できそうな場合、送信元と宛先の間のコネクション(仮想的な通信の接続状態)を形成し、
この一連の流れを「コネクションの確立」と呼びます。
コネクションの確立は「3ウェイハンドシェイク」という手法で実現されます。詳しくは次ページで紹介します。
2. データの転送
※転送の仕組みについて次節で詳しく後述します。
3. コネクションの切断
データの転送が終わり次第、コネクションは切断(コネクションの開放)されます。
コネクションの確立(3ウェイハンドシェイク)
1. 送信元から宛先へコネクション(接続)の要求
送信元から宛先へコネクション(接続)の要求をします。
この時、TCPヘッダのコントロールフラグ内にある「SYN(通信の接続を要求するフィールド)」の値が
「1」の状態でセグメント(データ)を送信します。
2. 宛先から送信元へ承認
送られてきたセグメントの「SYN」の値が「1」であることから、宛先はコネクション確立の要求を受けたと判断します。
この要求に対して承認した旨を、再度、送信元に伝えます。
この時、宛先はヘッダ内の「ACK」を「1」に設定(要求に対して承認したことを伝えるため)した上で、送信元にデータを送ります
3. 送信元から宛先へ承認の承認
承認を受け、送信元から宛先へ、承認したことを承認する連絡をします。
この時、通信の接続要求は済んでいるので「SYN」は「0」に設定し、承認するため「ACK」を「1」に設定した上で、
送信元から宛先へセグメントを送信します。
- 送信元から宛先へコネクション(接続)の要求
- 宛先から送信元へ承認
- 送信元から宛先へ承認の承認
データの転送方法、転送サイズについて
受信者の状況や通信の経路によって、一度に送れるデータのサイズは異なります。そのため、TCPやIPなどのプロトコルでは、一度にデータを全部送らず、データを分割して送る仕組みになっています。
一度に送ることができるサイズの最大値について、イーサネットのフレームでは「MTU」と呼び、TCPでは「MSS」と呼びます。
「MSS」のサイズは一般的には「1460バイト」ですが、これはイーサネットのフレームの最大値である「MTU」が「1500バイト」であるためです。残りの40バイトは、「TCPヘッダ」が「20バイト」、「IPヘッダ」が「20バイト」となります。