APP下载

基于NS-3的卫星链路TCP仿真研究

2015-01-15刘志敏

计算机工程与应用 2015年22期
关键词:包率吞吐量控制算法

余 腾,刘志敏

北京大学 信息科学技术学院,北京 100871

1 引言

卫星通信中,关于提高卫星链路物理层的传输速率的技术已经取得了较大提高,为使链路带宽得到充分利用,使传输信息得到可靠保证,设计稳定可靠的传输层TCP的协议成为了研究重点[1]。TCP协议通过对应的拥塞控制策略来调整速率,在卫星网络链路环境下,卫星链路具有长时延、高误码率等特点,应用传统的TCP协议往往存在慢启动时间过长,丢包原因判断不准确,不能有效地利用网络带宽等问题[2]。针对卫星网络链路的特点,为改善TCP性能,国内外研究人员做了大量的研究工作,主要成果有:(1)链路层的差错控制,即在链路层通过前向纠错(FEC)或自动重传请求(ARQ)等机制来进行差错控制以减小卫星链路传输错误对TCP连接的影响[3]。(2)协议网关技术,主要是采用TCP协议欺骗技术与TCP分段技术[4]。(3)TCP协议改进与加强,指通过对TCP协议进行改进,优化相应参数,加入增强机制等来提高传输性能[5]。

上述研究成果对TCP连接性能都有相应的提高,然而相关研究中,关于如何进行TCP仿真以及如何搭建仿真平台方法研究并不多,本文以此为出发点,旨在提供一种通用灵活的卫星链路仿真方法,方便相关研究人员搭建TCP仿真平台及进行性能的评估。

在现代通信网络学科的研究中,网络仿真的作用非常重要,网络的正确性和有效性很大程度上决定于采用的仿真工具。目前在网络仿真工具的研发方面,国外已呈现出多项研究成果,如 OPNET,QualNet,GloMoSim,NCTUNS,GTNetS,OMNET++,SSFNet,JiST,Yans和NS-2[6]。但这些仿真软件还存在着众多不足。主要问题有:(1)软件内核的扩展性;(2)现实化软件的问题;(3)整合软件的问题;(4)支持虚拟化和实验床的问题;(5)灵活的跟踪和统计问题;(6)属性系统;(7)新模式问题[6]。为了解决这些不足,2006年,美国Washington大学的Thomas R.Henderson教授的小组研究一个全新的网络模拟工具NS-3,目前己经发布了最新稳定版本NS-3.19。NS-3是一款优秀的离散事件网络仿真器,且是一个完全开源的项目,由于目前NS-3是个新的网络仿真软件,国内外研究人员对NS-3进行研究的成果和报告还比较少,但NS-3语言更加统一、代码开放性好、模块集成更好的特点,必将促成NS-3成为未来的主流仿真平台之一[7]。

当前很多研究工作的网络仿真都是通过NS-2仿真软件来实现。NS-3是一款全新的网络模拟软件,并不是NS-2的升级版本,而是作为NS-2的替代者。本文将介绍利用NS-3仿真软件上搭建卫星链路仿真平台,以此建立卫星网络的TCP连接仿真,进行各TCP拥塞控制算法的分析,提供了一种基于NS-3的TCP连接的仿真方法。读者可根据此方法仿真卫星链路的TCP连接,并扩展到其他场景的TCP连接。

2 卫星通信系统模型

卫星系统通常由一个中心站及若干个远端站组成,各远端站间通过卫星链路连接。各站可外接多种用户终端设备,可支持包括话音、数据、视频等多种业务传输。由上章分析知,根据卫星链路的特性,想要充分利用链路带宽,需要采用特殊加速的方法。例如在参考文献[8]中,采用一种PEP技术来实现TCP的加速。PEP技术主要思想为:采取TCP分段技术来来实现TCP加速技术,如图1所示,即保证提供端到端的可靠性的前提下,将卫星通信系统一个TCP连接分成三段,第一段和第三段为地面段,分别是服务器与加速网关间的连接与加速网关到客户端的连接;中间段是卫星链路,连接着两个卫星加速网关;因第一段和第三段为地面网络,采用了传统的TCP协议(如TCP Reno),第二段采用特殊的TCP协议(如TCP Hybla)[8]。具体网络结构如图1所示。

图1 TCP加速的网络结构图

本文搭建仿真平台后,将通过NS-3仿真软件仿真此场景,其中在卫星链路段将仿真各类TCP协议,进行性能分析,以验证TCP Hybla是否是适合于卫星链路的TCP拥塞控制算法。

