TCP 的拥塞控制

276 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

一、拥塞控制机制

  • 因为 IP 层不向端系统提供显式网络拥塞反馈,所以 TCP 使用的是端到端拥塞控制机制而不是使用网络辅助的拥塞控制。
  • TCP 通过让发送方根据所感知到的网络拥塞程度来限制向连接发送流量的速率。
  • TCP 连接的每一端都由一个接收缓存发送缓存和几个变量组成。
  • 发送方的发送速率为 cwnd(拥塞窗口长度) / RTT(往返时间) 。通过调节 cwnd 的值来调整发送方的发送速率。 666.jpg
  • 拥塞出现指示:发送方出现丢包事件 (超时或者收到 3 个冗余的 ACK) 就认为路径出现了拥塞。 拥塞运作机制
  • ①若一个报文段发生了丢失,说明路径有拥塞发生。此时就应当降低 TCP 发送方的速率。
  • ②若一个报文段正常交付给接收方,说明路径没有拥塞发生。此时就应当增加发送方的速率。
  • ③进行宽带探测。通过增加传输速率以响应 ACK 的到达,直到有丢包事件发生才会降低传输速率。

二、拥塞控制算法

1、慢启动

  • 当建立 TCP 连接时,cwnd 设置为一个 MSS 较小值,此时传输速率为 (MSS / RTT) 。在慢启动时,cwnd 的值开始设置为一个 MSS ,当第 (i + 1) 个ACK 到达时,cwnd 就增加了 2i2 ^ i 个 MSS 。
  • 当有丢包事件发生时,TCP发送方就会把 cwnd 设置为 1 ,并将第二状态变量 ssthresh (慢启动阈值) 设置为 cwnd / 2 。然后从新开始慢启动过程。 6661.jpg

2、拥塞避免与快速恢复

  • 这时 TCP 采用了较为保守的方法。当有 ACK 到达时,每个 RTT 只将 cwnd 增加一个 MSS 。当出现丢包事件时,cwnd 设置为 1 ,ssthresh 变为 cwnd / 2 。接下来就进入了快速恢复。

6662.jpg