今日は、ポール・モカペトリスの誕生日(1946)。
初期インターネットに貢献したプログラマーです。
そして、最大の貢献は DNS の発案と、最初のサーバーの実装でしょう。
DNS については、技術記事として過去に何度か取り上げています。
今回は、「なぜ」DNS が必要になったのか、その歴史を書いてみたいと思います。
初期のインターネットに DNS はありませんでした。
まずは、アドレスを直接指定して接続する「実験」が行われます。
これでは不便なので、すぐに「アドレスとホスト名の対応表」が作られます。
対応表は、HOSTS.TXT という名前で配布されていました。
(当初は、1バイトが 6bitのマシンもインターネットに接続されていました。
このため、ファイル名などは全て大文字が使用されました)
これを、各システムの適切な位置にコピーして使用します。
unix であれば今でも /etc/hosts に、「対応表」を置くことができます。
HOSTS.TXT は非常に重要なものなので、一括管理されました。
管理者はダグラス・エンゲルバート。
「マウスの発明者」として有名な…本当はもっとすごい…人です。
彼は初期のインターネットの管理に手を貸していました。
申請に応じて IP アドレスとホスト名を割り振り、HOSTS.TXT に書き込み、公開します。
利用者は、時々最新の HOSTS.TXT を取得する必要がありました。
そうしないと、新しく追加されたホストにはアクセスできないためです。
最初はうまくいっていたこの管理方法は、やがて破綻します。
当時、ホスト名は「世界中にたった1個」しか許されないものでした。
しかし、手動管理ではこれが保証できず、ホスト名の衝突が起こることがありました。
つまりは、送ろうとしたメールが、同じホスト名の別のマシンに届いたりするのです。
また、HOSTS.TXT は、数万行という非常に巨大なファイルとなりました。
世界中のすべてのホスト名が、このファイルに書かれているのですから。
そして、当時のインターネットはまだ低速でした。
何万と言うホストの管理者が、みんなで1つしかないこの巨大ファイルをダウンロードしようとするのです。
サーバーは接続に対応しきれませんでした。
これを解決しようとして、ポール・モカペトリスが出したアイディアが、ホスト名の分散管理です。
まず、ホスト名の衝突問題の解決。
世界中のホストを調査し、同じ名前にならない名前を付けなくてはならない、というのは現実的ではない。
そこで、名前を階層化します。
つまり、普通の人が「姓」と「名」を持つと同じ。
ある団体に、団体名を割り当てます。
この団体名は、同じ名前が無いようにします。
団体が大きすぎる場合、団体の中でさらにグループ名を割り当てます。
この名前も、団体の中では同じ名前が無いようにします。
さらに、グループ内でホスト名を考えてもらいます。
このホスト名も、グループ内で同じ名前が無いようにします。
最後に、今まで「ホスト名」を必要とした部分で、ホスト名、グループ名、団体名を接続した名前を指定します。
世界中に同じホスト名・同じグループ名が存在したとしても、団体名が違えば別の名前になります。
英語で、あるまとまった地域などのことを「ドメイン」と呼びます。
これが、「ホスト名のドメイン管理」です。
ちなみに、グループ名などは、何段階に階層化しても構いません。
世界に一つ、という保証さえあれば問題は無いのです。
次に、HOSTS.TXT 相当のファイルの管理も、グループや団体の単位で行ってもらいます。
自分の「ドメイン」の中にあるホスト名やグループに関してのみ責任を持ち、それ以外のことは適切な別のところに問い合わせる。
これが、ドメインの名前管理サービス。…つまり Domain Name Server 、DNS です。
各ドメインの管理ファイルは、今までの HOSTS.TXT のように巨大なものにはならないでしょう。
必要最小限の情報だけを送り合うことで、低速な回線でもすぐに情報が伝達できるようにします。
DNS の考え方では、知らない名前は基本的に「上位」のサーバーに問い合わせます。
つまり、ホスト名がわからなければ自分の属するグループに訊ね、そのグループは属する団体に訊ねるのです。
じゃぁ、団体はどこに訊ねるの? …一番上には「ルート」、つまり「根っこ」を用意します。
(太い根っこから、幹が伸びて枝に別れ、葉っぱが茂っているイメージです。葉っぱがホストに相当します)
アイディアが出されたのは、1983年の11月。RFC881,882,883の連番で、2と3がモカペトリスによって書かれています。
(881は、モカペトリスのアイディアを実行に移すために、以下のスケジュールを考えている…という内容)
この時のアイディアはたたき台に過ぎず、これから長い時間議論が続きます。
最終的には、4年後の 1987年11月に、RFC1034, 1035 として仕様が決まり、モカペトリスによって最初のサーバー(JEEVES)が実装されます。
当初、ルートサーバーは、エンゲルバートが管理しました。
それまでの HOSTS.TXT の管理人です。
しかし、重要なものを個人が管理するのも違うだろうということで、後に世界で13台のサーバーを、分散して管理することになります。
ルートにアクセスする必要がある際は、この13台の中でランダムに問い合わせを行います。
どれかのサーバーが障害を起こしてアクセスできなくても、別のサーバーに問い合わせれば大丈夫。
#現在は、見た目の上では13台のままですが、さらに数百台に分散されています。
ちなみに、13台には A~M の名前が付けられていますが、日本には M が置かれています。
これ、当時の日本のインターネットの世話役であった、「村井純」先生のイニシャルから決められたそうです。
#この話、以前に NHK の技術番組でも、本人が語っていました。
上のリンクは、最近本人にお会いして聞いた、という方のブログ。
ところで、DNS と IP アドレス(IPv4)には、似て非なる関係性があります。
IP アドレスは、0~255 (8bitで表現できる数)を、. (ピリオド)で区切って4つ並べたものです。
左側の数字が上位の管理者によって管理され、右に行くほど末端を意味します。
ドメイン名は、「名前」を . (ピリオド)で区切って並べたものです。
右の名前が上位の管理者によって管理され、左に行くほど末端を意味します。
…ドットで区切って並べる、という部分が同じなのに、左右のどちらが末端か、という扱いが違うのです。
DNS は、基本的には「名前を元に、IP アドレスを調べる」ためのものです。
しかし、IP アドレスを元に名前を知りたい、という場合(逆引き)もあります。
DNS では、「プログラムの仕組みはそのまま」で、「データを工夫して」逆引きに対応しています。
たとえば、192.168.127.32 というアドレスがある場合、これを逆引きするためのデータは、次のような「ホスト名」として設定します。
32.127.168.192.IN-ADDR.ARPA
IP アドレスを区切ったうえで逆に並べ、最後に IN-ADDR.ARPA を付けただけ。
でも、これで IP アドレスの「末端が右」という規則は「末端が左」に変わり、ドメイン名と同じプログラムで処理できるようになりました。
もちろん、IP アドレスの部分にはホスト名を書いておきます。
…これはつまり、DNS のプログラムが、IP アドレスとホスト名を「まったく」区別していないことを意味します。
数字である IP アドレスを書く部分に、アルファベットのホスト名書けちゃうのね。
プログラムを複雑にしないで、運用上の工夫で乗り切ろうとする姿勢、素敵です。
#運用上の、と書いたけど、運用しながら作りだされた方法ではなくて、最初の DNS RFC にこの表記方法が明記されてます。
過去に書いた通り、DNS の設計時点では「悪人」がいることは想定していなかったので、仕組みそのものにセキュリティホールが指摘されています。
以前には「毒入れ」と呼ばれる問題と、google DNS がその問題の解決方法の一つだということを書いたのですが、つい最近別の問題も起こっていました。
ドメイン名ハイジャックとして話題になりましたが、DNS の登録情報もまた、DNS のように「人から人へ」と伝播していくのを悪用した攻撃です。
セキュリティは弱いところからほころびる、と言われますが、極度に分散した仕組みであるDNSは、弱いところだらけです…
同じテーマの日記(最近の一覧)
関連ページ
世界最初のドメイン登録(1985)【日記 17/03/15】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |