TCP及基于NS2的模拟_第1页
TCP及基于NS2的模拟_第2页
TCP及基于NS2的模拟_第3页
TCP及基于NS2的模拟_第4页
TCP及基于NS2的模拟_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TCP及基于NS2的模拟武汉科技大学计算机科学与技术学院2008-3-9内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介TCP(TransmissionControlProtocol)TCP特点信息包的转换端到端可靠的,能够传递信息流其可靠性通过ACK来体现流控制:有效地利用带宽

IP协议提供不可靠、无连接和尽力投递的服务,构成了因特网数据传输的基础;

TCP协议(传输控制协议--TransmissionControlProtocol)在IP协议提供的服务基础上,TCP协议软件增加了确认-重发、滑动窗口和复用/解复用等机制,提供面向连接的、可靠的、流投递服务。内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介TCP流量控制TCP

是一个变化的窗口协议假设窗口大小为n,不用接收到确认信息就能发出n比特的信息当数据确认后,窗口向前滑动每个信息包都占据一个窗口的大小指示接受者有的字节数最初的TCP发送占据完整的窗口拥塞控制现在能够限制这些问题流量控制窗口每个RTT(Round-TripTime)有W个包裹丢失的包裹通过丢失的ACK来检测RTT时间时间源目的地12W12W12WdataACKs12W接收方流量控制避免超载接收通过接收方设置awnd:

接收窗口

网络流量控制避免网络超载通过发送方设置推断网络有效功率cwnd:

拥塞窗口设置

w=min(cwnd,awnd)ssthresh:缓慢启动的开端TCP流量控制窗口LoadLoadThroughputDelaykneecliffcongestioncollapsepacketloss接收方流量控制对于每个ACK接收方都通知awndawnd窗口当接收数据并确认后关闭当读取数据时打开TCPreceiver:toavoidbufferoverflowThereceiveradvertisesawindowsizeTCPsender:maxwindowthatcanbesendDatafromIPApplicationProcessSpareroomTCPdatainbuffer流量控制窗口:发送方发送但不确认尚未发送窗口下一个被发送发送并确认确认但不转交给用户尚未确认接收缓冲器窗口流量控制窗口:接收方新建应用层内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介拥塞——超过网络处理能力的通信量

网络产生拥塞的根本原因在用户(或叫端系统)提供给网络的负载(load)大于资源容量和处理能力(overload)。表现为数据包时延增加、丢弃概率增大、上层应用系统性能下降等。拥塞产生的三个直接原因是:⑴存储空间不足。(主要路由器缓存空间不足引起)⑵带宽容量不足。⑶路由器处理速度和链路数据速度不匹配。信息包裹丢失重传吞吐量减少拥塞崩溃的原因不必要的重传信息包未送达或不能用的信息包超载后拥塞还将产生吞吐量负载拥塞的表现拥塞崩溃ATM网络中包的重传造成的结果,其中很少或没有通信量成功地到达目的地。通常在工作效率低下或缓存能力不足的路由器与差的包丢弃或ABR拥塞反馈机制结合组成的网络中发生。

拥塞现象

当网络的负载较小时,吞吐量和负载基本上是线性关系,当负载超过膝点(Knee)时,吞吐量增长缓慢,延迟增长,当负载超过崖点(Cliff)时,吞吐量急剧下降,延迟急剧上升。如图所示:KneeCliffThroughput/delayLoad内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介TCP拥塞控制的四个阶段慢启动阶段拥塞避免阶段快速重传快速恢复阶段当建立新的链接之后,先设置cwnd=1之后每接收一个ACK,就将cwnd加1

cwndcwnd+1直到一个包裹丢失被检测出来,cwnd按指数增长才会停止。此时,

