网络协议之SSDP
网络协议之SSDP
概述
SSDP(Simple Service Discovery Protocol,简单服务发现协议)是 UPnP(Universal Plug and Play,通用即插即用)架构中的核心协议之一 ,用于在局域网(LAN)中实现设备与服务的自动发现。它基于 UDP 协议,采用多播(Multicast)机制,无需事先配置 IP 地址或端口即可完成设备识别和服务通告。
常见应用场景:
- 智能家居设备发现(如 Philips Hue、Sonos 音响)
- 网络打印机自动识别
- DLNA 媒体服务器(如 Plex、Kodi)
- 路由器 UPnP 端口映射服务
- IoT 设备快速配网
SSDP与UPnP
UPnP 是一个完整的网络互操作框架
UPnP 是由 UPnP 论坛制定的一套标准,旨在让不同厂商的网络设备(如打印机、摄像头、智能电视、路由器等)在局域网中无需人工配置即可自动发现、交互和协同工作。
UPnP 的完整工作流程分为 5 个阶段:
| 阶段 | 协议/技术 | 功能 |
|---|---|---|
| 1. 寻址(Addressing) | DHCP / Auto-IP | 设备获取 IP 地址 |
| 2. 发现(Discovery) | SSDP ✅ | 设备广播自身或搜索其他设备 |
| 3. 描述(Description) | HTTP + XML | 获取设备能力和服务详情 |
| 4. 控制(Control) | SOAP over HTTP | 调用设备提供的动作(如“播放”、“开关灯”) |
| 5. 事件通知(Eventing) | GENA(General Event Notification Architecture) | 订阅状态变化(如“音量改变”) |
🔍 关键点:SSDP 仅负责第 2 步——“发现”,但这是整个 UPnP 流程的起点。
二、SSDP 在 UPnP 中的具体作用
- 当一台新设备(如智能音箱)接入网络:
- 它会通过 SSDP 发送
NOTIFY消息(ssdp:alive),宣告:“我在这儿!我能提供音乐播放服务!”
- 它会通过 SSDP 发送
- 当控制点(如手机 App)想查找媒体服务器:
- 它通过 SSDP 发送
M-SEARCH请求:“谁是 MediaServer?请举手!” - 匹配的设备单播回复响应,包含其描述文件 URL(
LOCATION字段)
- 它通过 SSDP 发送
没有 SSDP,UPnP 就无法知道“网络里有哪些设备”,后续的描述、控制、事件都无法进行。
SSDP 的设计目标
- 零配置发现:设备接入网络后可自动被其他设备发现。
- 轻量高效:使用 UDP + HTTP-like 报文格式,开销小。
- 支持动态加入/退出:设备可随时上线或下线,网络能及时感知。
- 跨平台兼容:适用于各种操作系统和嵌入式设备。
技术基础
传输层
- 协议:UDP(User Datagram Protocol)
- 目的地址:IPv4 多播地址
239.255.255.250 - 端口:
1900
注:IPv6 使用地址
FF0X::C(X 表示作用域),同样使用端口 1900。
报文格式
SSDP 使用类似 HTTP/1.1 的文本格式,但 通过 UDP 传输,不建立连接。
核心工作机制
SSDP 支持两种主要操作模式:
(1)主动搜索(M-SEARCH)
控制点(如手机 App、PC 软件)向多播地址发送 M-SEARCH 请求,寻找特定类型的服务。
请求示例:
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 3
ST: urn:schemas-upnp-org:device:MediaServer:1
关键字段说明:
HOST:固定为 SSDP 多播地址和端口MAN:必须为"ssdp:discover",表示发现请求MX:最大等待时间(秒),设备在此时间内随机延迟响应以避免拥塞ST(Search Target):指定搜索目标,常见值包括:ssdp:all:发现所有设备和服务upnp:rootdevice:根设备urn:schemas-upnp-org:device:InternetGatewayDevice:1:网关设备- 自定义设备/服务类型(如打印机、摄像头等)
(2)服务通告(NOTIFY)
设备主动广播自身状态变化:
- 上线时:发送
NTS: ssdp:alive - 下线时:发送
NTS: ssdp:byebye
通告示例(设备上线):
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=1800
LOCATION: http://192.168.1.100:8000/description.xml
NT: urn:schemas-upnp-org:device:MediaServer:1
NTS: ssdp:alive
USN: uuid:00112233-4455-6677-8899-aabbccddeeff::urn:schemas-upnp-org:device:MediaServer:1
关键字段说明:
LOCATION:指向设备描述文件(XML)的 URL,包含详细功能信息NT(Notification Type):设备或服务类型NTS(Notification Sub-type):ssdp:alive或ssdp:byebyeUSN(Unique Service Name):唯一标识该服务实例CACHE-CONTROL:缓存有效期(秒),过期后需重新发现
抓包示例
典型工作流程
- 设备启动 → 发送
NOTIFY(ssdp:alive)广播 - 控制点启动 → 发送
M-SEARCH多播请求 - 匹配设备响应 → 单播回复
HTTP/1.1 200 OK,包含LOCATION等信息 - 控制点获取描述 → 通过
LOCATION下载 XML 描述文件 - 后续交互 → 基于 SOAP 调用设备提供的服务(属于 UPnP 其他阶段)
调试与工具
- Wireshark:过滤
udp.port == 1900查看 SSDP 流量 - 命令行测试(Linux/macOS):
echo -e "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 3\r\nST: ssdp:all\r\n\r\n" | nc -u 239.255.255.250 1900 - Python 库:
async-upnp-client、fritzconnection等
总结
SSDP 是实现“零配置网络发现”的关键技术,极大简化了局域网内设备互联的复杂度。然而,其无状态、无认证的设计也带来了显著的安全隐患。在享受便利的同时,务必注意关闭非必要服务,并加强网络安全防护。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论





