问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

TCP拥塞控制机制详解:从慢启动到快速恢复

创作时间:
作者:
@小白创作中心

TCP拥塞控制机制详解:从慢启动到快速恢复

引用
1
来源
1.
https://bolawen.com/docs/networkBasis/transportLayer/TCP/congestionControl/

TCP(传输控制协议)是互联网中最重要的协议之一,它提供了可靠的数据传输服务。为了在网络拥塞时控制数据传输速率,TCP设计了多种拥塞控制算法。本文将详细介绍TCP的拥塞控制机制,包括慢启动、拥塞避免、快速重传和快速恢复等算法。

慢启动算法

慢启动算法的基本思想是:TCP连接建立后,不要急于发送大量数据,而是先探测网络的拥塞程度。拥塞窗口(cwnd)的大小从1开始,每收到一个ACK确认,cwnd就加1。每经过一个往返时间(RTT),cwnd就增加一倍,呈指数增长。如果出现丢包,则cwnd减半,进入拥塞避免阶段。

具体步骤如下:

  1. TCP连接完成时,初始化cwnd = 1,表示可以发送一个MSS(最大段大小)单位的数据。
  2. 每当收到一个ACK确认,cwnd就加1。
  3. 每当过了一个RTT,cwnd就增加一倍。

为了防止cwnd增长过大引起网络拥塞,还需要设置一个慢启动阀值ssthresh(slow start threshold)。当cwnd到达该阀值后,就会进入拥塞避免阶段。

拥塞避免算法

拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送窗口的cwnd加1。一般来说,慢启动阀值ssthresh是65535字节,cwnd到达慢启动阀值后:

  • 每收到一个ACK时,cwnd = cwnd + 1/cwnd
  • 当每过一个RTT时,cwnd = cwnd + 1

这是一个线性上升的算法,可以避免过快增长导致网络拥塞。

拥塞发生

当网络拥塞发生丢包时,会有两种情况:

  1. RTO(重传超时)超时重传
  2. 快速重传

如果是发生了RTO超时重传,就会使用拥塞发生算法:

  • 慢启动阀值sshthresh = cwnd /2
  • cwnd 重置为 1
  • 进入新的慢启动过程

快重传和快恢复

在TCP/IP中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。如果没有FRR,如果数据包丢失了,TCP将会使用定时器来要求传输暂停。有了FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。

快速重传和恢复算法一般同时使用。快速恢复算法认为,还有3个重复ACK收到,说明网络也没那么糟糕,所以没有必要像RTO超时那么强烈。

进入快速恢复之前,cwnd和sshthresh已被更新:

- cwnd = cwnd /2
- sshthresh = cwnd

然后,真正的快速恢复算法如下:

  • cwnd = sshthresh + 3
  • 重传重复的那几个ACK(即丢失的那几个数据包)
  • 如果再收到重复的ACK,那么cwnd = cwnd +1
  • 如果收到新数据的ACK后, cwnd = sshthresh。因为收到新数据的ACK,表明恢复过程已经结束,可以再次进入了拥塞避免的算法了。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号