LoginSignup
17
7

More than 5 years have passed since last update.

Domain Name Systemってなんのこと?

Last updated at Posted at 2019-03-02

ドメイン名からIPアドレスを特定する仕組み

前の記事で、Webブラウザが作成したリクエスト・メッセージのリクエスト・ラインに書かれているURI(送信先)はWebサーバのドメイン名で書かれていて、それをOSに送信してもらうときには、ドメイン名ではなくIPアドレスを指定する必要があることを説明しました。

そこで登場するのが、DNS(Domain Name System)です。DNSによってドメイン名からIPアドレスを特定することができます。

今回はドメイン名からIPアドレスを特定するDNSの仕組みについてまとめていきます。

これは何の記事か?

プログラミングしか学んでこなかったエンジニアが本を参考に、DNSの仕組みについてまとめた記事です。

対象読者

  • プログラミングしか学んでこなかった
  • DNSってなんですか??

この記事のゴール

  • リクエスト・メッセージに書かれているドメイン名からIPアドレスを特定する仕組みについて説明できる

DNSってなに??

DNS(Domain Name System)とは、ドメイン名とIPアドレスを相互に変換する仕組みです。ドメイン名とIPアドレスの対応表を持ったDNSサーバをインターネット上に配置し、DNSサーバに問い合わせることでドメイン名に対応するIPアドレスを取得するというものです。

network-DNS.png

DNSの実現方法

上記の説明は、問い合わせしたDNSサーバにドメイン名とIPアドレスが登録されている場合を想定しています。しかし、IPアドレスは43億個もあるので、ドメイン名とIPアドレスの対応表だけでも膨大な情報量になってしまいます。

一台のDNSサーバでDNSを実現しようとすると、保持する情報が膨大になるだけでなく、Webサーバにアクセスしようとする度にDNSサーバへの問い合わせが発生するので、一台のサーバではとてもさばききれません。さらに、そのDNSサーバがダウンしてしまったら、世界中でインターネットが利用できなくなってしまいます。

そこで情報を分散させて多数のDNSサーバに登録し、DNSサーバ同士が連携をすることで該当の情報を探し出すという仕組みでDNSを実現することになりました。

network-DNS実現.png

ドメインの階層構造

DNSによってIPアドレスが特定される流れを説明する前に、ドメインの階層構造について理解すると良さそうです。

ドメイン名はドット区切りの階層構造になっていて、右に位置するものが上位階層を表すことになっています。例えば、www.example.com というのは com というドメインの下にある example というドメインのさらに下にある www というサーバのことを指します。

DNSによって対象サーバのIPアドレスが特定される流れ

インターネットには数万台のDNSサーバが存在するので、対象WebサーバのIPアドレスを持っていないか片っ端から聞いていくのは現実的ではありません。

そこで、まず下位のドメインを担当するDNSサーバのIPアドレスを、その上位のDNSサーバに登録し、そのDNSサーバをさらに上位のDNSサーバに登録するようにしました。

www.example.comを例にすると、www.example.comというドメインを担当するDNSサーバをexample.comのDNSサーバに登録し、example.comのDNSサーバをcomドメインのDNSサーバに登録するといった具合です。

さらにcomjpといったトップレベル・ドメインの上位にルート・ドメインと呼ばれるドメインも存在しており、ルート・ドメインのDNSサーバにトップレベル・ドメインのIPアドレスが登録されています。

※ ルート・ドメインを担当するDNSサーバに割り当てられたIPアドレスは世界で13個しかありません。

ここから実際の流れを追いながら説明していきます。

network-ルート・ドメイン.png

  1. クライアントが最寄りのDNSサーバにwww.example.comのIPアドレスを聞く
  2. 最寄りのDNSサーバに情報が登録されていない場合、ルート・ドメインにwww.example.comのIPアドレスを聞く
  3. ルート・ドメインのDNSサーバに情報が登録されていない場合、下位のドメイン(com)を担当するDNSサーバのIPアドレスを返す
  4. comのDNSサーバにwww.example.comのIPアドレスを聞く
  5. comのDNSサーバに情報が登録されていない場合、下位ドメイン(example)を担当するDNSサーバのIPアドレスを返す
  6. com.exampleのDNSサーバにwww.example.comのIPアドレスを聞く
  7. 情報がある場合、www.example.comのIPアドレスを返す
  8. 最寄りのDNSサーバがクライアントにwww.example.comのIPアドレスを返す
  9. クライアントがwww.example.comのIPアドレスに対してリクエスト・メッセージを送る

このようにして、WebサーバのIPアドレスを特定します。

キャッシュ機能を利用して効率を上げる

さらにDNSサーバは情報探しの効率を上げるため、一度調べたドメイン名をキャッシュに記録しておく機能を持っています。これにより、他のDNSサーバと通信をしなくてもキャッシュした情報を返すようになるので効率が上がります。

クライアント・DNSサーバ間の通信プロトコル「UDP」

クライアントのOSの内部にはプルトコル・スタックというネットワーク制御用ソフトウェアがあり、それがTCP(Transmission Control Protocol)UDP(User Datagram Protocol)といったプロトコルを使ってデータ送受信を行います。

データを確実に送受信したい時はTCPに則って通信が行われ、確実性はともかく速くデータを送受信したい時はUDPに則って通信が行われます。そして、DSNサーバとのデータ送受信はUDPに則って行われています。

TCPとUDPについては次の記事でまとめさせていただきます。

まとめ

DNSでは、WebサーバのIPアドレスが登録されているDNSサーバのIPアドレスが、上位ドメインのDNSサーバに登録され、そのDNSサーバがさらに上位ドメインのDNSサーバに登録されるという特徴をもつので、ルート・ドメインから階層を下にたどっていくことで目的のDNSサーバにたどり着けるので、WebサーバのIPアドレスを特定できる。

参考にした本

所感

WebブラウザにURLを入力してWebページに遷移する裏側で、このような処理が行われているとは全く知らなかった。多くのDNSサーバにアクセスしているはずなのに、一瞬でWebページが表示されることに驚きました(キャッシュされている可能性が高いですが)

DNSについて学べたことで、DNSキャッシュポイズニング攻撃の理解もかなりスムーズでした。次回はTCPについてまとめようと思います。

17
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7