ssdp协议 upnp_SSDP,简单服务发现协议

ssdp协议 upnp_SSDP,简单服务发现协议SSDP简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一。它为网络客户端(networkclient)提供了一种发现网络服务(networkservices)的机制,采用基于通知和发现路由的多播方式实现。SSDP多播地址:239.255.255.250:1900(IPv4),FF0x::C(IPv6)两种类型的SSDP请求消息会通过SSDP多播地址发送:1….


Jetbrains全系列IDE稳定放心使用

SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一。它为网络客户端(network client)提供了一种发现网络服务(network services)的机制,采用基于通知和发现路由的多播方式实现。

ssdp协议 upnp_SSDP,简单服务发现协议

SSDP多播地址:239.255.255.250:1900(IPv4),FF0x::C(IPv6)

两种类型的SSDP请求消息会通过SSDP多播地址发送:

1. 发现请求(Discovery request 或查询请求)。SSDP客户端向此地址发送HTTP UDP 发现请求,查询某种类型的服务。SSDP服务在此地址上监听服务发现请求。当服务监听到的HTTP UDP 发现请求和它自己提供的服务匹配时,它以单播方式发送HTTP UDP 响应。

2. 存在通知(notification)。SSDP服务向此多播地址发送HTTP UDP 通知消息来宣布自己的存在。

发现结果(discovery results)和存在通知消息(presence announcements)提供的信息包括:

服务的类型URI

服务名称USN:唯一标识一种服务实例。

位置信息:发现结果和存在通知可包含一个或多个位置URI,客户端利用位置信息可以找到它需要的服务。

期限信息:客户端在自己的cache中保存此服务多长时间。如果期限过了,关于此服务的信息会被从cache中拿掉。当客户端接收到的发现结果或存在通知包含的USN和cache中的某条匹配,则更新。

客户端的服务缓存像下面这样:

ssdp协议 upnp_SSDP,简单服务发现协议

【SSDP发现请求】ssdp:discover

ssdp:discover 必须包含一个ST头,客户端使用ST头来表明他们想发现的服务类型。ssdp:discover 必须包含一个带 *  的请求URI。

M-SEARCH * HTTP/1.1

S: uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6

Host: 239.255.255.250:1900

Man: “ssdp:discover”

ST: ge:fridge

MX: 3

各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组织定义。

SSDP服务发现自己的服务类型和ST中指明的服务类型匹配时,可以向ssdp:discover来自的IP地址/端口响应。响应消息应该包含服务的位置信息(Location 或AL头),ST和USN头。响应消息应该包含cache控制信息(max-age 或者 Expires头),如果两者都包含了,Expires 头优先,如果两者都缺失,那么这条服务消息不能被cache。

HTTP/1.1 200 OK

S: uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6

Ext:

Cache-Control: no-cache=”Ext”, max-age = 5000

ST: ge:fridge

USN: uuid:abcdefgh-7dec-11d0-a765-00a0c91e6bf6

AL:

各HTTP协议头的含义简介:

CACHE-CONTROL:max-age指定通知消息存活时间,如果超过此时间间隔,控制点可以认为设备不存在

DATE:指定响应生成的时间

EXT:向控制点确认MAN头域已经被设备理解

LOCATION:包含根设备描述得URL地址

SERVER:饱含操作系统名,版本,产品名和产品版本信息

ST:内容和意义与查询请求的相应字段相同

USN:表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力。

【SSDP存在通知消息】

SSDP服务通过存在通知消息来向客户端宣布自己的存在,更新期限信息,更新位置信息。

ssdp:alive 消息必须将 NT 设置成自己的服务类型,USN头设置成自己的USN。ssdp:alive 应该包括Location或者AL头,如果没有DNS支持的话,使用SSDP服务的IP地址来代表位置。ssdp:alive还应该包括cache控制信息,max-age或者Expires头。

NOTIFY * HTTP/1.1

Host: 239.255.255.250:reservedSSDPport

NT: blenderassociation:blender

NTS: ssdp:alive

USN: someunique:idscheme3

AL:

Cache-Control: max-age = 7393

ssdp:alive 没有响应消息。

SSDP服务可以发送ssdp:byebye 来宣布自己下线。ssdp:byebye 必须将NT设置成自己的服务类型,将USN头设置成自己的USN。ssdp:byebye 也没有响应消息。当客户端接收到ssdp:byebye 消息,删掉cache里面的相关条目。

NOTIFY * HTTP/1.1

Host: 239.255.255.250:reservedSSDPport

NT: someunique:idscheme3

NTS: ssdp:byebye

USN: someunique:idscheme3

【SSDP Auto-Shut-Off Algorithm】

A mechanism is needed to ensure that SSDP does not cause such a high level of traffic that it overwhelms the network it is running on.

【ssdp:all】

A mechanism is needed to enable a client to enumerate all the services available on a particular SSDP multicast channel/port.

【参考】

4、UPnP协议框架:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183250.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 剑指 Offer 03. 数组中重复的数字(原地算法)「建议收藏」

    剑指 Offer 03. 数组中重复的数字(原地算法)「建议收藏」找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000题解原地算法class Solution {public: static const int N = 1e5 + 10; int vis[N]

    2022年8月8日
  • org.apache.kafka.clients_kafka源码分析

    org.apache.kafka.clients_kafka源码分析apacheKafka中国社区中国社区QQ群1:162272557未满收费5¥,保证QQ运营,腾讯QQVIP收年费,2000人群非常活跃,质量很高中国社区QQ群2:414762562未满1000人群中国社区QQ群3:191278841未满1000人群中国社区QQ群4:415846802未满1000人群每当有新blog发布时,会在此处更新,欢迎大家拍砖共同成长目录索引…

    2022年10月14日
  • Animation的使用「建议收藏」

    Animation的使用「建议收藏」Animation(动画)有两种分类:补间动画(Tween)和帧动画(Frame)补间动画主要有以下几种:旋转(RotateAnimation)平移(TranslateAnimation)拉伸(ScaleAnimation)透明度(AlphaAnimation)实现的方式:1.实例相应的动画对象2.加载资源中的动画文件动画的属性d

    2022年10月31日
  • Linux – quota的举例说明

    实作Quota流程-1:文件系统支持[root@www~]#df-h/homeFilesystemSizeUsedAvailUse%Mountedon/dev/hda34.8G740M3.8G17%/home[root@www~]#mount|grephome/dev/hda3on/ho

    2022年4月6日
  • java calendar 设置小时_Java Calendar.set 方法设置时间的问题

    java calendar 设置小时_Java Calendar.set 方法设置时间的问题因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。变量有:开始时间–startDate,结束时间–endDate。逻辑很简单:获取到开始时间的月份和结束时间的月份,然后得到月份差值,进行for循环遍历,遍历的时候判断用户注册的时间是否在这个月里,然后得出结果。关键就在于:判断用户注册的时间是否在这个月里。想了一个办法:假如一个用户的注册时间是2016-09-0522:05…

    2022年5月26日
  • pycharm创建mysql数据库_自学语言的步骤

    pycharm创建mysql数据库_自学语言的步骤Python连接mysql并进行一些基本操作之前有讲过Python如何连接Oracle,在这一期。在连接mysql数据库时,原理相同,这里我们先说明理论部分,再给出一个具体实例。Python操作MySQL数据库需要下载PyMySQL.PyMySQL是一个Python编写的MySQL驱动程序。安装代码:pipinstallPyMySQL在Python中建立连接,先导入包:导入代码为:importpymysql#创建连接:连接代码:通过工具类调用connect()方法。注意:(必

    2022年8月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号