TCP网络技术.docx
- 文档编号:2723220
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:25
- 大小:552.33KB
TCP网络技术.docx
《TCP网络技术.docx》由会员分享,可在线阅读,更多相关《TCP网络技术.docx(25页珍藏版)》请在冰点文库上搜索。
TCP网络技术
《能力拓展训练》任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
TCP网络技术
课程设计目的:
安排学生进行与专业有关的综合性设计和研究,开展专题调研、探索、研究和设计,培养学生综合应用所学知识分析问题、解决问题的能力;锻炼学生查询文献资料、灵活运用知识、有效开展科学研究的能力;提高学生的综合素质。
课程设计内容和要求:
对TCPVeno相关课题和问题进行调研,查阅资料,分析问题,设计和比较方案,进行综合分析、实验或仿真并得出结论,写出研究报告。
初始条件:
1.计算机1台;
2.中国期刊全文数据库;
3.万方数据库;
4.维普数据库。
时间安排:
第19周,安排设计任务;
第20-24周,完成各项任务,并撰写课程设计报告;
第25周,答辩。
指导教师签名:
2010年月日
系主任(或责任教师)签名:
2010年月日
目录
摘要1
Abstract2
1TCPReno协议3
1.1慢启动与拥塞避免3
1.2快速重传与快速恢复4
1.3Reno算法的性能分析5
2TCPVeno协议6
2.1TCPVeno的拥塞避免算法6
2.2TCPVENO的快速系传和快速恢复算法6
2.2.1接收ACK确认超时6
2.2.2收到重复ACK确认6
3TCP-NewVeno协议8
3.1网络状态的监控算法8
3.2拥塞控制10
3.3NS2基本简介11
3.3.1NS2的本质和主要内涵11
3.3.2NS2使用方法12
3.3.2NS2的软件构成13
3.4TCP-NewVeno的性能评估13
3.4.1仿真环境14
3.4.2仿真结果14
4TCPVenoPlus协议17
4.1拥塞损失窗与随机丢包率17
4.2仿真与评估19
4.2.1仿真模型19
4.2.2吞吐量20
4.2.3公平性21
5小结与展望22
参考文献24
摘要
1988年VanJacobson指出了TCP在控制网络拥塞方面的不足,并提出了“慢启动”(slowstart)算法,“拥塞避免”(congestionavoidance)算法。
1990年出现的TCPReno版本增加了“快速重传”(fastretransmit)算法,“快速恢复”(fastrecovery)算法。
避免了网络拥塞不够严重时采用“慢启动”算法而造成过大地减小发送窗口尺寸的现象。
这样TCP的拥塞控制就由这4个核心部分组成。
随后又出现了TCP的改进版本如TCPVeno,TCPNewVeno,TCPVenoPlus等。
TCP拥塞控制是通过控制一些重要参数的改变来实现的,这些重要参数包括:
拥塞窗口(cwnd),发送窗口(wnd),慢启动阀值(SSthresh),回路响应时间(RRT),超时重传计数器(RTO)。
关键词:
TCPReno,TCPVeno,TCPNewVeno,TCPVenoPlus
Abstract
In1988,VanJacobsonpointedouttheTCPincontrolnetworkcongestioninsufficiency,andputsforwardthe"slowstart"(slowstart)algorithm,"congestionavoidance)toavoid"(congestionalgorithm.In1990theTCPRenoversion"rapidretransmission"(fastretransmit)algorithm,the"quickrecovery"(fastrecovery)algorithm.Avoidusingnetworkcongestioninsevereenoughto"slowstart"algorithmdecreasesandthewindowsizehadsentthephenomenon.SuchTCPcongestioncontrolbythefourcorecomponents.ThenagainVenoasimprovedversionsTCP,etc.TCPiscongestioncontrolthroughthecontrolofsomeimportantparameterstochangetheseimportantparametersincluding:
CWND),congestionwindow(sent),WNDwindow(slowstartthreshold(SSthresh),loop(RRT)responsetime,overtimeretransmissioncounter(RTO).
Keywords:
TCPReno,TCPVeno,TCPNewVeno,TCPVenoPlus
1TCPReno协议
TCPReno是目前应用最广泛且较为成熟的算法。
该算法所包含的慢启动、拥塞避免和快速重传、快速恢复机制,是现有的众多算法的基础。
1.1慢启动与拥塞避免
TCP发送端采用慢启动和拥塞避免算法来控制向网络输送的数据量。
为了实现这些算法,必须向TCP每个连接状态加入3个参量:
(1)拥塞窗口(cwnd),如前所述,它是对发送端收到确认(ACK)之前能向网络传送的最大数据量的一个发送端的限制。
(2)接收端通知窗口(rwnd),它是对未完成数据量的接收端的限制,cwnd和rwnd的最小值决定了数据传送。
(3)慢启动阀值(ssthresh),被用来确定是用慢启动还是用拥塞避免算法来控制数据传送,具体用法如下:
当cwnd
ssthresh的初始值可以任意大(比如,一些实现中使用接收端通知窗口的尺寸),但是一旦对拥塞响应之后,其大小可能会被减小。
在不清楚网络环境的情况下向网络传送数据,要求TCP缓慢地探测网络以确定可用带宽,以避免突然传送大量数据而使网络拥塞。
为达此目的,在传送开始时,采用了慢启动机制,这个机制在修复了由重发定时器探测到的数据丢失之后也被采用。
首先要确定的是cwnd的初始值IW(初始窗口大小),这里规定它必须小于或等于2*SMSS字节而且不能大于两个数据段。
在慢启动期间,每收到一个新的ACK,cwnd最多增长1。
直到cwnd超过ssthresh或者检测到拥塞时,停止执行慢启动算法,转入拥塞避免阶段。
在拥塞避免期间,cwnd在每个ACK以1/cwnd(或每个RTT增加SMISS个字节)的速度递增。
拥塞避免算法一直保持直到检测出拥塞。
等式(1-1)给出了一个在拥塞避免期间用来修正cwnd值的公式:
cwnd+=1/cwnd(式1-1)
每收到一个非重复的ACK都采用等式(1-1)来调整cwnd。
等式(1-1)用于近似拥塞避免算法的增长。
在实现中,在拥塞避免期间常用公式:
cwnd+=SMSS*SMSS/cwnd来修正cwnd的值,当SMSS*SMSS/cwnd<1时,cwnd+=1。
另一种改进的方案是每当新的ACK到来时记下被新确认的字节数,然后cwnd就可增加相应字节数,这个增加的数目最多可达到SMSS字节。
一旦TCP发送端使用重传定时器检测到包丢失时,ssthresh的值就如下设置:
ssthresh=max(FlightSize/2,2*SMSS)(式1-2)
式中,FilghtSize是已发送但未收到ACK的数据的大小。
在重发了丢失的数据段之后,cwnd必须被设置成LW(丢失窗口),它等于一个满尺寸数据段的大小。
再发丢失的数据段之后,发送端起用慢启动算法增长窗口直到该窗口大小增长到等于新设置的ssthresh值之后,又采用拥塞避免算法了。
1.2快速重传与快速恢复
当接收端收到一个失序的数据报时,会立即发回一个重复ACK,这个ACK的目的是告知发送端收到一个失序的数据报并说明其所期望的接受序号。
从发送端的角度看,重复ACK可能是许多网络问题引起的。
首先,它们有可能是因为包丢失而引起。
在此情况下,在此数据段之后的所有数据段都会触发重复ACK。
其次,重复ACK可能是由于网络对数据段的重新排序引起的。
最后,重复ACK有可能是ACK或数据段被网络复制所引起的。
此外,当接收端部分或完整地填补了序号空缺应立即发送一个ACK,这样可以更及时地通知发送端,使其迅速从重发状态中恢复过来。
TCP发送端应该使用快速重传算法来探测或者修复数据丢失,在收到3个重复ACK(即连续的4个相同的ACK,标志着1个数据段已丢失)时,TCP不等重传定时器超时就立即重传看来已丢失的数据段。
此后起用快速恢复算法来进行新的数据传输,直到1个非重复ACK到达。
下面是快速传送/快速恢复算法的实现:
(1)当第二个重复ACK收到时,ssthresh根据等式(1-2)设值。
(2)重传丢失的数据段并将cwnd的值设置为ssthresh+3*SMSS,称之为给拥塞窗口“充气”。
(3)此后对每个接收到一个重复ACK,将cwnd增大SMSS字节,这将人为地扩充拥塞窗口用以反映已经离开网络的附加数据段。
(4)如果cwnd和接收端的通知窗口值允许的话,发送一个数据段。
(5)当下一个确认新数据的ACK到达时,设定cwnd值为ssthresh(步骤1设置的值),这称作给窗口“放气”。
这个ACK必须是步骤1触发的重发引起的确认,重发之后一个RTT(在接收端有次序紊乱的数据段的情况下,它可能一会儿就到达)。
另外,此ACK应该确认丢失数据段和第二个重复ACK期间的数据段,如果它们一个也没有丢失的话。
1.3Reno算法的性能分析
从Reno运行机制中很容易看出,为了维持一个动态平衡,必须周期性地产生一定量的丢失,再加上AIMD机制—减少快,增长慢,尤其是在大窗口环境下,由于一个数据报的丢失所带来的窗口缩小要花费很长的时间来恢复,这样,带宽利用率不可能很高且随着网络的链路带宽不断提升,这种弊端将越来越明显。
公平性方面,根据统计数据,Reno的公平性还是得到了相当的肯定,它能够在较大的网络范围内理想地维持公平性原则。
2TCPVeno协议
TCPVeno拥塞控制主要对传统TCP(TCPReno)的拥塞避免算法(CongestionAvoid)、快速重传(FastRetmnsmit)和快速恢复(FastRecovery)机制,进行了改进,而对慢启动算法没有进行任何修改。
当Veno判断出网络的丢包是由高误码率造成的时候,就采用改进的拥塞控制机制;相反,当网络的状态处于拥塞时,就还是采用传统的TCP拥塞控制机制来处理丢包。
2.1TCPVeno的拥塞避免算法
TCPVeno对该算法的修改表现在:
在原有增加方式的基础上,考虑了连接所处的阶段。
当估计到连接处于拥塞阶段时(也就是当队列中积压的报文个数N超过门限值B后),这时的拥塞避免算法就由以前的cwnd在每个RTT内增加l,变为每两个RTT内才增加1。
可以看到,当队列中积压的报文个数超过门限值β后,TCPVeno每两个瑚盯窗口数目增加l,很明显的在原有增加方式的基础上降低了窗口的增加速度,使TCPVeno能更长时间的处于较大的窗口数目状态,使窗口可以更长时间的处于可工作状态,提高效率和吞吐量。
2.2TCPVENO的快速系传和快速恢复算法
通过两种机制检测拥塞的发生——接收AcK确认超时和收到重复的AcK确认。
2.2.1接收ACK确认超时
在传统的TCP算法中,当发送的数据包在指定时间段内未收到AcK确认时,发送端定时器超时,此时启动慢启动算法,TCP慢启动门限值∞lhresh设定为cwnd/2,cwnd设定为l。
TCPVENO仍然沿用了这种机制。
2.2.2收到重复ACK确认
由于接收端收到了顺序错乱的数摒包后,仍然回应最后收到的正常数据包的AcK确认。
此时,发送端会收到多个相同的确认AcK。
在Ren0中,当收到3个重复的AcK确认后,尽管此时发送端定时器尚未超时,但发送端认为对应的数据包已经丢失。
开始进行拥塞处理,重传丢失的数据包,这种机制称为快速重传机制。
TCPVeno对快速重传之后的窗口调整算法(快速恢复算法)中的ssthresh的设定做了修改:
如果N<β(随即丢包是由高误码率引起的),那么:
ssthresh=cwnd×(4/5)
如果N>β(丢包是由网络拥塞引起的),那么:
ssthresh=cwnd/2
可以看到,当丢包是由网络的拥塞造成的时候,TCPVeno的快速重传算法和传统的TCP一致,没有进行修改;但是当链路出现随机丢包后,如果处于正常阶段(N<β),TCPVeno适度的降低了慢启动门限值(ssthresh),使TCP窗口(cwnd)处于较大值状态,提高吞吐量。
3TCP-NewVeno协议
在这部分,我们将介绍TCP-NewVeno来提高TCP-VENO的性能,这里重点介绍TCP-NewVeno里面的监控算法与拥塞控制。
3.1网络状态的监控算法
TCP-NewVeno增加了网络状态的监控算法来解决BaseRTT的问题。
这里的TCP-NewVeno将网络分为稳定,拥塞增加和拥塞减少三种状态。
图3-1TCP-NewVeno中网络的稳定状态图
图3-1解释了网络的一种稳定状态。
在这个状态中,发送端无延迟的在Sn和Sn+1时刻分别发送packetn和packetn+1给接收端。
发送端在Rn和Rn+1各自收到了packetn和packetn+1的ACK包。
因为没有延迟,两个ACK包收到的时间间隔Rn+1−Rn跟发送端的时间间隔Sn+1−Sn相等。
图3-2TCP-NewVeno中网络的拥塞增长状态图
图3-2则展示了网络的拥塞增长状态。
在这种状态下,包会因为网络拥塞增加而进入中间节点的队列。
因此包进入队列而延迟增加,ACK包的接收间隔也会因此增加。
所以ACK包接收间隔会大于包发送的间隔。
图3-3TCP-NewVeno中网络的拥塞减小状态图
图3-3是网络拥塞减弱状态。
由于拥塞减弱,包通过队列的延迟也将减小。
接收ACK包的时间间隔要小于发送端发包的时间间隔。
Dq=ACKReceivingInterval−PacketSendingInterval
=(Rn−Rn−1)−(Sn−Sn−1)(式3-1)
ΔDq=Dqn−Dqn−1(式3-2)
为了探测网络状态,TCPNewVeno定义了Dq和ΔDq。
在稳定的网络状态下,因为接收ACK的时间间隔和发送端包发送的时间间隔相等,所以Dq为零。
在拥塞增长阶段,因为接收ACK的时间间隔大于发送端包发送的时间间隔,Dq为正值。
在拥塞减小阶段,因为接收ACK的时间间隔小于发送端包发送的时间间隔,Dq为负值。
ΔDq是Dq的差分方程,表示拥塞增长率的程度。
表3-1Dq和ΔDq状态汇总表
Dq<0
拥塞减小状态
Dq=0
稳定状态
Dq>0
拥塞增长状态
ΔDq<0
拥塞度减小状态
ΔDq=0
稳定状态
ΔDq>0
拥塞度增长状态
3.2拥塞控制
TCP-Veno通过使用N和β来估计网络状态。
但它依然继承了TCP-Vegas中的BaseRTT问题。
因此TCP-Veno不能准确的估计网络状态。
为了解决这个额为难题,TCP-NewVeno引入了Dq和ΔDq。
通过使用这些参数,TCP-NewVeno改变了AIMD在TCP-Veno中的定义。
if(N<β)
setcwnd=cwnd+1
if(N≥β)
if(Dq<0)//HighlyAggressive时期
setcwnd=cwnd+1
if(Dq=0)//Aggressive时期
if(ΔDq≤0)
setcwnd=cwnd+1
if(ΔDq>0)
setcwnd=cwnd+1/2
if(Dq>0)//Conservative时期
if(ΔDq≤0)
setcwnd=cwnd+1/4
if(ΔDq>0)
setcwnd=cwnd
以上是TCP-NewVeno和式增加的算法。
如果N比β小,TCP-NewVeno就在每一个往返时间之后把cwnd窗增加一,因为此时信道带宽还没用满。
如果N比β大,TCP-NewVeno根据Dq的值将cwnd的调整分为三种状态,分别为highlyaggressive,aggressive,和conservative时期。
首先在highlyaggressive时期,网络拥塞状态有所好转,在这种状态下,TCP-NewVeno在每一个往返时间之后把cwnd窗增加一。
其次,网络状态在aggressive的时候是稳定的。
因为TCP-Reno在网络稳定的情况下会增加cwnd,所以TCP-NewVeno也会根据ΔDq的值来相应的增加cwnd的值。
最后,conservative时期意味着带宽已经所剩无几,因此,如果ΔDq是负值,TCP-NewVeno会保守的增加cwnd,如果ΔDq是正值,TCP-NewVeno会保持cwnd值不变。
if(N≥β)
if(Dq>0)//CongestionLoss
setssthreshold=cwnd/2
setcwnd=ssthreshold
else
Keepallparameters
以上是TCP-NewVeno积式减少的算法。
在TCP-Veno中,当接收端收到三个重复ACK包的时候,它就会试着去根据N和β来找到丢包的原因。
但是,由于BaseRTT不精确,TCP-Veno不能准确的得出结果。
为了解决TCP-Veno中的这个问题,TCP-NewVeno引入了Dq的概念。
如果N大于β并且Dq是正值,TCP-NewVeno就认定网络是拥塞状态。
因此当在这个状态下检查出来了丢包的情况,TCP-NewVeno就会像TCP-Reno一样引入拥塞控制。
TCP-NewVeno通过引入新的参数Dq和ΔDq改变了TCP-Veno中的AIMD,TCP-NewVeno动态的改变了cwnd的值。
并且它也能区别丢包的原因。
因此TCP-NewVeno可以避免重传丢失的包和引入不必要的拥塞控制。
总的来说,TCP-NewVeno极大的提高了移动设备的节能效果和信道利用率。
3.3NS2基本简介
NS2是指NetworkSimulatorversion2,NS(NetworkSimulator)是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。
所以,NS成了目前学术界广泛使用的一种网络模拟软件。
3.3.1NS2的本质和主要内涵
NS2(NetworkSimulator,version2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。
由UCBerkeley开发而成。
它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。
目前NS2可以用于仿真各种不同的IP网,已经实现的一些仿真有:
网络传输协议,比如TCP和UDP;业务源流量产生器,比如FTP,Telnet,WebCBR和VBR;路由队列管理机制,比如Droptail,RED和CBQ;路由算法,比如Dijkstra等。
NS2也为进行局域网的仿真而实现了多播以及一些MAC子层协议。
NS2使用C++和Otcl作为开发语言。
NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。
事件调度器计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来相互通信,但这并不耗费仿真时间。
所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器。
它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。
事件调度器的另一个用处就是计时。
NS是用Otcl和C++编写的。
由于效率的原因,NS将数据通道和控制通道的实现相分离。
为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。
当仿真完成以后,NS将会产生一个或多个基于文本的跟踪文件。
只要在Tcl脚本中加入一些简单的语句,这些文件中就会包含详细的跟踪信息。
这些数据可以用于下一步的分析处理,也可以使用NAM将整个仿真过程展示出来。
3.3.2NS2使用方法
使用NS进行网络仿真的方法和一般过程。
进行网络仿真前,首先分析仿真涉及哪个层次,NS仿真分两个层次:
一个是基于OTcl编程的层次。
利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。
另一个是基于C++和OTcl编程的层次。
如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下:
(1)开始编写OTcl脚本。
首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2)建立协议代理,包括端设备的协议绑定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。
NS通过Trace文件来保存整个模拟过程。
仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。
(6)用NS解释执行刚才编写的OTcl脚本。
(7)对Trace文件进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
NS2采用两级体系结构,为了提高代码的执行效率,NS2将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网络组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2的前端是一个OTcl解释器,称为解释层,主要功能是对模拟环境的配置、建立。
从用户角度看,NS2是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本解释器。
NS2中编译类对象通过OTcl连接建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。
3.3.2NS2的软件构成
NS2包含Tcl/Tk,OTcl,NS,Tclcl。
其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP 网络技术
![提示](https://static.bingdoc.com/images/bang_tan.gif)