Monday, March 2, 2009

UPnPとは? その仕組みの原点に立ち返る

http://plusd.itmedia.co.jp/broadband/0210/18/honda4.html

その中核のなるのがIPマスカレード

UPnPとは? その仕組みの原点に立ち返る

「Universal Plug&Play」、通称UPnP。話に聞いたことがあるけれど、一体どのような仕組みなのかは知らない人も多いのではないだろうか? 今回は趣向を変え、UPnPの基礎技術を解説しよう

 この連載でも何度か登場している「Universal Plug&Play」~通称、UPnPという言葉。UPnP対応ルータやUPnP対応OS(Windows MeとWindows XP)については話に聞いたことがあるけれど、一体どのような仕組みなのかは知らない人も多いのではないだろうか? そもそもUPnPに対応すると、どんなメリットがあるのだろう。

 年末から来年にかけて、ルータ以外の機器も色々と登場してくるとみられている。そこで今回は、これまでと趣向を変え、UPnPの基礎についてなるべく噛み砕きながら説明することにしたい。

シームレスな接続性を実現するUPnP

 この連載の中でUPnPを紹介するとき、AVネットワークや自動コンフィギュレーションのルータを作ることも可能だが、本来の目的はコネクティビティ、つまり接続性を高めるための技術だと紹介した。接続性を高める機能はUPnPの一番基礎となる部分で、その上にすべての機能が成り立っている。今回は、その基礎部分にフォーカスを当てることにしよう。その上で、どのような応用が行われているかは、基礎部分さえわかってしまえば容易に想像できると思うからだ。

 そのUPnPだが、元々のコンセプトは1999年に米Microsoftが提唱したものである。インターネットプロトコル(IP)ネットワークに接続される、あらゆるデバイスが互いに認識しあい、また物理的に異なるネットワークに存在するデバイスであっても、シームレスに接続されることを目指している。「Plug&Play」は、Windows 95に実装された、デバイスをPCにプラグするだけで簡単に動作させるための仕組みだが、それと同じようにネットワークにプラグするだけで簡単に動作を行えるネットワーク上の仕組みを実現する。

 たとえば、家庭内にはすでに、さまざまなデジタル化された家電品があり、部分的なネットワーク化が行われている。IEEE1394を使ってデジタルビデオ同士(あるいはPC)を接続したり、デジタルBSチューナーとD-VHSデッキを接続するといった、特定の目的でピアツーピアのネットワーク接続(もちろんTCP/IPなわけではないが)が行われているケースもあれば、ホームオートメーションシステムとして、電力線を介して宅内空調や照明を集中管理するといったものもある。将来は無線LANと接続可能な家電も増えてくることだろう。

 しかし、必要なところで場当たり的に接続できるものの、機器同士がネットワークで繋げる際に使う物理的なネットワーク種別(イーサネット、IEEE1394、電力線ネットワーク、HomePNA)や接続手順などは異なる。またインターネットとの透過性を考えれば、IPネットワークである方が良いが、DHCPサーバやDNSサーバがない環境下でパラメータを自動設定する必要もある。

 UPnPを用いれば、ネットワークパラメータを機器自身が正しく設定でき、またネットワーク上にどのような機器が存在しているか、他機器がどんな機能を持ったものなのかを知ることもできる。また物理的にどのような線(もしくは電波)で結ばれていようと、ひとつのIPネットワークになっていれば、互いにどのような形態で接続されているかは意識しなくていい。


