![DNS 階層のどこでキャッシュが行われ、クエリはどのように転送されるのでしょうか?](https://rvso.com/image/1642384/DNS%20%E9%9A%8E%E5%B1%A4%E3%81%AE%E3%81%A9%E3%81%93%E3%81%A7%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%8C%E8%A1%8C%E3%82%8F%E3%82%8C%E3%80%81%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
ホスト名を IP アドレスに解決するには、複数の DNS サーバーに問い合わせる必要があります。キャッシュが行われないと仮定すると、リクエストを送信した人 (クライアント)、再帰 DNS、ルート DNS、TLD DNS、そして最後に権威ネーム サーバーの順に処理されます。
順序は正しいですか? リクエストは転送されますか、それともサーバーはクライアントが接続する必要がある次のレベルのサーバーの IP アドレスで応答するだけですか? たとえば、再帰ネーム サーバーはルート サーバーで実際にクエリを実行しますか、それともルート サーバーの IP アドレスを渡すだけですか? キャッシュ目的の場合は最初の段階だと思います。また、キャッシュはどの段階で実行できますか? たとえば、ルート サーバーは TLD サーバーからの応答をキャッシュしますか? 固有のルート サーバーは 13 個しかないので、TLD サーバーに直接アクセスするのではなく、そのレベルを設定する意味は何ですか?
答え1
これは深いトピックなので、ここでは表面的な説明に過ぎませんが、クエリに回答する方法はいくつかあることを考慮してください。
一般に、利用可能なクエリのタイプによって、 のようなパスを解決するためにクライアントが実行する必要があるリクエストの数が決まりますa.b.c.com
。
再帰解決の場合、クライアントはサーバーに一度問い合わせて、探している完全な名前を取得します。サーバーはルートサーバーへの問い合わせを処理し、次にネームサーバーを解決してC
、B
ホストB
名を問い合わせますA
。ローカルサーバーはシングルクライアントへの応答。
非再帰的な解決では、クライアントは のネームサーバーを要求するリクエストを送信しC.com
、そのサーバーに のネームサーバーを問い合わせB.C.com
、次にそれらのサーバーにホスト を問い合わせますA
。これが私たちがずっと求めていた実際の答えです。ただし、この場合、クライアントは3つの別々のクエリを実行する必要がありましたそれを得るために。
関連する概念として「フォワーダー」があり、ローカル リゾルバーは不明な (非ローカルな) クエリを別のサーバーに転送して解決することができます。ローカル サーバーと上流のリゾルバー間のやり取りは再帰的である場合とそうでない場合がありますが、結果は単一の応答としてクライアントに返されるため、クライアントの観点からは再帰的です。
キャッシュについて言えば、キャッシュは、ネットワーク パフォーマンスの観点から、クライアントに近いほど価値が高くなります。ただし、キャッシュが近すぎて、キャッシュされた回答の多様性に欠けるセットを表す場合、キャッシュはあまり使用されないというトレードオフがあります。キャッシュを 1 層または 2 層上流に配置すると、キャッシュがより多くのユーザーの複合結果を表すようになり、回答の可能性が高くなります。
答え2
注文は大丈夫ですか?
一般的な順序はそうですが、直線ではありません。ルート サーバーはクエリを他の場所に転送せず、参照応答 (リゾルバーに他の場所でクエリを実行するように指示する) とともにリゾルバーに返します。TLD サーバーとドメイン サーバーについても同様です。
リクエストは転送されますか、それともサーバーはクライアントが接続する必要がある次のレベルのサーバーの IP アドレスで応答するだけですか?
両方の動作は発生しますが、発生する場所は異なります。
たとえば、再帰ネーム サーバーは実際にルート サーバーに対してクエリを実行するのでしょうか、それともルート サーバーの IP アドレスを渡すだけなのでしょうか?
再帰サーバーは実際のクエリを実行します。これが文字通り再帰サーバーの特徴です。クライアントのクエリを受け入れた後、最終結果を返すことができるまで、サーバー自体がさらにクエリを実行します。(これは、OS で実行されているクライアントが、必要な機能をすべて備えていないスタブリゾルバーにすぎないためです。)
ただし、ルート/TLD/ドメイン サーバーは再帰的ではありません。権限のあるドメインに対してのみ応答し、残りのドメインに対してはリダイレクト (参照) のみを提供します。独自にさらにクエリを実行することはありません。
また、キャッシュはどの段階で発生するのでしょうか。たとえば、ルート サーバーには TLD サーバーからの応答がキャッシュされるのでしょうか。
キャッシュは、クエリを送信して応答を受信するシステムで発生します。つまり、キャッシュ可能な情報を他のユーザーから受信するため、再帰リゾルバのみがキャッシュを実行します。
一方、ルート/TLD/ドメインサーバーは再帰クエリを処理することはありません。他のクエリは実行しないので、キャッシュする必要のあるものは何もありません。(サーバーは、アクセスしているドメインに対してのみ応答します。権威あるについて。)
固有のルート サーバーは 13 個しかないので、TLD サーバーに直接アクセスするのではなく、そのレベルを設定する意味は何でしょうか?
各リゾルバはどのようにして TLD サーバーがどこにあるかを知るのでしょうか?
「唯一の」TLD サーバーは存在しないことに注意してください。各 TLD には TLD サーバーが存在します。たとえば、TLD にはcom
1 セットのサーバーがあり、eu
TLD には別のセットのサーバーがあります。TLD は文字通り何百もあるため、静的なリストでは不十分です。
DNSルートはこの問題を簡素化します。すべてのTLDとそのサーバーのリストではなく、ルートドメインとそのサーバーが1つだけなので、初期リストははるかに小さくなり、変更も容易になります。とてもまれに、リゾルバ ソフトウェアに実際にそのコピーが含まれることがあります。ほとんどの再帰リゾルバには、「ルート ヒント」のコピーが含まれます。
(また、ルート サーバー アドレスが 13 個あることに注意してください。これは、初期の頃は 1 つのアドレスが 1 つのホストを意味していましたが、現在はそうではありません。インターネットはエニーキャスト ルーティングをサポートしているため、実際にはそれらのアドレスのほぼすべてが数百の固有のインスタンスに対応しています。)