ssthresh=cwnd/2慢启动datapacketACKreceiversender1RTTcwnd12345678cwndcwnd+1(foreachACK)慢启动拥塞窗口的大小增长迅速当cwnd>=ssthresh时,TCP放慢cwnd的增长ACKforsegment1segment1cwnd=1cwnd=2segment2segment3ACKforsegments2+3cwnd=4segment4segment5segment6segment7ACKforsegments4+5+6+7cwnd=8慢启动例子慢启动时间线cwnd>=ssthresh8

慢启动算法在初始化连接方面很有效,但当拥塞发生时,cwnd的指数增长将加重拥塞,而且网络从拥塞中回复是需要很长时间的,所以设计了拥塞避免阶段。拥塞避免

包裹丢失后,慢启动的又恢复成cwnd=1之后每成功接收一个ACK:

cwndcwnd+1/cwnd当发现超时或收到三个相同的ACK确认时,网络即发生拥塞,此时进入拥塞避免阶段。

ssthresh=cwnd/2

如果超时重传,cwnd=1个最大数据段长度。cwnd1231RTT4datapacketACKcwndcwnd+1(foreachcwndACKS)

receiversender拥塞避免

Assumethatssthresh=8Roundtrip

timesCwnd(insegments)ssthresh慢启动/拥塞避免例子当一个连接被建立起来时,发送方将拥塞窗口初始化为当前使用的最大数据段长度,用户发送速率为:min{cwnd,awnd}。每一批被确认的长度都会使拥塞窗口加倍,直至发生超时或达到接受方窗口大小。当一次超时发生时,阈值被设置为当前拥塞窗口的一半,而拥塞窗口被重置为一个最大数据段。当增长到阈值时,从这个点开始线性增长。如果不再发生超时,将到达接受方的窗口大小。在这个点上将停止增长。只要不发生超时,拥塞窗口保持不变。慢启动和拥塞避免拥塞窗口cwndssthresh=16指数规律增长cwnd<ssthresh线性规律增长发生超时更新后的ssthresh=12进入拥塞避免(>=)进入拥塞避免传送次数快速重传和快速恢复快速重传:假设接收方收到一个乱序的有丢包的报文序列,只要发送方窗口不空,而且RTO没发生超时,那么发送方将继续传输不用等待收到确认。快速恢复:

Tahoe中,流控窗口是冻结的,即只有经过一个RTT时间,才有可能传输新的分组。也就是当重传分组从发出到ACK返回发送端的这段时间内,从源端到目的地的TCP管道是完全清空的,途径的路由器是空闲也有可能。为防止这样的现象发生,当发送端收到一定数量的重复ACK时进入“快速恢复”阶段。内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介TCP流量控制算法TCPTahoe:是TCP的早期版本。包括3个最从本的拥塞控制算法:“慢启动”、“拥塞避免”和“快速重传”。“快速重传”根据3个重复的应答报文来判断报文的丢失减少了超时重传的发生。TCPReno。Reno在Tahoe的基础上增加了“快速恢复”。“快速恢复”使用“管子”模型的“报文守恒”特性。发送方每收到一个重复的应答。就认为已经有一个报文离开网络。于是将发送方的拥塞窗口加1。TCPNewReno。NewReo对Reno中“快速恢复”算法进行了补充。它考虑了一个发送窗口内多个报文丢失的情况。在“快速恢复”算法中。发送方收到一个不重复的应答后就退出“快速恢复”状态。而在NewReno中。只有当所有报文都被应答后才退出“快速恢复”状态。TCPSACK。SACK也关注一个窗口内多个报文的丢失。它使用“选择性重复”(selectiverepeat)策略。TCPVegas。Vegas通过改用RTT的变化判断网络情况,能更好的预测网络带宽的使用情况,对小缓存的适应性强,效率也很好。内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介网络研究的三类方法分析方法模型分析、协议分析通用表达式、集合论、概率分析方法实验方法网络实验床(testbed)实验室测试网实际网络、小规模试验网模拟方法虚拟网络实验床(Virtualnetworktestbed)--仿真软件主流仿真软件OPNETNS-2MATLABSPWQualNet/GloMoSim

