
からhttps://www.cloudflare.com/en-au/learning/dns/dns-server-types/
13 個の DNS ルート ネーム サーバーはすべての再帰リゾルバーに認識されており、再帰リゾルバーが DNS レコードを探す際の最初の停止地点です。ルート サーバーはドメイン名を含む再帰リゾルバーのクエリを受け入れ、ルート ネーム サーバーはドメインの拡張子 (.com、.net、.org など) に基づいて再帰リゾルバーを TLD ネーム サーバーに誘導することで応答します。
しかし、再帰リゾルバが TLD サーバーに直接クエリを実行できないのはなぜでしょうか? 私の理解では、TLD サーバーは約 1500 台しかなく、これをすべてのリゾルバ サーバーに簡単に分散できます。
すべての TLD サーバーをリゾルバに配布するには、ルート サーバーのようなものが必要になります。ただし、TLD リストを初期化するために 1 回だけポーリングする必要があります。私の理解では、すべての DNS 要求はルート サーバーに問い合わせます (例: 「.com の TLD サーバーはどこですか?」)。これはかなり非効率に思えます。
答え1
しかし、再帰リゾルバが TLD サーバーに直接クエリを実行できないのはなぜでしょうか? 私の理解では、TLD サーバーは約 1500 台しかなく、これをすべてのリゾルバ サーバーに簡単に分散できます。
なぜなら、1500 台のサーバーのリストがある場合、更新をかなり頻繁に配布する必要があるからです。そして、そのようなリストをすべてのユーザー (リゾルバを実行しているユーザーだけであっても) に配布する必要を回避することが、そもそも DNS が構築された理由の 1 つです。
確かにこれは可能だ(そして実際に行われている状況もある)が、それでもXルートサーバーが必要になる。リストを配布するためとにかく、既存のメカニズムを使用する方が簡単です。おそらく、もっと起動のたびにリスト全体を取得するよりも効率的です。
すべての TLD サーバーをリゾルバに配布するには、ルート サーバーのようなものが必要になります。ただし、TLD リストを初期化するために 1 回だけポーリングする必要があります。私の理解では、すべての DNS 要求はルート サーバーに問い合わせます (例: 「.com の TLD サーバーはどこですか?」)。これはかなり非効率に思えます。
はい、すべての DNS 要求にはこのようなクエリが必要ですが、ほとんどの場合、TTL が許す限り、リゾルバのキャッシュから直接実行されます。その点ではルート クエリに特別な点はありません。ルート クエリは、チェーン内の他のすべてのクエリと同様にキャッシュされます (もちろん、最終クエリも同様です)。
各TLDは個別にキャッシュされるため、リスト全体を取得するよりも効率的である可能性が高い。ユーザーが主に10個のTLDを必要とするリゾルバの場合、ルートサーバーに1日に1回、10回のクエリを実行するだけで済む。1500台のサーバーという大きなリストの場合、同じ頻度でリスト全体を更新すると、ルートサーバーのリソースが大量に消費され、増分転送を使用したとしても、多くの変更がまだ受信されることになる。必要ありません。
答え2
@gantendo が指摘しているように、キャッシュは存在します。
からhttps://en.m.wikipedia.org/wiki/ドメイン名システム
このメカニズムは、インターネット上のすべての解決がルートから開始する必要がある場合、ルート サーバーに大きなトラフィック負荷をかけることになります。実際には、DNS サーバーではキャッシュがルート サーバーの負荷を軽減するために使用されるため、ルート ネーム サーバーが関与するのは実際にはすべての要求の比較的小さな部分だけです。
言い換えれば、ルートサーバーはTLDリストを初期化するために時々ポーリングされるだけである。