tahoe

更新时间:2022-11-22 16:52:09 阅读: 评论:0


2022年11月22日发(作者:测英文名的网站)

TCP快速重传与快速恢复原理分析

标签:tcp算法网络lessstructurenetwork

2012-02-0318:0719177人阅读评论(3)收藏举报

分类:

TCP/IP(83)

作者同类文章X

版权声明:本文为博主原创文章,转载请注明出处。

超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开

启一个计时器,

在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功

为止。这是数据

包丢失的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接

收到3个以上

的重复ACK,就应该意识到,数据丢了,需要重新传递。这个机制不需要等到重传定时器

溢出,所以叫

做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速

恢复算法。

快速重传和快速恢复旨在:快速恢复丢失的数据包。

没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没

有新的数据包

被发送。

快速重传和快速恢复算法是在4.3BSD中提出的,并在RFC2001和RFC2581中描述。

快速重传与快速恢复经历了几个阶段。

Tahoe算法是TCP的早期版本。它的核心思想是:让cwnd以指数增长方式迅速逼近可用

信道容量,然后

慢慢接近均衡。Tahoe包括3个基本的拥塞控制算法:慢启动、拥塞避免、快速重传。

我们可以看到,Tahoe不存在快速恢复算法。这也是它的不足之处。

在收到3个重复ACK或者在超时的情况下,Tahoe置cwnd为1,然后进入慢启动阶段。

这一方面会引起网

络的激烈震荡,另一方面大大降低了网络的利用率。

也就是说,一旦发现掉包,那么cwnd就被打回原形。

没有快速恢复算法,在恢复丢失数据包期间,不能发送新的数据包,这段时间的吞吐量为0。

而实际上

如果利用这段时间来发送适量的新数据包,可以大大的提高丢包时的传输效率。这就是快速

恢复名称的

由来。

Reno与Tahoe相比,增加了快速恢复阶段,也就是说,完成快速重传后,进入了拥塞避免

阶段而不是慢

启动阶段。

RenopreventsthecommunicationpathfromgoingemptyafterFastRetransmit.

RenonderusadditionalincomingdupACKstoclocksubquentoutgoingpackets.

算法描述:

step1:

if(dupacks>=3){

ssthresh=max(2,cwnd/2);

cwnd=ssthresh+3*SMSS;

}

step2:重传丢失的分组

step3:此后每收到一个重复的ACK确认时,cwnd++

step4:当收到对新发送数据的ACK确认时,cwnd=ssthresh,这个ACK能够对

那些在

丢失的分组之后,第一个重复ACK之前发送的所有包进行确认。

在快速恢复阶段,每收到重复的ACK,则cwnd加1;收到非重复ACK时,置cwnd=ssthresh,

转入拥塞避免阶段;如果发生超时重传,则置ssthresh为当前cwnd的一半,cwnd=1,

重新进入

慢启动阶段。

Reno快速恢复阶段退出条件:收到非重复ACK。

o

Reno不能有效的处理多个分组从同一数据窗口丢失,于是有了NewReno。

NewReno修改了Reno的快速恢复算法,处理一个窗口中的多个报文段同时丢失时出现的

“部分确认”

(PartialACKs,它在快速恢复阶段到达并且确认新数据,但它只确认进入快速重传之前发

送的一部分

数据)。

在这种情况下,Reno会退出快速恢复状态,等待定时器溢出或者重复的确认ACK到达,

但是NewReno

并不退出快速恢复状态,而是:

step1:重传紧接着那个部分ACK之后的报文段,拥塞窗口等于其减去partial

ACK的部分。

step2:对于得到确认的新数据,cwnd++

step3:对于第一个或每一个PartialACK,重传定时器复位。且每次都重置cwnd

=原cwnd/2。

NewReno算法中有变量recover,其值为检测到丢包时的最大发送序列号。只有当recover

之前的数据

报都确认完后,才能推出快速恢复,进入拥塞避免阶段。

当超时时,将发送的最大序列号保存在recover变量中,结束快速恢复过程。

NewReno不支持SACK。

DuringFastRecovery,SACKmaintainsavariablecalledpipethatreprentsthe

estimatednumber

ofpacketsoutstandinginthepath.

Thenderonlyndsneworretransmitteddatawhentheestimatednumberofpackets

inthepath

iablepipeisincrementedbyonewhenthe

ndereither

crementedbyonewhenthe

nderreceives

adupACKpacketwithaSACKoptionreportingthenewdatahasbeenreceivedatthe

receiver.

Uofthepipevariabledecouplesthedecisionofwhentondapacketfromthe

decisionofwhich

packettond.

Thendermaintainsadatastructure,thescoreboard,thatremenbers

acknowledgementsfrom

enderisallowedtondapacket,itretransmitsthe

nextpacket

earenosuchpackets

andthe

receiver'sadvertidwindowissufficientlylarge,thenderndsanewpacket.

Whenaretransmittedpacketisitlfdropped,theSACKimplementationdetectsthedrop

witha

retransmittimeout,retransmittingthedroppedpacketandthenslow-starting.

ThenderexitsFastRecoverywhenarecoveryacknowledgementisreceived

acknowledging

alldatathatwasoutstandingwhenFastRecoverywantered.

step1:

FastRecoveryisinitiated,

pipe-1(forthepacketassumedtohavebeen

dropped).

pipe+1(forthepacketretransmitted)

cwnd=cwnd/2

step2:

Ifpipe<=cwnd,nderretransmitspacketsinferredtobe

missing.

Iftherearenosuchpackets,nderndsnewpackets.

step3:

whennderreceivesadupACK,pipe=pipe-1

whennderndsanew/retransmitanoldpacket,pipe=pipe

