SSDPとは、を説明してみる。
とある会合でSSDP(Simple Service Discovery Protocol)に関するプレゼンテーションをしました。SSDPに関する日本語の説明記事は少ないです。Wikipedia日本語版にも記事がないです。かなりの人がイチから調べるところから始めているのでは?と推測し、簡単に分かる紹介を書いてみます。
ひとことでいうと
「どんなプロトコルなのかひとことで説明しろ」という上司への要求には、こんな感じで答えるのがいいと思います。
LANに接続されているデバイスの発見や操作をするためプロトコルであるUPnPの一部に使われています。"NAT越え"にも利用されています。
UPnPとは、
SSDPを語るには、UPnPの言及が欠かせません。UPnPについては、Wikipediaに日本語の記事があります。Universal Plug and Playの略です。
UPnPの仕様は、複数のプロトコルを組み合わせて成り立っています。
そのうち、デバイスを取得するためのDiscoveryフェーズにおいてSSDPが用いられています。udp/1900を用います。UPnPのシーケンス図における、「1. M-SEARCH」と「2. NOTIFY」がこれに当たります。そのあとのDescriptionフェーズ以降はtcpによって行われます。
SSDPのパケットのなかみ
1999年に標準化のためのドラフトがIETFへ提出されていますが、策定されないままいまに至っています。RFCもありません。
https://tools.ietf.org/html/draft-cai-ssdp-v1-03
途中まで日本語訳してくださっているサイトがあります。
http://blog.fff.io/2013/10/ssdp-draft.html
テキストベースで、HTTPのヘッダによく似ています。一例ですが、次のように記述します。
1. M-SEARCH (multicast)
M-SEARCH * HTTP/1.1\r\n HOST: 239.255.255.250:1900\r\n MAN: "ssdp:discover"\r\n MX: 3\r\n ST: upnp:rootdevices\r\n \r\n
2. NOTIFY (UDP unicast)
HTTP/1.1 200 OK\r\n CACHE-CONTROL: max-age=1800\r\n DATE: {WoD}, {DD} {Mon} {YYYY} {HH:MM:SS} GMT\r\n EXT:\r\n LOCATION: http://{略}/gatedesc.xml\r\n Server: OS/0.0 UPnP/1.0 UPnP-Device-Host/1.0\r\n ST: upnp:rootdevice\r\n USN: uuid:{略}::upnp:rootdevice\r\n \r\n
各フィールドが何を意味しているかの説明は、次のURLが日本語では最も充実している印象です。
http://nazuna.sakura.ne.jp/software/upnp/get_device.html
近年のSSDPに関するニュース
UPnPの主要ライブラリに発見された脆弱性
- Rapid7 Whitepaper, ``Security Flaws in Universal Plug and Play: Unplug, Don't Play.'' Jan. 2013. LINK