其中只有NS-2是免费开源软件,其他都是商业软件,价格不菲。主流仿真软件比较软件条目OPNETNS-2MATLABSPWQualNet/GloMoSim界面友好性GUI、代码Tclscript主要是代码GUI、代码GUI、代码拓扑结构配置GUI,配置方便Tclscript代码编程GUI?代码GUI、代码GUI、代码支持的构件库丰富的构件库比较丰富丰富的工具箱丰富的构件库丰富配置灵活性一般非常灵活比较灵活比较灵活比较灵活执行效率较高较高低较低一般支持语言Proto-CC++/OTclC/FORTRANC/HDLC/C++/Parsec可扩展性差好比较好一般比较好兼容性差一般一般与MATLAB兼容一般使用成本高开源免费较高高高/开源免费入门难度难度大较难一般难较难通用性差一般较好差差内容提要TCP特点TCP流量控制拥塞TCP拥塞控制TCP流量控制算法网络仿真概述NS2简介NS2研究范围支持网络协议的研究和教育通信协议的设计,数据流的研究等不同协议的比较优点

与平台无关,有大量的协议、代码以及模型可供使用,开源的,不同的协议很容易进行比较。NS2功能有线网络路由层DV,LS,PIM-SM传输层:TCPandUDP流量产生:web,ftp,telnet,cbr,stochastic队列模型:drop-tail,RED,FQ,SFQQoS:IntServandDiffserv无线网络网络类型:MANET,SensorNetworks路由:AODV,DSR,DSDV,MobileIP以及HMIPv6等MAC:802.11,802.15.4,Smac等传输层、多种数据流模拟

NS2组件ns:

网络模拟器执行tcl脚本,进行模拟,并将所有的模拟结果以trace文件的个是输出。nam:

网络AniMator将ns的结果可视化。模拟的流程tcl脚本ns-2Trace文件Nam文件namawkgnuplot/matlabNS2体系结构面向对象的设计支持重用容易维护方便扩展,如添加新协议分裂对象模型C++是高效的编译执行语言,功能模拟,性能较好;Otcl解释执行的,进行场景配置。不必重新编译更灵活。NS2体系结构NS2结合两者的优点C++otcl推荐直接安装ns-allinone版本(最新ns-allinone-2.31)可参考/nsnam/ns/index.html

Linux(直接install就行了)此处我们使用ns-allinone-2.1b9a版本,因为安装的ns中需要添加MNS2.1b9a这个补丁,如果安装高版本,需下载配套补丁。windows安装方法NS2的安装在WINDOW9X/2000/XP的安装方式

1.安裝cygwin连到

,点选

InstallorUpdatenow(usingsetup.exe)

执行setup.exe。

按下一步。

选择InstallfromInternet,并按下一步。

在RootDirectory中,可以选择安装的目录,建议使用内定的路径

c:\cygwin。其它另外两个选项也使用内定值即可。按下一步。

在LocalPackageDirectory中,是让使用者设定下载cygwin所需要档案的目录。使用者可以自行更改路径或者使用与安装程式setup相同的路径(内定值)。按下一步。

选择网际网路连线的方式。第一种是直接连线,第二种是使用IE5的设定,第三种是使用HTTP/FTPProxy的方式。若采用第三种方式,设定如右。按下一步。选择下载的地点,假设选择从交通大学的FTP站下载。按下一步。

选择要安装的软体套件。先点选View,使得旁边的Category变成Full,可以对于细部的选项做选择。

要选择的有XFree86-base、XFree86-bin、XFree86-prog、XFree86-lib、XFree86-etc、make、patch、perl、gcc、gcc-g++、gawk、gnuplot、tar和gzip。以下图为例,点选XFree86-base,可以使得状态从new改变成4.3.0-11。按下一步。开始下载并安装。

