UPnP DeviceArchitecure Step 1 : Discovery

来源:互联网 发布:类似于instagram的软件 编辑:程序博客网 时间:2024/06/11 13:51

要点记录:

一、概况

    1、Devices或是CPs都需要在进网后以multicast的方式发送声明,Devices声明自己内嵌的设备和服务,CPs则是搜寻自己希望获取的设备或服务;

    2、Device退出网络或切换到新的IP地址时,应该尽可能发送一系列的discover消息,声明内嵌的设备和服务将不再可用;

    3、每一个multicast消息对应的IP包,TTL默认为4(DA1.1中,TTL默认值为2)并且应当可配置(TTL大于1主要是考虑non-AutoIP情况下,IGMP Join消息的发送时间);

    4、UPnP版本号的兼容:

        1)格式:major.minor;

        2)相同major的版本,需要向后兼容;

        3)不同major的版本,新版本不要求是旧版本的超集,也不保证向后兼容;

    5、主要协议:SSDP

    6、注意multi-homed和UPnP-enabled interfaces的概念,这是DA1.1和DA1.0有区别的地方。(DMS多网卡(场景是什么)?old IP address尚未过期,new IP address已经启用?)

    7、当一个multi-homed device以一个新的UPnP-enabled interface接入时,需要递增BOOTID.UPNP.ORG域的值,同时multi-cast若干update messages以通告新的BOOTID.UPNP.ORG域值,之后再以新的BOOTID.UPNP.ORG域值multi-cast给所有的UPnP-enabled interfaces若干discovery messages;。(这是DA1.1的新内容)

    8、BOOTID.UPNP.ORG域值在IP地址变化时执行和7同样的操作;(这是DA1.1的新内容)

    9、multi-homed device因为某些原因失去连接,之后重新接入时,BOOTID.UPNP.ORG域值递增,和7相关操作唯一不同的是,update messages仅发送给那些未受影响的UPnP-enabled interfaces。(这是DA1.1的新内容)

二、一些细节

    1、Discovery:Advertisement

        1)Device在接入网络时,需要向固定地址(239.255.255.250:1900)广播discovery消息;(这也是为什么很多局域网在监听结果中出现大量针对239.255.255.250:1900组播包的原因,通常关闭设备的UPnP功能就可以解决)

        2)CP需要监听239.255.255.250:1900以便及时知道有新的device加入网络;

        3)关于请求数:

            如果1个root device包含d个embeded devices、s个embeded services,但是只有对应的k个特定的service types,则:

                  requests = 3 + 2d + k

        4)包含devices和services的多个消息应当看作一个整体,附带对应的超时时间进行发送,不允许针对单个消息进行刷新或取消;

        5)Device和service type的版本版本声明应该完全符合向后兼容;

        6)CP应该能够以实际能够支持的service来响应同类型高版本service的device;

        7)Advertisement的持续时间(duration)应当综合考虑可能占用的网络流量以及对应的device实际状态两方面因素。协议中给出的两个临界值为1800秒~1天。分别对应短时接入设备(例如:移动设备)和长时接入设备。初始的duration信息应当包含在1-4)提及的整体信息组中,在device/CP接入网络时尽快发送,后续则可以单独刷新。

        8)Device获取新的IP地址或是接入新的网络时,应该等待一个小于100ms的间隔,之后再发送1-4)提及的整体信息,这样做的目的是减少network storms;

        9)综合考虑UDP的不可靠性以及减少网络拥堵,上面提及的discovery消息需要发送2~3次;

        10)Advertisement需要在CACHE-CONTROL头声明的过期时间之前被重新发送,建议的发送间隔是CACHE-CONTROL的一半;

        11)需要保证每个discovery消息的size不超过一个UDP package的size(根据实现会略有差异,通常是512 bytes);

        12)当一个device加入网络时,需要首先发送method为NOTIFY,NTS域为ssdp:alive的multicast请求,实例如下:

               NOTIFY * HTTP/1.1
               HOST: 239.255.255.250:1900
               CACHE-CONTROL: max-age = seconds until advertisement expires
               LOCATION: URL for UPnP description for root device
               NT: search target
               NTS: ssdp:alive
               SERVER: OS/version UPnP/1.0 product/version
               USN: advertisement UUID

        13)当一个device和对应的services退出网络时,需要发送method为NOTIFY,NTS域为ssdp:byebye的multicast消息,实例如下:

              NOTIFY * HTTP/1.1
              HOST: 239.255.255.250:1900
              NT: search target
              NTS: ssdp:byebye
              USN: uuid:advertisement UUID

              无法及时以ssdp:byebye通知网络时,CPs需要在CACHE-CONTROL指定的超时时间来临时,将device和对应的services从cache中 移除;

    2、Discovery:Search

        1)Search消息以multicast的方式由CPs发送,search responses以unicast的方式由devices发送;

        2)Search message的示例:

            M-SEARCH * HTTP/1.1
            HOST: 239.255.255.250:1900
            MAN: "ssdp:discover"
            MX: seconds to delay response
            ST: search target

        3)ST域符合下列三个条件时,device对search request做出回复:

            ssdp:all,upnp:rootdevice,uuid对应device的一个advertise

        4)Search message没有MT域时,device会丢弃该message;

        5)Search message respond示例如下:

            HTTP/1.1 200 OK
            CACHE-CONTROL: max-age = seconds until advertisement expires
            DATE: when response was generated
            EXT:
            LOCATION: URL for UPnP description for root device
            SERVER: OS/version UPnP/1.0 product/version
            ST: search target
            USN: advertisement UUID

       

原创粉丝点击