+1

step4:

ForpartialACKs:pipe=pipe-2

(onefororiginaldroppedpacket,oneforretransmittedpacket)

step5:

allpacketsoutstandingbeforeFastRecoverywereACKed,

exitFastRecovery.

当退出FastRecovery时,cwnd同样恢复成ssthresh,进入拥塞避

免。

与Reno不同的是:

(1)whentondpacket:由计算pipe变化决定,不再是计算cwnd变化。

(2)whichpackettond:由SACK携带信息决定,反应更迅速。

问题1:在一个窗口内重复丢包会造成影响吗?

答案:会。如果只丢一个包,那么收到非重复ACK时,就能确认完本窗口内所有的包。然

后进入拥塞

避免阶段。这就是Reno想达到的。

而如果丢失多个包,那么收到非重复ACK时,不能确认完本窗口内所有的包。但是,也会

退出快速恢复,

进入拥塞避免阶段。

这个时候可能会发生两种情况:

(1)多次进行快速重传和快速恢复。又发现丢包,再次进入快速重传和快速恢复。注意,

每次进入

快速重传和快速恢复时,ssthresh和cwnd都要减半。多次丢包最终会导致ssthresh指数

减小。

通过画cwnd(t)图可以发现,不仅这段时间吞吐量非常低,而且导致恢复完后拥塞避免的起

点非常低,从

而导致之后的吞吐量也很低。

(2)经过多次快速重传和快速恢复,接着发生传输超时。

那么,发生传输超时需要什么样的条件呢?

1)whentwopacketsaredroppedfromawindowofdata,theRenonderisforcedtowait

fora

retransmittimeoutwheneverthecongestionwindowislessthan10packetswhenFast

Recoveryisinitiated,andwheneverthecongestionwindowiswithintwopacketsofthe

receiver's

advertidwindowwhenFastRecoveryisinitiated.

2)whenthreepacketsaredroppedfromawindowofdata,theRenonderisforcedto

waitfor

aretransmittimeoutwheneverthenumberofpacketsbetweenthefirstandthecond

dropped

packetsislessthan2+3W/4,forWthecongestionwindowjustbeforetheFast

Retransmit.

这种情况出现的概率极大,也就是说一个窗口出现3个丢包,有大概率出现超时。当丢包

时窗口大小

为15,有三个丢包,那么无论丢包的顺序如何,2次FR/FR之后,总会出现超时。

超时一般是因为未确认的数据包>可以使用的cwnd,不能发送新的数据,而网络中有没

有足够的

重复ACK来触发FR/FR。

问题2:为什么发生拥塞时,还增加cwnd?

答案:在检测到丢包时,窗口为cwnd。这时候网络中最多有cwnd个包(in_flight

每当收到

一个重复的ACK,则说明有数据包离开网络,达到接收端了。那么,此时网络中还可以再

容纳1个包。由

于发送端滑动窗口不能移动了,所以如果想保持in_flight,可以使cwnd++。

这样一来,可以提高吞吐量。而实际上,在fastrecovery期间发送的新数据包比起发生丢

包的cwnd来说,

已经是大大减少了。

性能分析

Tahoe没有快速恢复机制,在丢包后,它不仅重发了一些已经成功传输的数据,而且在恢

复期间吞吐量

也不高。

利用SACKoption携带的信息,我们能够提前知道哪些数据包丢失了。NewReno每个RTT

内只能恢复

一个丢失的数据包,所以如果丢失了N个数据包,那么FastRecovery就要持续N*RTT的

时间,当N比较

大时,这是一段相当长的时间。而SACK则没有这个限制,依靠SACKoption的信息,它

能够同时恢复

多个数据包,更加快速和平稳的恢复。

当发生同一窗口多个丢包时,SACK和NewReno最终都能够较为快速和平稳的恢复过来。

而Reno则经

常出现超时,然后再用慢启动来恢复,这个时候Reno的表现就如同Tahoe,会造成已接受

数据的重复

传送。Reno恢复期间会出现吞吐量低、恢复时间长、不必要重发数据、恢复结束后阈值过

低等一些问

题,严重的影响性能。

结论

经过上述分析我们可以看出:

ItisafundamentalconquenceoftheabnceofSACKthatthenderhastochoo

between

thefollowingstrategiestorecoverfromlostdata:

(1)retransmittingatmostonedroppedpacketperround-triptime

(2)retransmittingpacketsthatmighthavealreadybeensuccessfullydelivered.

RenoandNew-Renouthefirststrategy,andTahoeusthecond.

WithSACK,andercanavoidunnecessarydelaysandretransmissions,resultingin

improved

throughput.

SACK的不足

上面说了很多SACK的好话,现在来谈谈它的不足之处。

ForalargeBDPnetworkwherethenumberofpacketsareinflight,theprocesing

overheadof

SACKinformationattheendpointscanbequiteoverhelmingbecaueachSACKblock

invokes

arearchintothelargepacketbuffersofthenderforackedpacketsintheblock,and

every

recoveryofalosspacketcausthesamearchatthereceiver.

在BDP网络,这个问题尤其明显,会严重的消耗CPU而导致一系列问题。在一定程度上

来说,此时

的SACK就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n

为packetsin

flight的数量。

Thesystemoverloadcancauriousproblem:itcancaumultipletimeouts(aven

packet

retransmissionandreceptionsaredelayed)andalongperiodofzerothroughput.

当然,这是中等规模的BDP(100~1000)或大规模的BDP网络才需考虑的问题,对于一

般的BDP而

言不会出现太大的问题。

本文发布于:2022-11-22 16:52:09,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/373.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:sausage
下一篇:tombstone
标签:tahoe
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图