计算机网络(四)| 青训营笔记

165 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记。

这篇文章主要深入学习TCP的拥塞控制。

拥塞控制

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等

而TCP的机制又会重传数据,因此情况越来越糟,于是拥塞控制是很有用的 (包含慢启动、拥塞避免、快重传、快恢复)

拥塞窗口

拥塞窗口 cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。

拥塞窗口 cwnd 变化的规则:

  • 只要网络中没有出现拥塞,cwnd 就会增大;
  • 但网络中出现了拥塞,cwnd 就减少;

因此:发送方将拥塞窗口视为发送窗口,即swnd=cwnd

慢启动

TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量

慢启动的算规则:

  • 当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1。 (因为swnd=cwnd,于是cwnd是指数增加的)

慢启动什么时候开始?

有一个叫慢启动门限 ssthresh (slow start threshold)状态变量。

  • 当 cwnd < ssthresh 时,使用慢启动算法。
  • 当 cwnd >= ssthresh 时,就会使用**「拥塞避免算法」**

拥塞避免算法

进入拥塞避免算法后,它的规则是:每当收到一个 ACK 时,cwnd 增加 1。

就这么一直增长着后,网络就会慢慢进入了拥塞的状况了,于是就会出现丢包现象,这时就需要对丢失的数据包进行重传。当触发了重传机制,也就进入了「拥塞发生算法」。

快重传

当网络出现拥塞,也就是会发生数据包重传,重传机制主要有两种:

  • 超时重传
  • 快速重传

而重传机制的不同,会导致【拥塞发生】时,具体的算法也不同。

比如是「超时重传」,拥塞发生算法是这样的:

  • ssthresh 设为 cwnd/2,
  • cwnd 重置为 1
  • 接着重新开始慢开始算法