TCP 拥塞控制

Wu Jun 2020-01-07 18:43:49
Categories: > Tags:

1 拥塞控制的一般原理

1.1 拥塞概念

出现资源拥塞的条件:对资源需求的总和 > 可用资源

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。

因此当出现拥塞时,应当控制发送方的速率。使网络中的路由器或链路不致过载

1.2 拥塞情况

1.3 拥塞控制分类

拥塞控制是动态的过程,分为开环控制和闭环控制两种

2 拥塞控制的方法

TCP 进行拥塞控制的算法有四种,即“慢开始”、“拥塞避免”、“快重传”和“快恢复”。

发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

2.1 慢开始和拥塞避免

发送方维持一个叫做“拥塞窗口”(cwnd)的状态变量,大小取决于网络的拥塞程度并可以动态变化。发送方让自己的发送窗口等于拥塞窗口。

1)慢开始

发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 …

2)拥塞避免

注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。

如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。

2.2 快重传和快恢复

1)快重传

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。

在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。

1)快恢复

在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

3 主动队列管理 AQM

3.1 全局同步现象

在最简单的情况下,路由器的队列通常都是按照“先进先出”(FIFO)的规则处理到来的分组。当队列己满时,尾部丢弃可能会同时影响到很多条 TCP 连接,结果使这许多 TCP 连接在同一时间突然都进入到慢开始状态。

3.2 AQM

为了避免发生网络中的全局同步现象,提出了主动队列管理 AQM。在队列长度达到某个值得警惕的数值时,就主动丢弃到达的分组。这样就提醒了发送方放慢发送的速率,因而有可能使网络拥塞的程度减轻,甚至不出现网络拥塞。

AQM 可以有不同实现方法,还没有一种算法能够成为 IETF 的标准。