メインコンテンツまでスキップ

1. はじめに (Introduction)

1.1. 動機 (Motivation)

従来の TCP 接続確立には 3 ウェイハンドシェイク (three-way handshake) が必要であり、データ転送が開始される前に少なくとも 1 往復時間 (Round-Trip Time, RTT) の遅延が発生します。多くの現代のアプリケーション、特に Web サービスやモバイルアプリにとって、この遅延は重大なパフォーマンスのボトルネックです。

典型的なシナリオの遅延問題

従来の TCP では、クライアントは以下の手順を踏む必要があります。

  1. SYN パケットを送信
  2. サーバーの SYN-ACK 応答を待機
  3. ACK 確認を送信
  4. 最後にアプリケーションデータを送信

これはアプリケーションデータの転送に少なくとも 1.5 RTT が必要であることを意味します(サーバーが ACK 受信後すぐに応答すると仮定した場合)。

HTTP 短期接続の課題

HTTP リクエスト-レスポンスパターンでは以下の問題があります。

  • 新しい接続ごとに完全な 3 ウェイハンドシェイクが必要
  • 短期接続(例:単一の API 呼び出し)では、ハンドシェイクの遅延が総時間に占める割合が大きい
  • 高遅延ネットワーク(モバイルネットワークなど)ではこの問題がより深刻

1.2. 主要概念 (Key Concepts)

TCP Fast Open (TFO) は、TCP ハンドシェイク中にデータを交換できるようにすることでこの問題を解決します。

TFO Cookie はクライアントの身元を検証するための暗号化トークンです。

  1. Cookie リクエストフェーズ

    • クライアントは初回接続時に TFO Cookie をリクエスト
    • サーバーは Cookie を生成して返す(クライアント IP アドレスに基づいて暗号化)
    • クライアントは後続の使用のために Cookie をキャッシュ
  2. Fast Open フェーズ

    • クライアントは SYN パケットに Cookie とアプリケーションデータを含める
    • サーバーは Cookie の有効性を検証
    • 検証が通過した場合、サーバーは SYN データを受け入れ、即座に応答できる

パフォーマンス向上

TFO 使用後のデータ転送タイムライン:

  1. 初回接続:クライアントが SYN を送信(Cookie をリクエスト)
  2. 後続接続:クライアントが SYN + Cookie + データを送信 → サーバーが即座に処理

遅延削減:1 完全 RTT を節約

セキュリティ設計

TFO Cookie メカニズムは以下のセキュリティ保護を提供します。

  • 増幅攻撃防止 (Anti-Amplification):SYN データパケットサイズを制限
  • リソース枯渇防止 (Anti-Resource Exhaustion):Cookie 検証によりクライアントの身元を確認
  • 後方互換性 (Backward Compatibility):TFO をサポートしないサーバーはオプションを無視

用語定義 (Terminology)

RFC 2119 の規定に従い、本文書のキーワードの意味は以下の通りです。

  • MUST(しなければならない):絶対的な要件
  • SHOULD(すべきである):強く推奨されるが特定の状況では無視できる
  • MAY(してもよい):完全にオプションの機能

適用シナリオ (Use Cases)

TFO は以下のシナリオに特に適しています。

  • Web ブラウジング:HTTP/HTTPS リクエスト
  • API 呼び出し:RESTful API、RPC
  • モバイルアプリ:頻繁な短期接続リクエスト
  • IoT デバイス:定期的なデータ送信

制限と考慮事項 (Limitations)

TFO 使用時の注意事項:

  • SYN データは再送される可能性がある(冪等性の要件)
  • 一部のネットワーク機器が TCP オプションを妨害する可能性がある
  • Cookie には有効期限があり、定期的な更新が必要