关于UPnP Device Architecture 2.0的阅读笔记(五)

    xiaoxiao2024-07-25  15

    设备发现之 上线广播

        概述

        当一个设备加入网络,设备会向控制点发布其服务的信息。具体是向一个标准的地址端口(239.255.255.250:1900)多播一组发现消息。控制点会监听这个端口并检查网络中是否有新功能。为了发布其所有的功能,一个设备会多播一组对应着不同的根设备嵌入设备或服务的发现消息。每个消息包含了具体的设备的信息。消息应该包含上线超时信息。如果设备继续可用,它应该重发上线信息,如果设备不可用,它该显式的取消上线信息。如果设备没能取消上线,则广播会自动超时取消。

       上线广播协议和标准

            设备或控制点使用下面的协议栈来发送或接收上线提示:             UPnP vendor             UPnP Forum             UPnP Device Architecture             SSDP             UDP             IP         在最顶层发现消息包含提供商信息(设备描述URL,设备ID),提供商信息由Forum补充(设备类型),SSDP消息通过基于IP的UDP协议发送。             

       设备可用 上线通知(NOTIFY ssdp:alive)

            当一个设备加入网络,它应该多播一组发现消息来提示控制点。每个发现消息应该包含四部分主要内容:         1)通知类型,NT(Notification Type)         2)上线发布的综合标识,USN(Unique Service  Name)         3)关于设备更多信息的URL,LOCATION         4)上线广播持续时间,CACHE-CONTROL              为了广播设备的功能,一个设备会多播一系列的发现消息。     具体地,一个根设备会多播:         1)根设备的三个发现消息         2)每个嵌入设备的两个发现消息         3)每个设备的每个服务的一个消息     如果一个根设备有d个嵌入的设备,s个嵌入的服务,k个独立的服务,这个将发布(3+2d+k)个消息。如果一个设备或嵌入设备包含一个特定服务的多个实例,它仅需要发布一个广播就行。两个嵌入设备通有一种服务类型,这些服务需要分别发布。这些消息发布的顺序不重要,但是重发或取消是禁止的。     选取一个合理的广播上线超时可以平衡最小化网络流量和最大化设备状态更新。相对短的超时时间最小1800s将保证控制点应用在一个合理流量获取当前设备状态。更长的超时比如一天,可能会使设备状态的更新获益,但大大降低了网络的流量性能。通常,设备供应商要依照设备的用途取一个合理的值:短超时意味着设备在网络中待很短时间,长超时意味着设备长期在网络中可见。经常进网出网的设备应该设一个短一点的时间。随时间分布地发布更新而不是一次发送一组能够提高可靠性。     当一个设备加入网络,将多播一组NOTIFY消息,如下:         NOTIFY * HTTP/1.1             #请求行,NOTIFY表示发送通知或事件的方法,*表示通用消息不指定资源,HTTP/1.1表示HTTP版本         HOST: 239.255.255.250:1900    #头信息,HOST行必须,值表示SSDP保留的多播地址和端口         CACHE-CONTROL: max-age = seconds until advertisement expires #必须,值表示设备可见时间,>=1800         LOCATION: URL for UPnP description for root device #必须,值表示根设备的URL         NT: notification type    #必须,值表示通知的类型,表示根设备,嵌入设备,服务等等         NTS: ssdp:alive    #必须,表示通知的子类型,这里是ssdp:alive,表示一个上线通知         SERVER: OS/version UPnP/2.0 product/version  #必须,由供应商提供。         USN: composite identifier for the advertisement #必须,值表示唯一服务名,标识了一个设备或服务的一个唯一的实例         BOOTID.UPNP.ORG: number increased each time device sends an initial announce or an update message         CONFIGID.UPNP.ORG: number used for caching description information         SEARCHPORT.UPNP.ORG: number identifies port on which device responds to unicast M-SEARCH          最后一个头信息之后,是一个空行。IP封包的TTL时间默认为2,可设置。     位域名大小写不敏感,位域值大小写敏感。

       设备不可用 下线通知(NOTIFY ssdp:byebye)

        当一个设备和其服务要退出网络时,设备应该针对每个未超时的ssdp:alive消息广播一组ssdp:byebye消息。如果设备意外退网,alive消息会在超时时自动取消。当一个控制点退出网络时,没有需要进行与发现相关的动作。     NOTIFY下线消息如下:         NOTIFY * HTTP/1.1         HOST: 239.255.255.250:1900         NT: notification type         NTS: ssdp:byebye         USN: composite identifier for the advertisement         BOOTID.UPNP.ORG: number increased each time device sends an initial announce or an update message         CONFIGID.UPNP.ORG: number used for caching description information     虽然消息不需要消息体,但最后以行要求为空白行。IP封包的TTL时间默认为2,可设置。     注: 使用方法NOTIFY的消息不需要响应。     如果一个控制设备收到根设备的至少一个ssdp:byebye消息,那么它将判断该设备的所有的子设备或服务将不再可用。

        设备更新 更新通知(NOTIFY ssdp:update)

        当一个新的UPnP接口被加进一个“multi-homed”设备时,该设备应该增加其BOOTID.UPnP.ORG的值,为每一个根设备嵌入设备服务多播一个ssdp:update消息。     更新消息NOTIFY 如下:         NOTIFY * HTTP/1.1                      #消息请求行,含义同前         HOST: 239.255.255.250:1900             #消息头信息,含义同前         LOCATION: URL for UPnP description for root device         NT: notification type         NTS: ssdp:update               #这里是ssdp:update         USN: composite identifier for the advertisement         BOOTID.UPNP.ORG: BOOTID value that the device has used in its previous announcements         CONFIGID.UPNP.ORG: number used for caching description information         NEXTBOOTID.UPNP.ORG: new BOOTID value that the device will use in subsequent announcements         SEARCHPORT.UPNP.ORG: number identifies port on which device responds to unicast M-SEARCH

        如果一个只有一个UPNP使能接口的控制点接收到一个ssdp消息,的BOOTID.UPNP.ORG值与该设备的原来不一样,则可以推断设备更新了,应该将该设备视为一个新的设备。

    转载请注明原文地址: https://ju.6miu.com/read-1291023.html
    最新回复(0)