浅谈TCP的拥塞控制

一、拥塞

阻塞:当用户对网络资源的需求量,超过了服务器提供的可用资源数量,这时就出现了拥塞现象。

如果让这种情况一直持续下去,那么网络的吞吐量逐渐下降。

参考“湖南科技大学”的网课教程:https://www.bilibili.com/video/BV1kJ41177io

二、控制

TCP提供了四种拥塞控制的算法

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

1、慢开始拥塞避免

这两种算法,先定义了一个"拥塞窗口"的变量"cwnd","慢开始"算法中的"慢"就是指这个值开始很小;然后定义了一个"拥塞避免"算法启用的条件变量"ssthresh",

每次进行数据报文传输的时候,网络资源的发送数量等于 cwnd,先判断 cwnd 和 ssthresh!,由此确定使用哪种算法。

  • cwnd < ssthresh :慢开始算法
  • cwnd = ssthresh :两者皆可
  • cwnd > ssthresh :拥塞避免算法

慢开始:每次完整的传输完后,cwnd += cwnd;

拥塞避免:每次完整的传输完后,cwnd += 1;

以下具体流程图,参考“湖南科技大学”的网课教程:https://www.bilibili.com/video/BV1kJ41177io

结论:这两种算法会导致一个问题,传输效率低!因为有时候可能只是网络不稳地,导致的丢包,并不是网络拥塞。

2、快重传、快恢复

举例说明:假定发送方为 A ,接收方为 B ,传送报文为 m1-m9!

快重传:A 先只管传东西给 B,如果 B 没接收到 m3,则会一直传达确认收到 m2 信号,只要不达到三次,A 依然继续传,不会停下来。但达到了三次,A 就知道了,你没有收到 m3,然后就会开始重传 m3。就不需要进行超市计数器超时后完全重传了,不会有误认为拥塞的情况,提高了网络吞吐量!!

快恢复:当 B 传达了三次重复确认信号后,启动本算法!

  • 有的快恢复的实现是:设置 cwnd /= 2,再开始执行拥塞避免算法
  • 有的快恢复的实现是:设置 ssthresh += 3,因为我发三次重复确认的时候,以及传了三个了。

变化情况示例图参考“湖南科技大学”的网课教程:

posted @ 2020-05-26 14:06  谨丰  阅读(300)  评论(0编辑  收藏  举报