一种Symmetric NAT穿透的新方法

一种Symmetric NAT穿透的新方法
冯金哲;殷海兵
【摘 要】NAT(Network Address Translator)不仅解决了IP地址短缺的问题,而且也使内网主机避免了来自网络外部的攻击.但对于P2P应用来说,需要建立端到端的连接,所以说如何穿透NAT成为了P2P技术中的一个关键.通过对当前NAT穿透技术的研究,发现依靠TURN (Traversal Using Relay NAT)来实现对Symmetric NAT穿透往往存在服务器负担重、延时、丢包的问题,于是给出一种基于端口预测的NAT穿透新方法.该方法避免了依靠TURN来实现对Symmetric NAT穿透所带来的难题,大大满足了对网络安全要求高而使用对称型NAT企业的需求.%NAT(Network Address Translator) not only solves the problem of IP address shortage, but also makes the network host avoid the attacks from outside the networks.But for P2P application, it needs to establish an end-to-end connection,so how to realise NAT traversal becomes a key in P2P technology.Based on the research of current NAT traversal technology, we found that to achieve Symmetrical NAT traversal relying on TURN (Traversal Using Relay NAT) often has the problems of heavy server burden, time delay an
d packet loss.Therefore, in this paper we present a new NAT traversal method by using port prediction, the method avoids the problems brought by relying TURN to implement traversal of symmetrical NAT, and greatly satisfies the requirements of those enterprises who have high demand on network security and thus use symmetric NAT.
【期刊名称】《计算机应用与软件》
【年(卷),期】2017(034)001
【总页数】4页(P125-128)
【关键词】Symmetric NAT;TURN;P2P;NAT穿透
【作 者】冯金哲;殷海兵
【作者单位】中国计量学院信息工程学院 浙江杭州310018;中国计量学院信息工程学院 浙江杭州310018
【正文语种】中 文
【中图分类】TP393
网络地址转换[1]NAT是一个非常有名的工具,能够使IP地址在网络上重用。NAT可以将内网私有地址和端口号转换成公网地址和端口号,进而建立一个会话实现与公网主机进行通信。但是NAT只允许单方面发起连接,即内网可以作为客户端访问外网,而不能作为服务器提供服务。很明显,这与P2P的资源共享的思想所不容[2]。于是解决NAT穿透问题将是实现P2P对等服务的前提。
目前,存在多种NAT穿透的方法。一种常用的穿透方法STUN(Simple Traversal of UDP over NAT)[3]是NAT的UDP简单穿透,基于C/S架构,但不能实现Symmetric NAT的穿透;而对于Symmetric NAT穿越一般采取TURN中继方式。虽然中继服务器能够实现对Symmetric NAT的穿透,但同时也容易导致TURN服务器负担过重,引起延时、丢包现象的发生。
本文采取的NAT穿透新方法,能够成功实现对Symmetric NAT的穿透。对称型NAT被广泛应用于对安全性要求较高的交流通信中,但目前依靠中继转发的方案存在一定的缺陷。本文采取基于端口预测方法实现对Symmetric NAT的穿透,克服了依靠中继服务器穿越的缺
原味之恋陷,特别适合对网络安全要求高而使用对称型NAT的企业公司。
STUN标准中,根据NAT对IP地址和端口的映射方式[4],如图1所示,把NAT分为四类:完全锥型NAT(Full Cone NAT)、限制锥型NAT(Restricted Cone NAT)、端口限制锥型NAT(Port Restricted Cone NAT)和对称型NAT(Symmetric NAT)。
(1) 完全锥型NAT:特点是内部主机P访问外网主机时,NAT给其分配一个端口号,外网的任何主机都可以凭借这一端口号给内网主机发送UDP数据包。映射关系为P:p→A:b,任何外部主机都可以通过(A:b)发送数据到上(P:p)。
(2) 限制锥型NAT:特点是当内部主机P访问外网主机X时,NAT给其分配一个端口,主机X可以用任何端口与P通信,但外网主机不能与P通信。映射关系为P:p→A:b→X,只有来自X的数据包才能通过(A:b)发送到上(P:p)。
(3) 端口限制锥型NAT:特点是当内部主机P访问外网主机X时,NAT给其分配一个端口,主机X只能用本端口与P通信,X用其他端口或其他主机不能与P通信。映射关系为P:p→A:b→X:x,只有来自X:x的数据才能通过(A:b)发送到(P:p)上。
(4) 对称型NAT:特点是只有同一内部主机地址(P:p),并且发送到同一地址(X:x)的请求消息,NAT才会映射为相同的外部地址(A:b),返回的数据也只接受该内部主机X:x这一目的地址。映射关系为P:p→A:b→X:x;当访问(Y:y)时,映射则变为P:p→B:c→Y:y。
NAT穿透一般分为两种情况:(1) 终端A与B通信,A位于NAT后面,而B位于公网上。这种情况两者通信比较简单,只要让位于NAT后面的A终端先建立联系,NAT就不起作用了,A可以从服务器上取得B的地址,主动发起连接,B回应的数据包就可以容易地穿透NAT。(2) 如果A与B均位于NAT之后,这时候A与B的通信是否成功就与两个NAT的类型有关了。主要的实现方法是终端A与B先通过与服务器的联系,获得各自在NAT外部的地址,即IP地址和端口号;然后A与B再分别向对方的外部地址发送数据邀请包,获取自己与对方通信的外部地址,这就是所谓的“打洞”[5-7]。打洞完成后,双方就可以建立联系进行端到端的通信了。但是,当一方NAT的类型为对称型,而另一个是端口限制型NAT或对称型NAT时,将无法获取外部地址,进而邀请包也无法成功到达,也就无法穿透NAT实现两者的通信。
2.1 STUN 方法
STUN是一种Client/Server的协议,也是一种Request/Response的协议。STUN穿透NAT
实现A与B的通信方法,如图2所示。
(1) 客户端A与服务器建立联系,NAT A为其分配端口11000,服务器得到A的地址100.10.10.10:11000。
(2) 客户端B也与服务器建立联系,NAT B为其分配端口22000,服务器得到B的地址200.20.20.20:22000。这时A如果直接向B发送数据包会被NAT B丢弃,所以通过在NAT B上打一个方向为A的洞,那么A就可以向B发送数据了。
创新思维的特征
(3)服务器发起打洞的指令,客户端B向A的地址100.10.10.10:11000发送一个UDP的数据包,这个数据包被NAT A丢弃,但在NAT B上建立起了映射记录,这样NAT B就不会再丢弃来自A的数据报文了。
(4) 服务器通知客户端A可以通信了,A向客户端B发送UDP数据包,NAT B 允许数据包通过,于是A与B就实现端到端的通信了。
2.2 TURN 方法
中国武术散打功夫王争霸赛STUN的局限性在于不支持对称型NAT穿透,而一些在安全性要求较高的企业网络中,配置的NAT多是对称型NAT。所以STUN的扩展TURN[8]就出现了,TURN解决NAT的问题与STUN相似,只不过STUN穿透方法得到的地址是出口NAT上的外部地址,而TURN方法得到的地址为TURN服务器上的公网地址。但负载比较大时,利用TURN方式会引起服务器负担过重,出现丢包和延时的现象。
2.3 NAT穿透新方法
针对STUN存在不能实现对Symmetric NAT穿透的局限性,以及TURN方式存在数据包延迟和丢包的缺陷。本文给出了一个新的方法,此方法成功实现了对Symmetric NAT的穿透。此方法的实现思路如图3所示。具体分为三个阶段。
2.3.1 第一阶段
终端A访问服务器C和D确定NAT类型。
(1) 终端A首先和服务器C建立联系,服务器C分析NAT A映射的端口号。
刘爱勤
(2) 服务器C向终端A传递(1)得到的端口号。
(3) 紧接着,终端A向服务器D发送一个数据包。这个数据包中包含了(1)中分析得到的端口号信息。同样的方式,服务器D也分析了NAT A映射的端口号并记录下来。服务器D根据比较这两个端口号的异同,可得出NAT A的类型。若两个端口相同,则NAT A属于锥型NAT;否则,属于对称型NAT。
2.3.2 第二阶段
金冠涂料这个阶段里,终端B采用第一阶段一样的方式,分别访问服务器C和D。
关于加快推进生态文明建设的意见
(1) 终端B首先访问服务器C,然后,服务器C分析得到NAT B的映射端口号。
(2) 服务器C把(1)中得到的端口号回应给终端B。
(3) 终端B向服务器D发送数据包。数据包中包含了(1)中分析得到的端口号信息。服务器D同样分析了NAT B映射的端口号并记录下来。服务器D根据比较两个端口的异同,得出NAT B的类型,若两个端口一致,则NAT B属于锥型NAT;否则为对称型NAT。
2.3.3 第三阶段
这一阶段里,对端口进行预测。假设在第一、二阶段检测得到的NAT A和NAT B都属于对称型。很显然,通过对两次端口的观察,可以确定端口号有三种变化趋势:递增、递减或随机分配。同时,也可以对NAT如何分配端口号有了一个很准确的预测范围。对于端口号变化呈递增或递减的情况,对很多NAT而言,一般差值在1或者2[9]。而对于端口随机分配的情况,总的端口数为N=65 535-1024,根据统计学的推算,当随机猜测439次,就会保证至少有一次预测成功率达95%[10]。如果尝试猜测的次数足够多,可以说,基本能成功实现终端A与B的连接。具体实现如下:
(1) 根据第一、二阶段分析得到的信息,也即NAT A与服务器C与D的交流信息,可以预测一个合适的打洞端口。服务器D把包含预测端口号信息发送给终端B。
(2) 根据(1)中的信息,终端B尝试发送数据包。对于这样的数据包肯定会被NAT A丢弃,但NAT B却记录了此次连接的信息。

本文发布于:2024-09-23 05:30:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/214736.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务器   穿透   端口   端口号   地址   数据包
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议