一种基于NAT穿越的优化STUN算法

2019-09-05 05:47刘继明
西安邮电大学学报 2019年3期
关键词:端口时延客户端

刘继明, 马 乐, 李 波

(西安邮电大学 通信与信息工程学院, 陕西 西安 710121)

近年来,P2P(peer-to-peer)技术因其拓展性强、隐私性好、性能高等优势成为通信网络领域研究与发展的热点[1]。P2P技术广泛存在于网络地址转换(network address translation,NAT)设备中,NAT技术缓解了IPv4资源短缺的问题,避免了来自网络外部的攻击,提高了内网的安全性[2]。但是,NAT技术也改变了内部网络主机与外部网络主机之间通信的拓扑结构,给P2P通信带来了巨大的影响[3]。为了能充分发挥P2P通信的积极作用,必须先实现NAT穿越[4],即位于专用网络中的主机可以通过它们之间连接的NAT路由器直接传输信息。

目前,STUN技术是实现NAT穿越的非常重要和广泛使用的技术之一[5]。根据STUN技术,NAT设备的类型可以分为受限圆锥型NAT、完全圆锥型NAT、端口受限圆锥型NAT和对称型NAT[6-7]等4种类型。STUN技术允许NAT后的客户端查出自己位于哪种类型的NAT之后以及自己的公网地址[8],从而使得两个同时处于NAT之后的客户端之间可以建立P2P通信。

常见的建立P2P通信的STUN算法有反向连接算法和UDP打洞算法[9-10]。反向连接算法是针对通信双方只有一方连接NAT的情况下所使用的算法,该算法允许计算机从NAT内部主动向外部发送请求获取外部地址信息,从而与外部计算机设备建立连接[11]。UDP打洞算法针对通信双方均设置在不同类型的NAT之后,以中间服务器作为媒介来完成NAT穿越,实现P2P通信[12]。

不同的STUN算法各有优缺点,反向连接算法设计简单,实现方便,但是在实际应用中局限性较高,并且需要双方发送多项请求才能建立P2P通信,建立通信过程中吞吐量较低[13]。UDP打洞算法在实际应用中适应性强,但是在建立P2P通信过程中需要多次与中间服务器建立请求连接,复杂度较高,等待时延过长[14-15]。为提高穿越等待时延,本文在总结两种算法优点的基础上,提出了一种优化穿越性能的STUN算法。在该算法中,客户端向STUN服务器发送绑定请求,根据获得的返回信息计算出端口分配间距,然后利用得到的分配间距提前计算出需要分配的实际传输的端口号。并搭建优化算法的NAT穿越模拟测试平台,以验证本文算法提高端口分配的准确性有效性,以及UDP穿越NAT时的性能。

1 传统的STUN算法

1.1 NAT的类型检测

STUN技术可以用来在客户端和服务器之间的路径上发现NAT的类型,并尝试通过一个结构化的请求和响应序列来发现NAT的类型[16]。STUN技术测试设备NAT的流程如下。

步骤1 客户端利用UDP协议向STUN服务器发送一个Binding Request消息,发送地址为STUN服务器IP1的端口port1端口。STUN服务器获取该UDP包的源IP地址和端口号,将获取的地址信息写入该UDP包中并返回给客户端。在一定时长内,如果客户端未收到STUN服务器返回的数据包,说明该UDP通信链接受到阻塞,此时NAT不支持外部数据向内部传输。如果客户端收到STUN服务器返回的数据包,那么该客户端便可获取到自身对应于NAT的外部IP地址和端口号。然后,客户端将获取的IP地址和端口号与其初始的IP地址和端口号作比较。如果二者相同,可以判定客户端处于公网中;如果不同,则说明存在NAT,系统进行步骤2的操作。

步骤2 客户端利用UDP协议向STUN服务器发送一个Binding Request消息,发送地址为STUN服务器的IP1,STUN服务器收到UDP请求包后,通过另外一个地址IP2将UDP包返回给客户端。如果客户端收到返回的UDP包,说明其处于完全圆锥型NAT之后;如果没有收到,那么系统接着进行步骤3的操作。

