网络基础--UPnP基本原理

2023-05-16

1、简介

UPnP是通用即插即用(Universal Plug and Play)的缩写,主要用于设备的智能互联互通,使用UPnP协议不需要设备驱动程序,它可以运行在目前几乎所有的操作系统平台上,使得在办公室、家庭和其他公共场所方便地构建设备互联互通成为可能。UPNP为NAT(网络地址转换)穿透带来了一个解决方案:互联网网关设备协议(IGD)。NAT穿透允许UPnP数据包在没有用户交互的情况下,无障碍的通过路由器或者防火墙(假如那个路由器或者防火墙支持NAT)。

本文介绍了UPnP所定义的基本协议(如SSDP、GENA、SOAP等),重点分析了UPnP实现的基本工作流程,并通过抓包工具捕获数据包,对各种流程传递的协议报文进行详尽分析,最后结合NAT技术,重点叙述UPnP在NAT技术中的应用。

2、UPnP的结构规范

UPnP最大的愿景是希望任何设备一旦连接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相通信,更能直接使用或者控制它,一切都不需要人工设置,完全的即插即用。

2.1 UPnP的基本组件

服务、设备和控制点是UPnP网络的基本组件,它们之间的关系图如下图所示:
在这里插入图片描述

  • 设备(Device):
    UPnP网络中定义的设备具有很广泛的含义,各种各样的家电、电脑外设、智能设备、无线设备、个人电脑等等都可以称之为设备。一台UPnP设备可以是多个服务的载体或多个子设备的嵌套。
  • 服务(Service):
    在UPnP网络中,最小的控制单元就是服务。服务描述的是指设备在不同情况下的动作和设备的状态。例如,时钟服务可以表述为时间变化值、当前的时间值以及设置时间和读取时间两个活动,通过这些动作,就可以控制服务。
  • 控制点(Control Point):
    在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的一种更新形式,统一资源名称(Uniform Resource Name)。唯一标识一个实体的标识符,但是不能给出实体的位置。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是URN更强大更容易管理,因为它可以引用多个URL。

2.3 UPnP协议栈

UPnP定义了设备之间、设备和控制点、控制点之间通信的协议。完整的UPnP有设备寻址、设备发现、设备描述、设备控制、事件通知和基于Html的描述等几部分构成。UPnP设备协议栈如下图所示:
在这里插入图片描述
UPnP协议结构最底层的TCP/IP协议是UPnP协议结构的基础。IP层用于数据的发送与接收。对于需要可靠传送的信息,使用TCP进行传送,反之则使用UDP。UPnP对网络的底层没有要求,可以是以太网、WIFI、IEEE1394等等,只需支持IP协议即可。

构建在TCP/IP协议之上的是HTTP协议及其变种,这一部分是UPnP的核心,所有UPnP消息都被封装在HTTP协议及其变种中。HTTP协议的变种是HTTPU和HTTPMU,这些协议的格式沿袭了HTTP协议,只不过与HTTP不同的是他们通过UDP而非TCP来承载的,并且可用于组播进行通信。

  • SSDP协议
    简单服务发现协议(Simple Service Discovery Protocol:SSDP),是内建在HTTPU/HTTPMU里,定义如何让网络上有的服务被发现的协议。具体包括控制点如何发现网络上有哪些服务,以及这些服务的资讯,还有控制点本身宣告他提供哪些服务。该协议运用在UPnP工作流程的设备发现部分。
  • SOAP协议
    简单对象访问协议(Simple Object Access Protocol:SOAP)定义如何使用XML与HTTP来执行远程过程调用(Remote Procedure Call)。包括控制点如何发送命令消息给设备,设备收到命令消息后如何发送响应消息给控制点。该协议运用在UPnP工作流程的设备控制部分。
  • GENA协议
    通用事件通知架构(Generic Event Notification Architecture:GENA)定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅信息并如何接收这些信息,该协议运用在UPnP工作流程的事件订阅部分。

3、UPnP实现的工作流程