2.安裝ns2点选桌面上的cygwin小图示。

第一次执行的时候,会根据目前电脑的使用者和名称等资讯,在cygwin的home的目录下产生一个使用者的资料夹,并放入环境变数设定等相关档案(.bashrc、.bashrc_profile和.inputrc)。接下来到/nsnam/dist/ns-allinone-2.27.tar.gz(目前有新版本),下载ns2的程式码,并存放到自己的目录内。

所下载的allinonepackage包括以下套件:·

TCLrelease8.4.5(requiredcomponent)·

TKrelease8.4.5(requiredcomponent)·

Otclrelease1.8(requiredcomponent)·

TclCLrelease1.15(requiredcomponent)·

Nsrelease2.27(requiredcomponent)·

Namrelease1.10(optionalcomponent)·

Xgraphversion12.1(optionalcomponent)·

CWeb(optionalcomponent)·

SGB(optionalcomponent,buildssgblibforallUNIXtypeplatforms)·

Gt-itm(optionalcomponent)·

Zlibversion1.1.4(optional,butrequiredwhenNamisused)

使用tarxvfzns-allinone-2.27.tar.gz解开所下载的压缩档。

进入ns-allinone-2.27的目录,并开始安装ns2。

在安装的过程中,由于没有安装diff,所以安装程式会问是否要继续,选择y继续安装。

上图即为完成图。

完成ns2的编译后,要开始设定环境变数。编辑家目录下的.bashrc,把ns2相关的路径加入PATH中。(.bashrc)exportNS_HOME=`pwd`/ns-allinone-2.27export

PATH=$NS_HOME/tcl8.4.5/unix:$NS_HOME/tk8.4.5/unix:$NS_HOME/bin:$PATHexportLD_LIBRARY_PATH=$NS_HOME/tcl8.4.5/unix:$NS_HOME/tk8.4.5/unix:$NS_HOME/otcl-1.8:$NS_HOME/lib:$LD_LIBRARY_PATHexportTCL_LIBRARY=$NS_HOME/tcl8.4.5/library若想验证ns2安装是否正确,可以使用cdns-allinone-2.27/ns-2.27

./validate节点节点(node)是网络拓扑的重要组成部分。每进行一次模拟都需要建立一个Simulator类的实例来控制模拟的过程,Simulator类提供了一些实例过程来创建和管理节点。建立一个节点的基本方法是调用Simulator类的node过程:

setns[newSimulator]$nsnode例如:设置2个节点,可以表示为setns[newSimulator]

setn0[$nsnode]setn1[$nsnode]一个单播节点的基本结构如下图所示,它主要包括两个Tcl对象:地址分类器(addressclassifier)和端口分类器(portclassifier),它们分别用来判断分组的目标地址以及分组的目标Agent。

单播节点的结构代理(Agent)Agent代表了网络层分组的起点和终点,并被用于实现如TCP和UDP等网络协议。Agent类是由C++和Otcl共同实现的。Agent可以实现网络层、运输层等多个层次的协议,对于一些运输层的协议(比如UDP),分组的大小和发送时间通常是由代表应用层的独立的对象来控制的,这些控制是通过Agent为应用程序开放的应用程序接口(API)来进行的。对于低层使用的Agent(比如路由Agent),分组的大小和发送时间通常由Agent自己控制。对于一个TCP

Agent,常用的协议代理有:

Agent/TCP--------------“Tahoe”TCP发送端(任何损耗下cwnd=1)Agent/TCP/Reno-------“Reno”TCP发送端(快速修复)Agent/TCP/Sack1------SackTCP发送端

Application类在NS中,应用层程序构建在运输层代理(transportagent)之上,它分为两大类:流量发生器(trafficgenerator)和应用模拟器(simulatedapplication)。下图说明了这两类应用层程序与运输层代理之间的关系:流量发生器一般用在UDP代理之上,应用模拟器一般用在TCP代理之上。Application/Traffic/ExponentialApplication/FTPAgent/UDPAgent/TCP/FullTcpAPIAPI应用程序与运输层代理之间的关系在NS2中常用的application有:

