UPnP详细介绍

UPnP(通用即插即用)是一套旨在使家庭和公司网络中的各种设备能够无缝连接并简化网络实现的网络协议。该协议基于开放的互联网通信协议标准,支持零配置网络和自动检测,适用于多种传输介质和设备。

        通用即插即用英语Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议。该协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。UPnP通过定义和发布基于开放、因特网通讯网协议标准的UPnP设备控制协议来实现这一目标。

UPnP这个概念是从即插即用(Plug-and-play)派生而来的,即插即用是一种热拔插技术。

       

概述

UPnP体系允许 PC 间的点对点连接、网际互连和无线设备。它是一种基于TCP/IPUDPHTTP的分布式、开放体系。

UPnP使得任意两个设备能在LAN控制设备的管理下相互通信。其特性包括:

  • 传输介质和设备独立。UPnP 技术可以应用在许多媒体上,包括电话线电线电力线通信PLC)、以太网红外通信技术(IrDA)、无线电Wi-Fi蓝牙)和Firewire(1394)。无需任务设备驱动;而是采用共同的协议。
  • 用户界面(UI)控制。UPnP 技术使得设备厂商可以通过网页浏览器来控制设备并进行交互。
  • 操作系统和程序语言独立。任何操作系统和程序语言均可以用于构建 UPnP产品。UPnP 并没有设定或限制运行于控制设备上的应用程序 API;OS厂商可以创建满 足他们客户需求的 API。UPnP使得厂商可以像开发常规应用程序一样来控制设备 UI 和交互。
  • 基于因特网技术。UPnP 构建于 IP, TCP, UDP, HTTP,和 XML 等许多协议之上。
  • 编程控制。UPnP 体系同时支持常规应用程序编程控制。
  • 扩展性。每个 UPnP 设备都可以有构建于基本体系之上、与具体设备相关的服务。

UPnP 支持零配置,"看不见的网络" 和自动检测;任何设备能自动加入一个网络, 获取一个 IP 地址,宣布自己的名字,根据请求检查自身功能以及检测出其它设备 和它们的功能。DHCPDNS 服务是可选的,并只有它们在网络上存在的时候才会 使用。设备可以自动离开网络而不会遗留下任何不需要的状态信息。

UPnP 的基础是 IP 地址解析。每一个设备都应当有一个 DHCP 客户端并在连入网 络的时候自动搜索 DHCP 服务。如果没有找到 DHCP 服务,也就是说网络是缺乏管 理状态,那么设备必须给自己设定一个地址。如果在和 DHCP 服务器交互的过程中, 设备获得了一个域名(比如通过 DNS 服务器或者 DNS 传递),那么它应当在接下 来的网络操作中使用这个域名;否则,设备应当使用它的 IP 地址。

协议

发现

给定一个IP地址,UPnP 网络中的第一步是发现。当一个设备被加入到网络中, UPnP检测协议允许该设备向控制点广播自己的服务。类似地,当一个控制点加入到 网络中的时候,它也能够搜索到网络中存在的、感兴趣的设备相关信息。这两种类 型的基础交互是一种仅包含少量、重要相关设备信息或者它的某个服务。比如,类 型、标识和指向更详细信息的链接。UPnP 检测协议是基于简单服务发现协议(SSDP)的。

描述

UPnP 网络的下一步是描述。当一个控制点检测到一个设备时,它对该设备仍然知之 甚少。为了使控制点了解更多关于该设备的信息或者和设备进行交互,控制点必须 从设备发出的检测信息中包含的 URL 获取更多的信息。某个设备的 UPnP 描述是 XML 的方式,包括品牌、厂商相关信息,如型号名和编号、串行号、厂商名、品牌 相关 URL 等。描述还包括一个嵌入式设备和服务列表,以及控制、事件传递和存 在相关的 URL。对于每种设备,描述还包括一个命令或动作列表,包括响应何种服 务,针对各种动作的参数;这些变量描述出运行时设备的状态信息,并通过它们的 数据类型、范围和事件来进行描述。

控制

