文献标识码: A
文章编号: 0258-7998(2013)05-0132-03
在迅猛发展的互联网中,网络地址转换NAT(Network Address Translator)技术有效缓解了网络之间互连协议IP(Internet Protocol)地址短缺的问题,同时也对内网安全起到了很好的保护作用。对等网络P2P(Peer to Peer)流媒体技术被广泛用于电子商务、网络电视、远程教育、在线直播、实时视频会议、网络视频广告、视频点播、远程医疗等。NAT用于实现内外网客户端间的访问,但多数情况下内外网客户端无法实现直接访问[1],因此实现内外网客户端间的对等互访必须解决信息包穿越NAT的问题。
1 NAT
NAT是一个互联网工程任务组IETF(Internet Engineering Task Force)标准,它将只能在私网中使用的内网IP地址通过与少量的公网IP地址建立映射关系,实现内网客户端对互联网的访问。当内网客户端需要访问Internet时,NAT将信息流中的内网IP地址修改为可以在Internet上路由的公网IP地址,从而实现内网客户端与外网客户端之间的通信,同时建立内网地址与外网地址间的映射关系表。同样,当外网客户端需要与内网客户端通信时,NAT对照建立的映射表,把经过信息流中的IP地址修改为与其对应的内网IP地址发往内网客户端[2]。NAT缓解了公网IP地址的短缺,使私网地址得以复用,同时加强了内网安全性。
2 NAT的分类及特点
UDP(User Datagram Protocol)是用户数据包协议,IETF制定了UDP数据包穿越NAT 的简单协议STUN(Simple Traversal of UDP over NATs),它将NAT分为4类,即:完全锥型NAT,地址受限锥型NAT,端口受限锥型NAT和对称型NAT。
(1)完全锥型NAT:当内网的客户端A连接外网客户端时,NAT会为其分配一个端口,此后外网所有发到这个端口的UDP数据包都可以到达内网客户端A。
(2) 地址受限锥型NAT:当内网的客户端A连接外网的客户端B时, NAT会为其分配一个端口,此后B可以用任何端口与A通信,但其他的外网客户端则不能与A通信。
(3) 端口受限锥型 NAT:当内网的客户端A连接外网的客户端B时, NAT会为其分配一个端口,此后B只能用此端口与A通信。B用其他端口或其他客户端均不能与A通信。
(4) 对称型NAT:与前三种锥型NAT不同,对称型NAT内网客户端在连接外部客户端时随连接的目标不同分配的端口也将发生改变,或者说当内外网客户端连接时,内网客户端分配到的IP地址和端口、外网客户端分配到的目标IP地址和端口,其中任一项发生改变,都会引起连接路径将随之改变。
3 NAT类型的检测
不同类型的NAT在端口分配和映射记录等细节上差异很大,其穿越方法也有所不同,因而穿越NAT前需要对NAT的设备类型进行检测[3-4], NAT类型检测流程如图1所示。
检测方法步骤为:
(1)客户端向服务器的IP1: Prot1发送源地址的请求包,其中有包的源地址IP3: Port3。若客户端的地址为IP0:Prot0,比较IP0:Prot0与IP3: Port3是否相同,若相同,则客户端前没有NAT;否则转步骤(2)。
(2)客户端向具有两个公网IP地址(IP1、IP2)和两个端口(Prot1、Prot2)的服务器依次发起4次连接,即IP1: Prot1、P1: Prot2、IP2: Prot1、IP2: Prot2,每次连接都能从服务器返回的数据包中找到客户端经过NAT转换后的映射关系。比对客户端相邻两次连接请求所分配的端口号,并计算端口的增量,如果无增量,则NAT为锥型NAT,转步骤(3);有增量则为对称性NAT,转步骤(5)。
(3)客户端再向服务器端IP1: Prot1发送报文,要求使用IP2: Prot1回复。如果收到回复,则说明该NAT类型是完全锥型NAT;如果请求若干次都收不到响应消息,则不是完全锥型NAT,转步骤(4)。
(4)客户端再向IP1: Prot1发送消息,要求用IP1: Prot2回复,如果收到回复,则说明该NAT 是地址受限锥型NAT,如果发送若干次请求消息都没有收到响应消息, 则说明该NAT 是端口受限锥型 NAT。
(5)如果每次的增量均相同,则为增量型NAT;如果增量不同,则为随机型NAT。
4 NAT的穿越方案
按照映射关系中端口的变化将NAT分为锥型NAT和对称型NAT,其中锥型NAT包括完全锥型、地址受限锥型、端口受限锥型3种。锥型NAT的映射与目的地址无关,即源地址相同映射就相同;而对称型NAT的映射则同时关联源地址和目的地址,穿越过程相对复杂[5]。
4.1 锥型NAT的穿越
锥型NAT使用已经成熟的UDP“打洞”技术[6-7],即利用STUN服务器得到客户端的映射地址,当双方需要通信时,可以通过服务器的配合获取对方的地址和端口,建立P2P直连。客户端A与客户端B的连接如图2所示。
客户端A与客户端B通信穿越的步骤为:
(1)通信时NAT A将客户端A的内网地址和端口转换为NAT A的外网地址和端口,并建立映射关系。同样NAT B也将客户端B的内网地址和端口转换为NAT B的外网地址和端口,建立映射关系。
(2)客户端A通过服务器S向客户端B发出连接请求。服务器S向客户端A、B发送对方的NAT映射地址,即外部地址。
(3)客户端B收到客户端A的外部地址后,将A的外部地址作为目的地址发送UDP数据包“打洞”,该数据包使B端网络的NAT设备允许后续的、以A端地址为源地址的UDP数据包进入其内部网络。形象地称B向A打了一个“洞”。
(4)客户端A收到客户端B的外部地址后,以B的外部地址为目的地址发送探测UDP数据包,同样该数据包也在A端网络的NAT设备上建立对应映射。
(5)客户端B收到客户端A的探测数据包后,向A发送确认数据包,A、B就此建立UDP连接。
4.2 对称型NAT的穿越
STUN 协议不能穿越对称型NAT,原因是对称型NAT的映射关系是由源地址、源端口、目的地址、目的端口共同决定的,如果其中一方发生变化,则映射关系也将改变。如对称型NAT内网的客户端与外网不同的客户端发生连接时,其分配的端口号会不同,相应地映射关系也就不一样。因此,发生连接时NAT会为不同的目标节点分配新的端口号,这与其先前在服务器上建立映射关系时使用的端口号不同,发送方无法得知向接收方发送数据包时NAT所分配的新端口号,因此也就不能完成连接。正是由于对称型NAT相对于锥型NAT映射关系要复杂得多,因而其安全性更高[8-10],更适合对安全性要求高的企业使用。
本文是在对目前使用的各种NAT穿越方法认真比对后,通过对NAT及其穿越原理的细致分析研究,给出了使用预测端口的方法穿越对称型NAT。该方法将对称型NAT分为增量型NAT和随机型NAT两类。
对称型NAT对每次的连接要求为“源IP、源端口、 目标IP、目标端口”的顺序在NAT映射表中找匹配项,若没有找到完全匹配项,则按新连接对待并为其分配新端口号。对于增量型NAT,新端口号的分配原则是在前次分配的端口值上增加一个固定值进行分配,如前次分配的端口号为P,则新端口号就为P1=P+n(n为整数)。对于随机型NAT,新端口号的分配原则是在前次分配的端口值上增加一个在一定端口(1024,65535)范围内的随机量进行分配,如前次分配的端口号为P,则新端口号就为P1=P+n(n为某一范围内随机整数)。客户端获取新的端口后连接过程类似于STUN 协议,如NAT A、NAT B都为对称型NAT, 客户端A与客户端B通信的具体穿越步骤如下(可参见图2):
(1)客户端A(或B)向具有两个IP地址IP1、IP2,两个端口Prot1、Prot2的服务器S依次发起4次连接,即IP1: Prot1、IP1: Prot2、IP2: Prot1、 IP2: Prot2,每次连接都能从服务器S返回的数据包中找到客户端A(或B)经过NAT转换后的映射关系。比对客户端A(或B)相邻两次连接请求所分配的端口号,计算端口的增量,如果每次的增量都相同,则获得固定增量,转步骤(2),如果增量不同,则为随机增量,转步骤(6)。
(2)客户端A将从NAT A上获得的增量发送给服务器S并通知S与B的连接请求,服务器S通知客户端A、B的连接请求,并发送客户端A的预测地址给客户端B。
(3)客户端B通过端口映射,把从NAT B上得到的预测增量由服务器S发送给A,客户端A向B的预测地址发送连接请求,报文穿越NAT A建立来自B的映射规则。
(4)由于客户端B向客户端A的预测端口发送信息包前在NAT A上已经建立了映射,因而客户端B的连接请求能直接通过。
(5)客户端A获得连接请求后发送确认包,建立了客户端A与B间的直接通信,也就不再需要服务器S。
(6)NAT A对新连接端口分配是随机变化的, 两次之间的变化量为△t(△t为整数),虽然△t值都是由NAT设备通过某种方式随机选择的,但通常每次分配的端口号之间都会具有一定的函数关系或是统计上的相关性,这主要取决于具体的设备和网络环境。如客户端A发生新的连接时, NAT A为其分配新的端口号P1,假定NAT A为客户端A上次连接分配的端口号为P,则必然存在P1=P+△t,△t= f(P)。通过在多种网络条件下的测试和分析, 也证实了多数情况下存在具有某种特征的分布特性值△t。因此,可以通过其分布特性来预测△t所属范围,并对该范围端口进行试探,以实施穿越。
4.3 NAT穿越中“打洞”方的确定
若内网客户端A对应的NAT与客户端B对应的NAT类型不同时,选择由客户端A“打洞”或选择由客户端B“打洞”其穿越算法、复杂度、难度等也都不同。通过对不同类型NAT穿越中选取不同方“打洞”的实验分析,给出确定“打洞”方的方法,以降低算法的复杂度,提高穿越质量[11]。
若NAT类型一方是锥型,另一方是对称型时,由锥型一方“打洞”;若一方为完全锥型,另一方为地址受限锥型或端口受限锥型,则由完全锥型一方“打洞”;若一方为地址受限锥型,另一方为端口受限锥型,则由地址受限锥型一方“打洞”;若双方都是对称型NAT,且一方为增量型,另一方为随机型,则由增量型一方“打洞”。
对称型NAT越来越多地被应用于安全性要求较高的企业网中。本文提出的端口预测法是穿越对称型NAT很有效的方法,该方法克服了STUN无法穿越对称型NAT的缺陷,且保持了STUN方式无须改动现有的NAT设备、协议简单等特征,同时还解决了目前穿越对称型NAT方案中存在延迟和丢包的问题。提高了信息的安全性,节省了财力、物力、人力,具有很好的应用前景。
参考文献
[1] 陈明东. OpenH323网络视频会议中微量化穿越技术研究[J].计算机与现代化,2012,(2):120-123.
[2] 朱光,张云华,卢娟.基于ICE 的VOIP穿越NAT方案研究[J].计算机应用与软件,2011,28(10):222-224.
[3] 彭李超,谭兵.基于STUNT的Symmetric NAT穿越[J].微计算机应用,2010,31(10):32-35.
[4] 黄桂敏,朱晓姝.基于UDP协议穿透NAT设备的对等网络模型研究[J].计算机工程与设计,2010,31(2):317-320.
[5] ROSENBERG J, WEINBERGER J, HUITEMA C. et al.STUN-simple traversal of UDP(User Datagram Protocol) through NATs(Network Address Translators)[C]. RFC 3489.March 2003.
[6] WG M,TAKEDA Y. Symmetric NAT traversal using STUN[S].IETF, 2003.
[7] 李航,马林华.音视频穿越IP NAT技术的实现[J].通信技术,2008,41(13):65-68.
[8] 畅巨峥,汪滢,王庆辉.利用ICE实现VOIP媒体流穿越[J].计算机应用技术,2010(6):105-108.
[9] 刘娟娟,陶加祥.一种基于第三方服务器的P2P穿透NAT的实现方法[J].软件导刊,2010,9(1):121-123.
[10] 王秀欣,戚宇林,王鼎.基于NATT 协议的NAT 穿越技术的设计与实现[J].电力系统通信, 2009(4):65-68.
[11] 孙名松,段志鸣.混合式P2P网络UDP下NAT穿越方案的研究与设计[J].计算机与数字工程, 2010(4):104-107.