TCP

2023-02-26 (日) 10:20:54

TCP とは

名称

  • Transmission Control Protocol

概要

TCP の機能

  • 再送処理
    • 再送タイムアウト(RTO
    • 高速再転送
  • フロー制御
  • 輻輳制御

TCPの仕組み

TCPコネクション

  • 通信の開始時に通信路を確立し、終了時に通信路を解放する
  • TCPコネクションは下記の4つの情報によって識別される
    • 宛先IPアドレス
    • 宛先ポート番号(TCP)
    • 送信元IPアドレス
    • 送信元ポート番号(TCP)
  • 3つのフェーズで行われる
    1. コネクション確立フェーズ
    2. 通信フェーズ
    3. コネクション切断フェーズ

(1) コネクション確立フェーズ

  • 3wayハンドシェイク
    • 1. →(SYN)
    • 2. ←(ACK + SYN)
    • 3. →(ACK)
  • ※SYN:コネクション確立要求
  • ※ACK:肯定応答

(2) 通信フェーズ

(3) コネクション切断フェーズ

  • 1. →(FIN + ACK)
  • 2. ←(ACK)
  • 3. ←(FIN + ACK)
  • 4. →(ACK)

TCP のデータ構造

  • TCPヘッダとペイロードで構成される
    • TCPヘッダ(20バイト~)
    • ペイロード(アプリケーション層のデータ)

TCPヘッダ

  • 33〜64bit
    • シーケンス番号(32)
  • 65〜96bit
    • 確認応答番号(ACK番号)(32)
  • 97〜128bit
    • データオフセット(4) ※TCPヘッダ長:単位は4Byte(32bit)
    • 予約(6) ※未使用(末尾3桁をコントロールフラグとして使う)
    • コントロールフラグ(6)
    • ウィンドウサイズ(16)
  • 129〜160bit(20Byte)
    • チェックサム(16) ※TCPセグメント(TCPヘッダ + ペイロード)の誤り検出に使われる
    • 緊急ポインタ(16)
  • 161〜192bit
    • オプション(n)
    • パディング(32-n)

シーケンス番号

  • 送信データの連番
  • 初期値はランダムな値

確認応答番号(ACK番号)

  • 受信データの連番
  • 3ウェイハンドシェイク前
    • 相手から受け取ったシーケンス番号に1を加算した値
  • 3ウェイハンドシェイク後
    • 相手から受け取ったシーケンス番号にデータサイズ(Byte)を加算した値

コントロールフラグ

  • コードビット
  • コントロールビット
  • 予約(末尾3桁)
    ビット位置コードビット意味
    1NSECN-nonceRFC3540
    2CWRcongestion window reduced輻輳ウィンドウ減少の通知。RFC3168
    3ECEEDN-echo輻輳発生の通知。RFC3168
  • コントロールフラグ(6桁) ※RFC793
    ビット位置コードビット意味
    1URGurgent緊急
    2ACKacknowledgement応答。SYNパケットの場合"0"、SYNパケット以外の場合"1"
    3PSHpushプッシュ
    4RSTresetリセット。TCP接続を強制終了する場合"1"
    5SYNsynchronize同期。SYNパケットの場合"1"、SYNパケット以外の場合"0"
    6FINfinish終了。TCP接続を終了する場合"1"

SYNクッキー

  • TCP通信の正当性を確認するために、SYN/ACKパケットのシーケンス番号に埋め込むデータのこと
  • TCPヘッダをハッシュ化した値などが使われる
  • SYN/ACKパケットを応答する際はTCPソケットはオープンしない
  • SYNフラッド攻撃の対策として有効

TCPの脆弱性

  • 発信元IPアドレスの偽装が難しい
  • 発信元IPアドレスが偽装されていても、コネクションの確立が必要ない攻撃に対しては弱い
  • 接続要求(SYN)に対する応答(SYN/ACK)を攻撃に悪用される

関連用語