テクノロジー

2022年7月22日

    ドメイン / DNSサーバとは

    ドメインとはなにかを理解する / DNSサーバのはたらきを理解する

    目次

    1. Webとは
    2. Webを支えるクライアント / サーバとは
    3. HTTPとは
    4. URL / HTTPメソッドとは
    5. Webアプリケーションとは
    6. IPアドレスとは
    7. TCP/IPとは
    8. ドメイン / DNSサーバとは
    9. ポート番号とは
    10. 代表的なプロトコル
    11. Webアプリケーションを支えるサーバの種類

    *上記のリンクにアクセスすることで、続きをDIVER Learningsで確認できます。

    ゴール

    • ドメインとはなにかを理解する
    • DNSサーバのはたらきを理解する

    ドメインとはなにか

    ドメインとは、インターネット上のサーバの住所であるIPアドレスを 人間にわかりやすい言葉(文字列) で表現したものです。
    172.217.175.4と書いても、どこのアドレスかわかりませんが google.comまたは、www.google.comと書くことでどこのアドレスかが認識できるようになります。
    ドメイン名は、国際非営利組織であるICANN(Internet Corporation for Assigned Names and Numbers)に認定された民間組織のレジストラに申請して登録する必要があります。
    この登録名は、ICANNによって調整され、世界中で重複することのない名前になります。

    ドメインについてGoogleのURLを例に、もう少し詳しくみていきましょう。
    www.google.comというURLのことを、正式には 完全修飾のドメイン名(FQDN) といいます。
    FQDNは、一つのホスト(サーバ)を認識するのに使用します。
    また、FQDNは、次のように分けることができます。

    • www:ホスト名(サーバの種類別に指定する名前(省略することも可能))
    • google.com:ドメイン名(サーバグループ(ゾーン)を表現する名前、または標準サーバ名(ホスト省略時))

    一般的に www(World Wide Web)は、標準的なWebサーバのホスト名として使用されます。
    FQDNは、サーバの目的に応じて次のように設定できます。このとき、同じドメインのFQDNは、ドメインのゾーン情報として管理されます。
    それぞれのFQDNに対して、住所であるIPアドレスをそれぞれ対応付けることで、ドメイン名はIPアドレスに変換できるようになります。

    [google.comゾーン]

    FQDN名 目的 IPアドレス
    google.com Google検索サイトの標準サーバ用 142.251.42.142
    www.google.com Google検索サイトの標準サーバ用 172.217.175.68
    news.google.com Googleニュースサーバ用 172.217.175.46
    smtp.google.com Googleメールサーバ用 74.125.204.27

    DNSサーバが存在する理由

    URLでドメイン名(例えば www.google.com)を指定して、目的のWebサーバへHTTPのリクエストを行うとき、ドメイン名のままではサーバに情報を送ることはできません。
    なぜなら、国際郵便システムのTCP/IPは、ドメイン名を理解できないためです。
    したがって、TCP/IPが認識できるようIPアドレスに変換してあげる必要があります。
    つまり、ドメイン名とIPアドレスを紐づけて変換する仕組みが必要です。これを DNS(Domain Name System) といいます。

    Image from Gyazo

    DNSは、クライアントコンピュータのリゾルバ(DNSクライアントアプリケーション)の要求に基づいて、ドメイン名をIPアドレスに変換する(名前解決する)役割を果たします。
    このサーバ側のアプリケーションのサービスを行うのが DNSサーバになります。

    Image from Gyazo

    DNSサーバの問い合わせの流れ

    しかし、IPアドレスの数は途方もなく多いため、1台のDNSサーバですべての対応づけを記憶しておくことは不可能です。
    そのため、DNSサーバは階層構造でドメインを管理することにより、複数のホストに分散して管理しています。

    たとえば、DIVE INTO CODEのWebサイトにアクセスすることを例に考えます。
    DIVE INTO CODEのWebサイトのURLはhttps://diveintocode.jp/です。
    DIVE INTO CODEのWebサイトのURL構成を説明します。

    Image from Gyazo

    ドメイン名は、「.」(ドット)で区切って、右側からの階層構造になっています。
    この階層構造の名前は、そのままDNSサーバの階層構造と同期します。

    トップレベルドメインを管理するDNSサーバをルートDNSサーバといいます。
    ルートDNSサーバは、アメリカを中心に世界中に13台設置されています。
    このルートDNSサーバを最上位にして、階層的なDNSサーバの仕組みが作られています。

    Image from Gyazo

    DNSサーバを使った処理の流れを説明します。
    ブラウザのアドレス欄に上記のURLを入力してエンターキーを押すと、以下のようなやりとりが発生します。

    1. クライアントは、ローカルのDNSサーバに問い合わせします(①の流れ)。
    2. ローカルのDNSサーバに該当のゾーン情報が見つからないとき、ルートDNSサーバから順に問い合わせを行います。⑦で目的のゾーン情報が見つかり、該当のIPアドレスを取得します(②~⑦の流れ)。
    3. ローカルのDNSサーバは、取得したIPアドレスをクライアントに返し、クライアントは、それで目的のWebサーバにリクエストできます(⑧~⑩の流れ)。

    Image from Gyazo

    Chromeのデベロッパーツールを使うと、DNSサーバとのやりとりにかかった時間が確認できます。
    (Networkタブ > Timing)
    Image from Gyazo

    DNSサーバに問い合わせをしてみよう

    ここまでのテキストですでに体験済みですが、実際にDNSサーバにGoogleのサーバのIPアドレスを問い合わせしてみましょう。
    ターミナルで以下のコマンドを実行してください。

    $ nslookup www.google.com
    

    すると、以下のような画面になるはずです。赤線部分がサーバのIPアドレスです。

    Macの場合

    Image from Gyazo

    Windowsの場合

    Image from Gyazo

    なお、nslookupコマンドで実行したIPアドレスの結果が上記と異なることがありますが問題ありません。Googleの利用者が多く、負荷を分散させるためにサーバを複数設置しているのです。その結果、割り振られているIPアドレスも複数になります。

    www.google.comに対応しているIPアドレスは172.217.31.132であることがわかりました。
    その証拠に、ChromeのアドレスバーにIPアドレスを入力してエンターキーを押してもGoogleにつながるはずです。

    ブラウザでwww.google.comにアクセスすると、DNSサーバがIPアドレスに変換してくれて、無事に目的のサーバにたどりつく、という仕組みになっているのです。

    また、補足ですが、今後学習を進めていく中で、localhostという名前をよく使用します。
    これは、自分自身のコンピュータをあらわすドメイン名(FQDN)にあたります。
    実際に、localhostに対して、次のようにnslookupコマンドを実施してみてください。

    $ nslookup localhost
    

    すると、127.0.0.1というIPアドレスが返ってきます。
    この127.0.0.1というIPアドレスは、自分自身のコンピュータを指すループバックアドレス127.0.0.1127.255.255.254)というものです。
    localhostを指定すると、TCP/IPは、自分自身のコンピュータにループバックする(戻す)住所を送信します。

    まとめ

    • IPアドレスを人間がわかりやすいようにしたものがドメインである。
    • DNSサーバは、IPアドレスとドメインの対応づけをするために存在している。
    • DNSサーバは階層構造になっており、ドメインの階層ごとに問い合わせが発生する。

    関連記事

    次回:9. ポート番号とは
    前回:7. TCP/IPとは

    *上記のリンクにアクセスすることで、続きをDIVER Learningsで確認できます。

    ディープロで学んでみませんか?