🦝

TCP ヘッダと 6 つのフラグ : 信頼性を高める仕組み

に公開

インターネット通信の基盤となる TCP(Transmission Control Protocol)は、データの「確実な到達」を保証するために、ヘッダ内のフラグ番号を利用しています。

この記事では、TCP ヘッダの主要な構成要素である「シーケンス番号/確認応答番号」と「6 つの制御フラグ」に焦点を当て、その通信の流れを解説します。

1. データの順序に関する 2 つの番号

TCP はデータを分割して送りますが、バラバラに届いても元の形に戻せるよう、以下の 2 つの番号で管理しています。

項目 役割
シーケンス番号 「今回のデータが全体の何番目か」を示す番号。
(例:1000 番〜のデータを送ります)
ACK 番号 「ここまで受信しました。次は〇〇番を送ってください」と相手に伝える番号。
(例:1000 番は届いたので、次は 1001 番をください)

2. 通信を制御する「6 つのフラグ」

TCP ヘッダには、現在の通信状態や要求を表す 6 ビットのコントロールフラグがあります。

フラグ 名称 役割と意味
SYN Synchronize 接続要求。通信開始時に「接続しましょう」と挨拶する際に使われる。
(シーケンス番号の同期を行う)
ACK Acknowledgment 確認応答。「あなたのメッセージを受け取りました(応答しています)」を示す。
※最初の SYN 以外、通信中は常に 1 (on) になる。
FIN Finish 送信終了。「もう送るデータはありません」という意思表示。
(これを受け取っても、受信側からの送信はまだ可能:ハーフクローズ)
RST Reset 強制切断。「接続状態がおかしいので、直ちに通信を破棄します」という緊急停止。
(ポートが閉じていたり、整合性が取れない時に使われる)
PSH Push 即時転送。「バッファに溜めずに、すぐにアプリケーション層(アプリ)へデータを渡してください」という指示。
URG Urgent 緊急データ。普段は使われないが、緊急で処理すべきデータが含まれていることを示す。

3. TCP 通信の全体像

これらのフラグと番号が実際にどう動くのか、接続から切断までの流れを追ってみましょう。

① 3 ウェイ・ハンドシェイク(接続開始)

確実な通信路を作るための「3 段階の握手」です。

② データ転送フェーズ

ここで PSH フラグやシーケンス番号/ACK 番号が活躍します。

③ 4 ウェイ・ハンドシェイク(切断)

TCP の切断は丁寧に行われます。「私は終わりだけど、あなたの話はまだ聞きますよ」という段階を踏みます。


まとめ

  • シーケンス番号/ACK 番号: データの「順序」と「到達」を保証するカウンター。
  • SYN / FIN: 会話の「開始」と「終了」を宣言する。
  • ACK: 相手の言葉に対する「うなずき(確認)」。
  • PSH: データを溜め込まずに「すぐに処理して」という依頼。
  • RST: 会話が成り立たない時の「強制終了」。

TCP はこの仕組みによって、パケットが途中で消えても再送を要求でき、順番が入れ替わっても正しく並べ直すことができる信頼性の高い通信を実現しています。

参考URL

https://zenn.dev/cloud_ace/articles/tcp-packet-beginner

https://zenn.dev/shimiyu/articles/05ead8f9042d9e

Discussion