简单服务发现协议SSDP【转】
来自:https://blog.csdn.net/wuruixn/article/details/23843877
SSDP:Simple Sever Discovery Protocol,简单服务发现协议是一种应用层协议(常用于寻找upnp设备),此协议为网络客户提供一种无需任何配置、管理和维护网络设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的多播地址:239.255.255.250:1900(IPV4)发现服务,(IPv6 是:FF0x::C)同时每个设备服务也在此地址上上监听服务发现请求。如果服务监听到的发现请求与此服务相匹配,此服务会使用单播方式响应。
常见的协议请求消息有两种类型,第一种是服务通知,设备和服务使用此类通知消息声明自己存在;第二种是查询请求,协议客户端用此请求查询某种类型的设备和服务。请求消息中包含设备的特定信息或者某项服务的信息,例如设备类型、标识符和指向设备描述文档的URL地址。下图显示这两类通知消息和HTTP协议的关系:
设备发现过程允许控制点使用一个设备类型或标识,或者是服务类型进行查询。这要求标准设备或服务类型,或者设备特定实例的发现和广告消息基于一个独一无二的标识,UPnP设备和服务类型的定义是UPnP论坛工作委员会的责任。从设备获得响应的内容基本上与多址传送的设备广播相同,只是采用单址传送方式。
SSDP 协议消息
1、设备查询消息
当一个控制点加入到网络中时,设备发现过程允许控制点寻找网络上感兴趣的设备。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标识符、和指向XML设备描述文档的指针。从设备获得响应从本质上说,内容与多址传送的设备广播相同,只是采用单址传送方式。设备查询通过HTTP协议扩展M-SEARCH方法实现的。典型的设备查询请求消息格式:
M-SEARCH * HTTP/1.1 HOST: 239.255.255.250:1900 MAN: "ssdp:discover" MX: seconds to delay response ST: search target |
各HTTP协议头的含义简介:
HOST:设置为协议保留多播地址和端口,必须是:239.255.255.250:1900(IPv4)或FF0x::C(IPv6)
MAN:设置协议查询的类型,必须是:ssdp:discover
MX:设置设备响应最长等待时间,设备响应在0和这个值之间随机选择响应延迟的值。这样可以为控制点响应平衡网络负载。
ST:设置服务查询的目标,它必须是下面的类型:
ssdp:all 搜索所有设备和服务
upnp:rootdevice 仅搜索网络中的根设备
uuid:device-UUID 查询UUID标识的设备
urn:schemas-upnp-org:device:device-Type:version 查询device-Type字段指定的设备类型,设备类型和版本由UPNP组织定义。
urn:schemas-upnp-org:service:service-Type:version 查询service-Type字段指定的服务类型,服务类型和版本由UPNP组织定义。
在设备接收到查询请求并且查询类型(ST字段值)与此设备匹配时,设备必须向多播地址239.255.255.250:1900回应响应消息。典型:
HTTP/1.1 200 OK CACHE-CONTROL: max-age = seconds until advertisement expires DATE: when reponse was generated EXT: LOCATION: URL for UPnP description for root device SERVER: OS/Version UPNP/1.0 product/version ST: search target USN: advertisement UUID |
各HTTP协议头的含义简介:
CACHE-CONTROL | max-age指定通知消息存活时间,如果超过此时间间隔,控制点可以认为设备不存在 |
DATE | 指定响应生成的时间 |
EXT | 向控制点确认MAN头域已经被设备理解 |
LOCATION | 包含根设备描述得URL地址 |
SERVER | 饱含操作系统名,版本,产品名和产品版本信息 |
ST | 内容和意义与查询请求的相应字段相同 |
USN | 表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力。 |
2、设备通知消息
在设备加入网络,UPnP发现协议允许设备向控制点广告它的服务。它使用向一个标准地址和端口多址传送发现消息来实现。控制点在此端口上侦听是否有新服务加入系统。为了通知所有设备,一个设备为每个其上的嵌入设备和服务发送一系列相应的发现消息。每个消息也包含它表征设备或服务的特定信息。
3.1.1 ssdp:alive消息
在设备加入系统时,它采用多播传送方式发送发现消息,包括告知设备包含的根设备信息,所有嵌入设备以及它包含的服务。每个发现消息包含四个主要对象:
- 在NT头中包含的潜在搜索目标。
- 在USN头中包含的复合发现标识
- 在LOCATION头中关于设备信息的URL地址
- 在CACHE-CONTROL头中表示的广告消息的合法存在时间。
对于根设备,存在三种发现消息:
NT | USN |
根设备的UUID | 根设备的UUID |
设备类型:设备版本 | 根设备的UUID,设备类型:设备版本 |
upnp:rootdevice | 根设备的UUID,设备类型和upnp:rootdevice |
对于嵌入式设备,存在两种发现消息:
NT | USN |
嵌入设备的UUID | 嵌入设备的UUID |
设备类型:设备版本 | 嵌入设备的UUID,设备类型和设备版本 |
对于每个服务:
NT | USN |
服务类型:服务版本 | 相关设备的UUID,服务类型和服务版本 |
由于UDP协议是不可信的,设备应该发送多次设备发现消息。而且为了降低控制点无法收到设备或服务广告消息的可能性,设备应该定期发送它的广告消息。在设备加入网络时,它必须用NOTIFY方法发送一个多播传送请求。NOTIFY方法发送的请求没有回应消息,典型的设备通知消息格式如下:
NOTIFY * HTTP/1.1 HOST: 239.255.255.250:1900CACHE-CONTROL: max-age = seconds until advertisement expires LOCATION: URL for UPnP description for root device NT: search target NTS: ssdp:alive USN: advertisement UUID |
各HTTP协议头的含义简介:
HOST | 设置为协议保留多播地址和端口,必须是239.255.255.250:1900。 |
CACHE-CONTROL | max-age指定通知消息存活时间,如果超过此时间间隔,控制点可以认为设备不存在 |
LOCATION | 包含根设备描述得URL地址 |
NT | 在此消息中,NT头必须为服务的服务类型。 |
NTS | 表示通知消息的子类型,必须为ssdp:alive |
USN | 表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力。 |
一个发现响应可以包含0个、1个或者多个服务类型实例。为了做出分辨,每个服务发现响应包括一个USN:根设备的标识。在同样的设备里,一个服务类型的多个实例必须用包含USN:ID的服务标识符标识出来。例如,一个灯和电源共用一个开关设备,对于开关服务的查询可能无法分辨出这是用于灯的。UPNP论坛工作组通过定义适当的设备层次以及设备和服务的类型标识分辨出服务的应用程序场景。这么做的缺点是需要依赖设备的描述URL。
3.1.2 ssdp:byebye消息
在设备和它的服务将要从网络中卸载时,设备应该对于每个未超期的ssdp:alive消息多播方式传送ssdp:byebye消息。但如果设备突然从网络卸载,它可能来不及发出这个通知消息。因此,发现消息必须在CACHE-CONTROL包含超时值,如果不重新发出广告消息,发现消息最后超时并从控制点的缓存中除去。典型的设备卸载消息格式如下:
NOTIFY * HTTP/1.1 HOST: 239.255.255.250:1900NT: search target NTS: ssdp:byebye USN: advertisement UUID各HTTP协议头的含义简介: HOST 设置为协议保留多播地址和端口,必须是239.255.255.250:1900 NT 在此消息中,NT头必须为服务的服务类型。 NTS 表示通知消息的子类型,必须为ssdp:alive USN 表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力 |
专有设备或服务可以不遵循标准的UPNP模版。但如果设备或服务提供UPNP发现、描述、控制和事件过程的所有对象,它的行为就像一个标准的UPNP设备或服务。为了避免命名冲突,使用专有设备命名时除了UPNP域之外必须包含一个前缀"urn:schemas-upnp-org"。在与标准模版相同时,应该使用整数版本号。但如果与标准模版不同,不可以使用设备复用和徽标。
简单设备发现协议不提供高级的查询功能,也就是说,不能完成某个具有某种服务的设备这样的复合查询。在完成设备或者服务发现之后,控制点可以通过设备或服务描述的URL地址完成更为精确的信息查询。
简单服务发现协议SSDP【转】相关推荐
- ssdp协议 upnp_SSDP 简单服务发现协议
SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...
- SSDP 简单服务发现协议
SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...
- SSDP(简单服务发现协议)
简介 简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用程序协议,是构成即插即用(UPnP)技术的核心协议之一. 简单服务发现协议提供了在局部网 ...
- ssdp协议 upnp_SSDP,简单服务发现协议
SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...
- BLE-SDP服务发现协议
SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客 ...
- php etcd 服务发现,confd+etcd+nginx 实现简单服务发现
一. 项目背景 随着微服务的兴起,大量接口服务化.当新的微服务加入或微服务的信息发生变更时,服务方如何通知周边系统.使用方如何知道这些变更呢? 这时就需要服务的注册配置和发现功能. 服务注册配置--存 ...
- SSDP 服务发现协议
https://blog.csdn.net/braddoris/article/details/41479171 SSDP在Android上的实现 https://blog.csdn.net/ibla ...
- 【车载以太网】【SOME/IP】(九)解读SOME/IP-SD服务发现协议
目录 一.简介: 二.SOME/IP-SD报文格式: 三.EntriesArray: 四.Option类型 五.报文传输过程:
- Android网络服务发现(NSD)协议的使用
Android的网络服务发现协议(NSD)能够用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会很有帮助. Android的NSD的用法大致上分为四种操作: 1. 注 ...
最新文章
- 使用Java VisualVM监控远程JVM
- 百度java验证码不显示不出来,Java-使用百度链接时,遇到无法弹出用户登录框的问题...
- 中国移动互联网2018年度报告:八大关键词总结与十大趋势
- node --- Missing write access to 解决
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结...
- 腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比
- CC3200底板测试-烧写CC3200-LAUNCHXL
- html隐藏域 js,JS实现“隐藏与显示”功能(多种方法)
- Matplotlib--legend函数
- iOS开发全套资源,从入门到全栈IOS工程师
- PTMs-GPT,GPT2
- 自建传奇2服务器,自己想要架设传奇服务器的详细攻略
- 开源的在线html编辑器,22个国外的Web在线编辑器收集
- Python正则表达式(regular expression)简介-re模块
- 51单片机蜂鸣器操作
- 小程序/公众号商城一键生成工具之weiit-saas
- 水溶性CdS/ZnS量子点(硫化镉/硫化锌量子点)基团:PEG-NH2、PEG-COOH、MPA-COOH、GSH
- 【笨木头Lua专栏】基础补充02:函数的几个特别之处
- 有什么值得一看再看的书吗?
- input组件选择日期时间