小李程式™的专栏

有勇气来改变可以改变的事情,有度量接受不可改变的事情,有智慧来分辨两者的不同。
posts - 55, comments - 110, trackbacks - 0, articles - 44
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

到底什么是Upnp?[转载]

Posted on 2006-05-13 18:54 尼斯湖李 阅读(...) 评论(...) 编辑 收藏

到底什么是Upnp?

                                      

解释一、

准确地说,UPnP(Universal Plug and Play,通用即插即用)自动端口映射是适合内网,但不仅限于内网。内网的特点就是无法对外打开监听端口,因此会损失所有外部发起的连接。比如ADSL用路由器、Windows网络共享等等。常用的解决办法是用NAT进行端口映射,将网关/路由上的端口映射到本机,但操作过程相对复杂晦涩。  我们不能简单理解为UPnP等于自动端口映射。UPnP包含了2层意思:对于一台内网电脑,UPnP功能可以使网关或路由器的NAT模块做自动端口映射,将监听的端口从网关或路由器映射到内网电脑上。网关或路由器的网络防火墙模块开始对Internet上其他电脑开放这个端口。   外网没有必要使用UPnP的“自动端口映射”功能,但仍旧有必要使用UPnP配合支持UPnP的网络防火墙软件(如Windows XP自带的ICF、诺顿网络安全特警2003/2004)自动打开端口。

解释二、

 问:我刚上宽带网,我听说如果运用好“UPNP”协议可以提高上网速度,请问“UPNP”协议是什么含义?具体如何应用?

  答:UPNP的全称是Universal Plug and Play。UPnP规范基于TCP/IP协议和针对设备彼此间通讯而制订的新的Internet协议。事实上,UPNP的制定正是希望未来所有联入Internet中的设备能够不受网关阻碍的相互通信。比如用MSN Messager传输文件将更加快捷方便了 
,那到底如何如何利用UPNP呢?

  首先我们需要进入路由器的Web控制界面中打开路由器的UPNP功能。在浏览器中输入路由器的地址,进入路由器的管理页面之后,找到UPNP功能,并将其设置为Enable。

  然后我们便可以进入Windows XP的设置。在Windows XP中,UPNP支持模块并不是默认安装的,因此我们需要按照以下步骤对其进行手动安装:

  在“添加或删除程序”对话框中,点击“添加/删除Windows组件”。在“Windows组件向导”中,点击“网络服务”,点击“详细”,然后选择“通用即插即用”复选框。重新启动之后,Windows XP提示找到新硬件,进入网上邻居后你会发现路由器,说明UNNP功能就打开了。现今市场上几乎所有的宽带路由器都提供UPNP功能的支持,通过我们的合理配置,可以让我们在点对点文件传输等方面获得更好的体验和更快的速度。(GSF) 
 统一即插即用英文是Universal Plug and Play,缩写为UPnP。要说计算机外设的即插即用(Plug and Play(缩写PnP)),大家可能很熟悉,但对统一即插即用,多数人会感到是一头雾水。由于windows xp加入对UPnP的支持,并且被查出存在很严重的安全问题,所以,一时间,使得UPnP名声大噪。巧的是,本人原来查阅过关于UPnP的技术白皮书,而且也较为详细地看了关于此次发现的安全缺陷的介绍。因此,趁着这个机会,将UPnP以及引起安全缺陷的详情披露出来。