不同的TCP协议有着不同的TCP的拥塞控制算法。以常见的TCP Reno为例,其拥塞控制算法由慢启动、拥塞避免、快速重传和快速恢复四个阶段构成。根据不同场景在四个阶段设置不同的算法可衍生出各种TCP协议。本文选取11种TCP协议,分别为Reno,Hybla,Vegas,Cubic,Westwood,Veno,Highspeed,Scalable,Illinois,Htcp,YeAH。关于各TCP拥塞控制算法的详细算法,有相关文章可供读者参考,由于文章篇幅限制,本文不再详述。仅简要介绍TCP Hybla算法。

Hybla的思想是将传输速率独立于时延差异,通过拥塞控制补偿参数来补偿长时延对链路传输速率的下降。Hybla先定义了旨在模拟的参考连接的往返时延RTT0。

ρ=RTT/RTT0

慢启动和拥塞避免算法公式如下式所示[9]:

慢启动:W′i+1=Wi'+2ρ-1

拥塞避免:W′i+1=Wi'+ρ2/Wi'

其中W为拥塞窗口。当ρ接近于1时,说明链路实际传播时延RTT与RTT0接近,网络拥塞的可能性最低,不需要补偿传输速率。RTT离RTT0偏差随ρ的增大而增大,即通过拥塞窗口快速增长使传输速率迅速得到补偿,但此时吞吐量虽迅速提高,也将导致链路中有突发的大通信量,实际运用中往往根据链路的实际信息预先调整RTT0。

3 NS-3仿真平台

3.1 仿真环境的建立

为搭建图1中的仿真环境,本文通过在VMware Workstation虚拟机上安装Linux操作系统 fedora14,内核版本为2.6.32.59,在fedora下安装 NS-3.19,作为仿真工具。利用NS-3构建如图2所示的网络拓扑仿真环境。

图2 仿真环境示意图

由第2章分析可知,整个连接分为1段卫星连接及2段以太网连接。根据以太网的链路特性,其中两段以太网的链路相关参数设置为带宽BW=10 Mb/s,延时delay=1 ns。中间两个路由模拟卫星网络中的两个站点,服务器和客户端模拟网络中两个终端设备。模拟通过服务器向客户端持续传输TCP报文的场景,其中包大小、传输速率及卫星链路的相关参数将根据不同需求设定,在客户端接收端口统计吞吐量,每个TCP连接持续10分钟,统计10分钟TCP连接的吞吐量。

3.2 使用linux内核中的TCP协议

NS-3目前只提供TCP Tahoe、TCP Reno、TCP Newreno和TCP Westwood四种TCP拥塞控制算法,并不能满足仿真要求。考虑到NS-3是基于C++语言编写的开源软件,而linux内核中有各种TCP拥塞控制算法的源码,所以本文一项重要研究工作是实现在NS-3中使用linux内核源码中的TCP拥塞控制算法。

要使NS-3使用linux内核源码,首先得安装NSC,NSC(Network Simulation Cradle)是一个用于包装实际网络代码模拟器。下面主要介绍如何安装NSC,将NS-3与NSC相结合,以及解决此过程中存在的bug的方法。

按照ns-3-tutorial(NS-3官网教程)的安装方法,执行完命令$./bake.py build,安装好ns-3后,需手动安装NSC,安装步骤如下:

ns-3自从3.16版本后需要手动下载nsc了,执行

下载nsc源码。下载后执行$./waf configure可得到如下结果:

NetworkSimulationCradle:not enabled(NSC library liblinux2.6.26.so is missing:NSC has not been built?)

解决此问题的方法是执行$python scons.py linux-2.6.26

执行成功后,如果NSC还没有安装上就需要手动添加NSC的路径了,执行命令为:

可看到显示:

Network Simulation Cradle:enabled

再次运行$./test.py-c core,测试模块,会出现错误:

CRASH:TestSuite ns3-tcp-interoperability

CRASH:TestSuite ns3-tcp-cwnd

CRASH:TestSuite ns3-tcp-loss

这是NS-3目前存在的bug,即安装过程无法自动检测NSC三个模块crash的问题。原因是NSC liblinux libraries需要一个可执行的堆栈。因本文使用的是linux-2.6.26内核源码,执行如下命令:

结果为PASS TestSuite ns3-tcp-interoperability

表示NSC已安装成功,此时就可利用NSC中linux kernel中的相关模块了。本文目的是调用linux内核中的TCP拥塞控制算法,通过调研相关TCP协议及分析内核的源码,本文挑选出了11种TCP拥塞算法作为仿真对象。

3.3 仿真主要流程

本节主要介绍仿真主要流程及部分关键代码。

(1)节点

节点代表着网络中的一个点,可以是一台主机、服务器或路由器。本文仿真环境需要定义四个节点。

(2)配置物理层和信道

使用Helper设置链路属性,如本文设置以太网信道速率为10 Mb/s,时延为1 ns。同样方法设置卫星链路参数。

(3)安装网络协议栈

