拥塞现象是指到达通信子网的某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分甚至整个网络性能下降的现象,严重时可能导致网络通信业务陷入停顿即出现死锁现象。

简单点说,受限于网络状况、带宽以及应用请求处理能力等因素,TCP传输会出现超时、发送失败、重发等现象,要解决拥塞问题,除了增加通信链路带宽、链路缓存以及处理器处理能力外,还需要引入拥塞控制机制;

经过长时间的发展,TCP传输拥塞控制算法有许多种类型,不过大致可以总结为如下四种,分别是:慢启动、拥塞避免、快重传以及快恢复

术语

  • 拥塞窗口(cwnd):发送端在拥塞情况下一次最多能发送多少个数据包
  • 接收窗口(rwnd):接收端对发送端窗口大小所做的限制
  • 通告窗口(awnd):TCP内核缓冲区的大小,通常要求其为MSS(Maxsimum Segment Size:最大报文段大小)的偶数倍
  • 慢启动阙值(ssthresh):慢启动与拥塞避免的临界值,即慢启动过程能达到的最大发送速率
  • 往返时延(RTT):发送端发送报文到收到接收确认的时间
  • 超时重传计时器(RTO):一次发送未接收到确认需要重发的时间,通常为2*RTT或5*RTT

慢启动

在连接建立之初,TCP会指数型增大数据包发送速率直到达到慢启动阙值(ssthresh),可以理解为连接建立之初的网络探测阶段。

详细策略为:连接建立,cwnd=1,如果没有发送丢包与拥塞,则线性增大cwnd,直到cwnd>=ssthresh,这是一个发送速率快速增长的阶段。

拥塞避免

上述慢启动过程直到cwnd等于ssthresh,则进入 拥塞避免 过程。

详细策略为:当拥塞窗口到达慢启动阙值时,保险起见,降低发送速率增长率,这个阶段是发送速率&cwnd缓慢增长的阶段。如果一旦出现拥塞情况,ssthresh会设置为cwnd/2,cwnd会重新设置为1,重复慢启动、拥塞避免的过程(旧版本,现已使用快速恢复算法替换,见下文)。
【网络&通信协议系列(四)】TCP拥塞控制

快重传

快重传用于控制发送方重发丢失的数据包,一旦传输过程出现丢包,则判定出现了拥塞,会使用快速重传重新发送丢失的数据包。

实现策略:接收方接收到失序的报文,立刻向发送方发送重复确认。如果发送方收到三个接收方发来的重复确认,则不必等待重传计时器到期,立即重发未被确认的报文段。
【网络&通信协议系列(四)】TCP拥塞控制

快恢复

快恢复算法也是用于控制发送方发送报文的速率,在TCP Reno版本被提出(TCP NewReno又提出队快恢复算法改进的”选择性应答算法”)

实现策略:发送端在执行快速重传后(收到3次重复ACK确认后的快速重传),将ssthresh与cwnd设置为原cwnd一半,直接开始阻塞避免,

【网络&通信协议系列(四)】TCP拥塞控制

总结

拥塞控制机制基于【调整发送端发送速率来控制网络负荷量

参考资料

百度百科:传输层拥塞控制
TCP拥塞控制

相关文章:

  • 2021-07-14
  • 2021-09-08
  • 2022-02-14
  • 2021-06-20
  • 2021-11-11
  • 2021-09-20
猜你喜欢
  • 2021-11-30
  • 2021-08-12
  • 2021-06-24
  • 2021-06-07
  • 2021-06-05
  • 2021-07-10
相关资源
相似解决方案