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

9. TCP Fast Open

このセクションは非規範的です。

TCP Fast Open (TFO) [RFC7413] を使用すると、SYN パケットでデータを運ぶことができ、TCP 接続を再度開くコストが削減されます。また、標準の TCP と比較して最大 1 RTT 節約できます。

TFO は、サーバーが提供する Cookie を使用することで、SYN でデータを送信することに固有のセキュリティ脆弱性を軽減します。特に、増幅攻撃が可能な DNS のようなシステムではそうです。TFO クライアントは、新しい接続の開始時に最初の SYN パケットでサーバー Cookie を要求します。サーバーは SYN-ACK で Cookie を返します。クライアントは Cookie をキャッシュし、同じサーバーへの後続の接続を開くときに再利用します。

Cookie はクライアントの TCP スタック(カーネル)によって保存され、クライアントまたはサーバーのプロセスが再起動しても保持されます。TFO はまた、通常の TCP ハンドシェイクに正常にフォールバックします。

IP エニーキャスト [RFC4786] を利用する DNS サービスは、TFO を有効にする際に追加の手順を実行する必要がある場合があります。[RFC7413] から:

同じサーバー IP アドレスへの接続要求を受け入れるロードバランサーの背後にあるサーバーは、特定のクライアント IP アドレスに対して同一の Fast Open Cookie を生成するように、同じキーを使用する必要があります。そうしないと、クライアントは接続ごとに異なる Cookie を取得する可能性があり、Fast Open の試みは通常の 3WHS にフォールバックします。

[DNS-over-TLS] のように、DNS-over-TCP が DNS プライベート交換のトランスポートである場合、実装者は TFO を認識し、保護が必要なデータ(例: DNS クエリのデータ)が誤って平文で転送されないようにする必要があります。議論については [DNS-over-TLS] を参照してください。