Junkyard Review     index     top


2001.10.02
特別篇『インターネットって何?:DNSとルーティング篇』

長くなりすぎたので切り分けることにした。シリーズなのか?

“危機の際、ルーティングは動く。だがDNSは動かない”LC2001 村井純教授がキーノートスピーチ
http://linux.ascii24.com/linux/news/today/2001/09/27/629992-001.html
日本のインターネットのお父さんがLinuxカンファレンスで「おめーら、DNSをつくれ」と吼えた、という話。さすがお父さん、かっこいいなあ。IPv6でインターネット自動車っすか。お父さん的には、OSはやっぱりLinux or BSDすか、○RONじゃなくて。

さて、冗談はさておき、教授が「ルータはいいからDNSを作れ」といった意味をあらためて考えてみよう。これは、インターネットとは何か、という単純かつ深遠な疑問に関係することだ。なにしろ、お父さんの言うことだからね。かなり長くなるけれど、やってみることにしよう(調べながらなのでいまいち不安だが)。まず、「DNSって何?」から。


■DNS(ドメインネームシステム)■
DNSサーバというのは平たく言うと、ネットワーク上で「郵便番号」を「住所表記」に変えているサーバのこと。インターネットの設定で「ドメインネームサーバがうんたら」みたいな項目があったでしょ、いや、あるんだって。
本来インターネット上のノード(サーバやルータ)は192.168.1.1.10みたいな数字(IPアドレス)で管理されている。これをメールアドレスだとかWWWのURLだとかに変換しているのがDNSサーバ。こいつが落ちると、メールは届かないし、WWWにはアクセスできないしでとっても困る。

もちろん、一台に全てのアドレスが入っているわけではなく、階層化されていて、あるDNSは自分の受持ち範囲だけを管理し、それ以外のものは上の階層に聞きにいくようになっている。たとえばwww.yahoo.co.jpならば、まず大元のDNSに「"jp”って何処?」と聞きにいく。次にそこからjpを管理しているDNSの場所を聞いて、jpのDNSに("co"ってどこ?)と聞きにいく・・・こうやって順番に解決していくわけですな。

例えば、PCの中の「C:jp\co\yahoo\www\index.html」というファイルを想像してもらえば分かりやすいだろうか、Cドライブ(いや、別にMacintoshHDでもいいんだけどね)を見に行けば、jpとかcomとかが並んでいる、jpをひらいて中を見るとcoとかorとかacとかが並んでいる・・・こうやって管理されていて、各DNSは自分のディレクトリだけを管理しているわけ。もちろん、各階層のDNSは一台じゃなくて、複数が連携し合って負荷を分散している。

ただし、毎回全部上から聞いているわけじゃなくて、よく使われるアドレスは覚えていて、上のほうまで聞きに行かずに手前で済ませることのほうが多い。「ああ、jpならしってる、coも知ってる、yahooって何処よ?」ってことになったときに始めてcoを管理してるDNSに聞きに行くわけ。

ちなみに、さっき言った大元のDNS(jpが何処にあるかを管理しているDNS)は世界に13台しかない。少ないからリストにしてみようか。

・米Network Solutions社 (2台)
・ネットワーク管理団体IANA
・ヨーロッパのネットワーク管理団体RIPE-NCC
・米PSINet社
・米ISI(Information Sciences Institute)
・米ISC(Information Software Consortium)
・米Maryland大学
・米航空宇宙局(NASA)
・米国防総省
・米陸軍研究所
・ノルウェーのNORDUnet
・日本のWIDEプロジェクト

こうやって検索していって、www.yahoo.co.jpがどんな番号かを特定する。さて、これで電話番号は分かった。次にどうやって電話を掛けるかですな。


■ルーティング■
実はIPアドレスも階層化されていて、頭のピリオド三つまでがネットワークのアドレス、その後が個々のノードのアドレスになる。ま、市外局番とその下の相手の局番みたいなものですな。で、DNSと同じように自分の下にぶら下がってるものはそのネットワークサーバが管理するので、いちいち個々のサーバを探さなくてもネットワークのサーバに送りつければあとはそのサーバが面倒を見てくれる。

