zoukankan      html  css  js  c++  java
  • SSDP 简单服务发现协议

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

    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发现请求】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: <blender:ixl><http://foo/bar>

    各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: <blender:ixl><http://foo/bar>

    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.

    【参考】

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

    http://www.cnblogs.com/debin/archive/2009/12/01/1614543.html

    转 : http://blog.csdn.net/lilypp/article/details/6631951

  • 相关阅读:
    php -- 读取大文件
    php header函数下载文件实现代码
    HTTP HEADER 详解
    linux -- 进程管理和作业控制
    linux -- at命令
    Binary String Matching
    括号匹配
    ASCII码排序
    快捷键
    ubuntu14的unity desktop显示异常
  • 原文地址:https://www.cnblogs.com/622698abc/p/3998162.html
Copyright © 2011-2022 走看看