理解UPnP协议

简介

UPnP 是针对智能家电、 无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场所中或连接到互联网的 ad-hoc 网或未管理网络提供易于使用、灵活且基于标准的连接。 UPnP 是一个充分利用 TCP/IP 和 Web 技术的分布式开放型网络体系结构,除能够在家中、办公室和公共场所联网设备之间的完整控制和数据传输之外,还可建立无缝紧密的连接网络。

开始

UPnP是微软推行的一个标准,它希望只要任何一个设备连接上网络,这个网络上的所有其他设备都能够知道有新的设备加入,并且这些设备能够互相沟通。如果加入的设备是专门提供服务的,那么其他有控制功能的设备就可以直接去控制使用这个设备,完全不需要其他设定,这也是其即插即用的属性(UPnP)

UPnP设备架构

UPnP针对发现,描述,控制,事件触发和展示采用了如下协议栈:

UPnP协议栈.png
  • UPnP是一个多层协议构成的框架体系,每一层都以相邻的下层为基础,同时又是相邻上层的基础。直至达到应用层为止。该图中的最下面是就是IP和TCP,共两层,负责设备的IP地址。
  • 第三层是HTTP、HTTPU、HTTPMU,这一层,属于传送协议层。传送的是内容都经过“封装”后,存放在特定的XML文件中的。对应的SSDP、GENA、SOAP指的是保存在XML文件中的数据格式。到这一层,已经解决了UPnP设备的IP地址和传送信息问题。
  • 第四层是UPnP设备体系定义,仅仅是一个抽象的、公用的设备模型。任何UPnP设备都必须使用这一层。
  • 第五层是UPnP论坛的各个专业委员会的设备定义层,在这个论坛中,不同电器设备由不同的专业委员会定义,例如:电视委员会只负责定义网络电视设备部分,空调器委员会只负责定义网络空调设备部分,依此类推。所有的不同类型的设备都被定义成一个专门的架构或者模板,供建立设备的时候使用。可以推知,进入这一层,设备已经被指定了明确用途。当然,这些都必须遵守标准化的规范。从目前看,UPnP已经可以支持大部分的设备:从电脑、电脑外设,移动设备和家用消费类电子设备等等,无所不包,随着这个体系的普及,将可能有更多的厂家承认这一标准,最终,可能演化为公认的行业标准。
  • 最上层,也就是应用层,由UPnP设备制造厂商定义的部分。这一层的信息是由设备制造厂商来“填充” 的,这部分一般有设备厂商提供的、对设备控制和操作的底层代码,然后,就是名称序列号呀,厂商信息之类的东西。

0.寻址

IP是UPnP协议最基础的部分,一个设备必须要有IP地址才能与其他设备进行通信。所以寻找地址(IP)是UPnP协议的第一步,这部分由IP协议完成。

1.发现

当设备A添加到网络中,设备A会通过UPnP使用多播的方式,大量通知网络中所有其他设备,宣告设备A添加到网络中。网络中的任何其他设备都可以收到设备A发送的宣告消息,如果其他设备对设备A感兴趣,都可以对该信息进行回复(因为消息中已经包含了设备A的相关必要信息,所以可以回复)。

在UPnP中使用多播的地址为规定的 239.255.255.250:1900,任何设备即使不使用UPnP协议也都可以监听这个多播地址,收到其中的信息。如果你不了解多播,你可以参考这篇文章Android中实现多播。

UPnP发现设备示例图.png
  • 控制点:拥有控制功能的设备,我们称之为控制点
  • 根设备:一个设备还可能拥有其他子设备,这个设备我们称之为根设备。比如,在电脑上我们可以外接其他的显示器,音响等等
  • 服务:可以为其他设备提供服务的设备,比如播放视频,图片等,任何其他控制点都可以对服务进行控制

UPnP论坛工作委员会对UPnP中的消息格式都进行了规定,例如下面为UPnP的发现搜索alive的消息格式:

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: notification type
NTS: ssdp:alive
SERVER: OS/version UPnP/1.1 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
请求行

请求行必须是“NOTIFY * HTTP/1.1”

  • Notify:用于发送通知或事件的方法;消息类型应该是通用型而不是某种特定资源,必须是*
  • HTTP/1.1:HTTP版本号
