SSDP协议_sntp协议

SSDP协议_sntp协议近来在研究SSDP,SimpleServiceDiscoveryProtocol(简单服务发现协议)。这是用来实现无配置,自发现局域网内部服务的协议。由IPv4下有固定的239.255.255.250:1900这一固定的地址来负责多播数据。不过,从我的学习经历来说,要啃这种东西,最好的方法还是用例子搞懂名词,并实践一次。其实SSDP协议的请求就三种:byeby

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

近来在研究SSDP,Simple Service Discovery Protocol (简单服务发现协议)。

这是用来实现无配置,自发现局域网内部服务的协议。

由IPv4下有固定的239.255.255.250:1900这一固定的地址来负责多播数据。

不过,从我的学习经历来说,要啃这种东西,最好的方法还是用例子搞懂名词,并实践一次。其实SSDP协议的请求就三种: byebye, alive, discovery

byebye请求

NOTIFY * HTTP/1.1
Host: 239.255.255.250:1900
NT: someunique:idscheme3
NTS: ssdp:byebye
USN: someunique:idscheme3
  • NOTIFY 通知所有广播域的机器
  • HOST 值是固定的(IPv4),算是协议的一部分
  • NT (Notification Type)这个是GENA的定义,即通知类型,值一般是当前设备的类型
  • NTS (Notification Sub-Type)通知子类型,如果要遵守SSDP,这个值就代表了请求的类型,但是为什么NTS和NT搞混了呢……协议中写得非常明白 

    5.3.5. Shouldn’t the NT and NTS values be switched?

    Yes, they should. Commands such as ssdp:alive and ssdp:byebye should

    be NT values and the service type, where necessary, should be the

    NTS. The current mix-up is a consequence of a previous design where

    the NT header was used in a manner much like we use the USN today.

    This really needs to change.

  • USN 这个设备的UUID,防止设备的IP或者网络环境改变后,连接至错误的设备。

alive(服务上线/广播存活/心跳包)

NOTIFY * HTTP/1.1HOST: 239.255.255.250:1900CACHE-CONTROL: max-age=100LOCATION: http://10.5.4.81:49155/TxMediaRenderer_desc.xmlNT: upnp:rootdeviceNTS: ssdp:aliveUSN: uuid:001e4fd3fa0e0000_MR::upnp:rootdevice
  • CACHE-CONTROL说明这个设备状态至少在100秒内不会过期,过期时,所有设备就必须要刷新这信息,如果得不到新的数据,则认为此设备不可用。如果不提供CACHE-CONTROL或者EXPIRES,此设备的信息将不允许缓存,超时机制由接受端决定
  • LOCATION此设备的控制点或描述文件所在地

discovery请求

M-SEARCH * HTTP/1.1Host:239.255.255.250:1900ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1Man:"ssdp:discover"MX:3
  • M-SEARCH 说明这是强制的搜索方法(由Mandatory Extensions in 
    HTTP中的Mandatory HTTP Requests确定)
  • ST (search term)搜索条件,指明需要搜索的设备,可以是类型,服务,甚至是UUID,至于怎么回应嘛……那是服务端的事了
  • Man M-SEARCH请求必须带的数据项,值必须为“ssdp:discover”
  • MX 优先级,数字越高,优先级越低

服务发现的现实流程

+---------+ +---------+               +-----------+
            | Client | | Server |               | Multicast |
            +---------+ +---------+               +-----------+
---------------\ | |	         | | Initialized  |-|           | |
---------------- | |	         | |           | |
	| discovery |	         | |------------------------------------->| |           | |
	| |          Client wants ST | |           |< ------------------------|
	| | -------------------\     | |           |-| In discovery ST? | |
	| | --------------------     | |           | |
	| | (In ST) alive            | |           |------------------------->|
	| |	         | |           | Here is Server |
	|< ------------------------------------|
	| |	         |

好了,这个协议就这么Simple~

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183147.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js indexOf 的正确用法「建议收藏」

    js indexOf 的正确用法「建议收藏」indexOf在js中有着重要的作用,可以判断一个元素是否在数组中存在,或者判断一个字符是否在字符串中存在,如果存在返回该元素或字符第一次出现的位置的索引,不存在返回-1。例如vararr=[1,2,3];console.log(arr.indexOf(2));//打印结果为1又或者varstr=”helloworld”;console.log(str.indexOf(“w”));//打印结果为5那么,当想删除某个数组中的某个元素时,常常会这么

  • android studio飞机大战游戏带注释源码教程(多线程)[通俗易懂]

    android studio飞机大战游戏带注释源码教程(多线程)[通俗易懂]第一次发博客,学了3天的androidstudio还有一点以前的java基础做了个飞机大战的游戏游戏比较简单大概就这几个功能1.会动的背景2.我的飞机3.发射子弹3.敌人飞机第一步新建一个项目我用的是Android4.4版本新建好项目之后xml文件之类的什么都不用管先新建个类叫做huahua.javapackagecom.dahuijii.liziguo;importandroid.c…

  • linux端口占用清除[通俗易懂]

    查看端口占用:lsof-i:端口号清除占用该端口的所有进程:sudokill-9$(lsof-i:端口号-t)

  • python抢淘宝的东西-Python 实现毫秒级淘宝抢购脚本的示例代码

    python抢淘宝的东西-Python 实现毫秒级淘宝抢购脚本的示例代码本篇文章主要介绍了Python通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,也可以抢聚划算的商品。博主不提供任何服务器端程序,也不提供任何收费抢购软件。该文章仅作为学习selenium框架的一个示例代码。该思路可运用到其他任何网站,京东,天猫,淘宝均可使用,且不属于外挂或者软件之类,只属于一个自动化点击工具,…

  • java打印数组内容

    java打印数组内容在java中直接输出数组只能得到引用地址byte[]bytes={1,2,3,4,5};int[]ints={1,2,3,4,5};System.out.println(bytes);System.out.println(ints);输出[B@1b6d3586[S@4554617c打印数组内容publicstaticvoidmain(Stringargs

  • win10更改计算机时间格式,Win10电脑锁屏的时钟格式怎么更改[通俗易懂]

    win10更改计算机时间格式,Win10电脑锁屏的时钟格式怎么更改[通俗易懂]Win10电脑锁屏的时钟格式怎么更改腾讯视频/爱奇艺/优酷/外卖充值4折起我们在使用Win10电脑的锁定屏幕后,默认显示的是12小时的时钟格式。想要将12小时格式设置为24小时格式,该怎么操作呢?今天就跟大家介绍一下Win10电脑锁屏的时钟格式怎么更改的具体操作步骤。1.首先打开电脑上的“控制面板”,进入页面后,找到“更改日期,时间或数字格式”选项。2.如图,在弹出的窗口中,如果想要设置为2…

发表回复

您的电子邮箱地址不会被公开。

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