TCP拥塞控制

最近被问了好几次拥塞控制了,答得不太好,总结反思一下

滑动窗口和流量控制

TCP 利用滑动窗⼝实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报⽂中的窗口字段可以⽤来控制发送方窗口大小,从而影响发送⽅的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

拥塞控制

拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

TCP 主要通过四个算法来进行拥塞控制:

  1. 慢开始
  2. 拥塞避免
  3. 快重传
  4. 快恢复

为了进⾏拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的⼀个。
注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

慢开始

拥塞避免

快重传