简单服务发现协议

SSDP的OSI模型 应用层 简单服务发现协议 HTTPU HTTPMU 传输层 UDP 网络层 IP (IPv4, IPv6) 数据链路层 以太网 TokenRing FDDI ……
简单服务发现协议（SSDP，Simple Service Discovery Protocol）是一种应用层协议，是构成通用即插即用(UPnP)技术的核心协议之一。曾辉、费云、唐亮：《通用即插即用服务自动发现技术》，https://www.zte.com.cn/china/about/magazine/zte-communications/2006/4/cn_78/150581.html 

简单服务发现协议提供了在局部网络里面发现设备的机制。控制点（也就是接受服务的客户端）可以通过使用简单服务发现协议，根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。设备（也就是提供服务的服务器端）也可以通过使用简单服务发现协议，向自己所在的局部网络里面的控制点宣告它的存在。微软公司：《Windows XP中的通用即插即用》，http://www.microsoft.com/china/windowsxp/pro/techinfo/planning/upnp/protocol.mspx 

实现
简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议。

按照协议的规定，当一个控制点（客户端）接入网络的时候，它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送“ssdp:discover”消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候，设备会分析控制点请求的服务，如果自身提供了控制点请求的服务，设备将通过单播的方式直接响应控制点的请求。于辰涛：《UPnP协议编程实践（二）》，http://www.ibm.com/developerworks/cn/linux/other/UPnP/part2/index.html 

类似的，当一个设备接入网络的时候，它应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:alive”消息。控制点根据自己的策略，处理监听到的消息。考虑到设备可能在没有通知的情况下停止服务或者从网络上卸载，“ssdp:alive”消息必须在HTTP协议头CACHE-CONTROL里面指定超时值，设备必须在约定的超时值到达以前重发“ssdp:alive”消息。如果控制点在指定的超时值内没有再次收到设备发送的“ssdp:alive”消息，控制点将认为设备已经失效。

当一个设备计划从网络上卸载的时候，它也应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:byebye”消息。但是，即使没有发送“ssdp:byebye”消息，控制点也会根据“ssdp:alive”消息指定的超时值，将超时并且没有再次收到的“ssdp:alive”消息对应的设备认为是失效的设备。

在IPv4环境，当需要使用多播方式传送相关消息的时候，SSDP一般使用多播地址239.255.255.250和UDP端口号1900。

根据互联网地址指派机构的指派，SSDP在IPv6环境下使用多播地址FF0X::C，这里的X根据scope的不同可以有不同的取值。IANA：《INTERNET PROTOCOL VERSION 6 MULTICAST ADDRESSES》，http://www.iana.org/assignments/ipv6-multicast-addresses/ 

参考资料

参见
通用即插即用
TCP/UDP端口列表

Category:应用层协议