付録 A. DNS に TCP を使用することの利点と欠点の概要 (Summary of Advantages and Disadvantages to Using TCP for DNS)
TCP ハンドシェイクは通常、アドレススプーフィングを防ぎ、したがって UDP を悩ませるリフレクション/増幅攻撃を防ぎます。
IP 断片化は、UDP よりも TCP の方が問題になりにくいです。TCP スタックは通常、パス MTU 検出を実装しているため、TCP セグメントの IP 断片化を回避できます。一方、UDP は再構築を提供しません。つまり、パス MTU サイズを超えるデータグラムは断片化を経験しなければなりません [RFC5405]。ミドルボックスは IP フラグメントをブロックすることが知られており、タイムアウトを引き起こし、クライアント実装にネットワークパスでサポートされている EDNS0 応答サイズ値を「ハント」させます。さらに、断片化はキャッシュポイズニングにつながる可能性があります [fragmentation-considered-poisonous]。
TCP セットアップは、UDP クエリと比較して 1 RTT の追加コストがかかります。セットアップコストは、接続の再利用、クエリのパイプライン化、および TCP Fast Open の有効化によって償却できます。
TCP は、クライアントとサーバーに追加の状態保持要件を課します。TCP Fast Open の使用は、TCP 接続のクローズと再オープンのコストを削減します。
エニーキャストサーバーへの長寿命 TCP 接続は、ルーティングの変更により中断される可能性があります。DNS に TCP を利用するクライアントは、常に接続を再確立するか、未解決のクエリを再試行する準備ができている必要があります。マルチパス TCP [RFC6824] を使用すると、サーバーがエニーキャストアドレスからユニキャストアドレスに接続を引き渡すことも可能になる場合があります。
今日使用されている多くの「ミドルボックス」は、ポート 53 の TCP に干渉します [RFC5625]。このドキュメントは、TCP が DNS の有効なトランスポートであり、そのサポートがすべての実装の要件であることを絶対に明確にする以外に、解決策を提案していません。
コネクション指向 DNS のより詳細な議論は、他の場所 [Connection-Oriented-DNS] で見つけることができます。