Mac OS XにフォーカスしたZeroconfの話.が,勉強にもなる
Zero Configuration Networking
Apple calls that technology as "Rendevzous"
Latest update: $Date: 2003/02/05 18:49:59 $
ネットワーク上で何かをしたいとするとき,普通ならばどうにかしてIPアドレスを
取得しなければならない.これは大抵の場合,管理者によって割り当てられた
IPアドレスを手入力で設定することになる.またホームネットワークなら,
DHCPなどによってIPアドレスが動的に割り当てられるかもしれない.
どうにかしてIPアドレスを設定し,ネットワークに接続できたら次の問題がある
それはユーザは接続先のIPアドレスを知らなければならない.しかし人はそんな
意味の見つけられない数字を覚えてはいられない.そう,大抵の場合は文字列による
ホスト名を入力して他の計算機に接続しようとする.つまりホスト名とIPアドレスの
相互変換をしなければならないのである.それは大抵の場合あなたのネットワークの
どこかで動作しているdomain nameサーバ(DNS Server)によって行われている.
しかし,多くの人は自分のネットワークでDNSを稼働させていないと推測される.
もし仮にあなたの「ホームネットワーク」でDNSサーバが稼働していたとしても,
そしてDNSサーバがホスト名からIPアドレスへの変換を行っていたとしても,
あなたはあなた自身でホスト名を決め,それを周知することはできない.
つまり自分で公的に使えるホスト名を容易に決定することはできないのである.
しかし,多くの人は自分の計算機の「名前」を自分の計算機上で決定したいと
思っている.
さて次の問題はどうやって他の計算機に接続し,その計算機で稼働している
サービスを利用するかである.そうネットワークに接続でき,ホスト名が決定したら
次は他の計算機で稼働しているさまざまなサービス(印刷,ファイル共有,
インスタントメッセージなど)を利用したくなるからである.しかし,これを実現する
ためには事前に種々のサービスがどこで稼働しているかを知っている必要がある.
大規模できちんと管理されたネットワークならばDirectory Serverを設置することで
この種の混乱を回避することは可能だが,そうでない小規模でアドホックな
ホームネットワークでは... もちろん,あなたは家でDirectory serverなんて動作
させたくないだろう.
Zeroconfはこのように普通の人がネットワークを使用するあたって現在,
存在している問題の解決法を3つ提案する.
- 計算機はDHCPサーバが動作していなくてもIPアドレスを取得できる
- 計算機はDNSサーバなしでもホスト名とIPアドレスの変換をすることができる
- 計算機はDirectory Serviceサーバなしでもネットワーク上のサービスを発見できる
ZeroConf Addressing
ZeroconfにおけるIPアドレス決定方法は極めて簡単である.
言い方を変えれば,実はもとから解決されていたとも言える.
その解決方法はlink-localにおける自動アドレス割り当て方法であり,
link-localアドレスとして169.254/16のIPアドレスを使用する
(Class Bのプライベート用アドレス? よくDHCPのIPアドレス割り当て失敗時に
勝手に設定されるネットワークアドレスだ) このLink-Local Addressingは
すでに多くのOperating Systemで実装されているものである.IPv6でもこの機能は
実装されることになっている.
Link-Local addressingでIPアドレス取得の際の問題を解決する方法は極めて簡単で,
そのネットワークアドレスに含まれる任意のIPアドレスを一つ勝手に決定し,それが
他の計算機で使用されていないかどうか確認する.つまりIPアドレスが重複使用されて
いないかを確認するのである.もし他のデバイスや計算機がそのIPアドレスを
使用していたならば,他のアドレスを適当に決定し,同じようにすでに他の機器が
使用しているかどうか確認する.この一連の動作を使われていないIPアドレスを
見つけるまで繰り返すのである.
Mac OS X 10.2.x (Jaguar)ではシステム環境設定から"ネットワーク"を
選択し,新しい場所を作ってその設定で「検索ドメイン」の欄に.localと入力し,
設定を"DHCPサーバを参照"にすることでRendevzous,つまりZeroconfに
よりIP Addressが割り当てられることを見ることができる(下図).もちろん,自分の
接続しているネットワークにDHCPサーバが稼働していなくても169.254で始まる
IPアドレスが割り当てられるはずである.なおIPアドレス表示の下には
「(自分自身で割り当てます)」という表記があるはずである.
もし自分の計算機がすでにIPアドレスを得ているのならば,すでにRendevzousは
使えるはずである.Mac OS Xならばマルチホーミング(すなわち一つのネットワーク
アドレスに対して複数のIPアドレスを割り当てる)をサポートしているので,
ユーザは実際に割り当てられている現実にインターネットに接続できている
IPアドレスの接続を切断することなく,Link-Localアドレスを使って種々の
サービスに接続することができる.もし自分のMacintoshでWebサーバが稼働している
ならばシステム環境設定 -> 共有の設定欄にある"Rendevzous名"を
Webブラウザに入力してみるとよい.自分のWebサーバにアクセスできるはずである.
ZeroConf Naming
インターネットはDNSによって成り立っていると言ってもいい.DNSがなければ
ホスト名とIPアドレスの変換はできず,ユーザは番号によるIPアドレスを
覚えなければならないが,それは使いにくい.しかし,不幸にも家庭,会議場,
小規模オフィス,カフェなどではDNSサーバは稼働しておらず,それゆえに
計算機に接続するためには番号によるIPアドレスを入力しなければならないのである.
この問題に対してZeroconfが出した一つの回答がmDNS(Multicast DNS)である.
これは"mDNS responder"というシステムによって構成される.
mDNS responderは個々の計算機にて名前問い合わせに応答し,返答する機能を
提供するシステム(プログラム)である.これまでは既知のDNSサーバに問い合わせ
をし,その回答をもらっていたが,multicast DNSでは名前問い合わせ要求を
そのドメインでRendevzousサービスに登録しているすべての計算機が含まれる
multicast groupに投げることになる.つまり中央集中型のサーバから,周囲の
多くの計算機上で稼働しているmulticast DNS responderのどれかに名前問い合わせの
要求を投げることになるのである.
名前解決の方法は次の通りである.ホスト名をIPアドレスに変換する必要のある
計算機は,mDNS responderが動作するすべての計算機が受け取るような要求を
ネットワーク上に送出する.その要求を受け取った計算機がその回答を持っていた
ならば,その要求に応答して回答を送出する.もし名前で指定した計算機上で
稼働するresponderが,その要求に応答したならば,その応答にあったアドレスを
つかって要求を出した計算機は接続をおこなう.これだけの極めて簡単な仕組みである.
DNS responderはネットワーク上に流れるすべての問い合わせと回答を追跡,収集する.
つまりネットワーク上で行われたすべての問い合わせと回答の情報を自身で持つ
ことになる.したがって同じ問いあわせをネットワーク上のん他の計算機にする
必要はなくなる.これによりネットワーク上に余分(冗長)な通信データを流す
必要がなくなるのである.
注意すべきことはmDNSで使われるホスト名は".local"で終わる
ことである.Mac OS Xのユーザは上の図にあったようにRendevzous名を
システム環境設定の共有パネルで設定することができる.ここを見れば
Rendevzous名が".local"で終わっていることを確認できる.
したがって,ユーザはこの欄を使って自分の好きなホスト名を自分の
計算機に割り当てることができる.
Service Discovery
サービスの発見はRendevzousの"キモ"であり,実際,IPアドレス自動
割当てとホスト名の変換はそれに付随するもの(おまけ)である.Rendevzous APIは
稼働するアプリケーションをサービスとしてネットワーク上に宣伝(告知)するとともに,
アプリケーション側からネットワーク上で稼働する特定のサービスを発見することが
できるようにしている.もしアプリケーションがサービスを発見したならば,
それをユーザにユーザインタフェースを通じて提示し,ユーザがどのサービスに
接続するかを選択できるようにしなければならない.Rendevzousはmulticast DNSを
利用してサービスの発見と宣伝(告知)を行っている.
ZeroconfはまだIETFのワーキンググループで仕様策定中である.
詳細は