Application/FTP-----------------------------提供TCP将发送的数据数量

Application/Traffic/CBR-------------------以持续的比特率产生包裹

Application/Traffic/Exponential-----------处于中断周期时,不发送信息;工作周期时,以持续的比特率产生包裹。两个周期的长度均按指数分布。Application/Traffic/Trace------------------通信量从一个trace文件中产生,并且包裹间的间隔和大小都事先被定义。除了这些application外,还可以利用类提供的方法来产生信息。例如,如果通过UDP发送数据,可以用语句

send(intnbytes)--------nbytes是应用程序给出的分组的长度创建一个利用UDP作为传送协议的CBR信息源,并将其同节点n0绑定。

setudp0[newAgent/UDP]

$nsattach-agent$n0$udp0

setcbr0[newApplication/Traffic/CBR]

$cbr0attach-agent$udp0

$cbr0setpacket_size_1000

$udp0setpacket_size_1000

$cbr0setrate_1000000利用TCP作为传送协议的FTP

application,并同节点n1绑定的方法相似:settcp1[newAgent/TCP]$nsattach-agent$n1$tcp1setftp1[newApplication/FTP]$ftp1attach-agent$tcp1$tcp1setpacket_size_1000举例如果信息流中止处理,udp和tcp就必须和信息量sink相连接。分别用下面两个类来表示:Agent/TCPSink-------------TCPsinkAgent/Null------------------UDPsink用下面语句表示同udp0连接并同n2绑定的UDPsink:

setnull[newAgent/Null]

$nsattach-agent$n2$null

$nsconnect$udp0$null

标准的TCPsink每接收一个包裹能够获得确认信息,并同n3绑定,tcp1连接:setsink[newAgent/Sink]$nsattach-agent$n3$sink$nsconnect$tcp1$sink

也可以用另外的方法创建一个标准的TCP,同n1、n3连接,ID为1:$nscreate-connectionTCP$n1TCPSink$n31链路链路(Link)是网络拓扑的第二部分,是NS2复合网络组件的另一个大类。创建简单链路:

setns[newSimulator]

$nssimplex-link[node0][node1][bandwidth][delay][queue_type]

这个命令建立了一条从node0到node1的链路,改link的带宽为bandwidth,延迟为delay,队列类型为queue_type。双向链路的创建也相似。例如:创建一条从n0到n2的链路,队列类型为DropTail$nsduplex-link$n0$n215Mb10msDropTailTraceTrace的功能是详细记录模拟的过程,trace可以根据用户的需要记录模拟过程中的任何一个细节。例如下面语句:settrace_all[openall.datw]$nstrace-all$trace_all$nsflush-traceclose$trace_all首先,打开输出文件,然后处理事件记录在文件中。模拟的最后,trace缓存被充满,文件关闭。下面是一个trace文件的例子:+1.8437502cbr210-------00.03.1225610-1.8437502cbr210-------00.03.1225610r1.8447121cbr210-------13.01.0195600d1.8456620ack40-------23.20.182602+1.8456602tcp1000-------20.13.2102611-1.8456602tcp1000-------20.13.2102611

r:接收(receive)+:入队(enqueue)

d:丢失(drop)-:出队(dequeue)模拟当模拟拓扑创建之后,所有的代理都要配置,例如模拟的开始和结束。模拟的开始和结束语句为:$nsat$simtime“finish”----------------------模拟结束

$nsrun------------------------------------------模拟开始结束过程:procfinish{}{globalnstrace_all$nsflush-traceclose$trace_allexit0}开始或者结束的时间:$nsat0.0“cbr0start”$nsat50.0“ftp1start”$nsat$simtime“cbr0stop”$nsat$simtime“ftp1stop”简单的NS2例题创建一个如下图拓扑结构,加入一个利用UDP作为传送协议的CBR信息源,并将所有信息记录到一个trace文件中。n0n2

