ぽたうん学習帳

portownの勉強内容をつらつらまとめていきます。勉強中、かつ自分なりの言葉で書いているので、間違っていたり誤解を生む表現だったりします。

UPnP

初めに

UDPマルチキャストしてデバイス発見、みたいなあたりに興味があったので、 大御所?っぽいUPnPについてざっくり調べてみた。

参考元は以下。

Device Architecture Documents » UPnP Forum -> UPnP Device Architecture version 2.0(PDF)

「ざっくり」というのは、自分の興味ある以下の部分に絞って流し読みをしたからだ。

  • UPnPではどんな用語が使われているのか?
  • UPnPにはどんな処理があり、どういう順番でそれらが行われているのか?

これら以上のこと、たとえばXMLの要素とか使用ポート番号とか、そういうものは調べていない。

なぜこの部分だけ興味があるのかと言えば、類似のシステムを自分で作りたいからだ。 (もちろん、まんまUPnPだと車輪の再発明なのでする気はないが)

そのために既存の技術を調べ、どのような流れで成り立っているのか知りたいし、 名付けづらい部分は既存の用語をお借りしたい。(今回だとcontrol pointとか)

そういう背景なので、ご了承ください。

UPnPの用語

とりあえず気になった用語は以下だ。

仕様書の翻訳ではないので正確な定義は原本に譲るとして、 以下ではざっくりと自分なりの言葉で定義する。

  • control point : deviceを使う人。
  • device : serviceを提供する人。root deviceとembedded deviceがある。(embedded deviceは用語集に書かれていないが)
  • service : いわゆるサービス。
  • device description : deviceの詳細。中にどんなembedded deviceがあるかとか、どんなserviceをどんなURLで提供しているかとか。
  • service description : serviceの詳細。どんなactionがあるかとか、どんなstate variableがあるかとか。
  • action : control pointからserviceへのメソッド呼び出し。
  • state variable : serviceのフィールド(メンバ変数)。変更時にeventを発行するものがある。
  • event : serviceからの通知。購読(subscribe)すると飛んでくるものと、強制的にマルチキャストされてくるものがある。
  • publisher : eventの発行者。今のところserviceのみ。
  • subscriber : eventの購読者。普通はcontrol pointだが、deviceがなる場合もある。

つまり、登場人物としてはcontrol pointとdevice、あとはserviceがいる。

deviceはコンポジット構造+serviceを持っていて、 その定義がdevice descriptionに書かれている。

serviceはメソッドとしてaction、フィールドとしてstate variableを持っており、 その定義がservice descriptionに書かれている。

state variableにはobservableなものと非observableなものがある。

……オブジェクト指向的にはこんな感じだろうか。

UPnPのステップ

UPnPには、以下のステップがある。

  • Addressing : control pointやdeviceにIPアドレスを割り当てる。
  • Discovery : control pointがdeviceを発見する、探す。
  • Description : control pointがdeviceやserviceのdescriptionを取得する。
  • Control : control pointがserviceのactionを実行する。
  • Eventing : control pointがserviceのstate variableを購読する。
  • Presentation : control pointがdeviceの持つHTML画面を描画する? あまり興味がないので調べていない。

仕様書にはそれぞれに0~5の番号が振られているが、 実際にシーケンシャルに行う必要があるのはaddressing, discovery, descriptionくらいで、 control, eventing, presentationはdescriptionまで終われば順番に関係なく自由に実行してよさそうだ。

addressing, presentationはちょっと詳細すぎて興味がわかず、 description, controlはシンプルすぎて書くことがないので、 以下はdiscovery, eventingについてまとめる。

Discovery

discovery、と銘打たれているが、発見だけでなくその逆(紛失?*1)もこの範疇だ。

ざっくり以下の処理が登場する。

  • Advertisement : deviceからcontrol pointへの存在通知。
  • Search : control pointからdeviceへ放つソナー。

使われている単語をおおまかにピックアップしながら詳述すると、 advertisementには「ネットワーク上にいるよ!」と通知(advertise)するaliveと、 ネットワークからいなくなる際にadvertiseを取り消す(revokeする)byebyeがある。

deviceがネットワーク上にいる状態をavailable、いない状態をunavailableと言っているようだ。

searchにはrequestとresponseがあり、まあそのままだ。 ただしrequestはユニキャストもマルチキャストもできる。

TTLとかupdateとかもあるらしいがとりあえず端折る。

Eventing

eventingにはunicast eventingとmulticast eventingがある。 multicast eventingは何も考えずeventをズドーンとマルチキャストするだけで面白くないので、 ここではunicast eventingについて詳述する。

unicast eventingで登場する処理は以下4つだ。

  • Subscribe : 制限時間付きでeventを購読する。(無制限も可能らしい)
  • Renew : Subscribeの制限時間を延長する。
  • Cancel : Subscribeしたeventの購読を中止する。
  • Event : 発行されたeventの通知。(名詞と動詞があって紛らわしい)

図を見る限りでは、subscribeとrenewはresponseあり、他は一方通行。

subscribeのresponseでsubscription IDが割り当てられ、 以降のrenew, cancel, eventではそのIDを使ってやりとりするようだ。

まとめ

ものすごくさっくりとした、駆け足なUPnP旅行ではあったが、 参考にできる程度には用語を拾えたのではなかろうか。

類似システム構築の際に抽象化の助けとなればいいが。

もう一つ参考として、次はBLEあたりの仕様を読んでみたい。

*1:正直、この「発見の対義語」が欲しかったのだが、それっぽい言葉は見付からなかった