學而時<span lang="ko">習</span>之 RSSフィード

學而時

20141130 SSDPとは、を説明してみる。

とある会合でSSDP(Simple Service Discovery Protocol)に関するプレゼンテーションをしました。SSDPに関する日本語の説明記事は少ないです。Wikipedia日本語版にも記事がないです。かなりの人がイチから調べるところから始めているのでは?と推測し、簡単に分かる紹介を書いてみます。


ひとことでいうと

「どんなプロトコルなのかひとことで説明しろ」という上司への要求には、こんな感じで答えるのがいいと思います。

LAN内部にあるデバイス の発見や操作をするためプロトコルであるUPnPの一部に使われています。"NAT越え"にも利用されています。

http://upload.wikimedia.org/wikipedia/it/a/a8/Upnp_logo.jpg


UPnPとは、

SSDPを語るには、UPnPの言及が欠かせません。UPnPについては、Wikipediaに日本語の記事があります。Universal Plug and Playの略です。

f:id:ozakira:20140915004913p:image:right:w280


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の主要ライブラリに発見された脆弱性
SSDPリフレクション攻撃