一、拥塞
阻塞:当用户对网络资源的需求量,超过了服务器提供的可用资源数量,这时就出现了拥塞现象。
如果让这种情况一直持续下去,那么网络的吞吐量逐渐下降。
参考“湖南科技大学”的网课教程: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,因为我发三次重复确认的时候,以及传了三个了。
变化情况示例图参考“湖南科技大学”的网课教程: