SSDP协议-示例
来源:互联网 发布:访客网络有必要开吗 编辑:程序博客网 时间:2024/05/18 03:44
近来在研究SSDP,Simple Service Discovery Protocol (简单服务发现协议)。
这是用来实现无配置,自发现局域网内部服务的协议。
由IPv4下有固定的239.255.255.250:1900这一固定的地址来负责多播数据。
不过,从我的学习经历来说,要啃这种东西,最好的方法还是用例子搞懂名词,并实践一次。其实SSDP协议的请求就三种: byebye, alive, discovery
byebye请求
NOTIFY * HTTP/1.1Host: 239.255.255.250:1900NT: someunique:idscheme3NTS: ssdp:byebyeUSN: 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~
0 0
- SSDP协议-示例
- SSDP协议的Python示例
- SSDP协议
- SSDP 协议
- SSDP协议
- SSDP协议
- SSDP协议
- SSDP协议
- SSDP协议基础
- ssdp协议介绍
- SSDP协议内容解析
- SSDP协议内容解析
- SSDP协议内容解析
- SSDP 简单服务发现协议
- SSDP(简单服务发现协议)
- SSDP 简单服务发现协议
- SSDP 简单服务发现协议 .
- SSDP 简单服务发现协议
- 一次SSIS Package的调试经历
- 添加、删除控件后引起的问题
- linux下配置安装jdk
- ReactNative下载第三方库出错解决Error: EPERM: operation not permitted, rename
- Dynamics CRM2016 通过web api来调用自定义action
- SSDP协议-示例
- TSQL HASHBYTES 用法
- iOS tableview cell的展开收缩
- 【java基础】线程笔记——AQS(AbstractQueuedSynchronizer)
- Android Studio 快捷键 for Mac OS X
- VR/AR动手玩(二):编译opencv_contrib模块
- 选择排序和冒泡排序的区别
- nltk之使用正则表达式检测词组搭配
- swagger 生成 PHP restful API 接口文档