DNSサーバーとリゾルバの関係をざっくり解説します

DNSサーバーは大きく分けて2種類ある

以前別の記事で、DNSサーバー(別名ネームサーバー)についてざっくりと解説しました。

この中で僕は、

『DNSサーバーは街の住所録のようなもので、ドメイン名とIPアドレスを紐づけしているもの』

と説明しています。

しかし実際には、別の目的をもったDNSサーバーが存在しています。

そのサーバーの目的は、パソコンやスマホの替わりに、ドメインの名前解決をおこなうことです。

名前解決は手間がかかる

ドメイン名をIPアドレスに変換することを名前解決といい、非常に手間がかかります。

例:xxx.aaa.jpの名前解決
女性PC

DNSルートサーバーさん、xxx.aaa.jpのIPアドレスを教えてください。

サーバー

【DNSルートサーバー】
JPのDNSサーバーが知っているので、そちらで聞いてください。

女性PC

JPのルートサーバーさん、xxx.aaa.jpのIPアドレスを教えてください。

サーバー

【JPのルートサーバー】
aaa.jpのDNSサーバーが知っているので、そちらで聞いてください。

女性PC

aaa.jpのDNSサーバーのDNSサーバーさん、xxx.aaa.jpのIPアドレスを教えてください。

サーバー

xxx.aaa.jpのIPアドレスは、xxx.xx.xx.xxです。

ドメイン名名前解決簡易版

ドメインの名前解決をするために、世界に数台あるDNSルートサーバーに問い合わせると、たらい回しにされます。

共有レンタルサーバーなどは、サーバー会社の所有するドメイン内にDNSサーバーが設置されているので、もっと複雑な手順で名前解決をおこなっています。

一つのドメインのIPアドレスを取得するために、非常に多くの手間と時間がかかるのです。

Webページを見るたびにこのような手順を行っていたら、パケット通信料が跳ね上がってしまいますね。

DNSサーバーの負担も大きい

ドメインの名前解決は、パケットの上限を設定しているスマホユーザにとって大きな問題です。

同時にDNSサーバーにとっても、大きな問題です。
世界中のスマホやパソコンから同時アクセスされたら、処理の限界を超えてしまうかもしれないのです。

そこで、DNSの名前解決をパソコンやスマホのかわりにおこなってくれるサーバーが必要になってきました。

それがDNSサーバーです!

DNSサーバー役割

またDNSサーバーが出てきました…
あっちこっちにDNSサーバーがあって大混乱です。

実はDNSサーバーとは、『クライアントからドメイン名の名前解決について問い合わせを受けたら、何らかの回答を返すサーバー』を指します。

※サーバーとクライアントについては、こちらで解説しています。

名前解決を代行してくれるサーバーも、クライアントからみたらDNSに関する処理をしてくれているので、DNSサーバーなのです。

実際には、次のように分けられています

コンテンツサーバ/権威DNSサーバ

ドメインとIPアドレスの情報を持っているDNSサーバー。

DNSフルサービスリゾルバ

コンテンツサーバ/権威DNSサーバに問い合わせ、ドメインの名前解決をおこなうDNSサーバー。

解決したドメインの情報を一時的に保存する、DNSキャッシュサーバーを兼ねているのが一般的。

リゾルバとは

ドメイン名をIPアドレスに変換することを名前解決といい、英語で『Name Resolution(ネームリゾリューション)』と表記されます。

この関連から、名前解決するものを『Name Resolver』、略してリゾルバと呼んでいて、実際には、コンピューター機器上で動作するクライアントプログラムのことです。

このリゾルバには『DNSフルサービスリゾルバ(フルリゾルバ)』と『DNSスタブリゾルバ(クライアントリゾルバ)』2種類あります。

DNSフルサービスリゾルバとDNSスタブリゾルバ

DNSフルサービスリゾルバ

ここまで紹介してきた名前解決の代行をおこなってくれるのが、DNSフルサービスリゾルバです。

