UPnP模块研究报告 1. 前言 (3) 1.1 关于本文档 (3) 1.2 背景知识 (3) 1.2.1 关于UPnP (3) 1.2.2 关于UPnP IGD (3) 1.3 术语 (4)
2. UPnP模块介绍 (4)
3. 关于MiniUPnP开源组件 (5) 3.1 MiniUPnP开源组件介绍 (5) 3.2 MiniUPnP开源组件编译及安装 (6) 4. miniupnpd程序使用 (6) 4.1 关于miniupnpd程序 (6)
4.2 miniupnpd.conf命令参数说明 (7) 4.3 UPnP程序使用实例 (8) 5. UPnP IGD模块使用场景 (8) History
Date Version Changes 2011-12-22 Draft A 完成第一稿 1. 前言 1.1 关于本文档
本文重点描述的是UPnP的IGD方案在实际环境中的应用情况。通过对MiniUPnP开源组件的实际应用,使读者全面了解UPnP的功能和作用。通过对MiniUPnP应用中报文的描述,使读者充分了解UPnP使用的协议和端口,方面了系统的维护。
1.2 背景知识 1.2.1 关于UPnP
UPnP(Universal Plug and Play)是1999年微软公司推出的一套家庭网络规范。已经在2007年成为ISO标准。由非盈利论坛组织
UPnP? Forum负责体系架构和标准的维护和更新升级。世界范围内宣称支持它的组织已经达到八百多家。
它是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等Internet网络连接而设计的一种架构,目标是使家庭网络(数据共享、通信)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。
1.2.2 关于UPnP IGD
UPnP IGD(Internet Gateway Device)是由UPnP IGD工作委员会定制的一种特殊的UPnP 设备,完全遵照UPnP设备架构定义,并结合了一系列UPnP IGD控制协议文档。该设备可以实现网关设备的远程手动或自动配置,扩展了某些网络应用。现阶段在网关设备(路由器)中主要实现管理连接、及时显示网关设备的状态信息和NAT Traversal。
如上图所示,NAT traversal允许UPnP数据包在没有用户交互的情况下,无障碍的通过网关设备(如路由器)。
1.3 术语 设备——Device
这里是指符合UPnP规范的设备。一个UPnP设备可以看成一个包含服务并嵌套了常规设备的“容器” 。例如,一个UPnP的VCR(录像机)设备可以包含磁带传送服务、调谐服务和时钟服务。就是说,UPnP之下的设备不能仅仅理解为硬件意义上的设备,而应当包括
服务功能。
服务——Service
在UPnP网络中,最小的控制单元就是服务。服务描述的是设备在不同的情况下的活动和设备的状态。例如,时钟服务可以表述为时间变化(状态变化)、当前的时间(时钟的状态)以及设置时间和读取时间两个活动,通过这两个活动.你就可以控制服务。
控制点——Control Point
在UPnP网络中,控制点指的是可以发现并控制其它设备的控制设备。在UPnP网络中,设备可以和控制点合并。也就是说,同一个设备,可以同时具有设备的功能和控制点的功能,即可以作为设备提供服务,也可以作为控制点发现和控制其它设备。
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工作流程的事件订阅部分。
2. UPnP模块介绍
由于UPnP? Forum论坛中只负责维护UPnP的体系架构,对UPnP架构实现的功能制定了统一的行业标准,并未对实现的方法,协议的接口做具体的限定。因此不同厂商实现的架构体系有很多的不同之处。
一般在路由器的项目中芯片厂商提供的UPnP 模块实现方案有:Broadcom方案、Ralink 方案。这两个实现方案的实现架构很相似。
常用的UPnP开源模块IGD方案有:MiniUPnP和linux-igd开源模块。
项目中如果芯片厂商提供的方案不是很理想的话,可以采用开源UPnP的开源组件MiniUPnP:
由于MiniUPnP代码实现的架构相对简单,易于开发和维护。MiniUPnP中在NAT的实现中会主动建立MINIUPNPD规则,将运行时自动添加的NAT规则都添加在MINIUPNPD 链中,方便管理。
MiniUPnP的不足之处:由于NA T的实现中只支持单W AN的端口映射,因此多W AN
情况下一个外部端口只能建立一条NA T规则。 3. 关于MiniUPnP开源组件 3.1 MiniUPnP开源组件介绍
MiniUPnP的官网下载连接为: http://miniupnp.free.fr/files 在编写文档时MiniUPnP的最新版本的压缩文件为:miniupnpd-1.6.20120426.tar.gz
MiniUPnP的实现中:
首先,路由器做为一个UPnP的主控设备,向UPnP的专用组播地址239.255.255.0发送组播包宣布它的存在。
如上图所示,由于udp是一种并不可靠的传输,组播包可能会发送很多次。由于LAN 侧没有UPnP主控设备,因此NOTIFY包不会得到回应。
当LAN侧主机搜索upnp主控设备时,会向组播地址发送M-
SEARCH包,而路由器收到包之后,会返回一个包来通知LAN侧主机。所以如果是双网卡的机器要测试upnp,最好是设置好多播的路由,以免多播包由另一块网卡发出。
这种M-SEARCH包同样会发送多次,它使用udp的1900端口,采用的是SSDP协议。M-SEARCH方法返回的包里,有upnp设备的ip号和端口号。LAN侧主机可以通过这个ip 和端口号,同路由器建立tcp连接。
之后双方的通信都采用tcp协议,LAN侧主机可以发送报文得到路由器的Wan口地址,当前已经映射的端口信息。或者发送端口映射请求给路由器。报文在格式上采用HTTP、SOAP和XML协议。
由于双方已经通过约定的协议规定了报文的格式,因此路由器可以很轻松的解析除这些包,来完成请求。
3.2 MiniUPnP开源组件编译及安装
将下好的miniupnpd-1.6.20120426.tar.gz源码miniupnp-1.6.20120426解压到项目工程目录,进入目录:
重命名Makefile.linux为Makefile并修改如下: 设置编译选项:
#CC=gcc //屏蔽默认编译选项,使用项目中的编译环境 设置install目录:
SBININSTALLDIR = $(APPDIR)/../target/sbin 添加iptables依赖文件:
IPTB = ../iptables-1.x //设置iptables目录
CFLAGS += -I$(IPTB)/include //添加iptables依赖文件目录 设置编译连接文件: # LIBS = -liptc
LIBS = $(IPTB)/libiptc/libiptc.a 设置保存选项:
install: miniupnpd //去掉genuuid选项 cp
$(APPDIR)/miniupnpd-1.1/miniupnpd
$(INSTALLDIR)/bin/
最后转到编译目录编译项目: #make
4. miniupnpd程序使用 4.1 关于miniupnpd程序
4.2 miniupnpd.conf命令参数说明
下面为FWR602项目中使用的miniupnpd.conf配置文件: # LAN network interfaces IPs / networks
# there can be multiple listening ips for SSDP traffic. listening_ip=192.168.1.1/24
#port for HTTP (descriptions and SOAP) traffic. set 0 for autoselect. port=1900
# enable NAT-PMP support (default is no) enable_natpmp=yes
# enable UPNP support (default is yes) enable_upnp=yes # lease file location
lease_file=/var/log/upnp.leases
# bitrates reported by daemon in bits per second bitrate_up=1000000 bitrate_down=10000000
# when enabled, UPnP client are allowed to add mappings
only
# to their IP. secure_mode=yes
# report system uptime instead of daemon uptime system_uptime=yes
# report system uptime instead of daemon uptime notify_interval=60 # unused rules cleaning.
# never remove any rule before this threshold for the number # of redirections is exceeded. default to 20 # clean_ruleset_threshold=10
# clean process work interval in seconds. default to 0 (disabled).
# a 600 seconds (10 minutes) interval makes sense clean_ruleset_interval=600
# uuid : generate your own with \"make genuuid\" uuid= fc4ec57e-b051-11db-88f8-0060085db3f6
# serial and model number the daemon will report to clients # in its XML description serial=12345678 model_number=1 # UPnP permission rules
# (allow|deny) (external port range) ip/mask (internal port range)
# A port range is - or if there is only # one port in the range. # ip/mask format must be nn.nn.nn.nn/nn
# it is advised to only allow redirection of port above 1024
4.3 UPnP程序使用实例
UPnP实例场景如下:WAN侧网络接口为eth0.1,对应LAN侧网络接口为br0。UPnP配置同上面所示。WAN侧接入外网,LAN侧连接PC。
1. 配置路由器使PC可以连入外网。
频软件。查看现在下载软件的下载速度和视频软件的下载速度。 5. UPnP IGD模块使用场景
随着越来越多的家庭和小型企业将自己的PC机连接并共享Internet连接,NAT的使用量正急剧增加。在一定程度上会给许多家庭或小型企业在日渐需要的最新型PC和家庭网络技术带来不便,诸如多玩家游戏、实时通讯及其他对等服务。
如果在公用Internet上使用专用地址或同时使用同一端口,这些应用程序将会中止。应用程序必须使用公共地址,并且每个回话都需使用唯一的端口。大型机构有专门的维护人员来确其公司应用程序在NAT上正常使用,但小型的机构和消费者却不具备这样奢侈的条件。UPnP NAT Traversal可以自动解决NAT给应用程序带来的诸多问题,使之成为小型企业和消费者理想的解决方案。
NAT Traversal支持多玩家游戏、对等连接(迅雷、电驴、PPLive等)、实时通讯等软件。
因篇幅问题不能全部显示,请点此查看更多更全内容