SSDP协议分析
SSDP协议的设计初衷是使用HTTP协议进行设备的发现,是UPnP协议的组成部分。
从网络层次模型来看,SSDP协议构建在HTTPU和HTTPMU之上。HTTPU是以UDP实现的HTTP协议,HTTPMU是广播的HTTPU。
SSDP协议包括三种消息:
- SSDP 发现请求(ssdp::discover),使用HTTPMU发送,收到该消息的客户端需要回HTTP OK(HTTPU),响应需要包含:
- 设备URL,客户端访问该URL拉取设备信息,将设备加入其设备列表;
- 心跳间隔,单位秒,该字段表明设备发送心跳的间隔,若时间间隔内没有收到心跳,客户端认为设备离线。
- SSDP心跳(ssdp::alive),使用HTTPMU发送,收到该请求的客户端更新其设备列表。不需要回响应。
- SSDP离线(ssdp::byebye),使用HTTPMU发送,收到该请求的客户端将设备从其设备列表删除。不需要回响应。
SSDP协议中,发现请求和心跳都可用于发现设备,一个是主动发现,另一个是被动发现。这样设计的理由是可以在最短的时间发现新设备。
在当前的SSDP版本中,HTTPMU约定广播地址是239.255.255.250,端口1900,这是一个保留地址,用于管理。同样的,客户端要收到广播消息需要绑定该地址。由于同一端口只能绑定TCP或UDP,因此同样是HTTP协议,HTTPMU不能使用80端口。
参考:
- SSDP协议文档
- GENA协议文档
- Administratively Scoped IP Multicast文档(HTTPMU广播地址)