
私はその質問(タイトルにある質問)に対する答えを探していましたが、私が見つけた最良のものは次のとおりです。
DNS プロトコルの設計では、ネットワーク トラフィックを最小限に抑えながらパフォーマンスを最適化するために、UDP トランスポート ブロック サイズ (ペイロード サイズ) が 512 バイトに制限されています。
私の質問は、これによってパフォーマンスがどのように向上するのか、また、UDP を使用する場合にこの制限が発生する他の理由はあるかということです。
答え1
512 バイトのペイロードにより、DNS パケットが転送中に断片化されても再構成できることが保証されます。また、一般的に、小さいパケットがランダムにドロップされる可能性は低くなります。
のIPv4標準すべてのホストが 576 バイト以下のパケットを再構成できる必要があることを指定します。 IPv4 ヘッダー (20 バイト、オプションにより最大 60 バイト) と 8 バイトの UDP ヘッダーを使用すると、512 バイトのペイロードを持つ DNS パケットは 576 バイトより小さくなります。
@RyanRies が言うように、DNS はより大きなペイロードやゾーン転送、DNSSEC に TCP を使用できます。TCP が使用されると、UDP とは異なり、データが流れ始める前にクライアントとサーバーの間でハンドシェイクが行われるため、待ち時間が大幅に長くなります。
答え2
最近の DNS は、実際には UDP の 512 バイトのペイロードに制限されなくなりました。
とEDNS0使用時には、より大きなペイロード サイズを指定できます。これは、DNSSEC 対応クライアントの場合にも一般的です。
UDP経由のより大きなペイロードのサポートは諸刃の剣ですが、ネームサーバーを増幅攻撃攻撃者が大きな応答を得るクエリを使用した場合に、より優れた増幅を実現できるため、より一般的になっています。
見るRFC2671 の翻訳EDNS0の詳細な情報については
答え3
クエリやゾーン メンテナンス操作などの DNS 操作では、デフォルトでポート 53 が使用されます。パフォーマンス上の理由から、クエリではブロック サイズ制限が 512 バイトの UDP プロトコルが使用されます。クエリ操作では、オプションでトランザクションごとに TCP をネゴシエートできますが、TCP で発生するパフォーマンス オーバーヘッドのため、これは基本的に理論上の機能です。歴史的に、512 バイトの応答サイズ制限を超えることは、通常、どんな犠牲を払ってでも避けられ、実際、13 個の IPv4 ルート サーバーという制限は、単一の 512 バイト UDP トランザクションで返される最大数でした。
ロン・エイチソン - プロ DNS と BIND 10 - 2011
答え4
それは QOS の問題です。
UDP はステートレスであるため、パケットのエラー処理は不可能です。
したがって、パケットを最大サイズに保つことで、パケットが宛先に到達する可能性が高まり、エラー処理がないことによる影響が軽減されます。