以下三种算法,严格来说并不能算是拥塞控制算法。因为我们认为的拥塞控制算法通常是传输层进行的拥塞控制。
互联网TCP拥塞控制算法的基本设计理念是必须端端执行。这个网络被认为是一个“黑匣子”。TCP源无法从网络中接收到任何显式的拥塞反馈。当一个拥塞控制算法不需要任何来自下层的支持,我们会认为他严格遵循层分离和模块化原则。
因此,为了确定它可以传输的速率,源必须通过逐步增加输入负载(通过缓慢的启动和拥塞避免阶段)来探测路径,直到隐式反馈,如超时或重复确认,即已达到网络容量的信号。或者有些算法通过ACK数量、RTT估计、带宽估计等来进行探测。
八、SACK
SACK针对NewReno算法的一些问题进行了改进。
New Reno算法每个RTT只能恢复一个丢失段,虽然相比于Reno他能够恢复,但是恢复的效率慢。
为了实现告诉发送方乱序到底的段,SACK在选项中加入了多个TCP options。每个TCP option表示一个乱序到达的区间,长度为10。共标注了乱序到达的左边界和右边界加一。发送方收到后,会维持一个计分板(scoreBoard),标注这些乱序到达的段,并重发没有到达的段。
除此之外,发送方会维护一个pipe,来动态维护管道中的outstanding的数量平衡,即与拥塞窗口的大小相等。
发送方考虑以下五种情况:
- 收到冗余ACK且无SACK选项
- 收到冗余ACK且有SACK选项
- 收到PACK且无SACK选项:处于拥塞避免阶段,新段被确认,说明该段和该段被重传的段,都从管道中走出,所以pipe-2
- 收到PACK且有SACK选项
- 收到RACK
以下是SACK基本原理:
缺点:部署SACK的代价。
九、ECN
参考链接:ECN算法视频教程
ECN是有网络辅助信息的拥塞控制。
以往我们都是根据一些网络事件(比如三个冗余ACK或者超时)来判断拥塞,进而进行调节。而网络提供信息给端系统则更快。
改变了IP协议的数据报,
CE:代表网络中发生了拥塞
ECT:表示ECN使能。
Not ECT:表示不支持ECNTCP数据段,
CWR置为1:表示拥塞窗口减半,
ECE置为1:表示目标主机发现拥塞
接收方发送时,ECE置为1,指示发送方降速并cwd置为1。
发送方接收到后,将cwd置为1,并且回复一个cwd=1的数据段,表示我已经将cwd置为一了。
接收方收到后,不再将ECN置为一。
缺点:
- 安全性:在某路由器时强制更改数据包
- 如何进行增速等问题。
十、RED
在网络层进行全局拥塞控制(所以我们确切地不认为他是链路层的拥塞控制算法):为避免发生网路中的全局同步现象,路由器采用随机早期检测(RED算法)
使路由器的队列维持两个参数,即队列长队最小门限min和最大门限max,每当一个分组到达的时候,RED就计算平均队列长度。然后分情况对待到来的分组:
- 平均队列长度小于最小门限——把新到达的分组放入队列排队。
- 平均队列长度在最小门限与最大门限之间——则按照某一概率将分组丢弃。
- 平均队列长度大于最大门限——丢弃新到达的分组。