【ネットワーク基礎】TCPセグメントの構造
はじめに
ここまでTCP/IPモデルの基本やOSI参照モデル、各層で行われていることをまとめてきましたが、トランスポート層におけるTCPがどのようにデータを送受信しているのか、特に「TCPセグメント」とは何かについて触れていませんでした。
この記事では、TCPセグメントの役割と基本構造について、アプリケーション層から受け取ったデータをどのように加工しているのかについて触れつつ、まとめていきます。
アプリケーション層から渡されたデータのその後
トランスポート層であるTCPは、アプリケーションから受け取ったメッセージ(データ)を分割(セグメンテーション)して、それぞれにTCPヘッダを付加します。
分割サイズはMSS(Maximum Segment Size)という制限値に従います。これは、TCPセグメントで運べるアプリケーションデータの最大サイズ(バイト)を指します。
※通常は1460バイト程度とされています。
つまり、トランスポート層ではアプリケーション層から受け取ったデータを分割(セグメント化)し、TCPヘッダを追加(ポート番号、シーケンス番号、ACKなど)することで、必要な順序・再送制御の仕組みの付加しています。
TCPセグメントとは
※https://envader.plus/article/512 より「カプセル化」の画像を一部切り取り掲載
TCPセグメントは、アプリケーション層から受け取ったデータを分割(セグメント化)した、TCPプロトコルが送受信するデータの単位のことを指します。
TCPが「セグメント」という形で分割・管理し、TCPヘッダを付加したのち、IP層に渡します。
なお、TCP/IPでは、各層によってデータの名称が異なるので注意しましょう。
TCPヘッダには、信頼性の高い通信を実現するために必要な情報が含まれています。このヘッダをデータに付加することで、単なるデータの送信だけでなく、順序の保証、到達確認、コネクション管理、輻輳制御・フロー制御といった機能を実現し、通信を安定かつ確実に行なえるようになります。
TCPセグメントの基本構造
TCPは、データ本体(ペイロード)とそれを管理するためのヘッダ情報をセットで送っており、
順序の保証(シーケンス番号)、確実な到達確認(ACK)、コネクション管理(SYN/FIN)、輻輳制御・フロー制御(ウィンドウサイズ)といった重要な制御はすべてヘッダによって行われています。
TCPヘッダの要素(フィールド)
※https://ascii.jp/elem/000/000/619/619702/ より
※以下、ChatGPT解説より引用
主なTCPヘッダのフィールド
① シーケンス番号 (Sequence Number)
データの順序を追跡するための番号です。
TCPがデータを正しい順序で再構成するために使います。
② 確認応答番号 (Acknowledgment Number)
受信側が最後に正しく受け取ったデータのシーケンス番号を通知します。
これにより、受信側がどこまで受け取ったかを伝えることができます。
③ データオフセット (Data Offset)
ヘッダの長さを示し、実際のデータがどこから始まるかを決定します。
④ フラグ (Flags)
コントロールフラグのセットで、接続の確立や切断、データの確認など、TCPの状態を管理します。
代表的なフラグには SYN, ACK, FIN などがあります。
⑤ ウィンドウサイズ (Window Size)
受信側が現在受け取れるバッファのサイズ(フロー制御)を指定します。
送信側がデータを送る量を調整するために使用します。
⑥ チェックサム (Checksum)
データが途中で破損していないかを確認するためのエラー検出のためのフィールドです。
⑦ 緊急ポインタ (Urgent Pointer)
緊急データがある場合、そのデータの終了位置を指し示すフィールドです。
通常は使われませんが、緊急なデータ転送に利用されます。
⑧ オプション (Options)
TCP接続に関する追加の情報や設定が格納される領域です。
これも任意であり、オプションとして利用されることが多いです。
⑨ データ (Data)
実際に送信されるアプリケーションのデータ部分です。
※ペイロード(Payload)とは、TCPやIPなどのプロトコルにおいて「実際に運びたいデータの中身」、つまりアプリケーション層から渡されたデータそのものを指します。
ペイロードは常に「下の層から見たら上の層のデータ」です。TCPにとってのペイロードは「アプリケーション層のデータ」、IPにとってのペイロードは「TCPセグメント」となります。
まとめ
データがどのように正確に、順序通りに、そして信頼性高く送受信されるかを決定するか、その仕組みについてまとめました。
ウェブアプリケーションやシステム間のデータ通信を扱う場面では、HTTPやWebSocketなどのプロトコルが関わってきますが、これらのプロトコルは最終的にTCP/IPの上に成り立っています。TCPセグメントやTCPヘッダの構造、役割を理解することによって、データの遅延や接続の問題を特定しやすくなるでしょう。
最後までお読みいただき、ありがとうございました。
参考・画像引用元URL
Discussion