一、 UPnP是用来干什么的?

  网络发展到现在,已经可以使我们在网上冲浪、收发邮件、听到远方传送来的声音、搜索感兴趣的内容、下载软件、点播节目、即时聊天等等、等等……实现的功能好像已经不少,但,人的欲望无止境,享福人还想更享福,还有许多目标没有达到:例如,怎样才能使我们在网络上,像平时用遥控器那样,操作空调器、电风扇、厨房电器,或网络远端的电器设备呢?如何利用网络上的计算机资源,使这种“遥控”更具智能化?甚至,将一系列相关的控制写到一个脚本中,以便用户定制自己所喜爱的控制流程?……等等。实现诸如此类的效果,将是有巨大需求的应用技术。如果实现通过网络用UPnP控制家用设备,将给我们的生活带来很大的方便和很多新的体验。例如:

  1.你在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了。房间温度的高低和厨房内煮饭的过程,都是根据事先设计好的“脚本”程序进行的,绝对可靠。
  2.你若是一位上档次的音乐发烧者,肯定对聆听音乐的环境要求很严:音箱位置高低、音量大小、灯光明暗、窗帘拉不拉上都有讲究。手动控制随好,毕竟不方便。你要使用上UPnP,一切都会为你代劳。还能将你习惯的音响音量、灯光亮度、音箱的高度等等,以你认为最佳的参数写到执行脚本中,以后可以都以此为准。如果你拥有自己的专门听音室,只要你打开听音室的门,上述的环境就会立刻设置好。曲终人散,只管放心离开好了,UPnP系统会自己关闭音响,熄灭电灯,拉上窗帘。
  3.你人在办公室,心里却放不下家里的孩子。用上UPnP,只要在家里安装摄像头,建立好与网络的连接。在办公室内,启用桌面电脑的WEBTV,连通网络后,可以即时监视孩子在家里的一举一动。

  凡此种种的方便和诱人之处还很多,不胜枚举。

  其实,这已经不是科学幻想、也不是专家预言。目前用UPnP协议就可以实现这些操作!这正是windows xp系统急于加入UPnP的原因。正因为UPnP是一个协议,UPnP的使用可跨越各种操作系统平台,开发应用程序也没有开发语言的局限。可工作于各种形式的网络结构。且仅以现在的网络设施为基础,仅仅加上这个UPnP协议,既不用添加新的设施,也不用重新架设网络介质就可以投入使用! 
  UPnP协议具有下述特色:

  1. 以网络为应用环境,不考虑“孤岛”中的计算机。
  2. 以TCP/IP和整个Internet为基础。这样是“中立”的,不依附于任何操作系统或应用程序,不使用特定的API函数,不受程序设计语言的局限。可以无缝地接入传统网络。
  3. 设备可以动态地进入网络中,随后获得IP地址,“学习” 或查找自己应当进行的操作和服务的信息;“感知”别的设备是否存在以及它们的作用和当前的状态 。所有这些,都应当是可自动完成的。
  4. 每个设备都可读取属于自己的、特定的状态和参数;完成控制操作后应当发出“操作完成”的响应信号。如果失败,则应发出控制失败的信号。

二、UPnP协议的层:

  UPnP协议的最终目的,是建立一个可用的设备模型, 因篇幅这里不对整个结构进行详细的分析,但你应当记住下面的主要特征:

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

