5.7 TCP 的拥塞控制
当网络中数据量超过了设备的处理能力时,则称发生了网络拥塞。此时会导致数据报的丢失等情况,会导致数据传输效率降低,用户体验变差。
网络拥塞可以发生在网络的任何地方,包括但不限于路由器、交换机、用户端设备等。
(P241 5.8.2)当分组丢失后,TCP 会发生超时重传,此时 TCP 即认为可能发生了网络拥塞。即:只要出现了超时重传,TCP 就认为发生了网络拥塞。
发送方维护一个拥塞窗口 cwnd(Congestion Window),真正的发送窗口取对方接收窗口和我方拥塞窗口之间的最小值。此节中假设接收方接收窗口无限大,且数据发送时单向的,即此节仅讨论一个理想情况:发送窗口仅取决于拥塞窗口、接收方仅发送确认报文。
此节为讨论方便,拥塞发送窗口和发送的数据单位为 ,即 1 个发送方最大报文段。
TCP 进行拥塞控制的算法有四种:慢开始(Slow-Start)和拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)和快恢复(Fast Recovery)。
TCP 实现必须实现慢开始、拥塞避免和 RTO 指数退避算法以完成拥塞控制。
相关词条:
-
初始拥塞窗口 IW(Initial Window)
初始拥塞窗口由 SMSS 决定:
- 当 时,拥塞窗口为 ,且不得超过 2 个报文段。
- 当 时,拥塞窗口为 ,且不得超过 3 个报文段。
- 当 时,拥塞窗口为 ,且不得超过 4 个报文段。
并且:
- 当握手过程中 SYN 和 SYN/ACK 报文丢失时,拥塞窗口初始值不得超过 ,且不得超过 1 个报文段。
-
慢开始门限 ssthresh
当拥塞窗口大小超过 ssthresh 时,则改用拥塞避免算法。ssthresh 初始值应当设置为任意高的值(例如最大可能的通告窗口的大小)。