超时重传、慢启动和拥塞控制、快速重传及恢复

6人阅读 评论(0) 收藏 举报
分类:

1、超时重传

1、引言
TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。
对每个连接, TCP管理4个不同的定时器:

  • 1、重传定时器使用于当希望收到另一端的确认。在本章我们将详细讨论这个定时器以及一些相关的问题,如拥塞避免。
  • 2、坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
  • 3、保活(keepalive)定时器可检测到一个空闲连接的另一端何时崩溃或重启。
  • 4、2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

2、慢启动和拥塞避免算法

拥塞窗口是发送方控制流量,滑动窗口是接收方控制流量。

下面讲解什么是慢启动算法,什么是拥塞避免算法,以及二者如何配合使用避免拥塞???
1、为什么需要慢启动?
在双方握手的时候,会告知对方自己的接收缓冲区大小(接收方接收滑动窗口),而发送方发送窗口是多少较好呢?所以一般发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽存储器的空间,这将严重降低TCP连接的吞吐量。于是TCP在刚开始发送数据的时候支持慢启动算法。

2、为什么需要拥塞避免?
慢启动完成之后,拥塞窗口会持续增大,但是当拥塞窗口增加过快,可能导致过多的数据注入到网络中,引起整个网络的拥塞,从而需要拥塞避免。
3、什么时候确定拥塞发生?
发送方发送一些报文段时,如果发送方没有在时间间隔内收到接收方的确认报文段(响应超时),则就可以人为网络出现了拥塞,就可以进入拥塞避免算法。

4、慢启动和拥塞避免算法原理
拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh。
慢启动算法:就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。慢启动算法是慢启动的指数增加,初始设置cwnd为1个报文段,此后每收到一个确认就加1,那样,这会使窗口按指数方式增长:发送1个报文段,然后是2个,接着是4个等等。
慢启动简单的例子:开始发送方先设置cwnd(拥塞窗口)=1,发送第一个报文段M1,接收方接收到M1后,发送方接收到接收方的确认后,把cwnd增加到2,接着发送方发送M2、M3,发送方接收到接收方发送的确认后cwnd增加到4,慢启动算法每经过一个传输轮次(认为发送方都成功接收接收方的确认),拥塞窗口cwnd就加倍。
拥塞避免算法:为了防止cwnd增加过快而导致网络拥塞,所以需要启动拥塞避免算法。拥塞避免算法使得cwnd缓慢的增加而不是加倍的增长,每经历过一次往返时间就使cwnd增加1,而不是加倍。这样使cwnd缓慢的增长,比慢启动要慢的多。

5、当拥塞发生时候,两种算法如何配合工作?
无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限(ssthresh)设置为发送窗口的一半(>=2),cwnd(拥塞窗口)设置为1,然后在使用慢启动算法,这样做的目的能迅速的减少主机向网络中传输数据,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。慢启动算法拥塞窗口按指数增加,拥塞窗口是按照线性的规律增长,比慢启动算法拥塞窗口增长慢的多。
二者配合工作简单实例:
1、TCP连接进行初始化的时候,cwnd=1,ssthresh=16。
2、连接刚开始使用慢启动算法发送数据,在慢启动算法开始时,cwnd的初始值是1,每次发送方收到一个ACK拥塞窗口就增加1,当ssthresh = cwnd时,就启动拥塞控制算法,拥塞窗口按照规律增长。
3、当cwnd=24时,网络出现超时,发送方收不到确认ACK,此时设置ssthresh=12,(二分之一cwnd),并设置cwnd=1,然后重新开始慢启动算法,当cwnd = ssthresh = 12,慢启动算法变为拥塞控制算法,cwnd按照线性的速度进行增长。
这里写图片描述
这就是所谓的:
加法增大:当网络频发出现超时情况时,ssthresh就下降的很快,为了减少注入到网络中的分组数,而加法增大是指执行拥塞避免算法后,是拥塞窗口缓慢的增大,以防止网络过早出现拥塞。
乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd置为1,ssthresh置为cwnd的一半,然后执行慢启动(cwnd小于ssthresh)。

6、接收方接收窗口和发送方拥塞窗口的关系
网络中实际传输的未经确认的数据大小 = Min(拥塞窗口,接收方的接收窗口)。

