【新人向け】わかるようでわかってなかったhostsとDNSのこと〜歴史を知れば覚えられる〜

#**はじめに**
会社で新人向けのインフラ研修としてDNSサーバの構築、
サーバでのネットワークの設定研修などをやっているのですが、
「hostsとDNSってどちらも名前解決の技術ですがどういう違いがあるんですか？」
などとよく聞かれます。

社内でよく聞かれると言うことは、
こういった疑問を持った人が少なからずいるってことで、
記事を書けばその人達の役に立つであろう事、
自分の頭の整理になること
そして一度記事にしてしまえば、あとはURLを送りつけることで説明工数が格段に減るので
（最低）書こうと思いました。

この記事は、IT初心者に向けた内容です。
わかっている方は、温かい目で見て頂けると幸いです。

#**名前解決**
hosts(Linux、Unix、Macであれば、/etc/hosts、
Windowsだと、C:¥WINDOWS¥system32¥drivers¥etc¥配下)も、
DNSも名前解決の技術です。
名前解決とは、なんぞやと言うと、IPアドレスとホスト名を紐付ける技術のことです。

「名前解決」と言われても初心者の人には、
「なにそれ？？？」と思う人が大半だと思います。

そういう人でも、
スマホに入っている電話帳のようなものだよと教えるとイメージが付きやすい人が多いです。

どういうことかと言うと、
電話をかける際も、通信する際も本来、数字を覚えなくてはいけません。
でも、
**090-1111-2222**
**192.168.100.111**
のような数字の羅列を覚えるのと、、、

**山田太郎**
**WEBSVR**

とどっちか覚えろ！！と言われるのだと、どっちが覚えやすいでしょうか？

格段に後者ではないでしょうか？

少ない数なら数字でも覚えられるかもですが、
100以上になってくると覚えきれない、間違っちゃう人が大半ではないでしょうか？
僕は、絶対覚えられないです！！笑

電話帳は

090-1111-2222が山田太郎
という紐付きをしてあげるで人間がわかりやすくなるための技術ですよね？

名前解決も根本は同じ考え方です。

こんな感じで僕は、
普段使い慣れているものに例えることを心がけています。
特にIT未経験者には、出来るだけIT用語を使わないで説明することが大事かなと思います。
#**そもそもの歴史**
そもそもとして、hostsとDNSというのが、全く関係性のない技術だと思っている人が結構います。
hostsとDNSを理解するためには、それぞれを別個に覚えるより
歴史を知ることが大事かなと思います。

それでは問題です！

最初に出来たのは、どちらでしょうか？


答えは、**hosts**です。
hostsはもともと[ARPANET](https://ja.wikipedia.org/wiki/ARPANET)という学術研究のために大学・研究所間結び各箇所にあるコンピュータを識別しやすくするため（最初は4台でした）に導入された技術です。
ARPANETに所属しているコンピュータが増えるたびに、hostsファイル(当時はhosts.txtというファイルでした)を更新し配布していました。
このやり方を考えた人も、当時はコンピュータが高価でバカでかく、使う人も限定されていたため、「これで全然問題ないっしょ！」と思って作ったんだと思います。

ただ、予想を上回ってコンピュータはどんどん増え続けていきました。
hostsで運用する仕組みは完全に破綻します。

恐らく、当時の技術者は、
「hostsで管理するとか無理ゲー。。。」
と思ったことでしょう。

そこで生まれたのが、**DNS(Domain Name System)**です。

#**DNS**
DNSは、名前の通り、コンピュータの[ドメイン](https://www.kagoya.jp/howto/webhomepage/01/)を教えてくれる仕組みです。

人間は、数字を覚えるより、単語だったり意味のあるものを覚えるほうが得意と先ほど言いました。

インターネットが、今のように当たり前を通り越して空気みたいな存在になった現在、
ウェブサービスは、アホみたいな数あります。
（つまりそれだけ膨大な数コンピュータがあるということです。）

例えば、amazonで買い物をしようと思って、URLをクリックする時、
https://amazon.com
と書いてあるのと、
https://54.239.25.208
と書いてあるのではどちらが、amazonのサービスだとわかりやすいでしょうか？
当たり前ですが、前者ですよね?

でもみなさんは、amazon.comに接続するために、
amazonのIPアドレスが記載されたファイルを自分のコンピュータにダウンロードしたことはあるでしょうか？もしくは自分でその設定をいれたりしたでしょうか？
99.9％の人はそんなことやったことないと思います。

DNSとhostsとの一番の違いは、
「ファイルの配布がいらない、自分のコンピュータにhosts設定もする必要がなく名前解決が行える」ということです。

「ファイルもいらなくて、自分で設定もしていないのに、どうして名前解決出来るの？？」

と思う人もいると思います。

それは、**ネームサーバ**という、通訳のような役割をしてくれるサーバがやってくれているからです。
※ネームサーバは、DNSサーバとも呼ばれます。

#**ネームサーバの種類**
ネームサーバには、以下の種類があります。

・**ルートサーバ**
・**トップレベルドメイン**
・**セカンドレベルドメイン**
ネームサーバは上３つのどれかに属しています。

ルートサーバは、トップレベルドメインの場所を知っています。
トップレベルドメインは、セカンドレベルドメインの情報を知っています。
しかし、ルートサーバは、セカンドレベルドメインの場所がどこにあるかは知りません。
ルートサーバ→トップレベルドメイン→セカンドレベルドメイン
の順番で検索かけていくのですが、基本的に自分の一個下のランクまでしか存在を知らないような仕組みになっています。

こうすることで、全てのホストを管理、知っている必要がなく、かつ、結果として上から検索をかけることで
目的のコンピュータにたどり着くことが出来るようにしたのが、DNSという仕組みです。
自分のWebサイトを作って、名前解決させたいといった場合などは、DNSサーバを自分で作るか、
お名前.comなど、Domainレコードに登録してくれるサービスがあるのでそちらなどを利用します。

#**hostsとDNSの実際の使われ方**
「じゃあDNSあるなら、hostsいらないじゃん」
って思った人もいると思います。

ただ上に書いたとおり、DNSは、莫大なコンピュータのホスト名を覚えきれない、管理仕切れないことから生まれたサービスなので、今でも、インターネットに接続していない環境でホスト名を名前解決したいと言った場合にはhostsで運用されているところもあります。

#まとめ
長くなりましたが、まとめとして
**hosts**
・最初に生まれた名前解決の仕組み。
・名前解決を行うためには、自分で設定もしくは、ファイルを取得しないといけない。
・インターネットに接続しない環境や内輪で通信したい環境では今でも使われている。

**DNS**
・コンピュータが爆発的に増えて世の中にあるコンピュータのホスト名の把握をhosts運用するのには限界が来たため生まれた仕組み。
・インターネットに公開するサーバなら、基本的にドメインを取得して名前解決できるように
　DNSサーバを建てるか、登録サービスに登録することで、誰でも自分のサービスにIPアドレス
　を知っていなくても接続できるようになる。

と覚えてもらえればいいと思います。