SSDP,简单服务发现技术_简单服务发现协议有必要开启吗-程序员宅基地

技术标签: 协议  SSDP  

SSDP:Simple Sever Discovery Protocol,简单服务发现协议,此协议为网络客户提供一种无需任何配置、管理和维护网络设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的多播地址: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消息

在设备加入系统时,它采用多播传送方式发送发现消息,包括告知设备包含的根设备信息,所有嵌入设备以及它包含的服务。每个发现消息包含四个主要对象:
1.在NT头中包含的潜在搜索目标。
2.在USN头中包含的复合发现标识
3.在LOCATION头中关于设备信息的URL地址
4.在CACHE-CONTROL头中表示的广告消息的合法存在时间。

对于根设备,存在三种发现消息:



NT USN
根设备的UUID 根设备的UUID
设备类型:设备版本 根设备的UUID,设备类型:设备版本
upnp:rootdevice 根设备的UUID,设备类型和upnp:rootdevice


对于根设备,存在两种发现消息:



NT USN
嵌入设备的UUID 嵌入设备的UUID
设备类型:设备版本 嵌入设备的UUID,设备类型和设备版本


对于每个服务:



NT USN
服务类型:服务版本 相关设备的UUID,服务类型和服务版本


如果一个根设备有n个嵌入设备,m个嵌入服务,而且包含k个不同的服务类型,这将会发出3 + 2n + k次请求。这些广告消息像控制点描述了设备的所有信息。这些消息必须作为一系列一起发出,发送的顺序无关紧要,但是不能对单个消息进行刷新或取消的操作。选择一个适当的持续期是在最小化网络通讯和最大化设备状态及时更新之间求得一个平衡,相对较短的持续时间可以保证控制点在牺牲网络流量的前提下获得设备的当前状态;持续期越长可以大大减少设备刷新造成的网络流量。一般而言,设备制造商应该选择一个适当的持续时间值。

由于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地址完成更为精确的信息查询。





参考资料:

1、SSDP协议原文参考:http://tools.ietf.org/html/draft-cai-ssdp-v1-03

2、RFC 2616:
关于超文本传输协议(HTTP 1.1)原文IETF的RFC文档 http://www.ietf.org/rfc/rfc2616.txt?number=2616

3、UPnP协议框架:

http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0.pdf
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/swanabin/article/details/52024800

智能推荐

二叉树的层序遍历算法_编写算法,实现二叉树的层序遍历-程序员宅基地

文章浏览阅读291次。二叉树的层序遍历算法是一种按照层级顺序访问节点的方法,它利用队列的先进先出特性来实现。通过遍历每一层的节点,并将其子节点入队,我们可以按照层级顺序获取二叉树中的节点值。在这篇文章中,我们将介绍如何实现二叉树的层序遍历算法,并给出相应的源代码。在每一次迭代中,我们首先取出队首节点,访问它,并将它的左右子节点(如果存在)依次入队。如果该节点存在右子节点,则将右子节点入队。变量记录当前层的节点数量,这是为了在内层循环中准确地遍历当前层的节点。以上示例中,我们创建了一个二叉树,并使用层序遍历算法对其进行遍历。_编写算法,实现二叉树的层序遍历

linux usb虚拟网卡(NCM)_linux usb ncm-程序员宅基地

文章浏览阅读6.6k次。1. kernel config<M>USB Gadget precomposed configurations<M>Ethernet Gadget (with CDC Ethernet support) <M>Network Control Model (NCM) support2. build modulesmake ARCH=arm64 CROSS_COMPILE=aar..._linux usb ncm

Struts 应用转移到 Struts 2-程序员宅基地

文章浏览阅读1.9k次。 翻译:SpringSide团队 转载请注明出处。有很多人都很熟悉 Struts, 无论是从项目中直接获得的实战经验还是从书中了解到的。我们这一系列文章,将通过一个由 Stuts 转移到 Struts2 简单的例子向大家展现Struts2的所有特征。 在我们开始这个例子之前,你需要去知道一点 Struts2的背景知识。 在第一部分的文章中,我们将介绍Struts2与Struts的核心