3、快速重传与快速恢复算法

针对接收到失序报文的快速重传算法。

快速重传
快重传算法要求首先接收方收到一个失序的报文段后就立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。例如当接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK,现在接收方没有收到M3,而接收到了M4,显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重传算法,在收到M4、M5等报文段的时候,不断重复的向发送方发送M2的ACK。该重复的ACK的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号告诉对方我要M3啊,你快点发给我。如果接收方一连收到三个重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段。
这里写图片描述

快速恢复算法
1、当发送发连续接收到三个确认时,就执行乘法减小算法,把慢启动开始门限(ssthresh)减半,但是接下来并不执行慢启动算法。而是把cwnd设置为ssthresh的一半, 然后执行拥塞避免算法,使拥塞窗口缓慢增大,这就是快速恢复算法。
这里写图片描述

查看评论

TCP拥塞控制——快重传与快恢复

*TCP可靠传输中不仅有慢开始与拥塞避免相结合,还有快重传与快恢复相结合。。。→_→*...
  • kongkongkkk
  • kongkongkkk
  • 2017-07-01 11:57:45
  • 580

关于TCP超时重传、快速重传、慢启动、拥塞避免、拥塞发生、快速恢复、滑动窗口之间的关系概括

标题上这些概念很多,理解也有一定困难,尤其是它们之间的相互关系。这次就简单概括一下。 1.滑动窗口 接收端使用的流量控制。当接收端的应用程序从TCP缓存中提取数据速度过慢,导致TCP缓存中还有未被提取...
  • ZX714311728
  • ZX714311728
  • 2017-03-02 17:58:11
  • 1683

TCP慢启动、拥塞控制、快速重传、快速恢复

转自 http://blog.csdn.net/yusiguyuan/article/details/22847787 此君为吾辈楷模 TCP的拥塞控制 1.  拥塞:即对资源的需求超过了...
  • messiran10
  • messiran10
  • 2016-05-31 21:43:29
  • 1219

浅谈TCP/IP四种计时器、慢启动、拥塞避免、快速重传、快速恢复

持续计时器假设一种场景:A给B发送数据,如果B告诉A自己的缓冲区已满,于是A停止发送数据,等待一段时间后,B的缓冲区出现了富余,于是给A发送报文告诉rwnd大小为400,但是这个报文不幸丢失了,于是就...
  • whoamiyang
  • whoamiyang
  • 2017-02-09 09:27:02
  • 758

TCP拥塞控制-慢启动、拥塞避免、快重传、快启动

一般原理:发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求>可用资源。 作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一...
  • jtracydy
  • jtracydy
  • 2016-08-30 09:29:04
  • 20446

TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复

TCP超时重传  原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。   影响超时重传机制协议效率的一个关键参数是重...
  • qq_26499321
  • qq_26499321
  • 2017-05-08 19:33:07
  • 990

快速重传和快速恢复

2.2 快重传和快恢复     如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小到1,并...
  • hust_dxxxd
  • hust_dxxxd
  • 2016-08-22 00:40:10
  • 1716

TCP拥塞控制:慢开始、拥塞避免、快重传、快恢复

来自http://blog.csdn.net/sicofield/article/details/9708383 1.引言        计算机网络中的带宽、交换结点中的缓存和...
  • sinat_21112393
  • sinat_21112393
  • 2016-03-05 18:25:30
  • 4141

tcp拥塞控制时间轴上三种状态的关系,慢启动,拥塞避免,以及快速恢复的教学状态图。

原文出处:http://blog.csdn.net/brother_lei/article/details/8117484 发现Computer Networking: A Top-Down A...
  • xluren
  • xluren
  • 2015-10-09 20:30:55
  • 1626

TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复

我们在开始假定: 1:数据是单方向传递,另一个窗口只发送确认. 2:接收方的缓存足够大,因此发送方的大小的大小由网络的拥塞程度来决定. 一:慢开始算法和拥塞避免算法 发送方会维持一个拥塞...
  • yangbodong22011
  • yangbodong22011
  • 2015-09-16 20:14:51
  • 5336
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1万+
    积分: 2171
    排名: 2万+
    博客专栏
    最新评论