您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 基于NS2的TCP拥塞控制仿真
基于NS2的TCP建模与仿真摘要:TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。本文利用NS2网络仿真器对TCP/IP中的拥塞控制与拥塞窗口,快速重传与快速恢复算法进行了仿真,使对协议中的几种机制和算法有了形象的理解。关键字:TCP/IP协议,NS2仿真,拥塞控制,快速重传,快速恢复一、引言TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。例如,TCP协议在RFC793中正式定义;RFC1122对如何检测错误和不一致性以及解决方法进行了说明;RFC1323给出了对TCP的一些扩展功能;RFC2518中重点阐述了TCP的拥塞控制机制描述了更新后避免过度拥塞的算法;RFC3168描述了对显示拥塞的报告等。据统计,当前在所有因特网的数据包中,大约有95%包的传送使用了TCP协议,因此针对TCP协议相关机制的研究很有实际意义。在TCP协议的研究中,仿真是一种有效又经济的研究方法,而且可以给人以更加形象的认识。目前的网络仿真工具主要包括两类:一是基于大型网络开发的网络仿真工具,如OPNET、GloMoSim等;二是基于小型网络开发的网络仿真工具,如NS2、COMNETIII等。大多数网络仿真工具的价格昂贵,而本文采用的NS2是一种应用广泛、影响力较大和源代码公开的免费网络模拟软件。二、网络仿真器NS2NS是NetworkSimulator的英文缩写,又称网络仿真器。它是一款开放源代码的网络模拟软件,最初由加州大学伯克利分校(UCBerkeley)开发。NS-2支持Windows、Linux、Unix、Mac以及其他支持POSIX标准的操作系统,它主要支持的操作系统是Linux系统,目前几乎支持所有主流的Linux发行版本,本文使用的是Windows+Cygwin平台。NS2是一个可扩展、易配置和可编程的事件驱动网络仿真引擎。底层的仿真引擎由C++编写,同时利用面向对象的OTCL语言作为仿真时命令和配置的接口语言。C++的特点:具有很快的运行速度,但每次改变均需要编译,较为复杂,适合处理繁琐但比较固定的工作。OTCL在运行速度上无法和C++比拟,但相对来说更加灵活,适合用来设计个人的仿真方案。C++和OTCL之间通过TCLCL工具包实现互相调用。开始问题定义需要修改源码?编写Tcl脚本执行模拟分析结果分析问题所在结果是否满意?结束修改源代码重新编译NS编译通过?调试NS不需要否是需要通过未通过需要修改源代码时的额外工作量图1NS2进行网络模拟的基本流程为了分析仿真结果,NS2提供了两种基本数据追踪能力:一是跟踪,生成“.nam”和“.tr”文件。能够将每个数据包在任何时刻的状态保存到指定文件中,记录包在队列或链路中丢弃、到达、离开等行为;二是监视,用户有选择地记录自己需要的数据,可利用Gawk、Gnuplot等工具统计发送包、接收包及丢弃包等结果进行分析。在本文的仿真中,我们没有进行源代码的修改,而是利用NS2中已有网络组建进行了仿真模拟,并利用图形界面给出了形式化的仿真结果。三、TCP协议中相关机制TCP(TransmissionControlProtocol:传输控制协议)对应于ISO/OSI模型的第四层——传输层,传输层提供从源端到目的端的“端到端”连接。通过三次握手协议进行了会话连接后,TCP进入了会话维持阶段,在该阶段TCP的一个重要功能就是流量控制和拥塞控制,它用于处理网络中不同网段间不同速率的匹配,防止网络发生拥塞,并在数据包丢失时重发,以此提供稳定可靠的网络服务。3.1拥塞控制与拥塞窗口拥塞控制室TCP协议的精髓,与流量控制只关注收发两端流量不同,拥塞控制关注整个网络的流量,是一种全局控制机制。TCP提供了一系列的检测,避免和拥塞控制的方法。最著名和常用的就是“慢启动”(slowstart)和动态拥塞窗口机制(DynamicCongestionWindow)。两者在实际应用中结合使用,系统为每个TCP连接维护两个变量:拥塞窗口(cwnd)和慢启动门限(ssthresh)。慢启动门限一般代表我们对网络容量的一个评估。在网络连接好后,初始发送的拥塞窗口为1,即第一次只能发送一个数据包,当得到该包的确认后,拥塞窗口大小翻倍,即cwnd=2,以此类推,窗口大小乘指数增长一直到慢启动门限大小,即cwnd=ssthresh。这相对于一开始就使用门限大小的窗口发送数据来说是慢启动。慢启动结束后,系统进入了所谓的“冲突避免”(Congestionavoidance)阶段,该阶段拥塞窗口呈线性增长,每次窗口大小增加1。当冲突发生时,将采取冲突控制策略,同时动态调整拥塞窗口cwnd和慢启动门限值ssthresh,如:ssthresh=ssthresh/2;谈后拥塞窗口职位1,并重新启动慢启动过程。3.2快速重传与快速恢复在TCP连接中如果收到1~2个重复的确认包iACK(表示对第i个数据的确认包),这可能是一些报文段的重新排序,但如果连续收到3个或3个以上的重复iACK,则可能是一个序列号为i的报文段丢失了。此时我们重传丢失的报文段,而无需等待定时器超时。这就是快速重传算法。接下来执行的不是慢启动算法而是拥塞控制算法,该拥塞控制算法就是快速恢复算法。这个算法的实现过程如下:1、当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。2、再收到重复的ACK时,拥塞窗口增加1。3、当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。NS2中对TCP协议中的上述几种机制都提供了支持。四、仿真过程4.1TCP慢启动算法仿真本仿真中我们创建两个节点n0、n1,并在这两个节点之间创建一条TCP连接,为了便于对操作窗口大小进行配置,我们采用命令行传参的方式运行模拟脚本。(1)编写tcl脚本在脚本中我们定义整个仿真过程,包括网络拓扑结构,tcp创建等,为了进一步绘制慢启动与非慢启动的对比图,我们还需要添加Record过程。#创建网络模拟对象setns[newSimulator]#创建模拟器对象,每个模拟必须新建一个ns模拟器#打开Trace文件记录模拟结果setnf[openout.namw]……#添加finish过程以关闭模拟器和Trace文件并启动Nam程序procfinish{}{globalnsnf$nsflush-traceclose$nfexecnamout.nam&;#&表示后台运行exit0}#创建两个节点setn0[$nsnode]setn1[$nsnode]#在两个节点间创建一条链路,用到命令行输入的参数#链路对象起点终点链路带宽链路延时队列类型$nsduplex-link$n0$n1$bandwidth$delayDropTail……#创建TCP连接settcp[$nscreate-connectionTCP/RFC793edu$n0TCPSink$n11]……#在该TCP连接上加上FTP的应用层业务数据setftp[newApplication/FTP]……#Record过程setf0[opencwndrecNoss.trw];#打开记录文件procRecord{}{;#定义记录过程globalf0tcpns;#声明全局变量setintval0.1;#设定记录间隔时间setnow[$nsnow];#获取当前ns时间setcwnd[$tcpsetcwnd_];#获取当前cwnd值puts$f0$now$cwnd;#将时间点和cwnd值记录到文件中$nsat[expr$now+$intval]Record;#定时调用记录过程}$nsat0.1Record;#ns首次调用Record过程……(2)仿真结果在仿真中我们设定带宽为1Mb,时延为100ms,窗口大小64,模拟时间5s。在startxwin窗口下输入nsslowstart.tcl1Mb100ms645,开始运行仿真,得到如下仿真图:图2(a)仿真开始图2(b)第二次发送数据包图2(c)第三次发送数据包图2(d)第n次发送需要注意的是,在NS2中提供了多个TCP代理,其中TCP/RFC793edu不支持慢启动,而TCP/Reno支持慢启动,我们对他们分别进行了仿真,并记录到不同的Trace文件中。为了对比慢启动和非慢启动,我们利用曲线图进行比较,这里我们利用NS2中的Xgraph进行绘图。图3慢启动对照曲线图通过仿真图我们可以形象的看到TCP协议慢启动的过程,在慢启动过程中,一次发送的数据包数目在慢启动开始成指数型增长,达到慢启动门限后成线性增长;而非慢启动过程在连接建立后立即大量传输数据,如此容易造成拥塞。4.2TCP快速重传和快速恢复仿真由于TCP/Reno已经实现了快速重传和快速恢复算法,因此,仿真过程采用该协议进行仿真,为了产生丢包,我们在拓扑过程中设置了一个瓶颈,因此在拓扑结构中采用了四个节点0、1、2、3,其中1、2之间网络带宽为0.5Mb,0、1之间和2、3之间网络带宽为5Mb。仿真结果如下图:图4TCP快速重传与快速恢复仿真图图5数据包丢失后进行拥塞控制效果图通过对图4、5的对比分析,我们可以形象的看到TCP在快速重传和快速恢复的过程。由于本人对NS2中的gunplot工具不熟悉,没有将数据重传的具体的收发过程绘制出来,还请老师见谅。五、总结本文利用NS2网络仿真器对TCP协议中的拥塞控制中慢启动、快速重传、快速恢复机制进行了仿真,并给出了仿真结果,使读者可以更加形象更加深入的了解TCP的这几种算法,达到了仿真的目的。其实利用NS2网络仿真器,我们不仅可以对TCP、UDP等网络协议进行仿真,还可以对路由队列管理机制,路由算法,以及无线网络、LAN、移动IP和卫星通信网络等进行仿真。而且由于它的开源性,仿真这可以自己编写相应的模块来实现自己要仿真的目标。参考文献[1]王宇,赵千川.用网络仿真软件NS2进行IP网络的仿真[J].计算机应用与软件,2003,(2):28-30[2]于斌,孙斌,温暖等.NS2与网络模拟[M].人民邮电出版社,2007[3]夏乐音,王秋光.无线传感器网络的NS2仿真[J].计算机应用与软件,2008,(2):28-30[4]W.RichardSteven著TCP/IP协议详解卷1:协议[M].机械工业出版社,2007
本文标题:基于NS2的TCP拥塞控制仿真
链接地址:https://www.777doc.com/doc-2571106 .html