理解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协议来完成。

<?xmlversionxmlversion="1.0" encoding="utf-8"?>  
<rootxmlnsrootxmlns="urn:schemas-upnp-org:device-1-0">  
  <specVersion>  
    <major>1</major>  
    <minor>1</minor>  
  </specVersion>  
   
  <device>  
   <deviceType>urn:schemas-upnp-org:device:BinaryLight:1</deviceType>  
    <friendlyName>KitchenLights</friendlyName>  
   <manufacturer>OpenedHand</manufacturer>  
    <modelName>VirtualLight</modelName>  
   <UDN>uuid:cc93d8e6-6b8b-4f60-87ca-228c36b5b0e8</UDN>  
   
    <serviceList>  
      <service>  
       <serviceType>urn:schemas-upnp-org:service:SwitchPower:1</serviceType>  
       <serviceId>urn:upnp-org:serviceId:SwitchPower:1</serviceId>  
       <SCPDURL>/SwitchPower1.xml</SCPDURL>  
        <controlURL>/SwitchPower/Control</controlURL>  
       <eventSubURL>/SwitchPower/Event</eventSubURL>  
      </service>  
    </serviceList>  
  </device>  
</root>  

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 拓展标记语言
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,588评论 2 57
  • DLNA 是什么 DLNA 的全称是 Digital Living Network Alliance (数字生活网...
    Vivi成长吧阅读 20,475评论 6 17
  • # 图解TCP/IP 标签(空格分隔): 2018招聘 --- ##第1章 网络基础知识 ### ### 1.1 ...
    Kai_a3da阅读 1,432评论 0 2
  • 0. 介绍 本文源自《图解TCP/IP》第四、五章读书笔记。一篇文章让你了解IP协议。阅读的时候,注意一般知识点结...
    天才木木阅读 5,109评论 0 14