待node、device和channel创建完成后,将用Internet-Stack拓扑来添加栈。在此处设置TCP拥塞控制算法。

(4)Ipv4 地址分配

使用Ipv4AddressHelper给各端口分配Ipv4地址,以dev1(服务器端)为例。

(5)设置卫星链路丢包率

Ptrem1=CreateObjectWithAttributes("ErrorRate",DoubleValue(0.05),"ErrorUnit",Enum-Value(RateErrorModel::ERROR_UNIT_PACKET));//设置丢包率为5%

(6)应用程序(创建TCP发送和接收)

①TCP发送

②TCP接收

(7)计算吞吐量

(8)Simulator模拟

4 仿真结果与分析

4.1 仿真结果的正确性确定

由于本文为仿真环境,应验证仿真环境的有效性和仿真结果的正确性,参考文献[10]和[11]有类似的仿真环境,如参考文献[10]仿真了瓶颈链路BW=20 Kb/s,丢包率为5%和8%的两组数据,比较了Cubic、Veno、Hybla和Reno四种拥塞控制算法。本文仿真此场景,得到的仿真结果为 Cubic(15.712 Kb/s)>Veno(14.231 Kb/s)>Hybla(13.629Kb/s)>Reno(11.794Kb/s)和 Cubic(13.287Kb/s)>Veno(11.822 Kb/s)>Hybla(9.785 Kb/s)>Reno(9.199 Kb/s),与参考文献[10]仿真结果相符;文献[11]中,一场景链路带宽为BW=1 Mb/s,RTT=0.25 s,采用TCP Cubic传送文件大小为500 KB的时间为9 s,本平台搭建相同环境,仿真结果与之相同。综上,认为仿真本平台所得仿真结果是正确可靠的。

4.2 吞吐量随丢包率变化仿真结果

保留时延中如传播时延、消息处理时延等固定成分,将时延固定在270 ms。分配卫星链路带宽BW=2 Mb/s,观察丢包率从0.01%增加到10%的过程中,各TCP拥塞控制算法的吞吐量随丢包率变化的示意图。

由图3可知,在分配链路带宽BW=2 Mb/s,卫星链路时延为270 ms的典型卫星链路情形下,各TCP改进拥塞算法相对传统TCP Reno算法,吞吐量都有提高。其中TCP Hybla协议能显著提高吞吐量大小,其吞吐量远大于其他TCP拥塞控制算法。

图3 固定带宽和时延,吞吐量随丢包率变化

4.3 吞吐量随时延变化仿真结果

分配卫星链路带宽BW=2 Mb/s。通常卫星链路误码率为10-6[12],为了同时比较取误码率增大时吞吐量的变化,分别设置误码率为10-6和10-5,由丢包率公式PLR=1-(1-Pb)L知,卫星链路的丢包率为PLR=0.05%和0.5%(设置TCP报文包长度L=520 B)。设置卫星链路丢包率为0.05%和0.5%,观察各TCP拥塞控制算法的吞吐量随时延变化的示意图。

由图4和图5可知,在低丢包率情形下,如丢包率为0.05%时,在时延300 ms内,TCP Illinois的吞吐量最大,时延大于300 ms时Htcp吞吐量最大;其次是Hybla和Cubic。但TCP Hybla算法受时延影响敏感,如在时延小于350 ms和大于450 ms时,吞吐量与Cubic,Illinois不相上下,但当时延为400 ms时,吞吐量显著下降,说明发送窗口对时延的过度补偿导致了较频繁的网络拥塞[10]。当丢包率数值提高时,TCP Hybla算法优势开始体现,如当丢包率为0.5%时,TCP Hybla算法吞吐量显著大于其他TCP拥塞算法,虽然在时延为400 ms时吞吐量有下降,但仍优于其他算法。

图4 带宽2 Mb/s,丢包率0.05%,吞吐量随时延变化

图5 带宽2 Mb/s,丢包率0.5%,吞吐量随时延变化

4.4 吞吐量随带宽变化的仿真结果

设置时延为270 ms,分别设置链路丢包率为0.05%和0.5%,从分配卫星链路带宽BW=120 Kb/s增加到BW=6 Mb/s,观察各TCP拥塞控制算法的吞吐量随带宽变化的情况。

由图6和图7可知:

(1)在低丢包率情形下,如丢包率为0.05%时,在分配带宽小于3 Mb/s时,TCP Hybla和Illinois吞吐量最大,其次是Htcp,但当带宽继续增大时,如带宽大于3 Mb/s时,其余算法的吞吐量随带宽增加而增大的趋势已不明显。而Hybla的吞吐量则继续增大。除Hybla外,TCP拥塞控制算法的吞吐量最后都会趋于稳定,不再随带宽的增大而增大,此时影响吞吐量的因素为丢包率,不是带宽。

