简单聊聊OpenWrt的UPnP协议 |
您所在的位置:网站首页 › igd协议 › 简单聊聊OpenWrt的UPnP协议 |
简单聊聊OpenWrt的UPnP协议
原创
董哥的黑板报 2022-04-20 11:51:48 博主文章分类:OpenWrt开发 ©著作权 文章标签 UPnP协议 xml 端口映射 服务器 其他 文章分类 代码人生 ©著作权归作者所有:来自51CTO博客作者董哥的黑板报的原创作品,请联系作者获取转载授权,否则将追究法律责任 一、UPnP起源 通用即插即用(Universal Plug and Play,UPnP)是一种分布式、开放的网络架构,此 标准由微软公司于 1999 年提出,由非盈利的通用即插即用论坛(UPnP Forum)负责体系 架构和标准的维护和更新升级,此标准现已开放。二、UPnP简介 UPnP 主要用于智能设备、无线设备、个人计算机之间的互联互通。此协议在使用过 程中不需要任何驱动,可以在各种操作系统上运行。凡是可以连接局域网的场所都可以利 用 UPnP 协议实现设备的互联互通,比如家庭、办公室、娱乐场所等地方。 UPnP 在即插即用的基础上进行了扩展,对家庭或企业中智能设备的联网过程进行了简化。当符合 UPnP 协议和技术的设备以物理形式连接到局域网之后,它们可以通过网络 自动彼此连接在一起,而且连接过程不需要用户参与,更不需要有任何其他软件服务和设 备支持。 UPnP 规范是基于 TCP/IP 协议,针对设备彼此间通信而开发和定制的高层协议。 UPnP 最大的愿景就是希望任何设备一旦接入网络,所有在该网络上的设备马上就能知道 新设备加入,这些设备彼此之间能互相沟通,在不需要任何设置的情况下,可以直接使用或控制设备,体现完全的即插即用特性。UPnP 技术使用标准的、不依赖于特定的设备驱 动程序。 UPnP 设备可以自动配置网络地址,宣告它们在某个局域网子网的存在性,以及 互相交换双方的设备描述信息和服务描述信息。UPnP 也推动了因特网技术的发展,包括 IP、TCP、UDP、HTTP、SSDP 和 XML 等技术。该协议是说明性的,利用 XML 进行表述 和 HTTP 进行传输。这也是 UPnP 被称为通用即插即用的原因所在。 三、UPnP架构 UPnP协议术语 UUID:通用唯一识别码(Universally Unique Identifier),用来区别局域网、分布式系统中 的 不 同设备终端,让它们有唯一的被识别的标识,其格式为 xxxxxxxx-xxxx-xxxxxxxxxxxxxxxxxxxx,分别表示当前日期(8)-时间(4)-时钟序列(4)-全局唯一的 IEEE 机器识别号(16)。在有物理网卡的情况下,机器识别码就是物理网卡 MAC 地址,如果没 有物理网卡则以其他方式获得,但是要全局唯一。 UDN:单一设备名(Unique Device Name,UDN),基于 UUID,用来标识一个设备。在不同 的时间,对于同一个设备 UDN 是唯一的。 URI:Web 上可用的各种资源,比如文档、图像、视频片段、语音和图片等,由一个通用资 源标识符(Universal Resource Identifier,URI)进行定位。URI 一般由 3 个部分组成:访问 资源的命名机制、存放资源的主机名和资源自身的名称,使用路径表示。例如下面的 URI, 它表示了当前的 HTML 4.0 规范:http://www.domain.com.cn/html/html40/。它表示一个可 通 过 HTTP 协议访问的资源,资源位于主机 www.domain.com.cn 上,通过路径 “/html/html40”访问。 URL:统一资源定位符是因特网上用来描述信息资源的字符串,主要用在各种因特网客户程 序和服务器程序上。采用 URL 可以用一种统一的格式来描述各种信息资源,包括文件、 服务器的地址和目录等。 URN:统一资源名称用来唯一标识一个实体,但是无法给出实体的具体位置。它用于标识持 久性的因特网资源。URN 可以提供一种机制,用于查找和检索定义特定命名空间的文件。 尽管普通的 URL 可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理, 因为 URN 可以引用多个 URL。 UPnP组件 UPnP 服务系统是由支持 UPnP 的网络和符合 UPnP 规范的设备共同构成,整个系统 由设备(Device)、服务(Service)和控制点(Control Point)3 个部分所构成。 设备:这里的设备是指符合 UPnP 协议规范的设备。一个 UPnP 设备可以看成一个包含服务并 嵌套了常规设备和服务的容器。例如,一个具有 UPnP 功能的路由器设备可以包含 IP 层数据 包转发服务、服务质量(Quality of Service,QoS)服务等。也就是说,UPnP 设备不能仅仅 理解为硬件意义上的设备,而应当包括服务功能。不同种类的 UPnP 设备将关联不同的设置、 服务和嵌入设备以及嵌入服务。如路由设备和交换设备,它们的服务就不可能定义成一样的。 服务:设备执行用户请求的过程,根据请求目的和业务的不同,可划分成不同的业务单位, 每个单位就称为一个服务。每一个服务,对外都表现为具体的行为和模式,而行为和模式 又可以用状态和变量值进行描述。一个设备也可以被定义多个服务。不论是设备的定义信 息还是服务的描述信息,都保存在一个 XML 文件中,这个文件也是 UPnP 协议构成的一 部分。当设备建立和使用服务的时候,XML 文件可以与它们进行关联。XML 文件中还有 一个很关键的状态表,状态表可进一步分为“服务状态表”和“事件状态表”。在整个 UPnP 设备运行的全过程中,状态表贯穿始终,当设备状态改变的时候,例如发生参数变化或状 态刷新的时候,立即就在“状态表”中反映出来。如控制服务器在接收到设置时间的行为请求时,就立即执行请求并给出响应,同时更新状态表中的有关状态数据。相应地,事件 服务器负责向对此事件感兴趣的设备公布所发生的状态改变。例如,当办公区域温度达到 一定值后,事件服务器产生相应温度超标事件并向温度报警器发送温度超标报警,以便及 时处理,恢复温度正常。 控制点:在 UPnP 网络中,用户请求设备执行的控制全部是通过控制点实现的,控制点首先是 一个有能力控制别的设备的控制者,还要具有在网络中“发现”控制目标的能力。 在发现 控制目标之后,控制点应当作出如下反馈: 取得设备的描述信息并得到所关联的服务列表。 取得相关服务的描述。 调用控制服务行为。 确定服务的事件“源”,不论何时,只要服务状态发生改变,事件服务器会立即向 控制点发送一个事件信息。 四、UPnP协议栈 UPnP 协议栈图示下图所示:在因特网上的每个设备都有唯一的地址标识,UPnP 设备也不例外。地址是整个 UPnP 系统工作的基础条件,每个设备都应当是动态主机配置协议的客户端。当设备首次与网络 建立连接后,利用 DHCP 服务,使设备得到一个 IP 地址。这个 IP 地址可以是 DHCP 系统 指定的,也可以是由设备选择的。当局域网内没有提供 DHCP 服务时,UPnP 设备按照协议规定会从 169.254.0.0/16 地址范围获取一个局域网内唯一的 IP 地址。设备还可以使用域 名,这就需要域名解析服务来处理和转换域名和 IP 地址的对应关系。 ②发现 有控制请求,在当前的网络中查找有无对应的可用设备。 某一设备接入网络、取得 IP 地址之后,就开始向网络“广播”自己已经进入网络, 即寻找控制请求。 UPnP 发现设备用到的协议是简单服务发现协议(Simple Service Discovery Protocol, SSDP),说明设备是怎样向网络通知或者撤销自己可以提供的服务,控制点(Control Pointer)是如何搜索设备以及设备是如何回应搜索的。 SSDP 格式套用 HTTP1.1 的部分消息头字段,但是和 HTTP 不同,SSDP 是采用 UDP 传输的,而且 SSDP 没有消息体,就是说 SSDP 只有信头而没有信件内容。SSDP 第一个要 填充的字段是起始行,说明这是个什么类型的消息。比如填“NOTIFY * HTTP/1.1/r/n”, 就说明这个 SSDP 消息是个通知消息,一般设备加入网络或者离开网络都要通知,更新自 己的服务后也要通知一下。别的设备看见这个消息的起始行就知道有设备状态变了,自己 就打开这个消息看一下有没有需要更新的。如果填“NOTIFY * HTTP/1.1/r/n”,就要填 LOCATION 字段,填一个描述 URL,控制点可以通过这个地址来取得设备的详细信息。 填“M-SEARCH * HTTP/1.1/r/n”就是要搜索了;响应别人的搜索就填“HTTP/1.1 200 OK/r/n”。 SSDP 第二个要填充的字段是目的地址 HOST。比如填上“HOST: 239.255.255.250:1900”, 就是组播(multicast)搜索,这里 239.255.255.250 是组播地址,就是说这条消息会发给网 络里面该组地址的设备,1900 是 SSDP 协议的端口号。如果 HOST 地址是特定地址,那这 就是单播(unicast)。响应不填这个字段,它会在 ST 字段里面填响应地址(respone address), 就是发来搜索信息的设备地址,响应消息的话还会发送一个包含自己地址 URL 的字段。 响应的意思就是跟发现者说:我好像是你要找的人,我的地址是 XXXX,详细情况请联系 我。响应以 UDP 单播的形式进行。 ③描述 控制点想要得到一个符合 UPnP 规范的设备的更详细信息时,就需要向这个设备发布的统一资源定位符来要。返回来的东西一般是扩展性标记语言(Extensible Markup Language,XML),描述分为两部分:一个是设备描述,是 UPnP 设备的物理描述,就是说 这个设备是什么;另一个是这个设备提供的服务列表以及服务描述,就是设备对应的服务 描述了,就是设备可以提供哪些服务。这些设备和设备提供的服务的描述格式也是有要求 的,开发商也可以自定义,只要符合 UPnP Forum 的规范。比如一个路由器设备,有三层 转发、点对点功能和 QoS 功能,那么这个路由器设备就是一个根设备(root device),它下 属有三层转发、点对点功能和 QoS 功能这些从设备。路由器的设备描述 XML 中会有一个 设备列表,列出三层转发、点对点功能、QoS 这些子设备的基本信息及这些设备描述的 URL,以及设备的呈现 URL,这个 URL 在本地会加载一个网页,在这个网页上可以操作 设备及其他拥有的服务。还会有一个服务列表,里面列出路由器设备可调用的服务基本信 息及服务描述 URL。服务通过访问服务描述 URL 可以取得服务描述 XML,里面会详细介 绍服务的信息,包括干什么用的,属于哪个设备,有哪些功能,每个功能调用都需要哪些 参数,以及如何调用此 OpenWrt-IGD 功能等。 ④控制 在 UPnP 设备描述部分,设备描述信息里还有关于如何控制设备的描述,有一个控制 URL,这个 URL 用来告诉控制点可以向这个 URL 发送不同的控制消息以便用来控制这个 设备,当控制点向设备发出控制时,设备会返回一个信息反馈。这种控制点和设备之间的 沟通信息按照简单对象访问协议(SOAP)的格式来写。SOAP 通过 HTTP 来传,现在的版本 是 1.1,叫作 SOAP 1.1 UPnP 描述文件。这个描述把控制/反馈信息分成 3 种,分别是 UPnP 控制请求、UPnP 控制响应和 UPnP 控制错误响应。SOAP 协议有消息头和消息体,消息 里面就可以写功能调用了。这里可能还需要传参数,比如想播放一个视频,要把视频的 URL 传过去,设备收到后要给予响应,表示能不能执行调用,出错的话会返回一个错误 代码。 ⑤事件 在服务进行的整个时间内,只要变量值发生了变化或者模式的状态发生了改变,就产 生了一个事件,该事件的服务提供者(某设备的某个服务)会把该事件向整个网络进行多 播。而且,控制点也可以事先向事件服务器订阅事件信息,就像 RSS 订阅一样,保证将该 控制点感兴趣的事件及时准确地单播传送过来。 订阅事件通常是控制点向发布者发送订阅消息,控制点也可以向消息发布者发送更新 订阅消息、退订消息等请求。消息发布者向消息订阅者推送订阅。事件的订阅和推送这块 用的通信协议是通用事件通知框架(General Event NotificationArchitecture,GENA),通过 HTTP/TCP/IP 传送。GENA 的格式详细请参阅 UPnP-arch-DeviceArchitecture-v1.1。 下面列 出订阅过程供参考: (1)订阅。发布者发送订阅消息主要包含事件 URL 和服务标识 ID 号,这两个可以在 设备服务描述信息中找到,以及寄送地址。还会包含一个订阅期限。 (2)成功订阅。发布者收到订阅信息,如果同意订阅的话就会为每个新发布者生成一 个唯一的发布者标识并记录发布者的有效时间。还会记录一个顺序增长事件关键字用来保 证事件确实推送到订阅者那里。比如说有个新事件,关键字是 6,然后把这个事件推送给 某个订阅者那里,订阅者那里记录的事件关键字是 4,现在收到的事件关键字是 6,他就 知道他没收到关键字为 5 的事件,这样他就向发布者索要漏收的事件,从而保证双方变量 值或状态的一致。 (3)首次推送。订阅者同意订阅之后还会向发布者发送一组初始变量或状态值,进行 首次同步。 (4)续订。订阅者必须在订阅到期前发送续订请求进行消息续订。 (5)订阅到期。订阅到期后发布者会把订阅者的信息删除,订阅者又回到订阅前的状态。 (6)退订。订阅者发送取消订阅信息将会取消订阅。订阅者因非正常退出网络的话, 则不会退订直到订阅到期。 (7)订阅操作失败信息。当订阅、续订和退订不能被发布者接收或者出现错误时,发 布者会发送一个错误代码。 关于多播/组播和单播。事件的组播采用 UDP/IP,它和 SSDP 一样,就是端口号变成 了 7900。图 14-1 所示的是几个协议的所处层的位置,可以清楚地看到它们之间的差别。 首先关于 IP 多播,由于 TCP 只适用于一对一的通信,所以只存在 UDP 多播,多播的重点 是提高网络效率,将同一数据包发送给尽可能多的可能未知的计算机。像这种对网内所有 设备的频繁消息通知采用多播是为了减小网络负担。SSDP 也是一样,但是 SSDP 和多播这 种采用 UDP 方式的协议存在一个问题,就是可靠性不够。解决的办法就是多次通知,但 是一般不会超过 3 次,以免增加网络负担,否则就得不偿失了。像 SSDP 的话会采用定期广播宣告的方式,使用各种各样原因而没收到宣告的控制点重新获得设备宣告信息,同时 也解决了 UDP 丢包的问题。前面在寻址的时候用到的 DHCP 用的是 UDP 广播。当一个新 的设备加入网络时,它想要得到一个个 IP,但又不知道 DHCP 服务器的 IP 地址,所以它 就在网内广播,用 255.255.255.255 地址来通知所有计算机。DHCP 服务器收到请求后会为 它申请并返回一个 IP 地址。 ⑥表达 只要得到了设备的 URL,就可以取得该设备表达的 URL,取得该设备表达的 HTML, 然后可以将此 HTML 纳入控制点的本地浏览器上。这部分还包括与用户对话的界面,以及 与用户进行会话的处理。因此设备表达可以理解成遥控器。这部分定义描述界面、规范界 面以及传输界面内容。远程界面是供控制点用户使用的,控制点用户通过远程界面完成设 备描述的获取、控制设备、订阅收取设备事件等。 六、UPnP应用之IGD ①IGD框架 家庭路由器是一个家庭局域网和互联网之间的网络互联设备,路由器作为专门独立的设备实现一组 UPnP 设备和对家庭网 PC 提供服务。通常这个服务模型也针对小型企业网 络。通常这些服务仅针对家庭网内的设备开放,在家庭网外通常不允许使用这些服务。 下图所示的是因特网网关设备(Internet Gateway Device,IGD)在网络中的部署结构 控制点:控制点和UPnP设备进行通信并控制 UPnP 设备和服务,是用户请求和设备、服务之 间的桥梁。控制点可以发起对设备和服务的查询,从而得到设备和服务的属性。 LAN设备:是路由器上一个物理局域网接口的虚拟 LAN 设备,家庭局域网通向互联网 的入口,和 WAN 设备共同组成了因特网网关设备,是家庭内部侧的网络接口,所有关于 因特网的业务请求都必须首先经过 LAN 设备向 WAN 设备进行转发,请求对应的响应也必 须最后到达 LAN 设备。 WAN设备:是路由器上一个物理接口的虚拟 WAN 接口设备,互联网的对外接口,具有 物理接口的任何属性配置,一个 WAN 设备至少以一种方式连接到互联网。上一篇:C++:78---类继承(禁止类继承:final关键字) 下一篇:C++(数据结构与算法):08---线性表的实现(单数组中实现多重表) |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |