中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)21-4980-03
近年来,Skype电话、BT下载、PPTV流媒体等互联网应用的普及与成功,使P2P技术成为IT 界的一个热门话题。P2P(Peer to Peer)技术,也称为对等网络技术,这是一种网络结构的思想和方法论。它与目前网络中占主导地位的客户端/服务器(Client/Server,C/S)结构的一个本质区别是,整个网络结构中不存在中心节点。在P2P结构中,每个节点(Peer)大都同时具有信息消费者、信息提供者和信息通讯等功能。在P2P 网络中每个节点所拥有的权利和义务都是对等的。
P2P技术打破了传统的服务器与客户端的界限,消除了传统的IPv4与DNS 域名系统的局限性,让所有联网并参与到P2P 应用来的所有机器联合起来,组成一个威力强大的并行计算机,从而实现计算能力与计算资源的突破。P2P所带来的效益,首先将体现在运营成本的大幅降低上,甚至可以让一些原本高成本服务的实际成本接近零,从而,让一些原本是不可能实现的商业模式成为可能。
现有的互联网是基于IPv4架构,随着计算机接入数量的不断增加,IP 地址资源愈加匮乏,NAT的引入解决了这个问题,通过部署NAT 可以使一个局域网所有主机通过一个或几个公网IP 地址来访问互联网,不仅如此,NAT 实际应用中还有负载均衡、保护内部局域网和优化重叠网络等功能。但由于局域网与互联网编址方式不同,NAT 设备掩藏了参与构建P2P 网络的大量用户节点。因此位于不同NAT 之后的用户节点如何发现对方、如何彼此建立直接连接就成为P2P 亟待解决的问题之一。
1 NAT类型
根据NAT的工作方式不同,可以分四种类型:完全圆锥型NAT(Full Cone NAT),地址限制圆锥型NAT (Address Restricted Cone NAT),端口限制圆锥型NAT (Port Restricted Cone NAT),对称型NAT (Symmetric NAT)。假设节点A 在内网,内网IP地址记为Aip,端口号Aport;穿越NAT 后的外部IP地址记为A’ip / port,外网设备节点B的地址为Bip / port。以下图网络结构为例,分别说明四种类型的特点。
完全圆锥型NAT情况下,NAT外的任意设备如节点B,访问A’ip / port 即可访问Aip / port;
地址限制圆锥型NAT情况下,NAT外的任意设备如节点B,访问A’ip / port 即可访问Aip / port,但是B 要能访问A,必须A 先访问B的IP 地址Bip;
端口限制圆锥型NAT情况下,NAT外的任意设备如节点B,访问A’ip / port 即可访问Aip / port,但是B 要能访问A,必须A 先访问B的IP 地址Bip以及端口B port;
以上三种类型有个共同特点,不管节点A 访问NAT 以外的任何地址,穿越NAT 后映射为公网地址A’ip / port,即只要从同一个内部地址和端口出来的包,NAT都将它转换成同一个外部地址和端口。因此,它们被统称为Cone NAT。
而在对称型NAT情况下,NAT 内的节点A(Aip / port)访问特定的NAT 外的节点B(Bip / port),使用相同的外部地址A’ip / port。如果节点A访问NAT 外的其他节点,将使用不同的外部地址和端口号;而且必须先有内部节点首先访问外部节点,外部节点才能访问内部节点。如此设计是出于安全性考虑,一些功能较强的NAT 提供这种可选的工作模式。
2 NAT穿越技术
不少方案已经被应用于解决穿透NAT问题,例如:ALGs(Application Layer Gateways)、Middlebox Control Protocol、STUN (Simple Traversal of UDP through NAT)、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP)、symmetric RTP等。然而,当这些技术应用于不同的网络拓扑时都有着显著的利弊,以至于我们只能根据不同的接入方式来应用不同的方案,为了适应各种NAT 环境,出现了一种ICE的解决方案。
ICE(Interactive Connectivity Establishment)本身不是一种新技术,它只是把原来的一些技术综合运用。作为最为全面的一种解决NAT 穿越方案,ICE的设计方案大多综合使用STUN 和 TURN 这两种穿越技术,最大限度地利用STUN,当STUN 无法作用的时候才使用TRUN,这样就能避免单独使用STUN 不能穿越某些NAT 的弊病和最大限度的减少TRUN 的使用。其中NAT 设备的类型对于ICE 选择穿越技术有很重要的影响,所以在穿越NAT设备前应先检测NAT 设备的类型。
3 NAT类型检测实现方案
假设节点Client 在内网,通过NAT 设备连接Internet,Internet 设备节点A的会话地址为ServerA:PortX,Internet设备节点B的会话地址为ServerB:PortX和ServerB:PortY,其中ServerA 和ServerB 是两个不同的公网IP,网络布局如下图所示:
那么怎么来检测该网络中的NAT 设备的类型呢?网络传输协议TCP / IP 协议簇中传输层的协议包括TCP(Transmission Control Protocol 传输控制协议)和UDP (User Datagram Protocol 用户数据报协议),TCP 相比UDP而言更为复杂,因为TCP 是面向连接的服务,需要三次握手机制,会涉及到连接状态的保持等问题,UDP虽然是一个不可靠的协议,但它是分发信息的一个理想协议,UDP具有TCP所望尘莫及的速度和性能优势。NAT网络检测需要传输的数据量少,对传输可靠性的依赖小,因此选择基于UDP 协议来实现方案,图3是具体的程序算法流程图。
在UDP 通讯中,内网中的节点Client 主动向外发送数据包请求,并根据返回包的信息判定内网中NAT 设备的类型。Internet 设备节点A和节点B都有回应Client返回包的功能,而且节点A还具备接收节点Client的申请转发数据包给节点B的能力。
4 结束语
P2P技术已经被大量运用于各种互联网应用中,在实现P2P 应用的过程中,如果某个节点(Peer)位于私有网络则必定会遇到NAT 穿越的问题,换而言之,这样的节点在与其他节点通讯时必须先完成NAT 穿越。NAT 类型检测算法使NAT 的穿越更加智能,检测NAT 的类型的结果可以用于选择合适的NAT 穿透技术方案,提高了穿透的效能,具有很大灵活性。
参考文献:
.1994.
[2] Rosenberg J,Mahy R.Session Traversal Utilities for NAT(STUN) [S] .RFC 5389, IETF, 2008.
[3] Rosenberg J,Mahy R,Matthews P.Traversal
using relays aroundnat (TURN): Relay extensions to session traversal utilities for nat (stun)[S].RFC 5766 (Review Copy), IETF, 2010.
.RFC5245, IETF, 2010.
[5] 张泽鹏. P2P网络中NAT穿透技术的研究与实现[D].北京:北京邮电大学,2010.
.陆学莹,译.北京:机械工业出版社,2000.