『火星大接近と聞くと、ちょっと難しそうだけど、ちょっと科学的で魅力的。望遠鏡はちょっと高いけど、ちょっと奮発して、ちょっと徹夜してみた』
この夏、こんな感じで「ちょっと」を連発しながら、大接近した火星を見ようと空を見上げた方、多いんじゃないでしょうか。でも、普段から火星のことを考えて暮らしている人って、あんまりいませんよね。火星がどこにあるのかさえ、誰も彼もが知っていることじゃありません。
でも、きっと皆さん、本を買ったり、ネットで調べたりして、楽しみながら火星についての知識を深めていったのだと思います。そう、その「ちょっと」難しそうなところが、かえって火星大接近を魅力的なものに見せた、そんな気がします。モノにあふれた時代を生きる人にとっては、「ちょっと難しい」ことさえ魅力なんですね。
ところで、インターネットでよく使われるプロトコルの中で、「ちょっと難しい」ものといえば何でしょうか? いくつかありそうですが、おそらくDNSがその一角を占めると思います。今回はこの「ちょっと難関」なDNSを取り上げることにします。できる限りフツーの言葉で、でもDNSのキホンを押さえながら説明したいと思いますので、知的好奇心の触覚を目いっぱい広げて、知る楽しさを感じながら読み進めてみてください。
これまで取り上げてきたプロトコルは、例えば、HTTPは「Webを表示するため」、SMTPなら「メールを送信するため」といった感じで、どれも私たちがいつも使っているソフトと直接の関係がありました。
ところが、DNSには、このようにダイレクトに1対1に関係するソフトがありません。じゃあ、普段はあまり使われないの? と思うかもしれませんね。いえいえ、実際はその正反対です。大部分のソフトが、直接、間接にDNSプロトコルを利用していて、「インターネットで利用するソフトなら、DNSは間違いなく使っている」といい切れるほどです。
どうしてそんな深いかかわりがあるんでしょうか? その秘密は「ドメイン名」にあります。ドメイン名については、後でももう少し突っ込んで説明しますが、ここでは「www.atmarkit.co.jp」のように、インターネット上のコンピュータを表す名前だと考えて構いません。
インターネットなどのネットワークにつながったコンピュータには、それぞれ1台ずつ違った値の「IPアドレス」が割り当てられていることは、TCP/IPアレルギー撲滅ドリルの第1回「telnetでWebサーバに接続してみよう」で触れました。例えば、atmarkITのWebサイトの場合、「211.4.250.170」というアドレスが割り当てられています。ですのでWebブラウザで「http://211.4.250.170」と打つと、普段どおりatmarkITのWebページにたどり着くことができます。
でも、どうでしょう?「http://211.4.250.170」よりも「www.atmarkit.co.jp」の方が、はるかに覚えやすいと思いませんか? 数の羅列よりも、何か意味を持たせた方が覚えやすいのは、例えばルート2を「ひとよひとよにひとみごろ」と語呂合わせしたりすることにも通じます。どうも人間は、数字の羅列そのままを覚えるのがニガテで、仮でも構わないから何かの意味を持たせると、途端に楽に覚えられるようです。DNSは、この2つ、つまりIPアドレスとドメイン名を、相互に変換する働きを持っています。
例えば、Webブラウザで「http://www.atmarkit.co.jp」と打つとしましょう。すると、最初にWebブラウザは、DNSプロトコルを使って、ドメイン名「www.atmarkit.co.jp」に対応するIPアドレスを問い合わせます(図1)。
この問い合わせの結果、対応するIPアドレスが「211.4.250.170」であることが分かったら、次に初めてこのWebサーバ「211.4.250.170」にアクセスして、そこから得られたHTMLファイルに従ってWebページとして表示されるわけです。
このようなドメイン名からIPアドレスへの変換は、SMTPでメールを配送するときにも、POP3でメールを受信するときにも、ほぼ同じように行われています。このほかにも、接続する相手先にドメイン名が指定できるソフトは、ほぼ例外なくこのような形でDNSのお世話になっているといって間違いありません。
もしDNSがストップしてしまうとどうでしょう? ドメイン名からIPアドレスの変換ができなくなると、大部分のソフトはその入り口の段階で立ち往生してしまい、本来の機能を果たすことができなくなります。DNSがどれほど重要な働きをしているか、この説明から分かっていただけると思います。
ドメイン名をIPアドレスに変換するのは、DNSの最も大切な働きといっていいでしょう。でもDNSの機能はこれだけではありません。主なものとしては、先の例とは逆に、IPアドレスからドメイン名を調べる機能、またメールの配送先となるサーバを調べる機能なんかもあります。
IPアドレスからドメイン名を調べる機能は、例えば、Webサーバ自体が、そこに接続してきた相手方の統計を取るときに使います。Webサーバは、誰が、いつ、どのページにアクセスしたかを記録できるのですが、このうち「誰が」に関しては、TCP/IPネットワークの性質上、接続した人の「IPアドレス」しか分かりません。
でも、それではアクセス状況を分析することができませんから、普通は、このIPアドレスをドメイン名に逆変換します。そうすることで、接続したPCが所属する会社名、プロバイダ名、国名などを、ドメイン名から読み取ることができるようになるわけです。
もう1つの、メールの配送先サーバを調べる機能は、メールサーバがメールを配送するときに使います。例えばatmarkITのAさんが、社内からfoo@xyz.comにメールを出すとしましょう。Aさんが送ったメールは、まずatmarkITのメールサーバが受け取ります(連載第3回「SMTPでメール送信の舞台裏をあやつる」の図1では送信元メールサーバ)。
atmarkITのメールサーバは、この次にDNSへアクセスします。「xyz.comあてのメールはどこに送信すればいいか?」を問い合わせるためです(図2)。DNSには、メールアドレスの@マーク以下の部分(ここではxyz.com)ごとに、そこにあてたメールを取り扱うメールサーバが登録されています(設定によってはメールサーバが登録されていない場合もあります)。こうして取り扱いメールサーバが分かると、メールサーバはそのサーバに向けてメールを配送します。
なぜこんな機能が必要なのかというと、メールアドレスの含まれているxyz.comがあくまで会社名を表す情報で、それだけではメールを送ってあげる先のメールサーバの名前が分からないからです。
少し話がややこしくなってきたので、この話はこのくらいにしておきましょう。もしこの辺の話題に興味を持たれた方がいらっしゃいましたら、「メールエクスチェンジャ」とか「MXレコード」といったキーワードで、ネット検索してみてください。さらに詳しい情報が得られるはずです。
いずれにしても、「IPアドレスからドメイン名への逆変換」も、「メールの配送先サーバを調べる」も、話としては少々込み入った部分になりますので、よく分からなくても心配は無用です。ここではひとまず、DNSには「ドメイン名からIPアドレスへの変換」以外の機能があることを知っておいてください。
さて、ここまでに出てきたDNSの主な働きは「ドメイン名からIPアドレスへの変換」「IPアドレスからドメイン名への逆変換」、そして「メールサーバの通知」の3つです。この3つがインターネットを使ううえで欠かせない、とても重要な機能であることは、これまで触れてきたとおりです。でも、何かちょっとヘンだと思いませんか? よく「DNSは難しい」といいますが、この3つの機能がシステム管理者の頭を悩ますほど、そんなに難しいシロモノなんでしょうか? どうも、そんなふうには見えません。どちらかといえば、簡単な問い合わせ内容に答えるだけの、単純なモノといった感じです。
この疑問、実は当たっています。DNSの機能はそんなに複雑なものではありません。複雑なのはその構造です。例えば、HTTPを利用するWebサーバは、その働きを完全に提供するためにサーバ1台あれば十分ですが、DNSは1台だけで全体の機能を提供することができないのです。
どういう意味でしょうか? そのキーワードは「分散協調システム」です。ブンサンキョウチョウシステム? 難しい言葉が出てきました。この頭の痛くなりそうな言葉こそ、文字通りDNSの難しさでもあり、同時にDNSの優秀さを作り出している部分でもあります。この話、DNSを知るための最大のポイントですから、もう少し詳しく見てみましょう。
分散協調システムとは何ぞやをしっかり知ろうと思うと、書店に走って分厚い技術書を読むのが一番ではあります。でも、そこまで頑張るのも大変ですから、ここではもうちょっと分かりやすい例で考えてみましょう。
「分散」しているものが、しっかり「協調」して何かを進める。そうですねえ、例えば「ジャズの即興演奏」なんて、ちょっと似ているかもしれません。そう、ナベサダとか、チック・コリアとか、あのジャズです。
年末になるとにょきにょきと姿を見せる第九のコンサート。この手のコンサートは、オーケストラも合唱団も、指揮者のタクトに合わせてビシッと整った演奏をしてこそ、素晴らしい演奏になるというものです。
一方、ジャズの即興演奏はどうでしょう? ステージには、特に指揮者がいるわけでなし。それどころか、みんな好き勝手に演奏しているようにも見えるんですが……。でも不思議と、耳に聞こえてくる音楽は、ちゃんとまとまってカッコイイいい音楽になっています(図3)。
全体を厳しく統率する指揮者がいなくても、また個々がばらばらに動いているように見えても、全体として見れば一定のまとまった働きをこなす、分散協調システムの特徴の1つがこれなんです。
じゃあ、次はあなたがこのジャズの即興演奏に加わるとしましょう。楽器の演奏はできないですって? いえいえ、あくまでも想像上のお話ですから、ここは一発、ギターの名手だということにしましょう。
ギターは完ぺきにこなせるあなたが、今日、突然、このジャズバンドに加わって即興演奏をすることになりました。果たして今日のステージもまた、ほれぼれするようなカッコイイ演奏になるでしょうか?
あなたは「名手」ですから、もちろん無難にこなしてゆくことでしょう。でも、まるで魔法でも見るかのような、絶妙なアドリブの掛け合いはできるはずもなく、やっぱり全体の雰囲気はつまらないものになるはずです。場合によっては、他人の足を引っ張ってしまい、後でほかのメンバーからブーイングを食らうかもしれません。あなたのギターの演奏は完ぺきなはずなのですが……。
分散協調システム、もう少しいえばその一例であるDNSが難しいといわれるのは、この辺りの事情とちょっと似ているような気がします。問題のないDNSのプログラムを用意できても(=完ぺきにギターが演奏できても)、ほかのDNSとのやりとりのかかわり(=目配せとかノリのような他演奏者とのやりとり)が理解できなかったり、うまくいかなかったりする。その結果、全体で見るとDNSとして求める機能が得られない(=まとまりのないガタガタの演奏になってしまう)、といった部分です。
もしメンバーの1人としてカッコイイ演奏に加わるためには、ほかの演奏者とのコミュニケーション方法をちゃんと理解し、バンド全体のまとまりに身を置かなければいけません。それはギターの演奏技術とは別の能力なわけです。
DNSが1台のマシンで済んでしまうんだったら、こんなに簡単でイイことはありません。でも、ちょっと想像してみてください。いま、インターネットに接続しているコンピュータは1億7000万台くらいあります。このマシンの中の数千台から1万台程度が、一度にドメイン名からIPアドレスの変換を求めてきたら、1台のマシンで果たして処理できるでしょうか? いえ、とてもじゃない、パンクしてしまうのは目に見えています(図4)。
それではということで、とにかく巨大なスーパーコンピュータを用意して、超高速光ネットワークも開設したとします。もう、コンピュータやネットワークの容量には問題がありません。パンクしないのだから、DNSを1台のマシンで済ませてしまえるでしょうか?いいえ、これも答えはノーです。理由は簡単。このコンピュータが故障したときのことを考えてみてください。ある国に置いてある1台のコンピュータが故障したら、世界中でインターネットが使えなくなった! これじゃ困りますよね。
それじゃあとばかり、もうヤケになって、絶対に壊れない巨大スーパーコンピュータと、絶対に中断しない超高速光ネットワークを用意したとしましょうか。とにかく世界最高水準の技術を駆使して、超高価だけど大容量で絶対に壊れないシステムですから、普段の動作については問題ないと仮定しましょう。
でも、やっぱり不便がありそうです。それは、例えば、新しいコンピュータをインターネットに接続して、新しいドメイン名を付けるときや、いま使っているコンピュータのドメイン名を変えるときです。
ここ半年で、だいたい世界中で1000万台くらいのコンピュータが新たにインターネットに接続されています。1日に換算すれば5万5000台くらい。さらに情報を書き換えるコンピュータの数を加えれば、この数はさらに多くなります。
これほど多くのデータの書き換え要請を受け付けて、間違いがないかチェックして、1台のコンピュータに登録してゆくとなると、コンピュータの処理能力より先に、それを扱う人間の事務処理の体制がついていけません。「登録まで1カ月待ち」なんてことになりかねないようでは、やっぱりこれもダメなアイデアです。
ここまで無理な仮定を重ねてみても、やっぱりいい形にならないところを見ると、結局のところ、1台のコンピュータに機能を集中する形でDNSのようなものを作るのは、非常に難しいといえるのだと思います。
DNSのような巨大なシステムでは、集中型の考え方があまり具合のよくないことは、この前に書いたとおりです。では、DNSではどういった形で、その中身を分散させているんでしょうか?
それは次の3つの考え方だということができます。1つはコンピュータのパンクを防ぐための「負荷の分散」です。問い合わせが1台のコンピュータに集中しないよう、複数のコンピュータが分担して処理します。
2つ目は、1台のコンピュータの故障のためにネット全体が利用できなくなることを防ぐための「危険の分散」です。これも負荷の分散と同じように、複数のコンピュータを使います。同じ機能を持ったコンピュータがたくさんあれば、その中の1台が壊れても、ネット全体が使えなくなることを防げます。
3つ目は、1台のコンピュータにみんなが列を成して並ばなくていいようにするための「機能の分散」です。情報を国ごと会社ごとに分散して管理できれば、その登録や変更も素早く実行できます。結果的に、この分散も複数のコンピュータを利用することになります。
こうしてみると、DNSの分散スタイルは、集中型で起こりそうな問題が起きないように工夫されていることが分かりますね。DNSでは、こういった側面から積極的に分散を行い、24時間、世界中どこからでも、ドメイン名をIPアドレスに変換できる、大掛かりなシステムを作り上げた、というわけです。
Copyright © ITmedia, Inc. All Rights Reserved.