TCP超时与重传机制解析

本章节主要阐述TCP协议如何利用超时与重传机制来保障数据传输的可靠性,并结合软件无线电原理进行分析。

21.6 拥塞规避算法

在20.6节中我们探讨了慢启动算法,该算法用于在连接建立初期逐步提升数据传输速率。然而,当网络负载过高时,中间路由器可能出现拥塞,导致数据包丢失。为了应对这种情况,TCP引入了拥塞规避算法 ([Jacobson 1988])。

该算法基于以下假设:数据包丢失的主要原因是网络拥塞,而非传输错误。因此,一旦发生数据包丢失,就意味着网络中出现了拥塞。

拥塞指示

TCP主要通过两种方式来判断网络拥塞:

  1. 超时: 数据包发送后,经过一段时间仍未收到确认,则判定为超时。
  2. 重复确认: 接收方收到乱序的数据包后,会发送重复确认,提示发送方进行重传。

拥塞控制参数

为了实现拥塞控制,TCP维护了两个关键参数:

  1. 拥塞窗口 (cwnd): 发送方允许发送但还未收到确认的数据量上限。
  2. 慢启动门限 (ssthresh): 区分慢启动阶段和拥塞规避阶段的阈值。

算法流程

  1. 初始化阶段:连接建立初期,cwnd 设置为 1 个报文段,ssthresh 设置为 65535 字节。
  2. 数据发送:发送方根据 cwnd 和接收方通告窗口的大小来控制数据发送速率。
  3. 拥塞发生:当检测到超时或重复确认时,表明网络出现拥塞。此时,ssthresh 被设置为当前窗口大小的一半(cwnd 和接收方通告窗口的较小值,但最小为 2 个报文段)。
  4. 如果是超时触发拥塞控制,则 cwnd 被重置为 1 个报文段,进入慢启动阶段。
  5. 拥塞规避: 当收到新的数据确认时,cwnd 会根据当前所处阶段进行调整:
  6. 慢启动阶段 (cwnd <= ssthresh): cwnd 呈指数增长,快速提升传输速率。
  7. 拥塞规避阶段 (cwnd > ssthresh): cwnd 呈线性增长,缓慢提升传输速率,避免再次造成网络拥塞。

总结

拥塞规避算法与慢启动算法相辅相成,共同保障了 TCP 在不同网络环境下的传输效率和可靠性。