一次性说清楚 TCP——拥塞控制(四)

导读:本篇文章讲解 一次性说清楚 TCP——拥塞控制(四),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

/   拥塞控制   /

拥塞控制考虑的是另外一个问题:避免网络过分拥挤导致丢包严重,网络效率降低 。

拿现实的交通举例子:

        高速公路同一时间可通行的汽车数量是一定的,当节假日时,就会发生严重的堵车。在TCP中,数据包超时,会进行重传,也就是会进来更多的汽车,这时候更堵,最后导致的结果就是:丢包-重传-丢包-重传。最后整个网络瘫痪了。

        这里的拥塞控制和前面的流量控制不是一个东西,流量控制是拥塞控制的手段:为了避免拥塞,必须对流量进行控制。拥塞控制目的是:限制每个主机的发送的数据量,避免网络拥塞效率下降。就像广州等地,限制车牌号出行是一个道理。不然大家都堵在路上,谁都别想走。

        拥塞控制的解决方法是流量控制,流量控制的实现是滑动窗口,所以拥塞控制最终也是通过限制发送方的滑动窗口大小来限制流量 。当然,拥塞控制的手段不只是流量控制,导致拥塞的因素有:路由器缓存、带宽、处理器处理速度等等。提升硬件能力(把4车道改成8车道)是其中一个方法,但毕竟硬件提升是有瓶颈的,没办法不断提升,还是需要从tcp本身来增加算法,解决拥塞。

        拥塞控制的重点有4个:慢开始、快恢复、快重传、拥塞避免。这里依旧献祭出大学老师的ppt图片:

一次性说清楚 TCP——拥塞控制(四)

Y轴表示的是发送方窗口大小,X轴表示的是发送的轮次(不是字节编号)。

  • 最开始的时候,会把窗口设置一个较小的值,然后每轮变为原来的两倍。这是慢开始。

  • 当窗口值到达ssthresh值,这个值是需要通过实时网络情况设置的一个窗口限制值,开始进入拥塞避免,每轮把窗口值提升1,慢慢试探网络的底线。

  • 如果发生了数据超时,表示极可能发生了拥塞,然后回到慢开始,重复上面的步骤。

  • 如果收到三个相同的确认回复,表示现在网络的情况不太好,把ssthresh的值设置为原来的一半,继续拥塞避免。这部分称为快恢复。

  • 如果收到丢包信息,应该尽快把丢失的包重传一次,这是快重传。

  • 当然,窗口的最终上限是不能无限上涨的,他不能超过接收方的缓存区大小。

通过这个算法,就可以在很大程度上,避免网络拥挤。

        除此之外,还可以让路由器在缓存即将满的时候,告知发送方我快满了,而不是等到出现了超时再进行处理,这是主动队列管理AQM。此外还有很多方法,但是上面的算法是重点。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/74659.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!