同じドメインの問い合わせは、自サーバー内に保存していた情報を返送します。
新規のドメインや保存期限が切れたドメインに対して、権威DNSサーバに問い合わせをおこないます。

DNSスタブリゾルバ

DNSフルサービスリゾルバに問い合わせを行うDNSクライアントプログラムです。
権威DNSサーバに問い合わせをする機能がありません。

基本的にパソコンやスマホはDNSスタブリゾルバが実装されていて、フルサービスリゾルバの機能を持っていません。

補足:DNSフォワーダ

家庭内や社内ネットワークからインターネットに接続するとき、ルーターを経由する。
ルーターにはDNSサーバー機能を持っている機器があり、パソコンやスマホのDNSサーバーへのIPアドレスをルーターと同じものにすることで、ルーターが名前解決をおこなってくれます。

パソコンやスマホからみると、ルーターがフルサービスリゾルバの役割を持っているように見えますね。

DNSフォワーダ

しかし実際には、外部のフルサービスリゾルバに中継をおこなっているだけで、名前解決をおこなっていません。

このように名前解決を中継する機能を、DNSフォワーダといいます。

DNSの再帰問い合わせと反復問い合わせ

ここまでの記事でDNSの名前解決は、スタブリゾルバからフルサービスリゾルバへの問い合わせと、フルサービスリゾルバから権威DNSサーバへの問い合わせの2種類あることわかりました。

実はこの2種類の問い合わせについても、それぞれ『再帰問い合わせ』と『反復問い合わせ』という名前がついています。
しかしプログラマ的な立場から見ると、この名前にはもやもや感が満載です。

再帰問い合わせ

スタブリゾルバからフルサービスリゾルバへの問い合わせを、『再帰問い合わせ』と呼びます。

再帰問い合わせ

プログラムを学んでいる人は、再帰と聞くと繰り返しや反復を思い浮かべてしまいます。
だから一回のみの問い合わせを、再帰問い合わせと言われても違和感しかありませんね。

しかし再帰の意味をネットで調べはいけません。さらに混乱します。

自分なりに、納得するしかありません。

自分なりの納得

再帰問い合わせを受け付けたDNSサーバーは、名前解決をした最終的な答えを返信しないといけません。

そのために次のどちらかの処理をおこないます。

  1. 以前解決したドメインだったら、キャッシュ内のデータを返す
  2. ルートサーバー→TLDサーバー→権威DNSサーバと再帰的に問い合わせ、名前解決をおこない結果を返す

つまり再帰問い合わせとは、「再帰的でもいいから最終的な結果だけを教えてね」という問い合わせです。

反復問い合わせ

反復問い合わせは、フルサービスリゾルバと権威DNSサーバ間の問い合わせです。
『非再帰問合せ』とも呼ばれています。

反復問い合わせ

上の図を見ると、個別の問い合わせが『反復問い合わせ』なのか、それとも全体の問い合わせが『反復問い合わせ』なのかわかりませんね。

権威DNSサーバは、『反復問い合わせ』のみ受け付けるのが望ましいとされています。
つまり個別の問い合わせは『反復問い合わせ』です。

しかし反復して名前解決すること自体を、『反復問い合わせ』と呼んでいるケースもあります。

もやもやしてきますが、そういうのものだと思っておいた方が幸せかもしれませんね。

補足:DNSフォワーダを経由する場合

スタブリゾルバとフルサービスリゾルバの間にDNSフォーワーダーがある場合、問い合わせはどうなるのでしょうか。

DNSフォワーダを経由する問い合わせ

DNSフォーワーダー内に、問い合わせされたドメインのキャッシュがある場合、そのキャッシュが返信されます。

存在しない場合は、フルサービスリゾルバに再帰問合せをおこないます。

実際のところ、フルサービスリゾルバだと思っていたDNSサーバーがフォワードしているだけということがあるので、「気にするな」ということですね。