惠州学院毕业论文正文格式Word文档格式.docx
- 文档编号:17618877
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:96.74KB
惠州学院毕业论文正文格式Word文档格式.docx
《惠州学院毕业论文正文格式Word文档格式.docx》由会员分享,可在线阅读,更多相关《惠州学院毕业论文正文格式Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
38~39
[37]李东生,张勇,许四毛.Protel99SE电路设计技术入门与应用.北京:
电子工业出版社,2002
[38]潘永雄,沙河,刘向阳.电子线路CAD实用教程.西安:
西安电子科技大学出版社,2003
10.
第二章TCP拥塞控制及主动队列管理AQM算法
当前网络上的传输主要是通过TCP完成的。
由于可以提供可靠的传输服务,TCP被广泛应用于HTTP、FTP、TELNET以及SMTP等应用程序中。
实际上,在采用了Jacobson的拥塞避免算法后,TCP的应用更加广泛。
该机制帮助发送端决定网络中的可用带宽,从而调整其发送速率。
该方法的基本思想是在可用带宽耗尽前慢慢的增加其发送速率,在拥塞被探测到的时候降低发送速率。
TCP使用拥塞窗口(CWND)来调节其发送速率,线性增加窗口大小来增大发送速率,积式减少窗口大小来缓解网络拥塞。
这种流量控制和拥塞控制的策略,被称作和式增加积式减少(AIMD),可以防止网络过载,已经成为网络鲁棒性和稳定性的一个至关重要的因素。
2.1基本机制
TCP拥塞控制的基础是AIMD(AdditiveIncreaseMultiplicativeDecrease),在一个分组的往返时间中,每发生一个分组的丢失则拥塞窗口减半,否则拥塞窗口加一。
另一个非常重要的组成部分是重传计时器,即在时间到时仍然没有收到答复,则超时重传。
第三个基本的机制是慢启动机制。
发送端不是一开始就以一个网络可能无法支持的高速率来发送,而是通过这种机制来试探网络可提供的带宽。
第四个TCP拥塞控制机制是ACK时钟。
TCP拥塞控制的基本机制主要包括如下的几个部分:
慢启动、拥塞避免、快速重传和快速恢复。
TCP拥塞控制是通过控制一些重要参数的改变而实现的。
TCP用于拥塞控制的参数主要有:
(1)拥塞窗口(CWND):
拥塞控制的关键参数,它描述源端在拥塞控制情况下一次最多能发送的分组的数量。
(2)通告窗口(AWIN):
接收端给源端预设的发送窗口大小,它只在TCP连接的建立阶段发挥作用。
(3)发送窗口(WIN):
源端每次实际发送数据的窗口大小。
(4)慢启动门限值(SSTHRESH):
拥塞控制中慢启动阶段和拥塞避免阶段的分界点。
(5)回路响应时间(RTT):
源端从发送一个TCP分组,到收到接收端确认的时间间隔。
(6)超时重传计数器(RTO):
描述分组从发送到失效的时间间隔,是判断分组丢失与否及网络是否拥塞的重要参数。
通常设为2RTT或5RTT。
(7)快速重传门限值(TCPrexmtthresh):
能触发快速重传的源端收到重复确认包ACK的个数。
当此个数超过TCPrexmtthresh时,网络就进入快速重传阶段。
TCPrexmtthresh缺省值为3。
发送端维护一个拥塞窗口(CWND)状态变量,表示根据当前网络的拥塞情况确定的可以发送的分组数量。
最大窗口表示当前可以发送的最大分组数量,会被设置为拥塞窗口和通告窗口(表示接收端的接收能力)中的较小者。
2.1.1慢启动阶段
新的TCP连接建立的时候,由于TCP源端无法知道当前网络的拥塞情况,发送端通过将拥塞窗口设置为1然后指数增加窗口大小的方式来探测网络情况,直到以下三种情况之一发生:
超时(或3个重复ACK)、到达通告窗口或者到达慢启动门限值。
这个阶段就是慢启动阶段,在该阶段中,TCP源端发送数据的速率是呈指数增加的:
每接收到一个分组的ACK,TCP源端就发送两个分组到网络中。
首先发送一个分组,接收到该份组的ACK后,发送两个分组,然后在接收到它们的ACK后,发送4个分组,形式如同1、2、4、8、16…2n,一直到出现超时、到达通告窗口或者到达慢启动门限值三种情况之一时,慢启动阶段结束,进入拥塞避免阶段。
2.1.2拥塞避免阶段
在几种不同情况触发的拥塞避免阶段中,TCP采取了不同的处理方式。
当拥塞窗口到达慢启动门限值时,TCP进入拥塞避免阶段,TCP源端在每次收到一个ACK时只将CWND增加1/CWND;
当发现超时或收到3个相同ACK确认帧时,即认为网络发生拥塞,在这种情况下,慢启动门限值被设置为当前CWND的一半;
若是由超时引起的拥塞发生时,CWND被置为1。
如果CWND<
=SSTHRESH,则TCP重新进入慢启动过程;
如果CWND>
SSTHRESH,则TCP执行拥塞避免算法,CWND在每次收到一个ACK时只增加1/CWND个分组。
2.1.3快速重传和恢复阶段
当分组超时时,CWND被设置为1,重新进入慢启动,这会导致过大地减小发送窗口尺寸,降低TCP连接的吞吐量。
因此快速重传和恢复就是在源端收到3个或3个以上重复ACK时,就断定分组已经被丢失,并重传分组,同时将SSTHRESH设置为当前CWND的一半,而不必等到RTO超时。
需要指出的是,有很多种不同的TCP的算法如Tahoe[19],Reno[20],Newreno[21],Sack[22][23]andVegas[24]等,虽然在不同阶段采取的方式不尽相同,但在其拥塞控制机制中都保留了两个基本的要素:
(1)TCP源端以分组丢失作为网络内部发生拥塞的一个指示,通过将拥塞窗口至少降低一半来响应该指示。
拥塞窗口的减少意味着降低有效发送速率以缓减拥塞。
(2)在拥塞避免阶段,即线性阶段,TCP源端在每一个RTT之内将拥塞窗口最多增加一个分组。
某些算法的TCP在获得较大可用带宽的情况下对拥塞的响应更积极且具有更小的侵略性。
比如:
TCPTahoe在拥塞情况下将拥塞窗口降到1,而不是当前值的一半。
某些TCP应用在每次接收到两个分组后发送一个ACK,这就使得在拥塞避免阶段其拥塞窗口在每个RTT之内的增加值将小于1。
然而,这两个基本要素给了我们一个TCP发送速率的上界。
2.2TCP拥塞控制的几种算法
如前所述,TCP拥塞控制有多种算法,各算法在控制发送速率以及响应的方式上存在一些差别。
我们将介绍几种很有影响的机制。
2.2.1Tahoe
Tahoe是最初的支持拥塞控制的TCP协议,协议主要包括慢启动和拥塞避免以及快速重传三部分。
(1)慢启动
在新的TCP连接开始的时候,慢启动使得发送端能够逐渐的增大自己发送到网络的分组的速度以探测网络拥塞情况。
利用状态变量CWND来表示发送端的拥塞窗口大小,初始值设置为1,当发送端每收到一个ACK,将CWND增加1。
设置慢启动的CWND增长的上限——慢启动门限值SSTHRESH,当慢启动中CWND增长到SSTHRESH,则停止慢启动,进入拥塞避免阶段。
若在进入拥塞避免之前发生重传超时(RTO),则发送端重新进入慢启动,并设置SSTHRESH为CWND/2。
(2)拥塞避免
在CWND>
SSTHRESH的时候,发送端从慢启动进入拥塞避免阶段,其间每个RTT中CWND增加大约1,当发生重传超时的时候,发送端重新进入慢启动阶段,并且将SSTHRESH设置为CWND/2。
(3)快速重传
在Tahoe中,源端在收到3个或3个以上重复ACK时,就断定分组已经被丢失,并重传分组,同时将SSTHRESH设置为当前CWND的一半。
2.2.2Reno
Reno是在Tahoe基础上提出的,由于Tahoe中一旦发生丢包将重新开始慢启动,发送速率会急剧减小,产生发送速率的抖动,因此增加了快速重传和快速恢复两个阶段。
快速恢复使得发送窗口不至于减小太多,而快速重传实现丢失分组的迅速恢复。
但Reno算法仍有不足。
首先,源端在检测到拥塞后,要重传从分组丢失到检测到丢失时发送的全部分组(即Go-back-N算法),而这中间有些分组被正确地传到接收端,而不必重传。
另外,在大多数TCP实现中,RTO计数器的值被认为是RTT的均值和方差的估计值的函数。
理论上,RTT的测量比较简单。
它只是分组从发出到确认ACK返回源端的时间。
但由于TCP使用的是用一个ACK确认所有已收到数据的“累积”确认方式,所以实际中RTT的估计往往很复杂。
2.2.3NewReno
NewReno[25-28]是对Reno的改进,在Reno算法的基础上在第一步增加新的变量Recover,用于在第5步中收到局部确认(PartialACK)或者新的ACK时执行不同的操作。
具体步骤如下:
(1)如果收到3个重复的ACK,并且发送端没有处在快速恢复阶段,将SSTHRESH的值设置成不超过Max,并用变量Recover记录最大已发送分组的序列号。
(2)重传丢失的分组,设置CWND=SSTHRESH+3。
(3)每接收到一个重传丢失分组的ACK,将CWND加1。
(4)在当前发送窗口和接收端通告窗口允许的情况下,发送一个分组。
(5)当一个ACK包含了新的分组序列号,这个ACK确认了在第2步中重传的分组或者随后的重传分组。
如果这个ACK足以确认所有包括序号为Recover的分组,可以将CWND设置为在第一步中计算的SSTHRESH的值;
如果此ACK确认的分组序号小于Recover,则表明,这是一个PartialACK,重传其序号后第一个没有得到确认的分组,如果用Sum表示此ACK可以确认接收端收到的分组的个数,将CWND减小Sum,反映此Sum个分组离开了网络,通过这种方法确保在退出快速恢复的时候SSTHRESH个分组在网络中。
快速恢复过程将持续到没有重复的ACK收到为止。
2.2.4SACK
当在同一个拥塞窗口内发生多个丢包,TCPReno多次进入和退出快速恢复阶段,这样拥塞窗口有可能经过多次快速恢复阶段后变得很小。
发送端每收到一个PartialACK时,退出快速重传之后,重新进入快速重传时,CWND将减半,当存在多个PartialACK时,发送端有可能会发生重传超时,导致不必要的进入慢启动。
为了解决这个问题,提出了SACK协议。
SACK算法是在Reno基础上进行扩展,对分组进行有选择地确认和重传。
这样,源端就能准确地知道哪些分组被正确的传到接收端,从而避免不必要的重传,减少时延,提高网络吞吐量。
SACK被提议在传统TCP中用于在发送端及接收端之间进行合作的机制。
接收端可以使用SACK来通知发送端它已经接收到的次序紊乱(Out-of-Order)的分组,从而发送端可以只传输那些没有被正确接收的分组。
当有多个分组在同一个RTT中丢失时,SACK可以提供更高效的拥塞恢复机制。
SACK可以提供早期的分组恢复,进而因减少分组重传的数量而提高有效吞吐量。
同时它可以减少k-1个RTT的重传时间,其中k为在同一窗口中丢失的分组个数。
当接收端发现不连续的分组到达,则需要建立SACK选项,按以下规则进行:
第一个块必须包括触发此次ACK的分组的数据块;
接收端必须报告尽可能多的不同的数据块;
SACK选项必须反映重复收到的数据块。
由发送端来对接收端反馈的SACK确认包进行处理,当收到带有SACK选项的ACK时,发送端将其中的块信息存起来,发送分组的内容将根据这些存储的块信息来确定。
假设每个数据段在重传队列里面都有一个ON/OFF标志表示"
SACKed"
,表示这个数据段是否在SACK选项里面被报告过,如果SACKed是ON表示发送端可以在后面的任何重传分组不必包含此数据段,否则表示此数据段可以被重传。
当发生重传超时的时候,发送端将所有分组的SACKed标志置成OFF。
SACKTCP和RenoTCP的主要区别是发送端在快速恢复时的动作,在快速恢复中,SACK中发送端保存一个状态变量Pipe来估计网络中的分组的个数。
SACK和NewReno同样可以解决Reno中存在的PartialACK的问题,NewReno只需要修改发送端的动作,而SACK需要同时修改发送端和接收端的动作以及TCP协议;
但NewReno在一个RTT内只能重发一个丢失的分组,而SACK对一个RTT内的多个丢包可以尽快的实现重发。
同时SACK在以下方面具有优势:
(1)解决在特殊链路上的非拥塞丢失(如卫星连接)的恢复。
(2)允许发送端更智能地区分第一个或者第二个重复的ACK。
(3)帮助发送端发现对丢包的错误判断,可以恢复由此引起的对窗口的减小。
2.3被动式队列管理DropTail算法
队列管理通过选择何时丢弃何种业务流分组来控制队列长度。
因为分组的丢弃通常被TCP的流量控制视为拥塞发生的信号,因此,可以在拥塞发生之前,通过智能预测环节,有目的地丢掉一部分分组,从而及时通知发送方降低发送速率。
传统的队列管理技术对每个队列设置一个最大值,当到达最大值时就不再接受后续的分组,直到队列长度不再是最大值(比如队列中有新的分组被路由器发送出)。
由于最新到来的分组被丢弃,也就是说队列尾部的分组被丢弃,这种技术被称为DropTail。
DropTail有两个重要的缺点。
(1)公平性问题
在一些情况下,DropTail会使得一个或几个流独占路由器缓冲区资源,而使得其他的流在同等情况下得不到资源。
这常常是由同步或其他时序关系引起的。
(2)经常保持满队列状态
由于DropTail只有在满队列的情况下才会丢弃分组,对发送方发出拥塞信号,这使得在网络繁忙的情况下,队列会经常维持在满队列状态或接近满队列的状态下。
降低队列稳定状态时的大小是很重要的,是队列管理最重要的目标。
这并不仅仅是为了降低端到端的传输延迟。
而且,网络中在某一时刻出现许多突发的分组是很经常的,如果队列很满的话,在此时会导致很多分组被丢掉,使得各个流被扼杀。
而在下一时刻,各个流均检测到分组的丢失,在得知网络拥塞后同时降低发送速率,各个流同时进入慢启动状态,又会使得接下来的一段时间里,链路利用率和总吞吐量降低。
这种发送速率的振荡往往是持续的,因而大大影响了性能。
网络中的业务在时间上是不均衡的。
路由器的缓冲是为了缓存某一瞬间出现的大量分组,并预期在随后的空闲时期内将它们发出。
这对传输某瞬间突然出现的大量分组是非常重要的。
所以,通常希望路由器中有足够的缓冲区空间,以吸收后面某个时刻突然暴发的大量分组。
缓冲区空间的大小并不是我们所希望的稳定状态下的队列长度,它反映的是我们期望能够适应网络中的“爆发”业务的能力。
DropTail的全局同步现象,如图2-1、图2-2。
TCP算法分别使用TCP(Tahoe)、TCP/Reno。
图2-1DropTail算法4个TCP(Tahoe)的同步现象
图2-2DropTail算法4个TCP/Reno连接的同步现象
图2-1、图2-2表明4个TCP连接采用Tahoe或者Reno算法,在开始4s后均引起了同步现象。
2.4几种典型主动队列管理算法
2.4.1RED算法(OriginalRED算法)
RED拥塞控制机制的基本思想是通过监控路由器缓冲区队列的平均长度来探测拥塞,一旦发现拥塞逼近,就随机地选择连接来通知拥塞,使他们在队列溢出导致丢包之前减小拥塞窗口,降低发送数据速度,从而缓解网络拥塞。
由于RED算法是基于FIFO队列调度策略的,并且只是丢弃正进入路由器的分组,因此其实施起来也较为简单。
RED算法主要试图达到以下目标:
(1)最小包丢失率和排队延迟。
(2)避免全局同步现象。
(3)避免对突发业务的偏见:
网络中含有大量的突发数据,而“丢尾”算法对突发业务有很大的偏见。
在采用“丢尾”算法的路由器中,如果某个流的突发性越高,则当该流的包进入队列时越容易造成队列溢出,从而导致连续地丢弃大量的该流的包。
(4)即使在缺乏传输层协议有效配合的情况下也能控制平均队列长度,从而避免拥塞。
为了达成以上目标,RED算法按照指数权值移动均值EWMA(ExponentialweightedMovingAverage)的方法来计算平均队列长度,并且随机地选择正进入路由器的包进行丢弃。
这种方法能被有效地实施而无需在路由器中维持每个流(Per-Flow)的状态信息。
RED算法主要分为两个部分。
首先是计算平均队列长度,以此作为对拥塞程度的估计。
另一个就是计算丢弃包的概率。
(1)计算平均队列长度
由于Internet数据的突发性,如果一个队列在很多时候是空的,然后迅速被充满,又很快被取空,这时就不能判定路由器发生拥塞而向源端发送拥塞指示。
因此,RED算法在计算平均队长Qavg时采用了类似低通滤波器(LowPassFilter)带权值的方法:
公式(2-1)
其中,Wq为权值,Queue为队列采样数据。
量时实际队列长度。
这样由于Intemet数据的突发本质或者短期拥塞导致的实际队列长度暂时的增长将不会使平均队长有明显变化,从而“过滤”掉短期瞬间的队长变化,尽量反映长期的拥塞变化。
在计算平均队长的公式中,权值Wq相当于低通滤波器的时间常数,它决定了路由器对输入流量变化的反应程度。
因此对Wq的选择非常重要,如果Wq过大,那么RED算法就不能有效地过虑短暂的拥塞;
如果Wq太小,那么Qavg就会对实际队列长度的变化反应过慢,不能合理地反映拥塞状况,在这种情况下,路由器就不能有效检测到早期的拥塞。
Wq的值应根据不同情况预先设置,一般来说,它是由路由器允许发生的突发业务的大小和持续的时间所决定的。
(2)计算丢包概率
计算平均队长的目的就是为了反映拥塞状况,根据拥塞的程度来计算丢弃包的概率,从而有效地控制平均队列长度。
RED算法有两个和队列长度相关的闭值:
Qmin和Qmax。
当有包到达路由器时,RED算法计算出平均队长Qavg。
若Qavg小于Qmin,则不需要丢弃包;
当Qmin≤Qavg≤Qmax时,计算出概率Pa,并以此概率丢弃包;
当Qavg大于Qmax时,所有的包都被丢弃(如图2-3所示)。
由于RED算法使用的是基于时间的平均队长,就有可能会发生实际队长大于平均队长的情况,如果队列已满,则到达的包只能被丢弃。
计算丢包概率Pa的方法如公式(2-2)、公式(2-3)。
公式(2-2)
公式(2-3)
图2-3丢弃概率与平均队列长度关系图
由于RED算法存在着诸多问题,导致了改进算法的产生。
这些算法主要有:
GentleRED、ARED、NewARED等。
2.4.2GentleRED算法
1999年,Floyd又提出改进的RED算法GentleRED,GentleRED算法继承了RED算法的主要思想,当平均队列小于最大门阀值时,其丢弃概率的计算与RED算法完全一致,而当平均队列Qavg大于2Qmax时,则不象RED算法一样丢弃概率由Pmax到1的跳跃,而是以另一种线性关系计算Pb的概率,然后以Pa概率来丢弃新到达路由器的分组,原理如图2-4所示。
其算法函数表示为公式(2-4)、公式(2-5)。
公式(2-4)
公式(2-5)
注意到Pa不仅和Qavg有关,而且还和从上一次丢包开始到现在进入队列的包的数量Count有关。
随着Count的增加,下一个包被丢弃的可能性也在缓慢增加。
这主要是为了在到来的包之间均匀间隔地丢包,避免连续丢包,从而避免对突发流的偏见和产生全局同步现象。
图2-4GentleRED算法丢弃概率与队列长度关系
2.4.3ARED算法
在拥塞严重的网络中,路由器必须将足够多的拥塞信息通知到源端,以充分降低负载,避免由于队列溢出而丢包。
另一方面,路由器也要防止拥塞信息过多地传给源端,从而造成瓶颈链路利用率的下降。
因此,进行拥塞通知时应充分考虑到瓶颈链路上流的数量。
而RED算法并没有考虑到这一点。
为此ARED(ASelf-configuringRED)提出了一种自动配置机制,根据流量的变化来配置适当的参数。
RED算法中,拥塞指示的发送速度是由参数Pmax来体现的。
如果Pmax太大,那么丢包主要就是由于早期拥塞检测中产生的丢包造成的;
如果Pmax太小,丢包主要就是由于队列溢出造成的。
RED算法的一个弱点是平均队长对拥塞程度和参数设置很敏感。
如果拥塞不太严重或者Pmax很大,则平均队长接近Qmin;
如果拥塞很严重或者Pmax很小,则平均队长接近或大于Qmax。
结果造成平均排队时延对流量负荷和参数设置很敏感。
ARED算法的基本思想就是通过检查平均队长的变化来感知RED算法是应更激进(Aggressive)还是更保守(Conservative)。
如果平均队长是在Qmin附近振荡,那么拥塞控制就太激进了;
如果在Qmax附近振荡,那么拥塞控制就太保守了。
根据所观察到的平均队长,ARED算法动态地Pmax调整的值。
其算法如下:
EveryQavgUpdate:
If(Qmin<
Qavg&
&
Qavg<
Qmax)
Status=between;
Elseif(Qavg<
Qmin&
Status!
=below)
Status=below
Pmax=Pmax/α
Elseif(Qavg>
Qmax&
=above)
Status=above
Pmax=Pmax*β
各参数变量含义:
Status:
平均队长状态
Between:
Qmin和Qmax之间
Below:
小于Qmin
Above:
大于Qmax
α:
Pmax减少量
β:
Pmax增加量
ARED算法的思想很简单,就是根据平均队长是否在Qmin和Qmax之间,对Pmax采用乘法增加和乘法减少(MultiplicativeInereaseMultiplicativeDecrease,MIMD)从而尽量保持平均队长在Qmin和Qmax之间。
ARED算法是对RED算法改动很小的一种算法,它保留了RED算法的基本结构,只需调节参数Pmax从而保持平均队长在Qmin和Qmax之间,消除了RED算法的队列延时问题和参数敏感性问题。
2.4.4改进的NewARED算法
为了提高ARED算法的鲁棒性,SallyFloyd等人提出了一种新的ARED算法NewARED(又称为AdaptiveRED)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 惠州 学院 毕业论文 正文 格式
![提示](https://static.bdocx.com/images/bang_tan.gif)