TCP流量控制与拥塞控制学习笔记

流量控制与拥塞控制的区别

  • 流量控制主要是面向建立TCP连接的两个端点之间的数据传输。流量控制的目的是动态控制发送方发送数据的速率,防止接收方无法及时有效处理发送数据。目前,TCP连接主要采用滑动窗口来实现流量控制,当接收方处理数据的压力较大时,可以发给发送方一个较小的滑动窗口,防止发送方传输速率过大;当处理数据压力较小时,可以发给发送方一个较大的窗口,从而使发送方提速。
  • 拥塞控制不是从TCP两点间的角度着眼,而是站在全网的角度,控制整个网络发送端的传输速率,防止数据传输过快导致网络路由器、交换机等设备过载,从而造成全网的负荷过载。拥塞问题是一个全局性的问题,涉及到所有的主机、所有的路由器、以及与降低网络传输性能有关的所有因素。

流量控制

TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。

设置窗口的好处是,如果没有这些“窗口”,那么TCP没发送一段数据后都必须等到接收端确认后才能发送下一段数据,这样做的话TCP传输的效率实在是太低了,同时,窗口还能有效地控制发送方的流量传输,防止过高的传输速率使接收方无法处理。

我在B站上看到一个比较好的教学视频,链接如下,里面的示意图描述地很清晰,考虑到了各种情况:

在这里插入图片描述
如果B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwind=300的报文段,然而这个报文段在传送中丢失 了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。为了解决这种死锁状态,TCP为每个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。

拥塞控制

在某段时间,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫做拥塞。网络拥塞往往是由许多因素引起的,简单的提高节点处理机的速度或者扩大结点缓存的存储空间并不能解决拥塞问题。拥塞问题的是指往往是整个系统的各个部分不匹配,只有各个部分平衡了,问题才会得到解决。

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

  1. 数据是单方向传送,而另外一个方向只传送确认;
  2. 接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定;
  3. 以最大报文段MMS的个数为讨论问题的单位,而不是以字节为单位。

发送方维护一个叫拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态发生变化。

  • 维护原则:只要网络没有拥塞,窗口就变大一些,只要网络出现拥塞,窗口就减小;
  • 判断拥塞依据:没有按时受到应到达的确认报文,即发生超时重传。

慢开始与拥塞避免

维护一个慢开始ssthresh的阈值,当cwnd<ssthresh时,使用慢开始算法;当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法;当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
慢开始方法:每一轮传输轮次后,cwnd指数递增,即cwnd(n) = 2*cwnd(n-1),cwnd(1)=1
当不出现拥塞时,下一轮窗口值相比上一轮窗口值+1,即cwnd(n) = cwnd(n-1) + 1;假如判断出网络出现了拥塞,则更新cwnd(n) = 1,ssthrsh = cwnd(n-1)/2,然后继续执行慢开始方法
区别:慢开始呈指数增长,拥塞避免呈线性增长;

在这里插入图片描述

快重传和快恢复

有时,个别报文段在网络中丢失,但实际上未发生拥塞,这将导致发送方超时重传,并误认为网络发生拥塞,此时错误地启动慢开始算法,降低了传输效率。
所谓快重传,就是尽快进行重传,而不是超时重传计时器超时再重传。接收方不要等待自己发送数据时才捎带确认,而是立即发送确认发送方一旦收到了三个连续的重复确认,就将相应的报文立即重传,而不是等该报文段的超时重传计时器超时再重传
发送方一旦收到三个重复确认,就知道只是丢失了个别报文段,而不启动慢开始算法,而执行快恢复算法:发送方将慢开始门限ssthresh和拥塞窗口cwnd调整为当前窗口的一半,开始执行拥塞避免算法

发布了13 篇原创文章 · 获赞 0 · 访问量 416
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览