1. はじめに (Introduction)
1.1. 動機 (Motivation)
従来の TCP 接続確立には 3 ウェイハンドシェイク (three-way handshake) が必要であり、データ転送が開始される前に少なくとも 1 往復時間 (Round-Trip Time, RTT) の遅延が発生します。多くの現代のアプリケーション、特に Web サービスやモバイルアプリにとって、この遅延は重大なパフォーマンスのボトルネックです。
典型的なシナリオの遅延問題
従来の TCP では、クライアントは以下の手順を踏む必要があります。
- SYN パケットを送信
- サーバーの SYN-ACK 応答を待機
- ACK 確認を送信
- 最後にアプリケーションデータを送信
これはアプリケーションデータの転送に少なくとも 1.5 RTT が必要であることを意味します(サーバーが ACK 受信後すぐに応答すると仮定した場合)。
HTTP 短期接続の課題
HTTP リクエスト-レスポンスパターンでは以下の問題があります。
- 新しい接続ごとに完全な 3 ウェイハンドシェイクが必要
- 短期接続(例:単一の API 呼び出し)では、ハンドシェイクの遅延が総時間に占める割合が大きい
- 高遅延ネットワーク(モバイルネットワークなど)ではこの問題がより深刻
1.2. 主要概念 (Key Concepts)
TCP Fast Open (TFO) は、TCP ハンドシェイク中にデータを交換できるようにすることでこの問題を解決します。
TFO Cookie メカニズム
TFO Cookie はクライアントの身元を検証するための暗号化トークンです。
-
Cookie リクエストフェーズ:
- クライアントは初回接続時に TFO Cookie をリクエスト
- サーバーは Cookie を生成して返す(クライアント IP アドレスに基づいて暗号化)
- クライアントは後続の使用のために Cookie をキャッシュ
-
Fast Open フェーズ:
- クライアントは SYN パケットに Cookie とアプリケーションデータを含める
- サーバーは Cookie の有効性を検証
- 検証が通過した場合、サーバーは SYN データを受け入れ、即座に応答できる
パフォーマンス向上
TFO 使用後のデータ転送タイムライン:
- 初回接続:クライアントが SYN を送信(Cookie をリクエスト)
- 後続接続:クライアントが 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 には有効期限があり、定期的な更新が必要