DNS(Domain Name System)

IPアドレスとドメイン名を相互に交換するプロトコル。

図:DNSでドメイン名に紐づくIPアドレスを調べる

ドメイン名

www.example.co.jpのようにドットで区切られた文字列で構成されている。この一つ一つの文字列のことを「ラベル」という。ドメイン名はFQDN(Fully Qualified Domain Name、完全修飾ドメイン名)と呼ばれ、ホスト部ドメイン部で構成されている。ホスト部はFQDNの最も左側にあるラベルで、コンピューターそのものを表す。ドメイン部は右から順に「ルート」「トップレベルドメイン(TLD、Top Level Domain)、第2レベルドメイン(2LD、2nd Level Domain)、第3レベルドメイン・・・で構成されていて、国や組織、企業などを表す。また、右端のルートは「.」(ドット)で表され、通常は省略される。

トップレベルドメインには地域ごとに割り当てられるccTLD(country code Top Level Domain、国別コードトップレベルドメイン)と、特定の領域・分野に割り当てられるgTLD(generic Top Level Domain、分野別トップレベルドメイン)の2種類がある。

ドメイン名はルートを頂点としてツリー上の階層構造になっていて、右から順にラベルを追っていくと最終的に対象となるサーバーまでたどり着けるようになっている。この階層構造のことをドメインツリーという。

表:代表的なTLD

図:ドメインツリー

名前解決

IPアドレスとドメイン名を相互に変換する処理の事。名前解決にはhostsファイルかDNSのどちらかを使用する。どちらが選択されるかはOSの設定による。

hostsファイルを使用した名前解決

hostsファイルとは、端末のIPアドレスとドメイン名の組み合わせが記載されているテキストファイルのこと。

hostsファイルに直接ホスト名やドメイン名を追記すると、DNSサーバーを使用せずに直接目的のサーバーにアクセスすることができる。hostsファイルの中から対象のドメイン名を見つけられなかったらDNSによる名前解決に移行する。

DNSを使用した名前解決

hostsファイルによる解決がインターネットの発展とともに限界を迎え、新たに生まれた仕組み。DNSクライアントキャッシュサーバー権威サーバーが相互に連携しあうことによって成り立っている。

DNSクライアント(別名:スタブリゾルバー)

DNSサーバーに名前解決を要求するクライアント端末・ソフトウェアのこと。Webブラウザ、メールソフトなど。

DNSクライアントはキャッシュサーバーに対して名前解決の要求(再帰クエリ)を送信する。また、キャッシュサーバーから受け取った応答(DNSリプライ)の結果を一定期間キャッシュ(一時保存)しておき、同じ問い合わせがあったときに再利用することによってDNSトラフィックの抑制を図っている。(OSによってはキャッシュを持たない)

キャッシュサーバー(別名:フルサービスリゾルバー、参照サーバー)

DNSクライアントからの再起クエリを受け付け、インターネット上にある権威サーバーに名前解決の要求(反復クエリ)を送信するDNSサーバー。DNSクライアントがインターネット上に公開されているサーバーにアクセスするときに使用する。

キャッシュサーバーもDNSクライアントと同じように権威サーバーから受け取った応答(DNSリプライ)の結果を一時キャッシュしておく。

権威サーバー(別名:コンテンツサーバー、ゾーンサーバー)

自分が管理するドメインに関して、キャッシュサーバーからの反復クエリを受け付けるDNSサーバー。自分が管理するドメインの範囲(ゾーン)に関する各種情報(ドメイン名やIPアドレス、制御情報など)をゾーンファイルとういデータベースに、リソースレコードという形で保持している。

インターネット上の権威サーバーは、ルートサーバーと呼ばれる親分サーバーを頂点としたツリー状の階層構造になっている。ルートサーバーは、トップレベルドメインのゾーンの管理をトップレベルドメインの権威サーバーに委任する。また、トップレベルドメインの権威サーバーは、第2レベルドメインのゾーン管理を、第2レベルドメインの権威サーバーに委任する。以降、第3、第4と委任関係が続く。

DNSクライアントから再起クエリを受け付けたキャッシュサーバーは、受け取ったドメイン名を右のラベルから順に検索していき、そのゾーンを管理する権威サーバーにどんどん反復クエリを実行していく。最後までたどり着いたら、その権威サーバーにドメイン名に対応するIPアドレスを教えてもらう。

図:再起クエリと反復クエリ

ゾーンファイルとリソースレコード

権威サーバーは、自分が管理するドメイン名の範囲(ゾーン)に関する情報をゾーンファイルという名前のデータべース(ファイル)で管理している。ゾーンファイルには、管理的な情報を表すSOAレコードや、ドメイン名とIPアドレスを関連付けるAレコードなど、数タイプのリソースレコードが格納されていて、権威サーバーはその情報をもとに応答する。

各リソースレコードは対象となるドメイン名を表すドメイン名、レコードの生存時間(キャッシュされる時間)を表すTTL(Time To Live)、ネットワークの種類を表すクラス、リソースレコードの種類を表すタイプ、リソースレコードのデータが格納されるデータで構成されている。

図:ゾーンファイル

表:リソースレコードの構成要素

表:代表的なリソースレコード

DNSのメッセージフォーマット

DNSの処理に時間がかかるとその後のアプリケーション通信もずるずる遅れてしまう。そこで、名前解決は基本的にUDP(ポート番号:53番)を使用して、処理速度を優先している。(メッセージサイズが大きいときにはTCPを使う場合もある)

HeaderセクションQuestionセクションAnswerセクションAuthorityセクションAdditionalセクションという最大5つのセクションで構成されている。

このうち、Answerセクション、Authorityセクション、Additionalセクションはないようによってあったりなかったりする。

図:DNSのメッセージフォーマット


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です