三、协议内部的详细情况

  仅仅有这样五层UPnP协议,也只不过有了一个共同遵守的框架,实际的UPnP系统究竟是如何构成的呢?

  完整的UPnP服务系统由支持UPnP的网络和符合UPnP规范的设备共同构成的。

  整个系统是由设备、服务、和控制指针三部分所构成。

  设备:
  这里是指符合UPnP规范的设备。一个UPnP设备可以看成一个包含服务并嵌套了常规设备的“容器” 。例如,一个UPnP的VCR(录像机)设备可以包含磁带传送服务、调谐服务和时钟服务。就是说,UPnP之下的设备不能仅仅理解为硬件意义上的设备,而应当包括服务功能。

  不同种类的UPnP设备将关联不同的设置、服务和嵌入设备。如打印机和VCR属于不同用途的设备,服务就不可能定义成一样的。

  服务:
  设备执行用户请求的控制过程,可划分成一个个很小的阶段或单位,每个单位就称为一个服务。每一个服务,对外都表现为具体的行为和模式,而行为和模式又可以用状态和变量值进行描述。只要可以用数值描述,在计算机里面就容易处理了。例如,模仿一个时钟,它只有一个工作模式:这个模式就是模拟并显示当前的时间。而一个时钟的行为共有两种(也只有两种):

  1. 设置时间(用来“即平时说的对表”).
  2. 得到时间(用于显示时间)。

  其它设备服务,也是用这样思路来描述和定义的,一个设备也可以被定义多个服务。不论是设备的定义信息和服务的描述信息,都保存在一个XML文件中,这个文件也是UPnP协议构成的一部分。当设备建立和使用服务的时候,XML文件可以与它们进行关联。

  XML文件中还有一个很关键的“状态表”,状态表可进一步分为“服务状态表”和“事件状态表”。整个UPnP设备运行的全过程内,状态表贯穿始终,当设备状态改变的时候,例如发生参数变化或状态刷新的时候,立即就在“状态表”中反映出来。如控制服务器在接收到设置时间的行为请求时,就立即执行请求(对时操作),并给出响应,同时更新状态表中的有关数据。相应地,事件服务器负责向对此事件感兴趣的设备公布所发生的状态改变。例如,一个火灾事件发生后,事件服务器就向火灾报警器发布这个事件,导致报警器动作产生报警信号。 
  控制指针:
  在UPnP网络中,用户请求设备执行的控制是通过控制指针实现的,控制指针首先是一个有能力控制别的设备的控制者,还要具有在网络中 “发现”控制目标的能力。在发现(控制目标)之后,控制指针应当:

  ①取得设备的描述信息并得到所关联的服务列表。
  ②取得相关服务的描述。
  ③调用控制服务行为。
  ④确定服务的事件 “源”,不论何时,只要服务状态发生改变,事件服务器会立即向控制指针发送一个事件信息。

  从上面说到的各种信息,都保存在XML文件中,不同用途的信息,格式不同。保证可以各取所需,不会混淆。

  那么,UPnP的完整工作过程是怎样的呢?

  UPnP在控制指针和被控制设备之间提供通讯功能。而网络介质、TCP/IP协议、HTTP仅提供基本的连接和IP地址分配。整个工作过程需要处理六个方面的内容,即地址分配、发现设备、对设备的描述、设备控制、设备事件、设备表达。

  地址问题:
  地址是整个UPnP系统工作的基础条件,每个设备都应当是DHCP(Dynamic Host Configuration Protocol 动态主机配置协议)的客户。当设备首次与网络建立连接后,利用DHCP服务,使设备得到一个IP地址。这个IP地址可以是DHCP系统指定的,也可以是由设备选择的,当然,有能力自己选择IP地址的设备,必然是那些“聪明”的设备才行!这也就是所谓的“自动”IP地址。

  如果遇到本地DHCP管理范围之外的IP地址请求,还需要解决“友好设备”

  的地址分配问题,这个问题通常由域名服务器来解决。

  发现设备:
  可分成两种情况,一种是在有控制请求之后,在当前的网络中查找有无对应的可用设备;另一种情况是某一设备接入网络、取得IP地址之后,就开始向网络“广播”自己已经进入网络,即寻找控制请求。

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

  在上面的叙述中,多次提到用XML文件存放需要的信息,因为无论是控制指针或设备服务,都需要很多信息,有读出的,有传出的,UPnP协议约定这些都存放在特定的文件XML中。用途不同的信息,在XML文件中的格式不同。所以,相关的XML文件是控制服务的灵魂。

