1. UPnP 简介
UPNP(Universal Plug and Play)即通用即插即用协议, 是为了实现电脑与智能的电器设备对等网络连接的体系结构。而内网地址与网络地址的转换就是基于此协议的,因此只要我们的路由器支持 upnp,并且我们使用支持此协议的 xp 操作系统,那么我们就可以借此提高点对点传输速度。
简单的来说,UPnP 最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相沟通,更能直接使用或控制它,一切都不需要设定,完全的 Plug and Play。
2. UPnP 意义
在网络世界里,当一个主机加入网络时,其行为模式跟我们物理硬件的添加和删除设备是类似的。
在私有网络和公网交互的时候,私有网络中的主机使用的是内网 IP 地址,是无法被外网的主机直接访问的。必须借助 NAT 网关设备(本地路由器)把内网地址映射到网关的公网地址上。
当内网中的主机想要被外界主机直接访问(比如开放 80 端口,对外提供 HTTP 服务),我们就需要在 NAT 设备中为当前主机手工配置端口映射,如果内网中有多台主机都想要被外界主机直接访问的话,我们必须在同一个 NAT 设备上为这些主机分别做端口映射,它们之间不能使用有冲突的端口。
这个过程需要用户手工逐一配置,显然给用户带来了很大的麻烦。
另外,如果内部网络中有多个上网设备,每个设备上都有 Live Message 之类的软件需要在网关上开启一个端口进行数据传输,如果每次都使用一个固定端口的话,就会和其他用户冲突。
UPnP 技术标准的出现就是为了解决这个问题,只要 NAT 设备(路由器)支持 UPnP,并开启。那么,当我们的主机(或主机上的应用程序)向 NAT 设备发出端口映射请求的时候,NAT 设备就可以自动为主机分配端口并进行端口映射。
这样,我们的主机就能够像公网主机一样被网络中任何主机访问了。
3. UPnP 应用场景
UPnP 典型的应用场景就是家庭智能设备的互联,还有,目前在网络应用比如 BitTorrent, eMule,IPFS,Ethereum 等使用 P2P 技术的软件,UPnP 功能为它们带来极大的便利。比如:利用 UPnP 能自动的把它们侦听的端口号映射到公网地址上,这样,公网上的用户也能对当前的 NAT 内网主机直接发起连接。
实现 UPnP 必须同时满足三个条件:
- NAT 网关设备必须支持 UPnP 功能;这是因为它需要扮演控制点(239.255.255.250:1900)的角色,控制点提供的是 SSDP 服务。
- 操作系统必须支持 UPnP 功能;比如 Windows 系列操作系统;
- 应用程序必须支持 UPnP 功能;比如 Bt、eMule、IPFS, Ethereum 等。
以上三个条件必须同时满足,缺一不可。
注:大多数路由器都是支持 UPnP 的,有的是默认开启,有的需要手工开启。
4. UPnP 协议体系
UPnP 是一个多层协议构成的框架体系,每一层都以相邻的下层为基础,同时又是相邻上层的基础。直至达到应用层为止。
最底部两层:IP 和 TCP
负责设备的 IP 地址。
第三层:传送层
这一层主要是将信息用特定的方式进行传送。
这个特定的方式就是指 HTTP、HTTPU、HTTPMU 协议,传送的数据就是按照 SSDP、GENA、SOAP 协议规定的 XML 数据。到这一层,已经解决了 UPnP 设备的 IP 地址和传送信息问题。
第四层:UPnP 设备体系定义
仅仅是一个抽象的、公用的设备模型。任何 UPnP 设备都必须使用这一层。
第五层:UPnP 论坛的设备定义层
在这个论坛中,不同电器设备由不同的专业委员会定义,例如:电视委员会只负责定义网络