图6 时延270 ms,丢包率0.05%,吞吐量随带宽变化

图7 时延270 ms,丢包率0.5%,吞吐量随带宽变化

(2)在丢包率更大时,如丢包率为0.5%,TCP拥塞控制算法的吞吐量会更快趋于稳定,且TCP Hybla算法吞吐量显著大于其他TCP拥塞控制算法,并且在带宽1 Mb/s时,除TCP Hybla外,其他TCP拥塞控制算法吞吐量已经不再随带宽增加而增大。

4.5 仿真结论

综上可知,在卫星链路中,根据卫星链路特性选择取适合于该特性的TCP协议比采用传统TCP协议具有更高的传输效率。具有时延独立性的TCP Hybla算法是目前最适合卫星链路的TCP算法,而且在误码率增加和随带宽时延积的增加的情况下,性能优势更显著,但TCP Hybla基于“时延补偿”的优化思想,受参数RTT0的影响。在进一步的研究中,可通过调整RTT0值使Hybla对卫星信道具有更佳优化能力。仿真的结果证明文献[8]提出的对卫星部署TCP连接是有效的,同样也验证了本文所提供的仿真方法及搭建的仿真平台是正确有效的。

5 结束语

本文以卫星通信系统TCP加速相关工作的研究为基础,通过在NS-3仿真软件上搭建卫星链路仿真场景,进行卫星链路的TCP拥塞控制算法仿真。同时本文实现将NS-3与linux内核模块结合,介绍其实现方法,并针对此过程中出现的BUG,给出了解决方法。根据参考文献[8]中提出的TCP加速场景,仿真了linux内核中的11种TCP拥塞控制算法。仿真结果证明了本仿真平台的灵活性、有效性和正确性。本文的研究成果是提供了一种灵活、可靠的基于NS-3的TCP仿真方法,方便研究人员进行相关科研工作。

[1]Akyildiz I,Morabito G,Palazzo S.Research issues for transport protocols in satellite IP networks[J].IEEE Personal Communications,2001,8(3):44-48.

[2]王健,王海涛.卫星通信网中TCP加速技术研究[J].科学技术与工程,2009,9(11):3148-3152.

[3]杨征,吴玲达.卫星链路上TCP改进研究综述[C]//2005中国计算机大会,2005.

[4]周兆清,陈立军.TCP/IP协议在卫星链路上的应用研究[J].无线电工程,2006,36(1):47-50.

[5]伍文平,肖云,江涛,等.一种基于卫星信道的TCP数据加速方法[J].信息技术,2013(8):105-106.

[6]常秀丽.基于NS-3的Ad Hoc网络路由协议研究与仿真[D].哈尔滨:哈尔滨工业大学,2010.

[7]张登银.新型网络模拟器NS-3研究[J].计算机技术与发展,2009,19(11):80-84.

[8]Alain Pirovano1,Fabien Garcia1,A new survey on improving TCP performances over geostationary[J].Network and Communication Technologies,2013,2(1):1-18.

[9]Caini C,Firrincieli R.TCP Hybla:a TCP enhancement for heterogeneous networks[J].International Journal of Satellite Communications and Networking,2004,22(5):547-566.

[10]段薇,闻翔,向东蕾,等.窄带无线信道的TCP优化性能研究[J].计算机工程,2010,36(13):99-101.

[11]刘亚娟.同步卫星中继网络TCP拥塞控制算法研究[D].重庆:重庆大学,2013.

[12]刁龙龙.卫星网络链路仿真系统的研究与实现[D].长沙:国防科学技术大学,2006.

[13]Marchese M,Rossi M,Petra M G.performance enhancing transport architecture for satellite communications[J].IEEE Journal on Selected Areas in Communications,2004,22(2):320-332.

[14]任勇毛,唐海娜,李俊,等.高速网络TCP改进协议NS2仿真性能比较[J].计算机工程,2009,35(2):6-9.

[15]张亚生,彭华,谷聚娟,等.卫星TCP加速技术研究[J].无线电通信技术,2010,36(5):29-31.

[16]叶青娣.卫星链路中TCP传输性能改进与仿真[J].现代电子技术,2010,33(11):51-54.

猜你喜欢

包率吞吐量控制算法
支持向量机的船舶网络丢包率预测数学模型
一种基于喷泉码的异构网络发包算法*
电磁线叠包率控制工艺研究
基于ARM+FPGA的模块化同步控制算法研究
2017年3月长三角地区主要港口吞吐量
2016年10月长三角地区主要港口吞吐量
2016年11月长三角地区主要港口吞吐量
TCN 协议分析装置丢包率研究
一种优化的基于ARM Cortex-M3电池组均衡控制算法应用
2014年1月长三角地区主要港口吞吐量