介绍
在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞。
可以通过拥塞控制方法来进行控制,控制的是发送窗口的大小,也就是一次性可以发送多少字节,如果趋向于拥塞,就少发送,如果不发生拥塞,就多发送。
拥塞的危害:
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

拥塞控制
准备条件
原理:
根本原理是当拥塞发生时就将发送窗口减小,当没有发生拥塞时就将发送窗口增大,而是否发生拥塞是通过是否发送超时重传决定的。
假定条件:
- 数据是单方向传送,而另一个方向只传送确认。
- 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定的,避免接收方所决定的发送窗口干扰。
- 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位
概念:
-
cwnd为拥塞窗口: 也就是此时的发送窗口
- 在慢开始算法时呈指数增长
- 拥塞避免算法时+1线性增长
-
慢开始门限ssthresh:
- cwnd>ssthresh时,进行慢开始算法
- cwnd<ssthresh时,开始拥塞避免算法
- cwnd==ssthresh时,都可以
-
swnd发送窗口:
- 在这个场景中就固定=cwnd
算法认识
慢开始算法(slow-start)

说明:
- 可以看到慢开始门限设置为16,cwnd在到达16前需要指数增长
- 当传输轮次为0时,起始位置为1
- cwnd = 2^(n-1),n为传输轮次
拥塞避免算法

说明:
- 思路:让拥塞窗口 cwnd 缓慢地增大,避免快速出现拥塞。
- 每经过一个传输轮次,拥塞窗口 cwnd = cwnd + 1。
快重传
有个别报文段在网络中丢失,但是实际上网络并未发生拥塞,此时的发送方超时重传会导致网络误以为发生了拥塞并启动拥塞控制算法,这样就降低了发送效率。因此需要采用快重传。
原理: 快重传算法的根本原理就是让发送方尽早知道发生了个别报文段的丢失,而不需要启动超时重传机制
作用: 提高了传输效率,快重传可以使整个网络的吞吐量提高约20%

说明:
- 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
- 即使受到了失序的报文段也要立即发出对已收到的报文段的重复确认
- 发送方一旦受到3个连续的重复确认,就将相应的报文段立即重传
- 这样就不需要等到超时机制触发后进行重传
- 也就不会进行拥塞控制了
快恢复
在快重传后如何进行拥塞窗口的控制呢?
发送方一旦受到3个重复确认报文,就知道现在只是丢失了个别的报文段,而不是发生了拥塞,所以就启动快恢复算法。
算法过程:
- 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半
- 并开始执行拥塞避免算法
拥塞控制的过程
拥塞控制有两种,一种是超时重传后进入到慢开始阶段,一种是收到3个重复确认报文后开始的快恢复阶段。
超时重传

快恢复的控制

过程说明:
1、首先进行慢开始算法,cwnd指数增长
2、一直增长到cwnd>=ssthreesh,也就是达到了慢开始门限阈值,开始进行拥塞避免算法
3、拥塞避免算法是cwnd+1
4、当发生超时重传时,cwnd=1,ssthresh = cwnd/2 = 12
5、此时继续进行慢开始算法,指数增长
6、cwnd达到12后开始拥塞避免算法,cwnd = cwnd+1
7、当cwnd = 16时,收到3个重复确认,此时就需要进行快重传
8、快重传就是ssthresh = cwnd/2 = 16/2 = 8,而cwnd = ssthresh
9、在这个基础上继续开始快恢复。这里的快恢复直接就开始了拥塞避免算法
网友评论