设备发现之 搜索
当一个控制点进入网络,UPnP发现协议会允许控制点搜索网络中它感兴趣的设备。
通过对特定的地址和端口(239.255.255.250:1900)组播一个具有某个特定模式或目标的搜索消息。。特定的设备会返回包含这必要的信息的响应。控制点也可以像一个IP:port发送一个单播消息。
搜索协议和标准
为了搜索到设备或被控制点发现,控制点或设备使用下面的协议栈:UPnP vendor
UPnP Forum
UPnP Device Architecture
SSDP
UDP
IP
最上层,搜索消息包含着设备提供商的具体信息(如,设备,服务的标识),Forum为服务商的信息作补充,包含设备或服务的类型。搜索请求/搜索响应 都通过IP的UDP发送。
搜索请求(M-SEARCH)
当一个控制点需要搜索网络中的设备时,它将以M-SEARCH发送一个组播请求。如果控制点知道设备的IP地址,它可以完全发送一个M-SEARCH单播消息。组播M-SEARCH消息定义如下:
M-SEARCH * HTTP/1.1 #请求行 M-SEARCH请求方法 *表示通用消息不指定资源,HTTP/1.1表示HTTP版本
HOST: 239.255.255.250:1900 #消息信息头,含义同前
MAN: "ssdp:discover" #以双引号表示的ssdp种类,必须
MX: seconds to delay response #最大等待时间,必须
ST: search target #搜索目标,所有设备,根设备,服务等等
USER-AGENT: OS/version UPnP/2.0 product/version #允许
CPFN.UPNP.ORG: friendly name of the control point #必须
CPUUID.UPNP.ORG: uuid of the control point #允许
注:请求消息不含消息体,但最后要包含一个空白行。封包存活时间TTL默认2秒
对于单播M-SEARCH,消息定义如下:
M-SEARCH * HTTP/1.1 #含义同前
HOST: hostname:portNumber #含义同前
MAN: "ssdp:discover"
ST: search target
USER-AGENT: OS/version UPnP/2.0 product/version
由于UDP的不可靠本质,控制点应该多次发送M-SEARCH消息。一个设备也应该周期性地重发上线广播。
对于组播请求,一个控制点应该等待至少MX中的时间。
当一个设备收到了单播M-SEARCH消息,应该在1秒之内响应。单播请求的发送者至少要等待一秒。
urn:schemas-upnp-org:service:xyz:2 中的2表示支持的UDA版本为2.0
搜索响应
一个设备应该发送一个单播UDP响应,向那个对组播地址进行请求的源地址,以便在网络中被搜索到。如果ST值满足设备的上线广播,则设备对其作出响应。
响应消息的定义如下:
HTTP/1.1 200 OK #请求行
CACHE-CONTROL: max-age = seconds until advertisement expires #设备上线广播的超时时间 >=1800s
DATE: when response was generated #必须
EXT:
LOCATION: URL for UPnP description for root device #必须,值为根设备的描述文件URL
SERVER: OS/version UPnP/2.0 product/version #必须
ST: search target #必须,搜索类型
USN: composite identifier for the advertisement #必须,唯一服务名字
BOOTID.UPNP.ORG: number increased each time device sends an initial announce or an update message
CONFIGID.UPNP.ORG: number used for caching description information
SEARCHPORT.UPNP.ORG: number identifies port on which device responds to unicast M-SEARCH
如果搜索请求中有错误,设备将丢弃该请求;错误的响应发送是被禁止的行为。
------------------------------
RFC 2141 URN : http://www.ietf.org/rfc/rfc2141.txt
RFC 2616 HTTP 超文本传输协议1.1: http://www.ietf.org/rfc/rfc2616.txt
RFC 2774 HTTP拓展框架: http://www.ietf.org/rfc/rfc2774.txt
RFC 3986 Uniform Resource Identifiers : http://www.ietf.org/rfc/rfc3986.txt
RFC 4340 Datagram Congestion Control Protocol(DCCP)数据包拥挤控制协议: http://www.ietf.org/rfc/rfc4340.txt
UUID的DCE变体: http://pubs.opengroup.org/onlinepubs/9629399/apdxa.htm