読者です 読者をやめる 読者になる 読者になる

DNSの仕組み まとめ

ArduinoIDE 1.0でEthernetシールド用のライブラリがDHCPDNSに対応したらしい。

"Support for DHCP and DNS has been added to the Ethernet library,"


DHCPDNSは、なんとなく理解している感じではあったが、ちゃんと調べたことがなかったので調べてみた。

とりあえず、DNSから調べたのでメモしておく。

インターネット上ではIPアドレスが、各サーバーの住所にあたり、同じIPアドレスは存在しないようになっている(グローバルIPに限る)。

ただし、IPアドレスは単なる番号の羅列なので理解しにくいし、覚えにくい。

DNS(Domain Name Service)は、たとえばwww.yahoo.co.jpというわかりやすい名前とそのIPアドレスを結びつけるサーバー。


小規模なネットワークなら、以下のような形式で管理すれば事足りる。

192.168.0.1 localhost
192.168.0.2 hogehoge

このようにIPアドレスと名前を1対1で結びつけて管理をしているのがWindowsならhostsファイル(標準ならC:\Windows\System32\drivers\etc\hosts)。

ただし、全IPアドレスの書き込まれたファイルを、すべてのPCに配るのは現実的ではない。

そこで、1つのサーバーにこの対応関係を保存して、そこにアクセスして名前とIPアドレスの対応を確認してもらうという方法へたどり着く。

しかし、1つのサーバーに上記のようなファイルを置くと、このファイルの行数が恐ろしい行数になってしまい、パフォーマンスや管理のしやすさに問題がある。


そこで大分類から小分類に分けて保存するような形式で管理されている。

DNSの最も頂点のサーバーは、「.comはこっち、.jpはこっち」といった情報を返す。

とりあえずここにアクセスして、情報をもらったら次は、返されたサーバーへアクセスすれば良い。
www.yahoo.co.jpなら、次はjpのDNSにアクセスすることになる。

jpへアクセスすると次はcoはこっちといった形式でどんどんリレーのように、サーバーが渡され、最終的にIPアドレスがわかることになる。


この方式のメリットは、各DNSサーバーは、自分の階層の1つ下の階層のDNSサーバーさえ覚えておけばよいということ。
保存するデータ量は一気に減る。

また、名前のかぶりの心配もない。
DNSサーバー内で名前が唯一のものであれば、その下の階層の名前は、上位の階層の名前をつけていけば、どのDNSサーバーの階層においても唯一の名前になる。

ただ、実際に、PCからインターネットにアクセスするときは、最上位のDNSサーバーから順に辿っていくわけではなく、まずはプロバイダーなどが用意しているDNSサーバーにアクセスする。

このDNSサーバーから最上位のDNSサーバーへアクセスしてIPアドレスを探すのだが、一度アクセスした名前に関してはこのDNSサーバーがキャッシュしているので、高速にアクセスできる。

キャッシュの保存時間は、DNSサーバーによる規定はあるけど、強制ではないので、更新頻度はまちまち。
なので、一部のDNSサーバーからは名前が見つからないといったことも起こりうる。