下图是UPnP的运行流程,我们先大概介绍下:
在这里插入图片描述

  • 首先控制点和设备都先获取IP地址后才能进行下一步的工作;
  • 控制点首先要寻找整个网络上的UPnP设备,同时网络上的设备也要宣告自身的存在;
  • 控制点要取得设备的描述,包括这些设备提供什么样的服务;
  • 控制点发出动作信息给设备;
  • 控制点监听设备的状态,当状态改变时作出相应的处理动作;

3.1 寻址(Addressing)

UPnP网络的基础是TCP/IP,这就决定了每一个UPnP组件必须有IP地址。一台UPnP设备寻址的一般过程是:首先向DHCP服务器发送DHCP Discover的消息,如果在指定的时间内,设备没有收到DHCP Offer回应消息,设备必须使用AUTO-IP完成IP地址的获取。当然也可以使用静态配置的IP地址。

3.2 发现(Discovery)

连接到网络上的设备确定了IP地址之后,就会进入发现操作阶段。设备发现是UPnP实现的第一步。设备发现是由简单发现协议SSDP来完成的。当一台设备加入到网络中,发现过程允许设备向网络上的控制节点告知它提供的服务,当一个控制点加入到网络中,设备发现过程允许控制点寻找网络上感兴趣的设备。在这两种情况下,基本的交换信息就是发现消息。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标志符、等等。下图是发现流程的框架图:
在这里插入图片描述

3.3 描述(Description)

UPnP的第二步是设备描述。在控制点发现一台设备后,控制点对该设备可能仅仅知道设备或者服务的UPnP类型,设备的UUID和设备描述的URL地址,还需要知道更多的信息。控制点可以从发现消息中得到设备描述的URL,通过URL取回设备描述的信息。设备描述的一般过程下图如图所示:在这里插入图片描述

  • 设备描述:
    UPnP对某一设备的描述以XML形式来表示,设备描述包括制造商信息、模块名称和编号、序列号等等。对于一个物理设备可以包含多个逻辑设备,多个逻辑设备既可以是一个根设备其中嵌入多个设备,也可以是多个根设备的方式存在。设备描述由设备制造商提供,采用XML描述,遵循UPnP框架协议。
  • 服务描述:
    服务的描述包含一系列内容,具体有服务运行时刻的状态,运行时间等等。服务描述也由设备制造商提供,采用XML描述,遵循UPnP框架协议。

3.4 控制(Control)

在接收设备和服务描述之后,控制点可以向这些服务发出动作,同时控制点也可以轮询服务的当前状态。控制点将动作发送到设备服务,在动作完成或者失败后,服务返回相应的结果或者错误信息。其基本过程如下图所示:
在这里插入图片描述
为了控制一台设备,控制点向设备服务发出一动作,这一般是由控制点向服务的控制URL地址发送一个适当的控制消息。而服务则会对此动作出响应,返回相关的结果或错误。

3.5 事件(Even ting)

如上文的描述部分所述,一个即插即用服务描述包括服务响应的动作列表和运行时描述服务状态的变量列表。如果一个或多个状态被事件触发,服务将会在这些状态发生变化时发布更新,控制点可以订阅以获得此信息。在事件机制中,发布者指事件的来源(通常为设备服务),订阅者指事件目的地(通常为控制点)。
要订阅事件,订阅者可发送一条请求订阅消息。它将以这个订阅到持续时间作为响应。要保持订阅,订阅者必须在订阅过期之前进行续订。当订阅者不再需要发布者发送的事件时,订阅者应当取消其订阅。
发布者通过发送事件消息提醒订阅者状态改变。在订阅者第一次订阅时,需要发送一个专门的初始化事件消息。该事件消息包含所有事件的名称和值,并且允许订阅者初始化其服务状态。为了支持多个控制点,在动作生效后所有订阅者均会收到通知。由此,将向所有订阅者发送全部事件消息。事件消息使用HTTP协议传送,事件详细定义在通用事件通知结构(GENA)协议中。

3.6 展示(Presentation)

在控制点发现设备和取得设备描述之后,展示也就开始了。如果设备拥有进行展示的URL,那么控制点就可以通过此URL取得一个页面,在浏览器中加载该页面,并根据页面功能,支持用户控制设备或浏览设备状态。每一项完成的程度取决于展示页面和设备的具体功能。
设备展示包含在设备描述的Presentation URL字段。设备展示可以完全由设备制造商提供,它采用HTML页的形式,使用HTTP进行发布。下图是展示的流程示意图:在这里插入图片描述

参考资料:
UPnP基本原理以及在NAT中的应用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络基础--UPnP基本原理 的相关文章

  • Java中单例模式的使用

    什么是单例模式 单例模式 xff0c 也叫单子模式 xff0c 是一种常用的软件设计模式 在应用这个模式时 xff0c 单例对象的类必须保证只有一个实例存在 许多时候整个系统只需要拥有一个的全局对象 xff0c 这样有利于我们协调系统整体的
  • acc--›Android无障碍开发入门

    文章目录 前言创建无障碍程序1 配置无障碍信息属性的说明accessibilityEventTypesaccessibilityFeedbackTypeaccessibilityFlagscanControlMagnification 96
  • Android RecyclerView完全解析

    什么是RecyclerView xff1f RecyclerView 是谷歌 V7 包下新增的控件 用来替代 ListView 的使用 在 RecyclerView 标准化了 ViewHolder 类似于 ListView 中 conver
  • 程序员也是会浪漫的->打造浪漫的Android表白程序

    一年前 xff0c 看到过有个牛人用HTML5绘制了浪漫的爱心表白动画 xff0c 后来又在华超的这篇文章上看到大神用Android写出了相同的效果 xff0c 于是也动手写了一下 xff0c 并加了一些功能 xff0c 感谢大神的指引 写
  • Android登录注册功能封装

    我们都知道Android应用软件基本上都会用到登录注册功能 xff0c 那么对一个一个好的登录注册模块进行封装就势在必行了 这里给大家介绍一下我的第一个项目中所用到的登录注册功能的 xff0c 已经对其进行封装 xff0c 希望能对大家有帮
  • Kotlin 官方学习教程之扩展

    扩展 类似于 C 和 Gosu xff0c Kotlin 也提供了一种可以在不继承父类也不使用类似装饰器这样的设计模式的情况下对指定类进行扩展的功能 这是通过称为扩展名的特殊声明来实现的 Kotlin 支持函数扩展和属性扩展 函数扩展 要声
  • Kotlin 官方学习教程之密封类与泛型

    密封类 密封类用于表示受限类层次结构 xff0c 当值可以有一个有限集合的类型 xff0c 但不能有其他类型 它们在某种意义上是枚举类的扩展 xff1a 枚举类型的值集合也受到限制 xff0c 但每个枚举常量仅作为单个实例存在 xff0c
  • 致年轻时如此拼搏的你我

    离别总是伤人意 这一篇文章写在这个时候是有其特殊意义和价值 xff0c 起码对我来说是这样的 这个时候正是一年一度的毕业季 xff0c 而我最敬重的师兄即将要离校实习 xff0c 很幸运的是师兄收到了很不错的 offer xff0c 在这里
  • Linux网络编程:libnet 移植及使用

    目录 参考文章 xff1a 一 libnet库下载二 libnet库交叉编译安装三 应用程序交叉编译四 Ubuntu系统安装 libnet xff08 非交叉编译 xff09 五 libnet使用六 开发板上测试 参考文章 xff1a li
  • ZYNQ Linux 使用SPI驱动

    原文链接 xff1a ZYNQ Linux使用SPI驱动 配置 Vivado Vivado中双击ZYNQ PS核 xff08 例如ZYNQ7000 xff09 xff0c 选上需要使用的SPI xff0c 这一步略 spi该驱动不支持片选功
  • Call to undefined function think\captcha\imagettftext()

    php安装gd库以后 xff0c 在生成验证码图片的时候报错Call to undefined function think captcha imagettftext xff0c 查阅资料 xff08 参考资料 xff1a http www
  • acc--›Android无障碍开发常用操作

    文章目录 前言AccessibilityNodeInfo获取输入焦点 96 api gt 61 14 96 清理输入焦点 96 api gt 61 14 96 选中 96 api gt 61 14 96 清理选中 96 api gt 61
  • 解决composer安装alibabacloud/sdk下载不下来问题

    近期需要接入阿里云服务相关接口 xff0c 官方文档中写着php sdk可以支持composer安装 xff0c 于是就按照官网文档执行了了composer require alibabacloud sdk 结果等了半天也没反应 xff0c
  • 请求报警:Referrer Policy: strict-origin-when-cross-origin或引用站点策略: no-referrer-when-downgrade

    提交表单发送ajax请求时 xff0c chrome请求返回Referrer Policy strict origin when cross origin错误 xff0c 360浏览器返回 引用站点策略 no referrer when d
  • docker安装ES及kibana

    docker安装elasticsearch xff1a docker pull elasticsearch 7 4 2 docker pull kibana 7 4 2 xff08 可视化界面 xff0c 要与es版本保持一致 xff09
  • redis分布式锁到redisson的转变

    首先导入redis依赖 xff1a lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId gt spring boot sta
  • 实现Mysql事务嵌套(部分回滚)

    测试数据库表结构 xff1a CREATE TABLE 96 my user 96 96 id 96 int 11 NOT NULL AUTO INCREMENT 96 name 96 varchar 50 DEFAULT NULL 96
  • iframe框架中a标签的target失效问题,导致链接跳转到新窗口

    最近遇到一个问题很奇怪 xff0c 我用iframe搭建的页面 xff0c 页面左侧设置了菜单栏 xff0c 右侧是菜单对应的链 接内容 a标签加target实现 xff0c 但是最近发现有一个菜单链接一访问会导致所有的菜单target失效
  • http和https网页切换导致cookie失效问题

    网站先后从https和http方式登陆网站 xff0c 会导致http中cookie无法生效 xff0c 即https覆盖和http但作用域只在https中 xff0c 在http中浏览器debug中查看不到相关cookie 之前遇到这个问
  • 程序员要多跳巢才能涨工资

    不要一辈子呆死在一家公司 都是打工高薪才是王道 fs xff1a 这 篇文章的本意 xff0c 是告诉大家如何识别公司 而不是鼓励大家无脑跳槽 只有当你在一个公司略有所成的时候 xff0c 你才能有所积累 跳槽更多时候 xff0c 应该看到

随机推荐

  • Ajax反正现在我没怎么看懂

    AJAX即 A synchronous J avascript A nd X ML xff08 异步JavaScript和XML xff09 xff0c 是指一种创建交互式 网页应用的网页开发技术 AJAX 61 异步 JavaScript
  • ViewBinding封装基类(BaseActivity,BaseFragment)

    混淆规则 keep class 包名 databinding 使用反射 BaseActivity public class BaseActivity lt T extends ViewBinding gt extends AppCompat
  • acc--›Android无障碍开发手势操作

    文章目录 前言dispatchGesture 96 api gt 61 24 96 GestureDescriptionGestureResultCallback执行手势 DslAccessibilityGestureclick 点击dou
  • C语言基础学习——基本数据类型(float型)

    1 float型 xff08 浮点型 xff09 浮点型是用来表示小数的 xff0c 默认至少有6位有效小数 xff1b 有float xff08 单精度 xff09 xff0c double xff08 双精度 xff09 xff0c l
  • Mybatis整合Spring和SpringMVC配置文件详解

    配置文件 pom xml xff08 配置我们需要的jar包 xff09 web xml xff08 启动spring容器监听器并加载spring的xml文件 xff0c 加载springmvc前端控制器 xff09 springmvc的配
  • 高并发场景下如何保证数据库和缓存的数据一致性

    高并发场景下如何保证数据库和缓存的数据一致性 分析经典做法 分析 只要用缓存 xff0c 就可能会涉及到缓存与数据库双存储双写 xff0c 你只要是双写 xff0c 就一定会有数据一致性的问题 xff0c 那么你如何解决一致性问题 xff1
  • XmlDocument类详解

    xfeff xfeff XmlDocument类 FreeEIM XmlDocument类是 NET框架的DOC解析器 XmlDocument将XML视为树状结构 xff0c 它装载XML文档 xff0c 并在内存中构建该文档的树状结构 下
  • 1024,如果全世界程序员都消失了,会怎样?

    这两天 xff0c 有一个话题引起了程序员的广泛讨论 xff1a 年薪80W程序员相亲被鄙视 某知名互联网社区 xff0c 一网友发帖 xff0c 自己年薪80W去相亲 xff0c 竟然被鄙视不如在二本学校教书的大学老师 估计令他没想到的是
  • AI---是什么?可以做什么?

    1 AI的项目简单介绍 图像识别 描述 xff1a 给定图片 xff0c 识别图片中有什么 xff1f 算法 xff1a KNN CNN 情感分析 描述 xff1a 判断文本包含的情感是正面 负面还是中性 关键 xff1a 文本如何表示成向
  • linux 下 gb18030 转码成 utf8

    iconv f gb18030 t utf8 1 txt o 2 txt
  • ocelot+IdentityServer认证

    IdentityServer4 IdentityServer4是用于ASP NET Core的OpenID Connect和OAuth 2 0框架 具体大家可以自己搜索 xff0c 网上很多 我不想写的就推荐别人的 IdentityServ
  • 图中连通块的个数:并查集

    图的连通性问题 在地图上有若干城镇 xff08 点 xff09 xff0c 已知所有有道路直接相连的城镇对 要解决整幅图的连通性问题 比如 xff0c 随意给你两个点 xff0c 让你判断它们是否连通 xff1b 或者问你整幅图一共有几个连
  • 依赖注入

    举个例子 xff0c 组件A中有类ClassA xff0c 组件B中有接口IB和其对应的实现类B1和B2 那么 xff0c 现在ClassA需要利用IB接口来做一些事情 xff0c 例如 xff1a public class ClassA
  • acc--›Android无障碍开发框架

    文章目录 前言框架介绍目标界面找到元素进行操作 系列文章联系作者 前言 针对Android无障碍开发 和使用场景 封装出来一个可以适用于各种场景的快速开发框架 框架介绍 无障碍的本质就是通过代码模拟人工操作 所以流程很明确 可以归纳为 目标
  • debian(Linux) gnome-control-center

    参考链接 xff1a http iokevins blogspot com 2015 09 gnome 3 system settings gnome control html 问题 今天在simba配置完成后 xff0c gnome co
  • KindEditor上传单个图片成功,页面却提示失败 —— 在Chrome新版本中不兼容的解决方案

    不得不说 xff0c 这个所谓的不兼容 xff0c 就是Chrome浏览器搞的鬼啊 我也不知道是我机子上的Chrome浏览器配置有问题还是怎么回事 xff0c 总之记录下来 xff0c 大家可以看看你们是不是也遇到了一样的问题 先上图 1
  • Zookeeper 应用

    数据发布 订阅 数据发布 订阅 xff08 Publish Subscribe xff09 系统 xff0c 即所谓的配置中 xff0c 顾名思义就是发布者将数据发布到ZooKeeper的 个或 系列节点上 xff0c 供订阅者进 数据订阅
  • ONVIF协议--ONVIF协议简介

    1 ONVIF简介 网络摄像机是网络设备 xff0c 需要有通讯协议 xff0c 早期的网络摄像机硬件提供商都采用私有协议 随着视频监控的网络化应用 xff0c 产业链的分工将越来越细 有些厂商专门做摄像头 xff0c 有些厂商专门做视频服
  • GB28181协议--GB28181协议简介

    1 GB T 28181 2016协议简介 近年来 xff0c 国内视频监控应用发展迅猛 xff0c 系统接入规模不断扩大 xff0c 涌现了大量平台提供商 xff0c 平台提供商的接入协议各不相同 xff0c 终端制造商需要给每款终端维护
  • 网络基础--UPnP基本原理

    1 简介 UPnP是通用即插即用 xff08 Universal Plug and Play xff09 的缩写 xff0c 主要用于设备的智能互联互通 xff0c 使用UPnP协议不需要设备驱动程序 xff0c 它可以运行在目前几乎所有的