四、关于UPnP隐藏的安全缺缺陷:

  这次发现的安全缺陷共有两个,其中第一个缺陷是对缓冲区(Buffer)的使用没有进行检查和限制。外部的攻击者,可以通过这里取得整个系统的控制特权!由于UPnp功能必须使用计算机的端口来进行工作,取得控制权的攻击者,还有可能利用这些端口,达到攻击者的目的。这个缺陷导致的后果很严重,不论那个版本的windows 系统,只要运行UPnP,就都存在这个危险!但严格地说,这并不完全是UPnP技术本身的问题,更多的是程序设计的疏忽。

  第二个缺陷就与UPnP的工作机理有关系了!

  该缺陷存在于UPnP工作时的“设备发现”阶段。发现设备可以分为两种情况:如果某个具备UPnP功能的计算机引导成功并连接到网络上,就会立刻向网络发出“广播”,向网络上的UPnP设备通知自己已经准备就绪,在程序设计这一级别上看,该广播内容就是一个M-SEARCH(消息)指示。该广播将被“声音所及”范围之内的所有设备所“听到”。并向该计算机反馈自己的有关信息,以备随后进行控制之用。

  相类似,如果某个设备刚刚连接到网络上,也会向网络发出“通知”,表示自己准备就绪,可以接受来自网络的控制,在程序设计这一级别上看,该通知就是一个NOTIFY(消息)指示。也将被“声音所及”范围之内的所有计算机接受。计算机将 “感知”该设备已经向自己“报到”。实际上,NOTIFY(消息)指示也不是单单发送给计算机听的,别的网络设备也可以听到。

  就是在上述的一播一听之间,出现了问题!

  如果某个黑客向某个用户系统发送一个NOTIFY(消息)指示,该用户系统就会收到这个NOTIFY(消息)指示并在其指示下,连接到一个特定服务器上,接着向相应的服务器请求下载服务―――下载将要执行的服务内容。服务器当然会响应这个请求。UPnP服务系统将解释这个设备的描述部分,请求发送更多的文件,服务器又需要响应这些请求。这样,就构成一个“请求――响应”的循环,大量占用系统资源,造成UPnP系统服务速度变慢甚至停止。所以,这个缺陷将导致“拒绝服务”攻击称为可能!

  结束语

  UpnP正在向我们一步步走近,现在已经是足声可闻了。不久的将来,必然对我们的工作和生活产生巨大影响。也蕴含着无限商机。尽管现在存在问题,也难保以后就不会再出现新的问题,但这既然体现了人的需求意向,就会有巨大的生命力,暂时的挫折不会使得它停下前进的脚步! 


 附:这是本文出现的相关名词解释:

  传送协议:
  主要用HTTP 、HTTPU和HTTPMU: 

  HTTP:
  这是大名鼎鼎的东西,不用多说,但就UPnP系统来说,HTTP及其派生协议都属于核心部分。

  HTTPU和HTTPMU:
  这些都是从HTTP协议中派生定义出来的。主要用于传送SSDP格式的设备消息。

  SSDP:
  是一个“简单服务发现协议” ,即英文“Simple Service Discovery Protocol的缩写” , 该协议定义了如何在网络上发现网络服务的方法。SSDP也规定了存放在XML文件中的信息格式。SSDP信息的传送是依靠HTTPU和HTTPMU进行的。不论是控制指针,或是UPnP设备,工作中都必然用到SSDP,设备接入网络之后,要利用它向网络广播自己的存在(广播的信息中还有设备位置的描述),以便尽快与对应的控制指针建立联系;控制指针则利用SSDP来搜索自己将要控制的设备在哪里?并且可以排除已经存在的设备和控制指针――只为新近的或尚未“联络”上的双方服务。

  控制指针利用SSDP的方式是经由HTTPU发出搜索请求,这种请求可以很详细,能具体到需要什么样的设备以及何种服务。例如:请求对特定的VCR机进行设置时钟的服务。

  设备利用SSDP的方式是“收听”来自网络端口的消息,从中发现与自己匹配的信息,一旦找到与自己匹配的信息,经由HTTPMU来发送一个响应信息到控制指针。

  GENA:
  这是事件消息采用格式,是所谓“普通时间通知体系Generic Event Notification Architecture”的缩写。关于事件消息,在上面已经有介绍。

  SOAP:
  即简单对象访问协议,实际就是通过该协议传递控制消息并返回设备对消息的响应结果。它利用XML和HTTP进行远程调用。使用防火墙或别的网络安全措施不会影响SOAP的使用。

  每个UPnP控制请求都可作为一个SOAP控制消息,控制消息中还包含有控制行为描述和所用到的参数。 


以下来自UPnP论坛www.upnp.org

Welcome to the UPnP™ Forum!

The UPnP™ Forum is an industry initiative designed to enable simple and robust connectivity among stand-alone devices and PCs from many different vendors. As a group, we are leading the way to an interconnected lifestyle. 

The Forum consists of more than 

702


vendors, including industry leaders in consumer electronics, computing, home automation, home security, appliances, printing, photography, computer networking, and mobile products. 

Companies with interests in particular device classes are encouraged to become Forum members and participate in designing schema templates for their device classes. 

By defining and publishing UPnP™ device and service descriptions, members of the UPnP™ Forum are creating the means to easily connect devices and simplify the implementation of networks. In doing so, the UPnP™ Forum members are creating new product opportunities for their companies and industries.

UPnP™ technology is all about making home networking simple and affordable for users so the connected home experience becomes a mainstream experience for users experience and great opportunity for the industry. UPnP™ architecture offers pervasive peer-to-peer network connectivity of PCs of all form factors, intelligent appliances, and wireless devices. UPnP™ architecture leverages TCP/IP and the Web to enable seamless proximity networking in addition to control and data transfer among networked devices in the home, office, and everywhere in between. UPnP™ technology can be supported on essentially any operating system and works with essentially any type of physical networking media - wired or wireless - providing maximum user and developer choice and great economics.