消息头
  • HOST:必选。该字段值是互联网号码颁发机构(IANA)为SSDP保留的多播地址和端口号。必须是 239.255.255.250:1900
  • CACHE-CONTROL:必选。该字段值是用于标识广播有效的时间。在这个时间时候,就表示该服务不可用,但只要收到根设备或其嵌入式设备中的任何一个服务的任何广播,那么便认为这个设备的所有服务都可用。时间应大于1800秒。
  • LOCATION:设备描述文件的URL。
  • NT:Notification Type,这里的值upnp:rootdevice)表明这是一个“根设备”。每个设备可以有自己的子设备。
  • NTS:Notification Sub Type,标准规定必须是ssdp:alive。
  • SERVER:必选。由UPnP供应商指定,标识产品名称/产品版本
  • USN:Unique Service Name,是一个设备实例的标识符

2.描述

简单说,这是声明“自己”是什么样的设备,例如名称、制造厂商、序列号码等等。刚开始“发现”设备后,控制点对这个设备的“了解”还很少,需要依据ULR找到该设备的描述文件,从这些文件中读取更多的描述信息。描述信息的范围很广,一般都是由设备的制造厂商提供的。主要的描述项目有:控制的模式名称和模式号码、设备序列号、制造厂商名称、厂商的WEB的ULR等等。这些一般都存放在特定的XML文件中。

设备的描述通过HTTP协议来完成。

  
  
    
    1  
    1  
    
   
    
   urn:schemas-upnp-org:device:BinaryLight:1  
    KitchenLights  
   OpenedHand  
    VirtualLight  
   uuid:cc93d8e6-6b8b-4f60-87ca-228c36b5b0e8  
   
      
        
       urn:schemas-upnp-org:service:SwitchPower:1  
       urn:upnp-org:serviceId:SwitchPower:1  
       /SwitchPower1.xml  
        /SwitchPower/Control  
       /SwitchPower/Event  
        
      
    
  

deviceType:设备类型,格式为:“urn:schemas-upnp-org:device:deviceType:v”,这里deviceType和v是由设备定义的。
friendlyName:一个更加友好的设备名。
Manufacturer:制造商。
modeName:型号。
UDN:Unique Device Name,设备的UUID。
serviceList:服务列表。
对于每一个服务:
serviceType:与deviceType类似,这里的后两段由服务定义。
serviceId:服务ID,通常于serviceType对应。
SCPDURL:服务描述的URL。
controlURL:用于控制的URL。
eventSubURL:用于订阅事件的URL。

3.控制

控制点找到设备描述之后,会从描述中“提炼”出要进行的操作并获悉所有的服务;对每个UPnP设备来说,这些描述必须是很确切、很详细的,描述中可能包含有命令或行为列表、服务响应信息、用到的参数等等。对于服务的每个行为,也伴有描述信息:主要是整个服务进行期间的变量、变量的数据类型、可用的取值范围和事件的特征。

要控制某个设备,控制点必须先发送一个控制行为请求,要求设备开始服务,然后再按设备的ULR发送相应的控制消息,控制消息就是放置在XML文件中的那些SOAP格式的信息。最后,服务会返回响应信息,指出服务是成功或是失败。

4.事件触发

在服务进行的整个时间内,只要变量值发生了变化或者模式的状态发生了改变,就产生了一个事件,系统将修改上述提到的事件列表的内容。随之,事件服务器把事件向整个网络进行广播。另一方面,控制点也可以事先向事件服务器预约事件信息,保证将该控制点感兴趣的事件及时准确地传送过来。

广播或预约事件,传送的都是事件消息,事件消息也放在XML文件中,使用的格式是GENA。设备投入工作之前的准备―――初始化过程,也是一个事件,初始化需要的各种信息也是用事件消息传送的。包括的内容主要是:变量初始值,模式的初始状态等等。

5.展示

只要得到了设备的ULR,就可以取得该设备表达页面的ULR,然后可以将此表达纳入用户的本地浏览器上。这部分还包括与用户对话的界面,以及与用户进行会话的处理。

术语缩写

缩写 全称
ARP 地址解析协议
DHCP 动态主机配置协议
DNS 域名系统
FXPP 灵活的XML处理框架
GENA 通用事件通知框架
HTML 超文本标记协议
HTTPMU 基于UDP的HTTP多播
HTTPU 基于UDP的HTTP单播
ICANIN 指定名称和编号的互联网公司
SOAP 简单对象访问协议
SSDP 简单服务发现协议
UPC 通用产品代码
UPnP UPnP
URI 统一资源标识符
URL 统一资源定位器
URN 统一资源名称
UUID 全球唯一标识符
XML 拓展标记语言

你可能感兴趣的:(理解UPnP协议)