/ NOTES

《计算机网络》读书笔记(七)

《计算机网络 自顶向下方法》读书笔记(七)

运输层

TCP 拥塞控制算法

TCP 拥塞控制算法包括 3 个部分:

  1. 慢启动
  2. 拥塞避免
  3. 快速恢复

其中,前两个是 TCP 的强制部分

2022-01-01-TCP_congestion_control_algorithm

慢启动

当一条 TCP 连接开始时,TCP 的发送方为了快速找到可用带宽的数量,通常拥塞窗口 (cwnd) 的值会从 1 个 MSS 开始,并且每当传输的报文段首次被确认就增加一个 MSS 。第一个被确认就加一个 MSS ,然后这两个都被确认就再加两个,以这种翻倍的速率增加。

但是这种指数增长不可能一直持续下去,有三种方式结束:

  • 当出现一个由超时指示的丢包事件时, TCP 发送方将 cwnd 设置为 1 ,将慢启动阈值 (ssthresh) 并重新开启慢启动过程
  • 到达或超过 ssthresh 的值时,结束慢启动并且 TCP 转移到拥塞避免模式
  • 检测到 3 个冗余 ACK 时,TCP 执行一种快速重传,并进入快速恢复状态

拥塞避免

进入拥塞避免状态时, cwnd 的值大约是上次遇到拥塞时的值的一半,于是采用一种较为保守的方法:每个 RTT 只将 cwnd 的值增加一个 MSS 。

结束线性增长有两种情况:

  • 当丢包事件由超时触发时, cwnd 的值被设置为 1 个 MSS , ssthresh 的值被更新为 cwnd 值的一半
  • 当丢包事件由三个冗余 ACK 触发时,cwnd 的值减半(为了使测量结果更好,要加上 3 个 MSS ),将 ssthresh 的值记录为 cwnd 值的一半,然后进入快速恢复状态

快速恢复

  • 对引起 TCP 进入快速恢复的缺失报文段,对收到的每个冗余的 ACK , cwnd 的值增加一个 MSS ,最终当丢失报文段的一个 ACK 到达时, TCP 在降低 cwnd 的值后进入拥塞避免状态
  • 当出现超时指示的丢包事件时, cwnd 的值被设置为 1 个 MSS ,并将 ssthresh 的值设为 cwnd 值的一半