1、题目基于OPNET的TCP协议研究与仿真姓名学号200905050071系别物理与电子工程系专业电子信息工程年级班级2009级1班指导教师讲师2013年5月18日毕业论文(设计)作者声明本人郑重声明所呈交的毕业论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全了解有关保障、使用毕业论文的规定,同意学校保留并向有关毕业论文管理机构送交论文的复印件和电子版。同意省级优秀毕业论文评选机构将本毕业论文通过影印、缩印、扫描等方式进行保存、摘编或汇编;同意本论文被编入有关数据库进行检索和查阅。本毕业论文内
2、容不涉及国家机密。论文题目作者单位作者签名年月日目录摘要1引言21绪论211论文研究的背景及意义312国内外研究状况32网络仿真软件OPNET421OPNET仿真软件概述422OPNET仿真技术523OPNET仿真流程73TCP协议分析831TCP协议概述832TCP算法研究124TCP协议仿真分析1441OPNETMODELER中支持TCP协议的节点模型1442TCP协议仿真155结束语20参考文献22致谢221基于OPNET的TCP协议研究与仿真摘要本文采用网络仿真工具OPNET对TCP协议拥塞控制进行仿真分析。论文首先介绍了网络仿真软件的发展,详细介绍了仿真软件OPNET,重点讨论了OP
3、NET的仿真机制,然后介绍了TCP协议的原理和拥塞控制,以四种不同版本的拥塞控制算法TCPTAHOE、RENO、NEWRENO、SACK分析不同算法在网络拥塞出现丢包时的窗口变化差异,通过OPNET仿真观察其窗口变化情况。通过仿真结果可以非常准确和直观地得到各TCP版本的特点,从而说明了拥塞控制算法对网络性能的影响。关键词网络仿真;OPNET;TCP协议;拥塞控制TCPPROTOCOLRESEARCHANDSIMULATIONBASEDONOPNETABSTRACTTHISPAPERUSESTHENETWORKSIMULATIONTOOLOPNETTOSIMULATETHETCPCONGEST
4、IONCONTROLWEFIRSTDESCRIBETHEDEVELOPMENTOFTHENETWORKSIMULATIONSOFTWAREANDINTRODUCEAPOWERFULNETWORKSIMULATIONSOFTWARENAMEDOPNETINDETAIL,WEEMPHATICALLYDISCUSSITSSIMULATIONMECHANISMTHENWEINTRODUCETHEPRINCIPLEOFTHETCPPROTOCOLANDCONGESTIONCONTROL,WITHFOURDIFFERENTVERSIONSOFTHECONGESTIONCONTROLALGORITHMNAM
5、EDTCPTAHOE,RENO,NEWRENO,SACKWEANALYSISTHEWINDOWDIFFERENCEOFDIFFERENTALGORITHMSINNETWORKCONGESTIONWHENPACKETLOSS,ANDOBSERVETHEWINDOWCHANGESBYOPNETSIMULATIONTHESIMULATIONRESULTSSHOWTHATWECANVERYACCURATELYANDINTUITIVELYGETTHECHARACTERISTICSOFTHETCPVERSION,THUSEXPLAINTHEINFLUENCEOFCONGESTIONCONTROLALGOR
6、ITHMONNETWORKPERFORMANCEKEYWORDSNETWORKSIMULATIONOPNETTCPPROTOCOLCONGESTIONCONTROL2引言随着社会的发展,计算机被广泛地应用于各个领域,成为现代人的一个不可缺少的工具。同时带来的问题是网络结构和规模的日益复杂以及网络应用日益多样化,网络负载越来越重,容易造成网络拥塞,严重影响了通信。因此,拥塞控制成为现代科学家研究的一个热门话题。单纯依靠网络的规划和设计、网络设备和网络协议开发的研究,已经不能满足网络的发展。因此,迫切需要一种科学的手段来反映和预测网络性能,网络仿真应运而生。本文采用的是网络仿真软件OPNET,其具
7、有丰富的模型库,通过OPNETMODELER仿真软件建立模型对各种拥塞控制算法进行仿真。1绪论11论文研究的背景及意义随着计算机网络的发展,网络规模和网络应用的迅速增长,对网络的性能评估、协议开发和测试都有了新的需求。由于计算机仿真技术是一个以系统模型为对象的研究方法,利用计算机快速计算的能力,用极短的时间模拟实际系统中的较长周期。因此,计算机仿真技术具有极其重要的应用意义。随着新的网络技术的不断涌现和数据网络变得越来越复杂,网络仿真技术的需求越来越迫切,网络仿真的应用越来越广泛,网络仿真已成为科研、规划、设计网络不可或缺的工具。计算机和通信技术的不断发展,人们能够越来越方便的实现信息的共享,
8、TCP/IP协议使世界上不同架构的计算机网络相互连接形成一个全球性的互联网络INTERNET,这为各种信息的共享提供了便捷的途径。在INTERNET中的每一台计算机可以访问INTERNET上的其他任意一台计算机,好像它们在一个局域网内使用双绞线或同轴电缆直接连接起来一样不同的是速度比局域网要慢。现在TCP/IP协议簇一直很受欢迎,并已成为网络通信协议事实上的标准。TCP协议在INTERNET网络技术的数据传输协议中,占据的比重比较大。TCP是一种端到端可靠的数据传输协议,采用尽力而为的服务。在网络实施中,当网络资源不能满足使用用户的需求时,网络不能采用限制用户使用数量的方案,即使是网络使用效率
9、降低到了极致,它也只能做到最好的去提供服务,一般在这种情3况下,就会导致网络拥塞。因特网实际上使用的拥塞控制是在传输层中TCP的流量控制和拥塞控制基础上建立的。虽然现在对IP层中的拥塞控制研究逐渐成为一个新的研究热点,但是就目前而言,传输层中的端到端TCP拥塞控制1在INTERNET上还是起主要作用的。OPNET作为网络仿真领域中的重要仿真工具,可以利用它通过数学建模和统计分析的方法来模拟网络行为,从而很好的理解网络运行情况和分析相应的协议。OPNETMODELER中的TCP实现模型参考了RFC文档,学习TCP代码可以加深对TCP算法的了解,从深度上对网络有新的认识。目前国内外存在很多对TCP
10、进行研究的组织,他们试图通过改进TCP中的某个或某些算法,来提升TCP性能同时又要保证TCP的兼容性。但成果并不是很明显,工程意义不是很大,在本论文中,我们利用仿真软件OPNET对TCP的经典算法进行了研究,这具有重要的实践和工程意义。12国内外研究状况TCP是传输控制协议,它工作在TCP/IP协议栈的传输层,提供面向连接的端到端的可靠传输服务。目前很多的应用程序都是基于TCP协议进行传输的,如TELNET、FTP、SMTP等。TCP的工作是建立连接,然后为应用层程序接收和发送数据。在发送的过程中,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。所以在TC
11、P协议中涉及到了报文的标识、报文的确认、报文的有序发送、拥塞识别、拥塞控制等保证TCP健壮性的逻辑。在TCP早期连接中只有简单的基于滑动窗口的流量控制机制,并不存在拥塞控制。而拥塞控制机制是由JACOBSON在1988年提出的,称为TCPTAHOE,包括三种算法即慢启动、拥塞避免和快速重传算法。两年后在此基础上又加入了快速恢复算法,TCP由此发展为TCPRENO,占据了目前网络中的主导位置。在JACOBSON之后许多研究者又针对TCP拥塞控制2做了大量的研究,由于TCP窗口慢增快减,这样会引起震荡特性,许多人为了克服这一缺点试着提出一种“理想”的拥塞控制方案,包括DUAL、TCPVEGAS等。
12、然而,考虑到多方面的因素包括实际应用问题和网络的性能,之前提出的拥塞控制机制并不能较好的4与TCPRENO兼容,甚至会使效果降低。这也就导致了这些机制不能广泛应用于实际网络。受到前面因素的影响,大多数人就开始着手研究TCPRENO中的快速恢复算法,并对其进行了改进,取得了有效的进步,这些改进算法主要包括TCPNEWRENO,SACK。这些算法对提高RENO中快速恢复算法的性能提供了有利的方法。在高速网络中,由于受到TCP加性增长、乘性减小的拥塞控制算法的影响,致使传输速率大大的降低,目前针对这种缺陷的改进,研究者探讨了一种FASTTCP高速网络拥塞控制,有效的解决了上述问题,虽然已经有了一些实
13、际网络的应用,但仍需要进一步的探讨和改进。2网络仿真软件OPNET21OPNET仿真软件概述211OPNETMODELER概述由OPNETTECHNOLOGIES公司开发的网络仿真软件OPNETMODELER。它能够很好的分析各种模拟系统的行为和性能,而分析这种性能是通过执行离散事件仿真的方法来实现的。OPNETMODELER作为一个大型的网络开发工具,具有的特征如下面向对象OPNETMODELER创建的所有系统都有一系列属性可以配置的对象组成3。分级模型OPNETMODELER中的模型是分级设计的,与实际通信网络的分级结构自然对应。图形化编辑在工程建模的大多数环节中,可以使用图形化编辑器来定
14、义和编辑模型,因此具有良好的用户接口。方便的综合仿真和分析工具OPNET允许用户对自己感兴趣的数据量进行统计,在仿真过程中自动收集,并且根据收集到的数据量对仿真结果进行图形化比较和性能评估。另外OPNET还支持动画,来动态的观看统计量的变化。有限状态机FSMOPNETMODELER使用有限状态机来对协议和其他过程进行建模,在有限状态机的状态和转移条件中使用C/C语言进行描述,可以按需求控制仿真的详细程度。应用编程接口APIOPNET提供许多应用编程接口,以便用户编程进行扩5展。使用应用编程接口也是OPNET与其他仿真工具进行结合、协同仿真的一种重要手段。OPNET的应用很广泛,典型的应用有网络
15、规划、通信体系结构和协议的研发、分布式传感器网络和片上系统、通信系统排队论研究、无线网络和卫星网络的研究等。212OPNET应用范围在不同的领域中,MODELER表现的用途不同。1对于企业网,MODELER利用标准模型组网,这个是已经建立好的,如果某些业务达不到所要求的服务质量,MODELER可以通过捕捉重要的流量对其进行分析4。2对于研发需求,MODELER提供的一个环境是开放的,用户通过建立新的网络设备和协议,能够根据需求模拟出其网络性能。3对于比较复杂的运营商ISP网络,MODELER把重点放在整个业务层、流量模拟,使运营商有效查出业务配置发生的错误。22OPNET仿真技术221OPNE
16、T离散事件仿真机制OPNET采用的模拟机理DISCRETEEVENTDRIVEN是由离散事件驱动的其中“事件”是指网络状态的变化,也就是说,模拟机工作的条件是网络状态发生变化的时候,如果网络状态不发生变化就不执行任何模拟计算。因此,相比于时间驱动,它很大程度的提高了模拟机计算效率。离散事件驱动的事件调度器EVENTSCHEDULER实际上是仿真核心,它对所有进程模块期望完成的事件和计划该事件所发生的时间进行列表和维护5。OPNET采用的离散事件仿真机制,仿真依靠事件的发生来驱动,仿真时间靠仿真事件的发生来推进。这种方法将仿真分解为独立的点,而事件将分别在这些点上发生。OPNET依照时间,将这样
17、的点与事件相关连。每个事件代表了模型中状态变化或选择的需求。采用离散事件进行仿真,OPNET可以动态的模拟实际系统的行为。222OPNET仿真调度机制OPNET采用基于事件列表的调度机制,合理安排调度事件,以便执行合理6的进程来模拟网络系统的行为。通过仿真核、仿真模块工具和模型模块进行调度。1每个OPNET仿真核内部都有一个独立的全局时间表,用来控制每个项目的执行,仿真中按照相应的时间顺序来调度列表中的事件,先执行的事件位于表头。一个事件执行完成后将从列表中删除。2仿真的核心管理机构称为仿真核,它采用高效的办法维护管理事件列表。位于队列头的事件按顺序由仿真核通过中断驱动交到指定模块中。同时仿真
18、核还接收所有模块传来的中断,并把在事件列表中做相应的记录。仿真控制权伴随中断不断地在仿真核与模块之间转移。3当存在多个事件同时发生的情况时,仿真核用以下两种办法来处理事件在事件列表中的位置根据时间的先后次序,后到达后处理LASTCOMELASTSERVE;根据事件的重要程度,事件设置不同的优先权,优先权高的先处理。223基于包的通信仿真机制为了模拟实际网络中包的流动、模拟实际网络协议中的组包和拆包过程以及模拟过程中查看任何特定包的包头和净荷,OPNET采用的是基于包的建模机制。数据包是最基本的信息传输载体6,通过传递数据包在模块之间来通信。数据包流定义在目的模块的输入端口和源模块的输出端口之间
19、,在同一个节点内部的不同模块间传递数据。目前,OPNET中有三种通过数据流传送数据的方法1非强迫调度模式目的模块根据数据流的中断来获知数据包的到达。但当有正在服务的高级中断存在时,目的模块要等待此中断完成之后才可以引起中断。2强迫模式这是一种比较紧急的数据处理方式。当数据包到达目的模块立即引发中断。3静止方式数据包到达后便将数据包插入到输入队列存储区中,不引发中断。当目的模块发现并取出该数据包后,便完成了此次数据传输任务。224OPNET仿真建模机制OPNET中的建模机制是在三个不同的层面上共同完成的,也称为三层仿真建模。最底层为进程模型,以状态机来描述协议;其次为节点模型,由相应的协议模型构
20、成,反映设备特性;最上层为网络模型。三层模型和实际的协议、设备、网络完全对应,全面反映了网络的相关特性。71建立进程模型进程模型通过有限状态机FSM表示,使用有限状态机可以有效的支持规范、协议、应用、算法及排队的策略。它使用图形化的状态和状态转移条件来定义一个事件的逻辑。每个状态使用C/C语言,利用专门为协议设计提供的丰富的函数库来完成事件的控制。有限状态机是动态的,可以在仿真中对其他有限状态机引起的事件进行响应。用户可以使用OPNET模型库中自带的进程模型,也可以使用进程编辑器开发自己全新的进程模型。在使用库中节点模型但还需要进行底层进程修改时,需要使用PROCESSEDITOR来建立进程模
21、型。但在下列情况下不需要进行此过程不需要修改进程模型而完全使用库中节点模型时;库中有替代进程模型存在时;完全使用库中节点模型时。2建立节点模型节点是网络模型中的对象,节点编辑器用来定义每个网络对象模型。它使用不同的模块来描述节点对象的不同行为,展示网络设备和系统的的体系结构。这些模块一般模拟节点行为的一个或几个方面,如数据的创建、数据存储等。模块之间通过包流或者统计线进行连接,一个网络对象通常有多个典型的模块组成,来定义它的行为。3建立网络模型我们通常在网络模型中将上述已有的或新建的设备互连成网络。也就是在所需的网络模型建立好后,根据仿真网络,建立起网络模型之间的有机连接,从而将整个仿真网络系
22、统映射为OPNET网络模型。它可以从每个网络对象或者整个网络中选择统计量,然后运行仿真,最后查看比较结果。23OPNET仿真流程OPNETMODELER为通信网络和分布式系统的建模和性能评估提供了一个综合的开发环境和分析平台7。在进行具体的网络仿真时,需要按照OPNET的仿真流程进行仿真。仿真流程可以使仿真思路清晰,结构明确。典型的仿真流程如下1了解需求收集和分析网络工程设计文档;2建模建立进程模型、网络对象模型和网络模型;3配置网络流量配置应用、分布、背景流量来模拟实际网络环境中的负8载情况;4仿真定义要进行收集的数据,配置和运行仿真,自动收集统计数据;5数据分析根据仿真收集到的数据,查看仿
23、真效果,验证模型和仿真方法的正确性,或者比较设计方案的优劣,从而为解决实际网络中的问题提供帮助。6重复试验根据数据分析的结果,调整网络设计或系统设计方案,反复试验,直到取得预期的效果。3TCP协议分析31TCP协议概述311TCP原理在OSI网络七层体系结构里,网络传输层主要使用两种协议,分别是传输控制协议TRANSMISSIONCONTROLPROTOCOL,TCP和用户数据报协议USERDATAGRAMPROTOCOL,UDP协议。UDP协议是无连接的服务,网络传输中,不要求提前接触目的端口,在网络传输过程中,采取了“尽最大努力”的方式。此协议的优点是实现了类似的一对多广播。缺点是没有流量
24、控制,丢失的数据包不能重传,它不能提供一个有序和可靠的服务。相比UDP协议,TCP协议的流量控制和拥塞控制功能可以确保有序和可靠的数据到目的端。因此,网络传输层的大多数应用均采取使用TCP协议8。TCP协议是一个全双工协议。TCP协议是用来提供一个可靠的面向连接的服务。其中的差错控制协议是协议的核心组成部分,它影响协议的性能,包括吞吐量、能源消耗等。TCP提供流量控制FLOWCONTROL。TCP连接的每一方都有固定大小的缓冲区,TCP接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止发送端发送数据过快,造成接收端缓冲区溢出,丢弃报文段,引起重传而造成网络负载加重。另一方面,TCP使
25、用拥塞窗口机制来控制发送数据的速率,拥塞窗口是发送方对感受到的网络拥塞的估计,通过这个可以减轻网络拥塞情况。312TCP数据包头部格式TCP协议中发送端向接收端发送数据包SEGMENT。用户数据封装在TCP报文段中,前面添加TCP首部,然后构成TCP报文。整个TCP报文被封装在一个IP数据报中,然后IP包在网络中传输。TCP报文首部格式如图1,如果不计可选字段,它是20个字节。9图1TCP数据包头部格式每个TCP首部中包含源端口SOURCEPORT和目的端口DESTINATIONPORT,用于寻找发送端和接收端的应用进程。这两个值加上IP首部中的源IP地址和目的端IP地址唯一确定一个TCP连接
26、9。SEQUENCENUMBER字段表示该数据包的序列号。序列号用来标识从TCP发送端向TCP接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。ACKNOWLEDGEMENT字段表示确认号。该确认号是期望收到对方的下一个报文段的数据的第一个字节的序号,而不是已经被接收到的数据包的最大序号。HEADLENGTH字段在数据包头部中占有4BIT大小,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。而这实际上就是TCP报文段首部的长度。FLAGS字段是包含一些控制信息,已有的标志位有URG、ACK、PSH、RST、SYN、FIN。这些标志位每个占用1BIT,用于表示类似建立、
27、关闭TCP链接的控制信息。CHECKSUM字段表示校验和域。校验和包含了整个TCP报文段TCP首部和TCP10数据,这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。URGENTPOINTER字段表示当URG1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。OPTION字段表示可选项域。选项是用来完善TCP协议而增加的一些字段,在实现过程中是可选的。常见的TCP选项有SACK选项、MSS选项、时间域选项、窗口比例选项等。DATA字段表示TCP所需要传输的数据包。313TCP拥塞控制为了对网络进行拥塞控制我们可以利用发送窗口调
28、节发送端向网络注入分组速率,拥塞控制的目标是将网络中的分组数量维持在一定的水平之下。如果网络中的分组数量超过这个水平,网络的性能会出现急剧恶化9。在早期的TCP协议中发送方建立连接后,数据包陆续不断的发送到网络上,一直到拥塞窗口大小达到接收方给出的最大接收窗口。当发送方和接收方出现在一个局域网时,这种方法是行得通的。但是,如果带宽是有限的,在传输数据过程中,就会产生非常严重的拥塞问题,有些路由器会对数据包进行缓存,但是若路由器缓存耗尽的时候,就会发生丢包,这样会大大地降低TCP的性能。为了更好地在运输层进行拥塞控制,1999年公布的因特网建议标准RFC2581定义了以下4种算法,即慢启动SLO
29、WSTART、拥塞避免CONGESTIONAVOIDANCE算法、快速重传FASTRETRANSMIT和快速恢复FASTRECOVERY算法。下面就介绍这些算法的要点。1慢启动TCP发送方使用拥塞窗口CONGESTIONWINDOW,CWND来表示滑动窗口的大小。慢启动算法是一个在连接上控制数据流发送速度的方法。主机开始发送数据时,由于我们这时并不清楚网络的状况,如果立即将较大的发送窗口中的全部数据字节都注入到网络,这时就有可能引起网络拥塞。实际经验证明,较好的方法是先试探一下,我们可以将拥塞窗口端口值逐渐增大10。2拥塞避免拥塞避免算法是一种处理丢失报文的方法。一般情况,拥塞分为两种一是11
30、当数据流从带宽很高的网络进入带宽较小的网络的时候,会发生拥塞。二是很多输入流一起到达了同一个路由器,且该路由器的输出带宽小于输入带宽时。为了防止拥塞窗口CWND的增长引起网络拥塞,还需要另一个状态变量,即慢启动门限SSTHRESH。慢启动门限SSTHRESH的用法如下当CWNDSSTHRESH时,改用拥塞避免算法。当CWNDSSTHRESH时,既可使用慢启动算法,也可使用拥塞避免算法。3快速重传假定发送端发送了M1、M2、M3、M4共4个报文段11。接收端每收到一个报文段后都要立即发出确认ACK而不要等待自己发送数据时才将ACK捎带上。当接收端收到M1和M2后,就发出确认ACK2和ACK3。我
31、们可以假设发生了网络拥塞致使M3丢失了。接收端下一个收到M4,会发现序号不对,但是还是会收下并且把它放在缓冲区中,同时发出确认,不过发出的确认信号是ACK3。这样,发送端发现问题,可能是网络出现了拥塞导致分组丢失,另一种可能是报文段M3尚留在网络中的某处,还要经过较长的时延才能到达接收端。发送端接着发送M5和M6。接收端收到了M5和M6后,也还要分别发出重复的ACK3。这样,发送端共收到了接收端的4个ACK3,其中三个是重复的。在快速重传算法中规定,只要发送端接连收到三个重复的ACK就可认为发生了分组丢失,这时应立即重新传送丢失的报文段M3而不必继续等待超时。不难看出,快速重传并非取消重传计时
32、器,而是在某些情况下可更早地重传丢失的报文段。4快速恢复当发送方收到一个重复的ACK,根据TCP协议中的确认机制就表示有一个数据包离开了网络,使CWND加1增加一个新数据进入网络中。其具体步骤如下1当发送端收到连续三个重复的ACK时,就重新设置慢启动门限SSTHRESH。2把CWND设置为SSTHRESH3SMSS,并重传丢失的报文段加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。3若收到重复的ACK为N个N3,则将CWND设置为SSTHRESHNMSS。4若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。5若收到了确认新的报文段的ACK,就将CWND缩小
33、到SSTHRESH。12采用这样的控制方法使得TCP的性能有明显的改进。32TCP算法研究321TCP算法概述TCP拥塞控制CONGESTIONCONTROL,其核心思想是基于共享资源的管理上,根据一定的算法来控制发送端,合理利用瓶颈资源,保证网络的稳定性12。可以看出确保整个网络良好运行的关键是TCP拥塞控制算法。到目前为止,研究者已不断地提出了大量TCP拥塞控制算法,如TAHOE、RENO等等,所有这些算法的核心都是通过控制拥塞窗口的大小,发送端可以控制业务量,从而控制网络拥塞。在传输过程中,发送端逐渐增加窗口的大小,一直到出现数据包丢失,窗口值迅速下降,然后开始逐渐增大。这些TCP算法有
34、效的避免了拥塞瘫痪。TCP拥塞控制算法发展至今,有5个主要版本的TCP拥塞控制算法相继产生,分别是TAHOE、RENO、NEWRENO、SACK和VEGAS。下面将讲述前四个版本。322TCPTAHOE介绍TCP的TAHOE版是TCP的早期版本,它包含三个基本的拥塞控制算法慢启动、拥塞避免和快速重传,其中快速重传在TAHOE版中首次提出的。使用快速重传算法时,TCP收到乱序到达的报文段时就会立即发送ACK,TCP利用3个重复的ACK来判定报文段的丢失,一旦收到3个重复的报文段,则不论定时器是否超时,都要进行重传。快速重传减少了重传等待时间,降低了超时重传次数,提高了网络的吞吐率。323TCPR
35、ENO介绍TCPRENO版在TAHOE的基础上首次增加了快速恢复算法,因此快速恢复算法又称为RENO版的TCP拥塞控制算法。即在快速重传算法之后,没有进入慢启动阶段,而是进入拥塞避免阶段,此算法的产生提高了网络传输线路的利用率。如图2所示TCPRENO控制流程。主机与服务器之间首先建立TCP连接,建立连接是通过三次握手完成的,然后启动RENO拥塞控制机制设置拥塞窗口CWND初始值为1,慢启动门限SSTHRESH为接收端窗口大小,进入慢启动阶段,调用慢启动算法,窗口迅速增长直至到达慢启动门限的值,之后进入拥塞避免阶段,调用拥塞避免算法,窗口缓慢增加直至发生拥塞。如果RTO超时,再次进入慢启动阶段
36、;否则进入快速重传和快速恢复阶段,调用相应的算法机制,恢复之后再次进13入拥塞避免阶段。图2TCPRENO流程当一个窗口中多个报文段发生丢失时,RENO将多次下降发送窗口,不必要地降低了吞吐量。为此,人们提出了很多改进的丢失恢复算法,如NEWRENO、SACK等。其中一些为了触发重传机制采用部分应答的方式,另外一些则采用基于TCP选择性应答的机制。324NEWRENO介绍当多个报文从一个数据窗口中丢失时并且触发快速重传和快速恢复算法时,问题就产生了。因此NEWRENO版的TCP出现了,它在RENO快速恢复的基础上稍加了修改,可以恢复一个窗口内多个报文丢失的情况。这样可以尽力避免RENO版在快速
37、恢复阶段的多个重传超时,同时可以减少一个窗口内进入快速恢复阶段的次数。具体来讲就是RENO在收到一个新的数据的ACK时就退出了快速恢复状态了,而NEWRENO需要收到该窗口内所有数据包的确认后才会退出快速恢复状态定义了一个“快速恢复过程”,它在接收到三个重复ACK时开始,并在一个超14时重传发生或在收到一个覆盖RECOVER报文的ACK到达时结束,从而进一步提高了网络的吞吐率。325TCPSACK介绍SACK关注的同样是一个窗口内多个报文丢失的情况,它使用选择性确认机制和选择性重复重传策略处理这种问题。它将接收到的乱序报文信息均发送给发送方,这样发送方就能准确的知道哪些报文已经被接收方正确的接
38、收,从而避免了不必要的重传,减少了网络延时,提高了网络的吞吐量。发送端通过接收到的SACK块,来判断接收端的队列情况哪些包已经接收,哪些包丢失。根据以前的SACK信息跟踪发送和接收包,每发一个包,该包都会根据SCOREBOARD记录的序列号和标志比特来确认是否已经被选择性应答。不需要重传标有SACK比特的包,而没有SACK标识的包而且序号小于最大的SACK包则要重传。无论是否被选择性应答,当被累计确认之后才从重发存储器中删除。SACK可以实现在一个RTT内恢复多个丢失报文段。4TCP协议仿真分析41OPNETMODELER中支持TCP协议的节点模型从32节的对OPNET仿真机制的描述,我们可以
39、知道多个模块组成了OPNETMODELER中网络节点模型,一个支持TCP协议的节点存在有一个TCP模块,它的节点结构如图3所示。从下面图中可以发现这个模型中有很多模块是利用协议命名的,图中可以很清晰的看到TCP模块,它用来实现对TCP协议的支持。这种建模方式是按照协议分层的,我们已经在32节中作了详细说明。15图3支持TCP协议的节点模型TCP模块通过两个相关的进程模型来实现TCP协议。其中TCP_MANAGER_V3代表TCP模块的根进程13,它通过调用TCP_CONN_V3进程来处理到达的请求,从而管理一系列的连接。TCP_CONN_V3模型用来创建代表一个单独TCP连接的进程,用来处理一
40、个独立的TCP连接。在OPNETMODELER中,TCP_MANAGER_V3动态的创建TCP_CONN_V3,它们之间是父子进程的关系,通过共享内存的方式进行结构化数据的交流。TCP_CONN_V3通过共享内存获得父进程的TCP_PARAMETER_PTR,根据TCP_PARAMETER_PTR获得当前节点相关的TCP设置,初始化本次连接的传输控制块(TCB)。TCP_CONN_V3中的函数部分共有80个函数,它包含了TCB初始化、缓冲区处理、选项处理、重传处理、定时器处理等TCP协议的整个核心逻辑。42TCP协议仿真421仿真网络模型在计算机通信网络中,数据到达目的地是通过交换机、路由器等
41、数据交换设备到达的,由于受到线路带宽等方面的影响,当网络负载过大的时候,不可避免16的会出现拥塞。下面是简化的实际模型,建立网络模型就是从对象面板库中选取节点和链路,然后进行连接构建网络。对象面板库包含了实际网络系统中的很多节点,如服务器、客户端、路由器、交换机和链路等。建立如图4所示的网络模型,模型需要的节点和链路有CLIENT、SERVER、APPLICATION_CONFIG、PROFILE_CONFIG14,其中CLIENT节点是PPP_WKSTN类型的,它有一个串口可以连接到IP网络上,同时支持TCP协议;SERVER节点与CLIENT节点相似,它是PPP_SERVER类型的,可以为
42、网络中的主机提供TCP类型的服务;INTERNET节点是IP32_CLOUD类型,代表一个网络云,其具有32个串行链路,它使用动态路由协议RIP或者OSPF来自动地建立路由表。节点是根据它们能支持相同的数据包格式而选择的。将节点拖到工作区间,用PPP_DS1链路进行连接,网络速率是1544MBPS。为了真实的反映出网络拥塞时数据丢失情况,OPNET提供了一种方法来实现为了替代现实中由于网络拥塞而丢失数据的情况我们可以通过配置网络云人为的控制数据包丢失来实现。图4仿真模型CLIENT和SERVER之间的逻辑关系如图4中所示。PROFILE定义了业务,包含有业务开始时间、偏置时间、持续时间、操作模
43、式等,同时也定义了与APPLICATION的关系。APPLICATION定义了各种应用,SERVER为APPLICATION定义的应用提供支持,也就是CLIENT向PROFILE请求业务,PROFILE找到这个业务相应的应用,然后找到SERVER以支持该应用,从而使CLIENT和SERVER建立关系。17422业务配置定义的业务规格如图5所示,我们定义的与APPLICATION的关系是FTP_APPLICATION,偏置时间是根据所要传输的文件大小而定的。图5定义业务规格定义的应用如图6所示,这里我们定义应用个数为1个,对应用的描述定义为FTP,FTP定义的两个重要参数为文件大小和请求时间间隔
44、。图6定义应用423TCP参数配置我们通过利用OPNET仿真工具,针对各种拥塞控制算法配置不同的参数。在建立模型后,需要配置服务器和客户端的TCP参数14,如图7所示。MAXIMUMSEGMENTSIZE表示一个数据包的大小。RECEIVEBUFFER表示接收缓冲区大小。SLOWSTARTINITIALCOUNT是表示在进入慢启动阶段时设置初始拥塞窗口大小值,1表示一个数据包,2表示两个,依次类推,在这里我们设初始值为1。FAST18RETRANSMIT是快速重传,FASTRECOVERY是快速恢复,SELECTIVEACK选择性重传,ENABLED表示有效,DISABLED表示无效,要想实现
45、不同版本的算法就得改变上述的参数。图7TCP参数配置TCP参数配置的关键参数如表1所示,从表中我们可以明显的看出在执行TCP拥塞控制四种不同版本时的快速重传和快速恢复以及选择性确认三种参数的不同设置。表1TCP关键参数设置参数设置TCPTAHOETCPRENOTCPNEWRENOSACKFASTRETRANSMITENABLEDENABLEDENABLEDDISABLEDFASTRECOVERYDISABLEDRENONEWRENODISABLEDSELECTIVEACKDISABLEDDISABLEDDISABLEDENABLED19424仿真结果分析在本文中我们主要关注的是不同版本的TCP
46、在拥塞控制方面的性能,所以我们主要收集FTP服务器端的拥塞窗口大小。用OPNET仿真器仿真了这几种算法,将结果显示在同一张图上,由此可以清楚的看出它们之间的区别。为了方便比较,所有算法都是在相同外部条件下仿真的,数据设定在同一时刻丢失一个数据包。图8存在丢包网络中各版本TCP的拥塞窗口变化图9存在丢包网络中各版本TCP的拥塞窗口局部放大图TAHOE算法,它采用了快速重传算法,遇到丢包的时候,TCP发送方启动快速重传算法,根据收到的重复ACK的数目来决定是否重传报文段,默认的是收到连续3个重复的ACK来通告报文段丢失事件。此时,定时器可能没有超时,所以与通过定时器超时来通告报文丢失的方式相比,它
47、可以更加快速的发现丢包20事件。RENO算法,在TAHOE的基础上增加了快速恢复算法。发生拥塞时,我们不必要将拥塞窗口减为一个数据包。比较TAHOE算法和RENO算法,发现RENO算法丢失数据时,将CWND设置成当前窗口的一半加3个SMSS,重设SSTHRESH为当前发送窗口的一半,然后进入拥塞控制阶段。每次收到重复的ACK时,扩充CWND为一个SMSS。当快速恢复结束后,将CWND设置为SSTHRESH。NEWRENO算法,是在RENO基础上改进的,提高了RENO的执行效率。NEWRENO版的快速恢复可以进行部分确认的处理,因此较RENO版它在快速恢复阶段持续的时间会更长,在局部放大图9中可
48、以看出,NEWRENO的拥塞窗口在发生拥塞之后的一段很长的时间1115S1145S内都是增长的。SACK算法,SACK自动启动快速重传和快速恢复两个算法,并且因为使用了选择性确认和重传,SACK的重传更具目的性和明确性,所以在一个窗口内,它可以很快的完成本次发送窗口内丢失报文段的重传工作,从图中可以看出,SACK每次结束重传过程比NEWRENO更快。通过对仿真结果的分析,我们可以看出RENO版的TCP性能要优于TAHOE版,NEWRENO版和SACK版要优于RENO版。但是SACK版TCP比较麻烦,涉及到了数据包头部的扩展字段,每次在进行数据传输时都要添加SACK列表,这个提高了对两端处理器的
49、要求。5结束语本文对OPNETMODELER仿真软件和TCP协议的相关内容进行了简要的介绍,学习了OPNETMODELER软件的仿真机制和仿真流程。拥塞控制在计算机网络中占有重要地位,所以好的拥塞控制算法可以充分利用网络链路能力,达到较高的网络利用率和吞吐率。文中对TCP各版本的拥塞控制算法进行了分析,并利用OPNETMODELER进行了仿真。通过仿真结果可以非常准确和直观地得到各TCP版本的性能,从而说明了拥塞控制算法对网络性能的影响。由于时间和个人能力的限制,对于TCP协议的一些改进算法,并没有在OPNETMODELER中实现。具体表现在以下几个方面1改进报文发送速度。可以通过添加一个漏桶
50、BUCKET,通过这个BUCKET来平滑一个RTT内报文的发送速度,避免RTT内报文段的强突发。这个改进可21以降低TCP协议对中间节点缓冲区的要求,同时可以降低由于中间节点缓冲区溢出造成的丢包现象,从而提高网络吞吐率,这个在高速远距离网络中具有重要的意义。2采用协商RTT,提高RTT的公平性。在OPNETMODELER模型库中自带的TCP模型中,RTT采用一定的算法求得平均RTT,然后根据平均RTT来动态的计算RTO。在存在不同RTT的TCP流的网络中,按照这种算法,RTT较小的TCP流会抢占RTT较大的TCP流的链路占有率,引起RTT的不公平性。为了解决这个问题,我们可以采用协商RTT的方