简单聊聊OpenWrt的UPnP协议

您所在的位置:网站首页 igd协议 简单聊聊OpenWrt的UPnP协议

简单聊聊OpenWrt的UPnP协议

2024-06-15 18:24| 来源: 网络整理| 查看: 265

简单聊聊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 协议栈图示下图所示:

简单聊聊OpenWrt的UPnP协议_xml

处于 UPnP 协议最顶端的是应用层,它是由 UPnP 设备制造厂商定义的部分。包括设 备、服务相关的描述信息,应用层的信息由设备制造厂商来提供,这部分一般有设备厂商 提供的、对设备控制和操作的底层代码等。 第一、二层 UPnP 是一个多层协议构成的框架体系,每一层都以相邻的下层为基础,同时又是相 邻上层的基础,直至达到应用层为止。该图的最下面是就是 IP 和 TCP 这两层,负责设备 的网络层地址服务以及可达性,TCP 用来建立传输层的服务。 第三层 第三层是 HTTP、HTTPU 和 HTTPMU 层,这一层属于传输协议层。传输的内容都是 经过“封装”后,存放在特定的 XML 文件中的。对应的 SSDP、GENA、SOAP 指的是保存 在 XML 文件中的数据格式。到这一层,已经解决了 UPnP 设备的 IP 地址和传输信息问题。 第四层 第四层是 UPnP 设备体系定义,仅仅是一个抽象的、公用的设备模型。任何 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 设备至少以一种方式连接到互联网。

简单聊聊OpenWrt的UPnP协议_UPnP协议_02

IGD设备和服务结构如下图所示: WAN连接服务提供 WAN 口连接互联网的服务,连接方式可以为IP或者 PPP 方式。 对于不同的连接方式,有相应的连接属性和管理方式。比如IP连接,具备 IP 三层接口的IP地址、掩码等属性。 WAN IPv6 防火墙提供 IPv6 防火墙的相关配置、设备的接入规则、数据的转发策略等服务。 LAN 主机配置管理提供局域网主机配置管理服务、局域网工作的网段地址、局域网提 供的动态地址配置协议的 IP 地址池、地址有效期等配置。

简单聊聊OpenWrt的UPnP协议_其他_03

端口映射在IGD中的应用 计算机提供的服务是以 TCP/IP 协议族的传输层端口进行区别的,例如 Web 服务使用 80 端口、FTP 服务使用 21 端口等。当 IGD 的局域网设备访问同一台服务器的不同端口服务时,就 需要设置端口映射。根据方向的不同可以分为局域网到广域网和广域网到局域网的端口映射。 当路由器同时有多个 WAN 口服务,每个 WAN 口具有不同属性的服务,这些服务可 以体现在不同的运营商,需要根据不同的家庭局域网客户请求来选择对应与此局域网客户 端的互联网接口服务。使用地址映射功能可以将家庭局域网内的某个客户端的请求转到指 定的 WAN 口服务接口,并使用该 WAN 口服务进行数据处理。 当在局域网内提供某种 Web 服务,并想让广域网的用户可以访问自己局域网的 Web 服务时,可以建立广域网到局域网的端口映射。这种情况下,广域网的用户通过访问自己 的公网 IP 服务时,就相当于访问了自己局域网的 Web 服务。 IGD设置端口映射示意图、IGD设置端口映射流程分别如下图所示:

简单聊聊OpenWrt的UPnP协议_服务器_04

简单聊聊OpenWrt的UPnP协议_端口映射_05

设置端口映射参数描述则见下表:

简单聊聊OpenWrt的UPnP协议_端口映射_06

①设备宣告。UPnP 设备向本网络广播地址 239.255.255.250 的 1900 端口广播自己的 属性:

简单聊聊OpenWrt的UPnP协议_端口映射_07

②设备发现。控制点向本网络广播地址 239.255.255.250 的 1900 端口广播自己搜索 的设备或者服务属性,由控制点发起设备搜索动作:

简单聊聊OpenWrt的UPnP协议_UPnP协议_08

③设备发现响应。设备对控制点发出发现请求的响应:

简单聊聊OpenWrt的UPnP协议_服务器_09

④获取设备描述文件。控制点向http://192.168.0.1:8081/IGDdescription.xml发起获取设备描述文件请求并得到设备描述文件内容。 ⑤解析设备描述文件。控制点解析 IGDdescription.xml 文件,解析到 WANDevice 设 备、WANConnection 子设备以及 WANIPConnection 服务。 ⑥添加端口映射请求。控制点向 WANIPConnection 服务发送 AddPortMapping 动作, 用来添加端口映射,所需参数上面的“设置端口映射参数描述”表。 我是小董,V公众点击"笔记白嫖"解锁更多OpenWrt资料内容。

简单聊聊OpenWrt的UPnP协议_端口映射_10

收藏 评论 分享 举报

上一篇:C++:78---类继承(禁止类继承:final关键字)

下一篇:C++(数据结构与算法):08---线性表的实现(单数组中实现多重表)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3