好记性不如铅笔头

编程, 网络通讯

uPnP,SSDP,DLNA简单概念笔记

参考链接
https://zh.wikipedia.org/wiki/UPnP
https://zh.wikipedia.org/wiki/%E7%AE%80%E5%8D%95%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E5%8D%8F%E8%AE%AE
https://breezetemple.github.io/2019/02/25/dlan-introduction/

UPnP概念介绍

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

UPnP是一种基于TCP/IP、UDP和HTTP的分布式、开放体系,使得任意两个设备能在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地址,广播自己的名字,根据请求检查自身功能以及检测出其它设备和它们的功能。DHCP和DNS服务是可选的,并只有它们在网络上存在的时候才会使用。设备可以自动离开网络而不会遗留下任何不需要的状态信息。

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

UPnP协议介绍

发现

给定一个IP地址,UPnP网络中的第一步是发现。UPnP的发现协议,是基于简单服务发现协议(SSDP)。当一个设备被加入到网络中,UPnP检测协议允许该设备向控制点广播自己的服务。类似地,当一个控制点加入到网络中的时候,它也能够搜索到网络中存在的、感兴趣的设备相关信息。设备之间交换的发现消息,主要包含此设备的必要信息以及其所提供的一项服务,例如设备的类型、标识和指向详细信息的链接(网络位置)。

描述

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

控制

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

事件通知

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

存在

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

NAT穿透

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

SSDP概念介绍

简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。[1]
简单服务发现协议提供了在局部网络里面发现设备的机制。控制点(也就是接受服务的客户端)可以通过使用简单服务发现协议,根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。设备(也就是提供服务的服务器端)也可以通过使用简单服务发现协议,向自己所在的局部网络里面的控制点宣告它的存在

SSDP协议介绍

简单服务发现协议是在HTTPU和HTTPMU的基础上实现的协议。[2]
按照协议的规定,当一个控制点(客户端)接入网络的时候,它可以向一个特定的多播地址的SSDP端口使用M-SEARCH方法发送“ssdp:discover”消息。当设备监听到这个保留的多播地址上由控制点发送的消息的时候,设备会分析控制点请求的服务,如果自身提供了控制点请求的服务,设备将通过单播的方式直接响应控制点的请求。[3]
类似的,当一个设备接入网络的时候,它应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:alive”消息。控制点根据自己的策略,处理监听到的消息。考虑到设备可能在没有通知的情况下停止服务或者从网络上卸载,“ssdp:alive”消息必须在HTTP协议头CACHE-CONTROL里面指定超时值,设备必须在约定的超时值到达以前重发“ssdp:alive”消息。如果控制点在指定的超时值内没有再次收到设备发送的“ssdp:alive”消息,控制点将认为设备已经失效。[3]
当一个设备计划从网络上卸载的时候,它也应当向一个特定的多播地址的SSDP端口使用NOTIFY方法发送“ssdp:byebye”消息。但是,即使没有发送“ssdp:byebye”消息,控制点也会根据“ssdp:alive”消息指定的超时值,将超时并且没有再次收到的“ssdp:alive”消息对应的设备认为是失效的设备。[3]

DLNA 简介

DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能,目前成员公司已达 280 多家。
DLNA不是一种协议,但包括了实现相关标准所需要的一系列协议栈,UPnP是其中的关键协议,DLNA整个发现,控制,事件订阅部分都是由Upnp Device Architecture协议所定义。如下图:

DLNA使用以下uPnP协议:
SSDP协议
简单服务发现协议 (Simple Service Discovery Protocol:SSDP),内建在 HTTPU/HTTPMU 里,定义如何让网络上有的服务被发现的协议。包括控制点如何发现网络上有哪些服务,并取得这些服务的资讯,还有装置本身宣告他提供哪些服务。该协议运用在 UPnP 工作流程的设备发现部分。

SOAP协议
简单对象访问协议 ( Simple Object Access Protocol) 定义了可扩展标记语言 (XML) 和 HTTP 的使用来执行远程调用,包括控制点如何发送命令消息给设备,及设备接收到命令消息后如何发送响应消息给控制点。该协议运用在 UPnP 工作流程的设备控制部分。

GENA协议
一般事件通知架构 (Generic Event Notification Architecture:GENA) 定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅讯息并如何接收通知讯息用的。该协议运用在 UPnP 工作流程的事件订阅部分。

Leave a Reply

16 − 11 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据