步骤3 客户端利用UDP协议向STUN服务器发送一个Binding Request消息,发送地址为STUN服务器IP2的端口port2,STUN服务器通过UDP请求包后获取该UDP包的源IP地址和端口号,将获取的地址信息写入该UDP包中,然后通过自己的地址IP2的端口port2把此包返回给客户端。和步骤1相同,客户端可以收到这个返回的UDP包。如果收到的地址信息与发出的地址信息相同,说明这个NAT是圆锥型NAT,否则是对称型NAT。如果此NAT是圆锥型NAT,继续进行下述步骤4。

步骤4 客户端利用UDP协议向STUN服务器发送一个Binding Request消息,发送地址为STUN服务器地址IP2的端口port2。STUN服务器用地址IP2和端口port3将UDP包返回给客户端。如果客户端可以收到返回的UDP包,则说明当地址IP相同且端口号不同时,该NAT也允许UDP包传输,此时NAT为受限圆锥型NAT;如果客户端没有收到UDP包,说明是端口受限圆锥型NAT。

1.2 STUN算法

考虑到通信双方主机的网络环境存在多种情况,可能导致同时处于不同NAT之后的两个客户端之间无法建立UDP通信。而STUN算法可以很好地实现NAT的穿越,建立P2P通信。STUN算法的流程如图1所示。

图1 STUN算法流程

如果终端A位于NAT A之后,终端B位于NAT B之后。终端B通过UDP包向STUN服务器发送Binding Request请求登录包,STUN服务器收到该UDP包后向终端B返回UDP响应请求包,告知终端B其在NAT B上的地址信息,终端B将其通过STUN服务器获得的地址信息通过UDP包发送给终端A。终端A收到终端B发来的消息后,依据UDP协议向STUN服务器发送Binding Request请求登录包,当STUN服务器收到终端A发来的UDP包后,STUN服务器生成响应请求包,并将其发送给终端A告知其在NAT A上的地址信息,终端A也将其通过STUN服务器获得的地址信息通过UDP包发送给终端B。发起会话方终端B和会话接收方终端A之间由此可以建立P2P通信。

2 优化的STUN算法设计

2.1 优化的STUN算法

在传统的STUN算法中,通信双方需要多次与中间服务器建立请求连接,来获取自己在所处NAT设备上的IP地址与端口号。所建立P2P通信复杂度较高,等待时延过长,传输数据的吞吐量不高。

为了有效提高端口分配的准备性,避免客户端多次向服务器发送请求消息来获取端口号引起的时延,本文提出了一种优化穿越性能的STUN算法。算法的主要思想是利用客户端向STUN服务器发送UDP绑定请求,根据返回信息计算出端口分配间距,然后利用分配间距提前计算出需要分配的实际传输的端口号。外网终端Client2与内网终端Client1建立连接,其通信的流程如图2所示,优化STUN算法的设计原理如下。

图2 优化的STUN算法流程

步骤5 客户端Client1和Client2向目的端对等结点的目的地址及端口预测号发送连接用的数据包,从而建立起P2P连接。

2.2 STUN服务器和客户端模块搭建

在PC端的Linux环境下搭建基于优化算法的STUN服务器,以实现NAT穿越并验证优化STUN算法的有效性。搭建过程按照安装必须的库文件,下载编译,开放端口,启动服务器等4个步骤完成。

在PC端的Windows环境下安装客户端模块Iperf,在命令提示符中进入Iperf安装文件夹,输入iperf命令运行Iperf终端,使用命令行#iperf -u -s -p7000 -i1设置PC1 端为客户端的数据接收端,其中-u表示PC2端传送模式为UDP包,-s表示将PC1端设为数据接收端,-p表示将端口号设为7000。然后使用命令行#iperf -u -c192.168.1.102 -b 100m -t -p7000 -i1设置PC2端为客户端的数据发送端,其中-u表示PC2端传送模式为UDP包,-c表示将PC2设置为数据发送端,后面写入服务器端的IP地址,-b表示UDP模式使用的带宽为100M,-t表示设置传输的总时间,-p表示设置端口号为7000,与接收端的监听端口一致。