UPnP機器がお互いを知り合う手法

 どんなデバイスでも(あるいは人間同士でも)、正常なコミュニケーションを取るときに必要ないくつかの前提となる条件がある。まず共通の言語をしゃべること。コミュニケーション相手を探す方法が決まっていること。コミュニケーションの相手を良く知ることだ。そして伝えたい情報や依頼したいことは、決まった形式にまとめて直接手渡すと確実。それは家庭内のIPネットワークでも同じ事だ。UPnPは、そうした基本的なコミュニケーションの前提条件を満たすための取り決め、つまりプロトコルだ。

 UPnPがIPネットワーク上で使われるプロトコルであることは既に述べたが、ネットワークに参加する機器同士はHTTPを使って情報を交換する。つまり、UPnPにおける共通言語はHTTPということになる。さらに話す内容(やりとりする情報)はXMLによって定義される。あるUPnP機器が別のUPnP機器に何かの依頼をするとき、XML形式のメッセージを送り、その返答をXML形式で受け取る。XMLが情報を整理して受け渡す際の共通書式というわけだ。

 そして、そうした通信を始める前に重要なのが、コミュニケーションの相手を探し、相手機器がどのような機能を持ったデバイスなのかを知ることだ。つまり、ネットワーク上にどんなデバイスがあって、どのような機能を持っているのかを探索するところから始まる。たとえば赤外線リモコンならば、ネットワーク上にあるデバイスの数や種類、名前などを把握しておき、それに合わせてリモコンの液晶パネルを表示、さらに操作内容をネットワークで適切なデバイスに伝えなければならない。

 そのプロトコルの詳細は後述するが、相手の名前や機能を知ることは、互いに知らないモノ同士が通信を行う前交渉の段階で必須のものといえる。コミュニケーションを取りたくとも、相手がどんなタイプの人なのかわからなければ、無難な挨拶しかできないだろう。より突っ込んだ内容の情報交換を行うためには、互いが相手のことを知っていなければならない。

 そこでUPnPでは、ネットワーク上に接続されたUPnP対応機器の所在を確かめ、さらにその機器がどのような特徴を持ったものであるか、といった情報をやりとりするための仕組みが提供される。その内容は前述したようにXMLによって構造化されたデータである。XMLは構造化可能なため、基本的な機器の分類や基礎要件を伝えるだけでなく、拡張次第で、より細かな機能を伝えることもできる。

UPnPはどのように会話する?

 さて、ではUPnPは、上記のような要件をどのように満たしているのだろうか?これが実にシンプルな手法を用いているのだ。しかもプロトコルの多くは、UPnP提案時点ですでにIETFから仕様が発行されていたものばかり。標準プロトコルの上に、UPnPの基礎部分は成り立っている。

  • IPアドレス割り当て

 IPネットワークに参加するためには、機器ごとにIPアドレスが割り振られなければならない。しかし現在のIPv4では、機器にあらかじめユニークなIPアドレスを割り振っておくわけにもいかない。そこでまずIPアドレスの割り当てを行う。

 IPアドレスの配布は、PCのIPネットワークと同じようにDHCPを利用する。ただし、家電同士の接続、特に小型機器同士の接続時にDHCPサーバがネットワーク上に存在しないことも多いと考えられる。

 そこでDHCPリクエストがタイムアウトすると、プライベートアドレスを調査してIPアドレスの重複がないかを自分でチェックする。そして使えるプライベートアドレスが見つかれば、それをそのまま利用する。

 もしインターネットに接続するゲートウェイ機器(パソコンやダイヤルアップルータ)があるならば、その機器にDHCPサーバが組み込まれ、アドレス配布を行うと共にIPマスカレードやDNSリレーを行うことになっている(もっとも、現在のインターネットゲートウェイデバイスの多くは、すでにこの条件を満たしている)。

  • 名前解決

 TCP/IPのネットワークでは、名前とIPアドレスの対応を示したhostsファイルなど静的な定義と、DNSサーバによる名前データベースへの問い合わせで名前とIPアドレスの対応調べる、2種類の名前解決方法が使われる。しかしUPnPネットワークの場合、さまざまな機器がオンデマンドに参加するため、どちらの方法を用いてもUPnPでの利用に適していない。もちろん名前解決を行わず、IPアドレスだけで通信をしても良いが、人間が介在する操作の時に名前がなければ、操作性が大きく損なわれる。

 そこで、UPnPでは名前参照と解決をIPブロードキャストによって行う。これは「この中に田中さんはいますか?」と大きな声で叫ぶようなものだ。自分が田中ならばIPアドレスの返事を問い合わせた相手に送信する。なお、ネットワーク上にDNSサーバが存在するならばそれが優先される。

  • デバイスの発見と機能の把握

 ネットワーク上に接続されたデバイスの発見と機能の把握は、SSDP(Simple Service Discover Protocol)を用いる。SSDPは、UPnPを構成するための基幹部分で、IETFから標準仕様がすでに発行されている。

 デバイスの発見も、名前解決と同じくIPブロードキャストを用いる。たとえば「デジタルビデオストリームを再生できる機器は?」とブロードで送信すると、条件に合うデバイスが自主的に問い合わせ元に対してIPアドレスとホスト名を送信する。また、具体的にどのような機能を持っているかなど、機器固有の情報もこのときに交換する。情報交換に使われるデータ形式はXMLで、HTTPにより通信することは、前述した通りだ。これがSSDPのもっとも単純な通信パターンだが、SSDPにはディレクトリサーバの機能を持つデバイスがネットワーク上に存在する場合も決められている。


 ネットワーク上にディレクトリサーバが存在する場合は、ネットワークに新たに接続された機器が自ら参加したことをIPブロードキャストでアナウンスし、そのメッセージを受け取ったディレクトリサーバが新しい機器の参加の検知。するとディレクトリサーバは、新加入の機器に対して、どのような機器なのか、どのような機能を持っているかなどの情報を聞き取り調査してディレクトリデータベースに登録する。あとはLDAPを用いてディレクトリサーバに問い合わせを行えば、その機器の情報をいつでも参照できるようになる。


 SSDPに対応できないデバイスがある場合(プリンタやスキャナなど)は、接続されている機器(多くの場合はパソコン)がプロクシとして代理応答することにより、実際にはIPネットワークに参加していないデバイスを、あたかもUPnPに参加しているように見せかけることも可能だ。

