《计算机网络》读书笔记(七)
《计算机网络 自顶向下方法》读书笔记(七)
运输层
TCP 拥塞控制算法
TCP 拥塞控制算法包括 3 个部分:
- 慢启动
- 拥塞避免
- 快速恢复
其中,前两个是 TCP 的强制部分
慢启动
当一条 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 值的一半
Subscribe to bbbiggest's blog
Get the latest posts delivered right to your inbox