将基于优化算法搭建的STUN服务器成功开启,并将客户端的数据发送端和数据接收端设置完成之后,发送端开启灌包模式,向接收端连续发送UDP数据包,客户端的接收端和发送端界面显示如图3和图4所示。客户端界面的显示表明UDP数据包可以成功穿越NAT,且丢包率和时延都相对较小。

图3 客户端数据接收界面

图4 客户端数据发送界面

3 结果验证分析

3.1 测试环境

为了验证优化的STUN算法的性能,根据该方案搭建网络系统,将802.11ac作为AP设备,PC端均以网线直连的方式接入AP设备,以减少外部网络干扰,构建的网络测试拓扑结构如图5所示。

图5 网络测试拓扑图

图中,将AP一端用网线连接PC1端,登录管理员界面配置好参数后点击Start开启AP设备,安装SecureCRT8.3.exe并设置AP的传输速率、带宽、中心频率及信道值等参数。将AP另一端用射频线与网卡直连插入PC2端的USB端口,通过去耦合的方式建立网络连接,以此将外部网络的干扰降至最低,保证了实验的可靠性。 在PC端的Windows环境下打开Iperf建立PC1端和PC2端之间的连接。在信号接收端PC2端安装WirelessMon信号强度监测软件,该软件用来监测出接收信号强度,以确保实验中信号强度保持不变,避免因信号强度增强或减弱而引起实验数据传输时的失真。

3.2 测试结果分析

设置AP的传输速率为最高,带宽设为40MHz,中心频率设置默认为5.8GHz,信道值设置默认为6,在Iperf的控制台上配置传输数据脚本和测试参数并建立两台PC端的路径连接。当WirelessMon信号强度监测软件监测出接收信号强度为-38dBm时,开始进行时延和吞吐量的测试。

分别对反向连接算法,UDP打洞算法和优化的STUN算法进行10次数据传输测试,图6和图7是用3种算法测出的通信双方建立P2P连接所需的时延和传输数据吞吐量的数据对比结果。

将3种算法分别进行10次测试后,对测试结果参数取平均值进行对比分析,如表1所示。

根据图6、图7和表1的数据结果显示,在环境变量相同的情况下,相对于传统的STUN算法而言,通信双方用优化的STUN算法建立P2P连接所需的平均时延缩短了近20.96%,传输数据的吞吐量提升了近34.05%。综合以上结果来看,优化的STUN算法可以有效提升UDP穿越NAT时的性能。

图6 时延的数据对比

图7 吞吐量的数据对比

算法平均吞吐量/Mbps平均时延/s反向连接算法212.282.077 7UDP打洞算法228.242.246 8优化的STUN算法288.781.370 2

4 结论

针对UDP简单穿越NAT过程提出了一种优化穿越性能的STUN算法。该算法根据客户端向STUN服务器发送UDP绑定请求所返回信息,计算出端口分配间距,利用分配间距提前计算出需要分配的实际传输的端口号,实现了NAT穿越。结合该算法,通过搭建STUN服务器和客户端系统进行数据包传输性能测试。结果表明,优化的STUN算法与传统的STUN算法相比,有效提升了UDP穿越NAT时的性能,使得通信双方建立P2P连接更加快速高效。因此,该优化穿越性能的STUN算法在P2P通信技术实际应用中具有一定的参考价值。

猜你喜欢
端口时延客户端
一种有源二端口网络参数计算方法
一种端口故障的解决方案
5G承载网部署满足uRLLC业务时延要求的研究
多按键情况下,单片机端口不足的解决方法
如何看待传统媒体新闻客户端的“断舍离”?
基于GCC-nearest时延估计的室内声源定位
VoLTE呼叫端到端接通时延分布分析
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路