一、慢启动

  • 当一个新的TCP连接建立或者检测到由重传超时(RTO)导致丢包时,都会执行慢启动
  • 整体过程大致为:当TCP初次发送数据时,并不是直接发送大量的数据,而是先发送一小部分数据,然后将数据量慢慢增加,直到达到一个阈值(ssthresh)之后,数据量不再增加,而是进入拥塞避免状态

过程详解

  • cwnd(拥塞窗口):
    • 在TCP报文的IP头部有一个窗口大小字段(如下图的IP头部头部所示),这个字段表示了当前端可以接受数据的缓冲区大小
    • cwnd的值等于“接收端的窗口大小与发送端的窗口大小”两者之间较小的那一个

面试冲刺:36---TCP的拥塞控制是如何实现的?

  • 当TCP第一次建立连接的时候,cwnd=1,表示可以发送一个SMMS((发送方的最大段大小))的大小
  • 每当发送端接收到一个接收端的ACK,cwnd后面呈指数增长(2、4、8...)
  • 当cwnd达到一个阈值(ssthresh),cwnd就不再呈指数增长了,而是进入下面的拥塞避免

二、拥塞避免

  • 当达到慢启动达到阈值之后,cwnd就不再呈指数增长了,而是进入拥塞避免
  • 在拥塞避免的算法下:
    • TCP双方通信时,每经过一个往返时间RTT就将发送方的cwnd+1,使cwnd呈线性增长
    • 当cwnd一直增长,如果此时出现了丢包,那么就将ssthresh减半,将cwnd重新置1,下面又开始进入慢启动状态

三、快速重传、快速恢复

  • 快速重传属于“TCP超时与重传”的范畴,请参阅:https://blog.csdn.net/qq_41453285/article/details/107819204。但是在拥塞控制中也会用到
  • 上面我们介绍的“慢启动”、“拥塞避免”是在TCP刚建立的时候
  • 快速重传大致工作原理是:
    • 如果是在TCP通信的过程中出现了丢包,当发送端连续接收到3个重复ACK之后,说明有数据包丢失
    • 但是不启动“慢启动”算法,而是进入下面的快速恢复
  • 快速恢复大致工作原理是:
    • 发送方将慢启动ssthresh和cwnd值调整为当前窗口的一半,然后下面开始执行拥塞避免算法
    • 当然,有的恢复算法会将cwnd增大一些,调整为新的ssthresh+3

相关文章:

  • 2021-12-20
  • 2021-06-18
猜你喜欢
  • 2021-11-28
  • 2021-10-31
  • 2022-12-23
  • 2022-01-03
  • 2021-07-21
  • 2021-10-03
相关资源
相似解决方案