UPnP 协议的分析及实现
随着计算机产业以及计算机网络技术的迅猛发展,使得嵌入式系统和家庭网
络通信成为了热门的研究领域。由于越来越多的嵌入式设备的出现和家庭网络的
发展,实现家庭网络中的各种嵌入式设备互联互通已经成为人们的迫切需求。
而实现家庭网络的关键是家庭网络中间件技术。现今世界各著名设备厂商纷
纷提出了各自的新技术和解决方案,其中,微软提出的 UPnP 技术最有发展前途,
得到了最广泛的支持,是当今各国研究的热点。UPnP 是通用即插即用(Universal
Plug and Play)的缩写,它主要用于实现设备的智能互联互通。使用 UPnP 协议不
需要设备驱动程序,它可以运行在几乎所有的操作系统平台之上,使得在办公室、
家庭和其它公共场所方便地构建设备相互联通的网络环境。
本文介绍了 UPnP 所使用的基本协议(如 SSDP、GENA、SOAP 等),重点分析了
UPnP 实现的基本工作流程。然后,论文在剖析了当前最常用的 Intel SDK 的结构
和功能后,以 TV 控制点和 TV 设备的开发为例,给出了如何应用该 SDK 实现 UPnP
设备和控制点的设计开发技术。最后,利用 WiresharkPortable 工具捕获数据包,
对各流程传递的消息包进行了详尽分析。
目 录
1 引言 ................................................................................................................................................................ 1
2 UPNP的结构规范 ............................................................................................................................................ 1
2.1 UPNP的基本组件 ..................................................................................................................................... 1
2.2 UPNP部分术语 ......................................................................................................................................... 2
2.3 UPNP设备协议栈 ..................................................................................................................................... 3
2.3.1 SSDP协议 ........................................................................................................................................ 3
2.3.2 SOAP协议 ........................................................................................................................................ 3
2.3.3 GENA协议 ........................................................................................................................................ 3
2.4 基于XML的UPNP描述 ............................................................................................................................... 4
2.4.1 XML简介
[2]
....................................................................................................................................... 4
2.4.2 TV设备的设备描述编写 ................................................................................................................ 5
3 UPNP实现的工作流程 .................................................................................................................................... 7
3.1 寻址(ADDRESSING) ................................................................................................................................ 8
3.2 发现(DISCOVERY) ................................................................................................................................. 8
3.3 描述(DESCRIPTION) .............................................................................................................................. 9
3.4 控制(CONTROL) ................................................................................................................................... 10
3.5 事件(EVENTING) ................................................................................................................................. 10
3.6 展示(PRESENTATION) ........................................................................................................................... 11
4 基于LINUX的UPNP协议实现的源代码模块 ................................................................................................ 12
4.1 设备/控制点 ........................................................................................................................................ 12
4.2 UPNP软件开发包API(UPNP SDK API) .................................................................................................. 12
4.3 WEB SERVER ............................................................................................................................................. 13
4.4 库模块 .................................................................................................................................................. 13
4.4.1 XML解析模块 ................................................................................................................................ 13
4.4.2 SDK中的线程库 ............................................................................................................................ 13
4.4.3 HTTP解析器 .................................................................................................................................. 13
4.4.4 微型服务器(Mini Server) .................................................................................................... 13
5 TV控制点及设备的代码实现 ...................................................................................................................... 14
5.1 TV控制点的代码实现 .......................................................................................................................... 14
5.1.1 发现、描述的代码实现 ............................................................................................................... 14
5.1.2 订阅服务的代码实现 .................................................................................................................. 17
5.1.3 控制服务的代码实现 .................................................................................................................. 18
5.1.4 退出 .............................................................................................................................................. 20
5.2 TV设备的代码实现 .............................................................................................................................. 21
5.2.1 设置和初始化设备 ...................................................................................................................... 21
5.2.2 处理异步请求 .............................................................................................................................. 22
5.2.3 发送事件通知 .............................................................................................................................. 23
5.2.4 关闭设备 ...................................................................................................................................... 24
6 UPNP协议消息分析 ...................................................................................................................................... 24
6.1 发现设备的消息分析 .......................................................................................................................... 24
6.1.1 SSDP发现请求 .............................................................................................................................. 24
6.1.2 SSDP存在宣告 .............................................................................................................................. 25
6.2 描述数据包分析 .................................................................................................................................. 25
6.2.1 获取设备描述的请求消息 .......................................................................................................... 25
6.2.2 TV设备的设备描述消息 .............................................................................................................. 26
6.3 事件数据包分析 .................................................................................................................................. 26
6.3.1 订阅请求的消息分析 .................................................................................................................. 26
6.3.2 续订请求的消息分析 .................................................................................................................. 27
6.3.3 NOTIFY事件通知消息分析 .......................................................................................................... 27
6.4 控制数据包分析 .................................................................................................................................. 28
6.4.1 动作调用的消息分析 .................................................................................................................. 28
6.4.2 查询变量的消息分析 .................................................................................................................. 29
1 引言
UPnP 全名是Universal Plug and Play,主要是微软在推行的一个标准。简
单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的
设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用
或控制它,一切都不需要设定,完全的Plug and Play。
举个例子来说:
Mary在她的计算机中存储了大量数码相机拍摄的照片。当朋友Karen 来拜访
时, Mary在起居室拿起与等离子电视机配套的红外线(IR)遥控器,从电视所显
示的列表中挑选她感兴趣的照片,向Karen在电视屏幕上展示一下这些照片。这过
程中就使用了UPnP协议。
2 UPnP的结构规范
2.1 UPnP的基本组件
服务、设备和控制点是UPnP网络的基本组件。其组件图如图1所示:
图1 UPnP组件图
● 服务(Service)
在UPnP网络中,最小的控制单元就是服务。服务描述的是设备在不同的情况
下的活动和设备的状态。例如,时钟服务可以表述为时间变化(状态变化)、当前
的时间(时钟的状态)以及设置时间和读取时间两个活动,通过这两个活动.你就
可以控制服务。
● 设备(Device)
UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智
能设备、无线设备、个人电脑等等都可以成为其中一员。一个UPnP设备可以是多
个服务的载体和多个子设备的嵌套集。例如一台印表机有提供列印这样的服务;
一台电视有提供收讯的服务,这些都属于设备。
● 控制点(ControlPoint)
第 1 页 共 33 页
在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP
网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的
功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制
其它设备。
2.2 UPnP部分术语
● UUID
UUID含义是通用唯一识别码(Universally Unique Identifier),其目的是
让分布式系统中的所有元素,都有唯一的辨识资讯,而不需要透过中央控制端来
做辨识资讯的指定。其格式为xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),
分别为当前日期和时间,时钟序列,全局唯一的IEEE机器识别号,如果有网卡,
从网卡mac地址获得,没有网卡以其他方式获得。
● UDN
单一设备名(Unique Device Name),基于UUID,表示一个设备。在不同的时
间,对于同一个设备此值应该是唯一的。
● URI
Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通
用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。 URI
一般由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,
由路径表示。考虑下面的URI,它表示了当前的HTML 4.0规范:
http://www.webmonkey.com.cn/html/html40/它表示一个可通过HTTP协议访问的
资源,位于主机www.webmonkey.com.cn上,通过路径“/html/html40”访问。
● URL
URL是URI命名机制的一个子集,URL是Uniform Resource Location的缩写,
译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符
串,主要用在各种www客户程序和服务器程序上。采用URL可以用一种统一的格式
来描述各种信息资源,包括文件、服务器的地址和目录等。
● URN
URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)。
唯一标识一个实体的标识符,但是不能给出实体的位置。标识持久性 Internet 资
源。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管
普通的URL可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,
因为 URN 可以引用多个 URL。
第 2 页 共 33 页