1. 为什么使用流量控制

发送方过快地发送数据导致接受方来不及接收。所以要通过流量控制让发送方发送的速度不要太快。

2. 拥塞控制与流量控制

2.1 拥塞控制

  • 拥塞:请求资源大于网络可用资源,就发生拥塞导致网络性能下降。(单纯增加资源可能使得情况更坏)
  • 拥塞控制:防止过多的数据注入到网络,是一个全局性的问题。

2.2 流量控制

流量控制往往指的是点对点的通信量的控制,是一个端到端的问题。

3.拥塞控制的方法一(慢开始和拥塞避免),Tahoe版本

为了集中精力讨论拥塞控制,先做以下的假定:

  1. 数据是单方向传送,另一个方向只传送确认
  2. 接收方总是有足够大的缓存空间,发送窗口的大小由网络的拥塞程度来决定

3.1 慢开始算法

  • 发送窗口: 一次发送数据的大小
  • 拥塞窗口: 取决于网络的情况而动态变化。发送方维持一个动态变化的拥塞窗口,根据分组在网络的丢弃情况判断是否网络拥堵。
  • 慢开始算法:设定为一个最大报文段的长度,cwnd=1,由小到大增大发送报文段的窗口大小。然后每收到一次新报文段确认就增加一个报文段的长度。

注意:这里的慢开始,并不是指拥塞窗口cwnd增长慢,而是指一开始使用较小的拥塞窗口。这比一下子把许多报文一下子注入网络要慢得多。
例子:

3.2 拥塞避免算法

拥塞避免算法往往是和慢开始算法配合使用的。为了防止拥塞窗口cwnd增长后值太大,导致网路拥塞,需要设置一个*慢开始门限*ssthresh(slow start thresh).

  • cwnd<ssthresh,则使用慢开始计算法
  • cwnd=ssthresh,可以选择慢开始也可以选择拥塞避免算法
  • cwnd>ssthresh,则使用拥塞避免算法

拥塞避免算法:每次收到报文段确认,发送方将cwnd加1,ssthresh也加1

3.3 AIMD(add increase和multipy decrease)加法增大乘法减小算法

AIMD算法在慢开始和拥塞避免阶段都可能使用。当出现超时(可能是网络堵塞),就会使用乘法减小,将ssthresh设定到原来值的一半。然后执行慢开始算法,将cwnd=1,到达新的门限值后,然后加法增大cwnd和ssthresh.

例子

4 拥塞控制方法二(快重传和快恢复),Reno版本

  • 快重传:接收方每收到一次失序的报文段马上发出对前一个报文的重复确认,使得发送方能及时知道有报文没有到达接收方。

例子:

  • 快恢复: 发送方连续收到3个重复确认就执行乘法减小;由于能连续收到重复确认,发送方可以认为网络不是很拥堵,因此乘法减小后不进行慢开始而是直接将cwnd设定问减半后的ssthresh,执行拥塞避免算法。

例子:

参考内容:《计算机网络》 谢希仁