UPnP 网络的下一步是控制。当一个控制点获取到设备描述信息之后,它就可以向该 设备发送指令了。为了实现此,控制点发送一个合适的控制消息至服务相关控制 URL(包含在设备描述中)。控制消息也是通过简单对象访问协议(SOAP)用 XML 来描 述的。类似函数调用,服务通过返回动作相关的值来回应控制消息。动作的效果, 如果有的话,会反应在用于刻画运行中服务的相关变量。

事件通知

下一步是事件通知。一个 UPnP 描述包括一组命令栏表和刻画运行时状态信息的变 量。服务在这些变量改变的时候进行更新,控制点可以进行订阅以获取相关改变。 服务通过发送事件消息来发布更新。事件消息包括一个或多个状态信息变量以及它 们的当前数值。这些消息也是采用 XML 的格式,用通用事件通知体系(GENA)进行 格式化。一个特殊的初始化消息会在控制点第一次订阅的时候发送,它包括服务相 关的变量名及值。为了支持多个控制点并存的情形,事件通知被设计成对于所有的 控制点都平行通知。因此,所有的订阅者同等地收到所有事件通知。

存在

最后一步是存在。如果设备带有存在 URL,那么控制点可以通过它来获取设备存在 信息,即在浏览器中加载 URL,并允许用户来进行相关控制或查看操作。具体支持 哪些操作则是由存在页面和设备完成的。

NAT穿透

UPnP为NAT(网络地址转换)穿透带来了一个解决方案:Internet Gateway Device(IGD)协议。NAT穿透允许UPnP数据包在没有用户交互的情况下,无障碍的通过路由器或者防火墙,(假如那个路由器或者防火墙支持NAT)。

未来的发展

UPnP 影音媒体服务器

UPnP 影音媒体服务器存储和共享数字媒体,比如:图片、电影或是音乐。

参考资料


外部链接

文档

新闻


<think>首先,用户的问题是:“我想了解UPnP详细流程,并获取UPnP报文的举例”。所以,我需要详细解释UPnP的工作流程,并提供报文示例。 参考系统级指令: - 所有行内数学表达式使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如 `[^1]`。 用户提供了三个引用: - 引用[1]:关于SSDP(简单服务发现协议),它是UPnP设备发现的一部分。 - 引用[2]:关于UPnP描述,设备如何提供更多信息。 - 引用[3]:关于SSDP发现报文。 用户还提到:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但在这个对话中,这是第一条消息,所以没有“上一次的问题”。系统提示中说:“参考用户上一次的问题和你的回答”,但由于这是第一条,我需要专注于当前查询。 用户查询的核心是:详细解释UPnP流程和报文举例。 从提供的引用中,我可以提取关键点: - UPnP工作流程包括设备发现(通过SSDP)。 - 设备描述:控制点获取设备信息。 - 控制:控制点和设备交互。 UPnP的标准流程包括几个阶段: 1. **发现(Discovery)**:设备和控制点通过SSDP发现彼此。 2. **描述(Description)**:控制点获取设备描述文件。 3. **控制(Control)**:控制点发送动作请求。 4. **事件(Eventing)**:设备状态变化时通知控制点。 5. **展示(Presentation)**:可选,提供用户界面。 用户要求报文举例,所以我需要提供UPnP报文的例子,比如SSDP报文。 报文示例:我应该基于SSDP、SOAP或HTTPU等协议提供具体报文。 结构化我的回答: 1. **介绍UPnP流程**:清晰、分步解释每个阶段。 2. **提供报文示例**:在每个阶段给出报文的例子。 3. **遵守指令**:使用中文,添加引用标识,最后生成相关问题。 添加引用标识:用户提供了引用[1]、[2]、[3],所以我应该在相关部分添加 `[^1]`、`[^2]`、`[^3]`。 例如: - 在讨论发现阶段时,引用[1]和[3]。 - 在描述阶段时,引用[2]。 最后生成相关问题。 确保回答真实可靠:基于我对UPnP的理解和提供的引用。 UPnP流程概述: - **发现阶段**:设备使用SSDP通告自己。控制点发送SSDP搜索请求。 - **描述阶段**:控制点从设备获取描述(XML文件)。 - **控制阶段**:使用SOAP协议发送动作请求。 - **事件阶段**:使用GENA通知状态变化。 报文举例: - SSDP M-SEARCH请求(控制点发出)。 - SSDP NOTIFY响应(设备响应)。 - HTTP GET for description。 - SOAP action request。 提供实际的报文字符串。 使用Markdown代码块来展示报文,类似于示例中的Python代码。 回答结构: - 首先,概述UPnP流程。 - 然后,分步详细解释每个阶段。 - 在每个阶段结束时,提供报文示例。 - 结束时,添加相关问题。 最后,生成相关问题:基于UPnP流程,提出用户可能感兴趣的后续问题。 例如: 1. UPnP的安全性如何? 2. 如何实现UPnP的设备? 3. UPnP在网络中的常见问题? 确保使用中文。 </think>以下是针对您查询的详细解释:UPnP(Universal Plug and Play)是一种自动设备发现和控制的网络协议,用于在局域网中实现设备互操作。UPnP工作流程包括五个主要阶段:发现、描述、控制、事件和展示。每个阶段都基于标准协议(如SSDP、HTTPU、SOAP等),并涉及特定报文交互。我将逐步解释每个阶段的流程,并提供实际报文示例(基于标准UPnP规范)。报文示例以代码块形式展示,便于理解。 ### UPnP详细工作流程 UPnP工作流程的核心是使控制点(如智能家居App)能自动发现设备(如打印机或媒体服务器),并与它们交互。整个过程是无缝的,无需用户手动配置。 1. **发现阶段(Discovery)** 在此阶段,设备和控制点通过SSDP(简单服务发现协议)相互发现。设备上线时,会主动广播其存在;控制点上线时,则会搜索网络中的设备。SSDP基于HTTPU/UDP协议,使用多播地址 `239.255.255.250:1900`。 - **设备通告**:设备启动时发送SSDP NOTIFY报文,宣告其服务。 - **控制点搜索**:控制点发送SSDP M-SEARCH报文搜索设备。 此阶段快速高效,仅需几秒即可完成[^1][^3]。 **报文示例:设备通告(SSDP NOTIFY)** 以下是设备(如一个UPnP媒体服务器)上线时发送的报文。报文表示设备类型为 "MediaServer",并提供其描述URL。 ```http NOTIFY * HTTP/1.1 Host: 239.255.255.250:1900 Cache-Control: max-age=1800 Location: http://192.168.1.100:8080/desc.xml NT: urn:schemas-upnp-org:device:MediaServer:1 NTS: ssdp:alive USN: uuid:12345678-0000-0000-0000-000012345678::urn:schemas-upnp-org:device:MediaServer:1 ``` - `Host`:SSDP多播地址。 - `Location`:设备描述文件的URL。 - `NT`:设备类型标识符。 - `NTS`:消息类型(`ssdp:alive`表示设备在线)。 - `USN`:唯一设备标识符。 **报文示例:控制点搜索(SSDP M-SEARCH)** 以下是控制点(如手机App)发送的搜索请求,搜索所有UPnP设备。设备收到后,会单播回复类似通告的报文。 ```http M-SEARCH * HTTP/1.1 Host: 239.255.255.250:1900 Man: "ssdp:discover" MX: 3 ST: ssdp:all ``` - `Man`:必需字段,指定协议类型。 - `MX`:最大等待时间(秒),控制点等待响应的超时。 - `ST`:搜索目标(`ssdp:all`表示所有设备)[^1][^3]。 2. **描述阶段(Description)** 控制点发现设备后,需获取其详细信息。控制点向设备的 `Location` URL发送HTTP GET请求,设备响应一个XML描述文件。该文件包含设备厂商、型号、服务列表以及控制URL等元数据,帮助控制点理解如何与设备交互[^2]。 - 请求基于HTTP协议。 - 响应是XML文档,结构化描述设备能力。 **报文示例:控制点请求描述(HTTP GET)** 控制点获取设备描述文件(从上例的 `Location` URL)。 ```http GET /desc.xml HTTP/1.1 Host: 192.168.1.100:8080 Accept: application/xml ``` - `Host`:设备IP和端口。 - `Accept`:指定响应格式为XML。 **报文示例:设备响应描述(HTTP响应)** 设备返回XML描述文件。以下是简化示例(实际XML更长)。 ```xml HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 512 <root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType> <friendlyName>My Media Server</friendlyName> <manufacturer>Example Corp</manufacturer> <modelName>MediaServer 2000</modelName> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType> <controlURL>/ctl</controlURL> <eventSubURL>/evt</eventSubURL> </service> </serviceList> </device> </root> ``` - 关键字段:`deviceType`标识设备类型,`serviceList`列出可用服务(如内容目录),`controlURL`和`eventSubURL`用于后续交互[^2]。 3. **控制阶段(Control)** 控制点基于描述文件,向设备的 `controlURL`发送SOAP(Simple Object Access Protocol)请求执行动作。SOAP封装XML消息,定义动作名称和参数。 - 请求和响应均基于HTTP POST。 - 设备执行动作后返回状态。 **报文示例:控制点动作请求(SOAP over HTTP)** 例如,控制点请求媒体服务器列出内容目录。 ```http POST /ctl HTTP/1.1 Host: 192.168.1.100:8080 Content-Type: text/xml; charset="utf-8" SOAPAction: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse" <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"> <ObjectID>0</ObjectID> <BrowseFlag>BrowseDirectChildren</BrowseFlag> <Filter>*</Filter> <StartingIndex>0</StartingIndex> <RequestedCount>10</RequestedCount> <SortCriteria></SortCriteria> </u:Browse> </s:Body> </s:Envelope> ``` - `SOAPAction`:指定服务动作(`#Browse`表示浏览目录)。 - XML主体:包含动作参数(如`ObjectID`表示根目录)。 **报文示例:设备响应动作(SOAP响应)** 设备返回动作结果(如内容列表)。 ```http HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: 320 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <u:BrowseResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"> <Result> <item> <title>Movie1</title> <size>1024</size> </item> </Result> <NumberReturned>1</NumberReturned> <TotalMatches>1</TotalMatches> </u:BrowseResponse> </s:Body> </s:Envelope> ``` 4. **事件阶段(Eventing)** 设备状态变化时,通过GENA(Generic Event Notification Architecture)主动通知订阅的控制点。控制点先发送订阅请求到 `eventSubURL`,设备后续推送事件报文。 - 使用HTTP SUBSCRIBE和NOTIFY方法。 - 报文包含状态变量更新。 **报文示例:控制点订阅事件(HTTP SUBSCRIBE)** ```http SUBSCRIBE /evt HTTP/1.1 Host: 192.168.1.100:8080 Callback: <http://192.168.1.50:8080/event> NT: upnp:event Timeout: Second-3600 ``` - `Callback`:控制点的事件接收URL。 - `Timeout`:订阅有效期。 **报文示例:设备事件通知(HTTP NOTIFY)** 例如,媒体服务器添加新内容时通知控制点。 ```http NOTIFY /event HTTP/1.1 Host: 192.168.1.50:8080 Content-Type: text/xml; charset="utf-8" NT: upnp:event NTS: upnp:propchange SID: uuid:abcd1234 <e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0"> <e:property> <SystemUpdateID>2</SystemUpdateID> </e:property> </e:propertyset> ``` - `SID`:订阅会话ID。 - XML主体:状态变量(`SystemUpdateID`表示更新次数)。 5. **展示阶段(Presentation)** 可选阶段,设备提供一个Web页面(URL在描述文件中),用户可通过浏览器直接管理设备。此阶段基于标准HTTP,不需特殊报文。 ### 总结 UPnP通过上述流程实现自动化设备集成:从发现(SSDP广播)到事件订阅(GENA推送),整个过程高效且无需人工干预。报文示例基于实际协议规范,确保可操作性。注意,UPnP在开放网络中存在安全风险(如未经授权访问),建议在受信任局域网中使用[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值