ただ、当然ながら一台のサーバから全てのサーバに向けて1本づつ回線があるわけじゃないから「どの道を通るか」が大問題になる。電車に乗るときを想像すれば分かりやすい。ひとつの駅から全部の路線がでているわけじゃないから途中で乗り換えなきゃいけない。

さて、あなたが行くなら話は簡単、路線図を見ればいい。でもネットワークで送られる情報は自分では判断できないから(行き先が書いてあるだけ)、乗換駅で世話をしてあげなきゃいけない。要するに、行く先々にメーテルがいるわけですな「次はあの電車に乗りなさい、鉄郎」。そして次の乗換駅につくと「次はあの電車に乗りなさい、鉄郎」・・・これを繰り返しているうちに目的のネットワークにたどり着く。

さて、"メーテル"の本当の名前は「ルーター」という。で、全てを知っているようにみえるけれど、実は彼女が知っているのは路線図ではなく「どっちが近いか」だけだったりする。そして、この「どっちが近いか」が書いてあるのがルーティングテーブル(経路表)というリスト。実際にはこんな感じ。

B 202.244.62.0/24 [200/0] via 165.76.30.5‚ 2w1d
B 202.48.250.0/24 [200/0] via 165.76.30.5‚ 2w1d
B 202.236.39.0/24 [200/0] via 165.76.30.5‚ 6d03h
B 203.24.210.0/24 [20/0] via 154.33.3.197‚ 1w4d
B 202.242.57.0/24 [20/0] via 154.33.3.197‚ 4w4d
B 203.7.206.0/24 [20/0] via 154.33.3.197‚ 2d06h

細かいことは抜きにして、簡単に言うと右側の202とか203で始まっているのが「目的のネットワーク」、左側の165とか154とかで始まっているのが「お隣のサーバ」。要するに目的地に近いのはどっちの方か、が書いてある。
ちなみに、ここには5行しか書いてないけれど、実際には6万行近くある。

もちろんこのルーティングテーブルはルーター間で相互に参照して常に更新されているが、当然リストに無いことだってある。どうするか?はい、ご想像の通り「とりあえず、ここに送っとけば何とかなるサーバ(デフォルトルート)」がそれぞれのルータで設定されている。分からなければとりあえずそこに送るわけ、そこで解決しなければ次へ送る、どんどんたらい回しにして、見つけたところからまたルートを作る。

あえて誤解を恐れずに言えば、要するにインターネットっていうのはこのルーティングテーブルのことだ。誰一人全体像を知らず、各人はとりあえず隣のことだけを知っていて、情報を隣に渡すことだけを考えている。そういうネットワーク。見てのとおり「ぐるぐる回っていれば、いつかは着くでしょう」というポリシーで運営されている。

さて、ドメイン名からIPアドレスを検索し(逆もあるが)、IPアドレスにしたがってデータを転送する。これが、あなたがメールを送るたびに、URLをクリックするたびに世界中で起きていることだ。


■まとめ■
さて、お父さんの「ルータじゃなくてDNS」のセリフに戻ろう。
これまで見てきたようにDNSはツリー構造、ルーティングシステムはネットワーク構造を持っている。ルーターはたとえいくつかが壊れても、完全に孤立しない限りデータを転送することができる。だって、とりあえず隣に投げとけばいいんだから。でも、DNSの場合はツリー構造をしているために、上位階層がだめになると下位の階層が共倒れになる可能性が高い(もちろんキャッシュシステムや代替のサーバがあるから壊れる即ダメではないけれど)。しかも当然ながら上位になればなるほど数が少ない。確かに、危機管理的には非常に不安があるやね。

ドメインネームシステムが名前とIPの照合をしている以上、このツリー構造は崩すことが出来ない。だとすれば、安全確保のためには同階層のサーバの数を増やして極力分散化させるしかない(まあ増えすぎても同期取るのが大変だけどね・・・、あ、そうか同階層のサーバ間でメーテルがいればいいんだ)。

だから「ルータはいいからDNSを作ろう」なわけですね、お父さん。あってます?


あー、長かった。次回は・・・まあ、そのうち。

by isana kashiwai