拥塞控制
- 1.什么是拥塞控制
- 2.拥塞控制的方法
- (1)慢启动和拥塞避免
- (2)快速重传和快速恢复
1.什么是拥塞控制
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。
所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机,所有路由器,以及与降低网络传输性能有关的所有因素。
2.拥塞控制的方法
(1)慢启动和拥塞避免
TCP 连接建立好之后,CWND 将被设置成初始值IW (Initial Window),其大小为2~4个SMSS。但新的 Linux 内核提高了该初始值,以减小传输滞后。此时发送端最多能发送 W字节的数据。此后发送端每收到接收端的一个确认,其 CWND 就按照式(3-1)增加:
CWND+=min (N,SMSS) _______________(3-3)
其中N是此次确认中包含的之前未被确认的字节数。这样一来,CWND 将按照指数形式扩大,这就是所谓的慢启动。
慢启动必然使得 CWND 很快膨胀(可见慢启动其实不慢)并最终导致网络拥塞。因此 TCP 拥塞控制中定义了另一个重要的状态变量:慢启动门限slow start threshold size,ssthresh)。当CWND 的大小超过该值时,TCP 拥塞控制将进入拥塞避免阶段。
(2)快速重传和快速恢复
在很多情况下,发送端都可能接收到重复的确认报文段,比如 TCP 报文段丢失,或者接收端收到乱序 TCP 报文段并重排之等。拥塞控制算法需要判断当收到重复的确认报文段时,网络是否真的发生了拥塞,或者说 TCP 报文段是否真的丢失了。具体做法是:发送端如果连续收到 3 个重复的确认报文段,就认为是拥塞发生了。然后它启用快速重传和快速恢复算法来处理拥塞,过程如下:
1)当收到第 3 个重复的确认报文段时,按照式(3-3)计 ssthresh,然后立即重传丢失的报文段,并按照式(3-4)设置 CWND。
CWND=ssthresh+3*SMSS(3-42)每次收到1个重复的确认时,设置 CWND=CWND+SMSS。此时发送端可以发送新的 TCP 报文段(如果新的 CWND 允许的话)。
3)当收到新数据的确认时,设置CWNDssthresh (ssthresh 是新的慢启动门限值,由第一计算得到)。
快速重传和快速恢复完成之后,拥塞控制将恢复到拥塞避免阶段,这一点由第 3 步操作可得知。
快速恢复
快速重传