n13Mbps1ms5Mbps15ms代码如下:setns[newSimulator]#Enablingtracingofalleventsofthesimulationsetf[openex.namw]$nsnamtrace-all$fseta[openex.trw]$nstrace-all$a#Definingafinishprocedureprocfinish{}{globalnsfa$nsflush-traceclose$fclose$aexecnamex.nam&exit0}#Creationofthenodessetn0[$nsnode]setn1[$nsnode]setn2[$nsnode]$nscolor1Blue#Creationofthelinks$nsduplex-link$n0$n13Mb1msDropTail$nsduplex-link$n1$n21Mb15msDropTail#Creationofacbr-connectionusingUDPsetudp0[newAgent/UDP]$nsattach-agent$n0$udp0setcbr0[newApplication/Traffic/CBR]$cbr0attach-agent$udp0$cbr0setpacket_size_1000$udp0setpacket_size_1000$cbr0setrate_1000000$udp0setclass_0setnull0[newAgent/Null]$nsattach-agent$n2$null0$nsconnect$udp0$null0$udp0setfid_1#Schedulingtheevents$nsat0.1"$cbr0start"$nsat0.5"$cbr0stop"$nsat1.0"finish"$nsrun用NS执行模拟后,显示如下:(1)网络原始图(2)网络运行仿真图(节点1至节点2)(3)网络运行仿真图(节点0至节点1至节点2)结合TCP流量控制算法中的TCPTahoe和TCPReno,修改上面的例子。我们可以通过设置两种TCP的重要版本来观察TCP的运作机制:settcp[newAgent/TCP],即TahoeTCP,最早的TCP版本,当出现丢包后,采用SlowStart控制cwnd窗口settcp[newAgent/TCP/Reno],即RenoTCP,带有快速恢复(FastRecovery)的更新版本,丢包后,采用FastRecovery控制cwnd窗口代码如下:setns[newSimulator]#Definedifferentcolorsfordataflows(forNAM)$nscolor1Blue$nscolor2Red#OpentheTracefilessetfile1[opentcp.trw]setwinfile[openWinFilew]$nstrace-all$file1#OpentheNAMtracefilesetfile2[opentcp.namw]$nsnamtrace-all$file2#Definingafinishprocedureprocfinish{}{globalnsfile1file2$nsflush-traceclose$file1close$file2execnamtcp.nam&exit0}#Createsixnodessetn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$nsnode]setn4[$nsnode]setn5[$nsnode]#Createlinksbetweenthenodes$nsduplex-link$n0$n22Mb10msDropTail$nsduplex-link$n1$n22Mb10msDropTail$nssimplex-link$n2$n30.3Mb100msDropTail$nssimplex-link$n3$n20.3Mb100msDropTail$nsduplex-link$n3$n40.5Mb40msDropTail$nsduplex-link$n3$n50.5Mb30msDropTail#Givenodeposition(forNAM)$nsduplex-link-op$n0$n2orientright-down$nsduplex-link-op$n1$n2orientright-up$nssimplex-link-op$n2$n3orientright$nssimplex-link-op$n3$n2orientleft$nsduplex-link-op$n3$n4orientright-up$nsduplex-link-op$n3$n5orientright-down#SetQueueSizeoflink(n2-n3)to10$nsqueue-limit$n2$n320#SetupaTCPconnectionsettcp[newAgent/TCP]$nsattach-agent$n0$tcpsetsink[newAgent/TCPSink/DelAck]$nsattach-agent$n4$sink$nsconnect$tcp$sink$tcpsetfid_1$tcpsetwindow_8000$tcpsetpacketSize_552#SetupaFTPoverTCPconnection

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论