传输层TCP的流量控制和拥塞控制(图文详解)

您所在的位置:网站首页 端口流量控制是如何实现的原理 传输层TCP的流量控制和拥塞控制(图文详解)

传输层TCP的流量控制和拥塞控制(图文详解)

2023-09-15 17:31| 来源: 网络整理| 查看: 265

TCP的流量控制和拥塞控制 TCP流量控制流量控制中的死锁问题🔒持续计时器⏲ TCP的拥塞控制增加资源能解决拥塞吗?拥塞往往会趋于恶化拥塞控制方法慢开始和拥塞避免慢开始拥塞避免 快重传和快恢复快重传快恢复

TCP流量控制

一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。

所以就需要进行流量控制,流量控制就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制(也叫接受窗口rwnd) 可以很方便地在 TCP 连接上实现流量控制。 在这里插入图片描述 A向B发送数据:

前提条件: 在建立时,B告诉A:“我的接收窗口rwnd = 400字节”过程: A向B发送了200字节的数据之后,201-300字节的数据丢失。之后B调节rwnd为300字节,之后A向B发送了301-400,401-500和超时重传的201-300 一共300个字节,此时A不能再发数据,需要等待B的信号,B允许A发送501-600之后,A才可以发送501-600,B接收到数据后将rwnd调整问0字节,表示暂时不再接收数据。B调整了三次窗口大小,所以进行了三次流量控制注意:B在每一次接受数据之后都会将ACK返回给A,并调整rwnd的字节数。 流量控制中的死锁问题🔒

在这里插入图片描述

B向 A 发送了零窗口的报文段后不久,B 的接收缓存又有了一些存储空间。 于是 B向 A 发送了 rwnd =400 的报文段。但是这个报文段丢失了,A一直等待B发送非零窗口的通知,而B发送也一直等待 A 发送的数据。就形成了死锁🔒。 持续计时器⏲ 为了解决这个问题TCP 为每一个连接设有一个持续计时器。⏲ 只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。 TCP的拥塞控制

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。 若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。 出现拥塞的原因:∑对资源需求 > 可用资源

增加资源能解决拥塞吗?

答案是否定的,网络拥塞往往是由许多因素引起的。拥塞控制是一个全局的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。 例如:

增大缓存,但未提高输出链路的容量和处理机的速 度,排队等待时间将会大大增加,引起大量超时重 传,解决不了网络拥塞;

提高处理机处理的速率会会将瓶颈转移到其他地方

拥塞问题的是指往往是整个系统的各个部分不匹配,只有各个部分平衡了,问题才会得到解决。

拥塞往往会趋于恶化

如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。 但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。 可拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。

拥塞控制方法

因特网建议标准RFC2581定义了进行拥塞控制的四种算法,即慢开始(Slow-start)、拥塞避免(Congestion Avoidance)、快重传(Fast Restrangsmit)和快回复(Fast Recovery)。我们假定:

数据是单方向传送,而另外一个方向只传送确认

接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定。

慢开始和拥塞避免

发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。发送方控制拥塞窗口的原则是:**只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络的分组数。

慢开始

慢开始算法的思路就是:最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加至多1个MSS大小。用这样的方法来逐步增大拥塞窗口CWND。 在这里插入图片描述 为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:

当cwndssthresh时,改用拥塞避免算法。

当cwnd=ssthresh时,慢开始与拥塞避免算法任意。

拥塞避免

拥塞避免算法思路:让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口按线性规律缓慢增长。

无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。 在这里插入图片描述 乘法减小和加法增大

乘法减小:是指不论在慢开始阶段还是拥塞避免阶段,只要出现超时,就把慢开始门限减半,即设置为当前的拥塞窗口的一半(于此同时,执行慢开始算法)。当网络出现频繁拥塞时,ssthresh值就下降的很快,以大大将小注入到网络中的分组数。加法增大:是指执行拥塞避免算法后是拥塞窗口缓慢增大,以防止网络过早出现拥塞 快重传和快恢复

一条TCP连接有时会因等待重传计时器的超时而空闲较长的时间,慢开始和拥塞避免无法很好的解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。快重传算法并非取消了重传机制,只是在某些情况下更早的重传丢失的报文段(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。

快重传

快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。   在这里插入图片描述

快恢复

当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。

考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh减半后的大小,然后执行拥塞避免算法。 在这里插入图片描述

注意:在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。 接受窗口又称为通知窗口。因此从接收方对发送方的流量控制角度考虑,发送方的发送窗口一定不能超过对方给出的接受窗口的RWND。也就是说:发送窗口的上限=Min[rwnd,cwnd]. 参考文章:https://www.cnblogs.com/wxgblogs/p/5616829.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3