😊

【ネットワーク基礎】TCPセグメントの構造

に公開

はじめに

ここまでTCP/IPモデルの基本やOSI参照モデル、各層で行われていることをまとめてきましたが、トランスポート層におけるTCPがどのようにデータを送受信しているのか、特に「TCPセグメント」とは何かについて触れていませんでした。
この記事では、TCPセグメントの役割と基本構造について、アプリケーション層から受け取ったデータをどのように加工しているのかについて触れつつ、まとめていきます。

アプリケーション層から渡されたデータのその後


https://www.computernetworkingnotes.com/ccna-study-guide/segmentation-explained-with-tcp-and-udp-header.html より

トランスポート層である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

https://www.computernetworkingnotes.com/ccna-study-guide/segmentation-explained-with-tcp-and-udp-header.html
https://envader.plus/article/512
https://ascii.jp/elem/000/000/619/619702/
https://atmarkit.itmedia.co.jp/ait/articles/0401/29/news080.html
https://shikaku949.ohuda.com/ccna/tcp_1/
https://atmarkit.itmedia.co.jp/ait/articles/0402/13/news096_2.html

Discussion