在Windows平台上安装MRTG流量监控软件_mrtg 下载-程序员宅基地

文章浏览阅读188次。打开MRTG软件包中的"MRTG.cfg"文件,该文件是MRTG的主配置文件。打开MRTG软件包中的"MRTG.cfg"文件,该文件是MRTG的主配置文件。确保将命令中的"C:\MRTG"替换为你的MRTG安装目录和配置文件路径,"community"替换为你的SNMP团体字符串,"device_ip"替换为目标设备的IP地址。确保将命令中的"C:\MRTG"替换为你的MRTG安装目录和配置文件路径,"community"替换为你的SNMP团体字符串,"device_ip"替换为目标设备的IP地址。_mrtg 下载

kaggle简单使用教程(代码查找.下载、项目建立.运行、参加比赛)_kaggle在线写代码-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏35次。Kaggle机器学习竞赛、托管数据库、编写和分享代码_kaggle在线写代码

随便推点

第三十二节 java学习 —— Applet_java applet是在哪学的-程序员宅基地

文章浏览阅读324次。1》Applet的定义applet是java语言编写的,无法独立运行,但是可以镶嵌到网页中执行。它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有java编译环境的浏览的个体计算机上。 2》Applet用途用户可以静态显示Applet,像显示一副图片或一段文本一样;Applet可以是一个动态交互过程,用户输入简单的数据产生相应的响应。3》Applet编写的格式在编写_java applet是在哪学的

zabbix_server 3.0 安装-程序员宅基地

文章浏览阅读57次。2019独角兽企业重金招聘Python工程师标准>>> ..._zabbix server 3.0安装

OpenCV图像梯度_opencv 计算梯度图像-程序员宅基地

文章浏览阅读1.7k次。目标在本章中,我们将学习:寻找图像梯度、边缘等 我们将看到以下职能:cv2.sobel(), cv2.scharr(), cv2.Laplacian()等理论OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel、Scharr和Laplacian.我们会看到他们中的每一个。1.Sobel和Scharr衍生物¶Sobel算子是一种联合高斯平滑加微分运算,具有更强的..._opencv 计算梯度图像

flutter 聊天界面+表情图片_flutter表情包插件-程序员宅基地

文章浏览阅读2.6k次。网上找了找 零零碎碎有一些文章 没找到一个整体的 自己做完记录一下 防止忘了大体就是这样聊天气泡用的是https://blog.csdn.net/oterminator12/article/details/105790961这个文章看到的然后表情用的是https://blog.csdn.net/qq_36676433/article/details/104756685这个文章看到的整体结构及底部输入/表情选择部分body下的结构主要为最外层Column,然后聊天部分用F..._flutter表情包插件

win10应用:便签 商店 xbox等打不开,报错0x800704cf_xbox0x800704cf错误代码-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏2次。登录便签,一直报错:执行此操作需要Internet,0x800704cf。笔者网络是没有问题的,其它程序可以正常访问。解决方法关闭代理1.Win+R打开运行,输入 inetcpl.cpl 打开internet选项界面2.切换到[连接]选项,点击局域网设置。红色框选处的两个勾取消。笔者上述配置后即可解决问题。如若还不能解决,试试下面这个方法设置DNS服务器地址,首选设置为4.2.2.1 备用设置为4.2.2.2..._xbox0x800704cf错误代码

conda命令克隆(复制)环境_conda clone-程序员宅基地

文章浏览阅读8.9w次,点赞55次,收藏138次。在服务器上想要使用别人搭好的环境,但是又怕自己对环境的修改更新会影响他人的使用,这个时候可以使用conda命令进行复制环境。首先假设已经安装了Anaconda。根据已有环境名复制生成新的环境假设已有环境名为A,需要生成的环境名为B:conda create -n B --clone A根据已有环境路径复制生成新的环境假设已有环境路径为D:\A,需要生成的新的环境名为B:conda ..._conda clone