なぜ今、UPnPなのか

 ここまでに説明した部分は、UPnPのIPネットワークにおける接続性の高さを実現する、いわば土台の部分。それも3年以上前に提案されていたものだ。それがなぜ、今になって再び注目されているのか。それは、インターネットへの接続環境が整い、また家電製品もネットワーク対応を進めやすい環境(ユーザーの意識の広がりやネットワーク化を行うためのデバイスがローコスト化したこと、内蔵コントローラの能力向上など)が整ったことが挙げられる。もちろん、Windows Me、Windows XPの登場で、家庭向けPCの大半がUPnPに対応できるようになったことも理由として挙げられるだろう。

 昨年後半ぐらいから、業界内ではUPnPベースのアプリケーションを標準化しようと、さまざまな仕様が矢継ぎ早に決まってきている。そこにはPCの付加価値を高めるため、PCと家電の垣根を取り払ったホームネットワークを熱望する米Intelの強いイニシアティブもあったようだ。

 UPnP上で開発中のアプリケーションプロトコルに関しては、「デジタル家電との距離を縮める「UPnP A/V」」(記事参照)で紹介している。ここで紹介しているUPnP A/VやUPnP Remote I/O、そしておなじみのUPnP Gatewayなどが利用可能なのは、すべてその基盤にUPnPのフレームワークがあるため。それぞれのアプリケーションは、すべてUPnPを基礎として、追加でいくつかの決めごとを行っているに過ぎない。

 11月、東京でUPnPに機器制御を行うための基本仕様を追加するSCP(Simple Control Protocol)のデベロッパー向けイベントが開催される。これまで遅々として進まなかったUPnP対応だが、ここに来て俄然、ホームネットワークを支える基盤技術として注目されてきた。UPnP上のアプリケーションと対応機器は、今後の注目株。CEATECやWorld PC Expoで紹介された機器の中にも、正式にアナウンスはしていないがUPnPに対応した参考展示製品なども数多く含まれているようだ。

No comments:

Post a Comment