UPnPの基礎技術

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


ソ-ス:LifeStyle: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ネットワークになっていれば、互いにどのような形態で接続されているかは意識しなくていい。
f:id:nonbei:20180125073813j:plain

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にはディレクトリサーバの機能を持つデバイスがネットワーク上に存在する場合も決められている。

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

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