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