MST

星途 面试题库

面试题:网络编程下TCP拥塞控制机制各阶段详细分析

TCP拥塞控制包含慢启动、拥塞避免、快重传和快恢复四个阶段。请详细描述每个阶段的触发条件、窗口大小变化的具体过程,以及它们之间是如何相互转换的?
33.5万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

慢启动

  1. 触发条件
    • 连接刚刚建立时,发送方开始进行数据传输,此时进入慢启动阶段。
  2. 窗口大小变化过程
    • 初始化拥塞窗口 cwnd 为一个最大报文段长度(MSS)。
    • 每收到一个对新报文段的确认(ACK),就将 cwnd 增加一个MSS大小。这意味着每经过一个往返时间(RTT),cwnd 就会翻倍。例如,初始 cwnd = 1MSS,收到第一个ACK后 cwnd = 2MSS,收到第二个ACK后 cwnd = 3MSS 等,随着ACK的不断到来,cwnd 快速增长。
  3. 转换条件
    • cwnd 增长到慢启动门限(ssthresh)时,进入拥塞避免阶段。
    • 如果发生超时(即一定时间内没有收到某个报文段的ACK),则将 ssthresh 设置为当前 cwnd 的一半(四舍五入),同时将 cwnd 重新设置为1个MSS,重新进入慢启动阶段。

拥塞避免

  1. 触发条件
    • cwnd 达到慢启动门限 ssthresh 时,进入拥塞避免阶段。
  2. 窗口大小变化过程
    • 每经过一个RTT,并且收到该RTT内所有报文段的ACK,就将 cwnd 增加1个MSS。例如,当前 cwnd = 8MSS,经过一个RTT收到所有ACK后,cwnd 变为 9MSS,窗口增长速度相对慢启动阶段明显减缓。
  3. 转换条件
    • 如果发生超时,将 ssthresh 设置为当前 cwnd 的一半(四舍五入),同时将 cwnd 重新设置为1个MSS,进入慢启动阶段。
    • 如果收到三个重复的ACK(即同一个报文段的ACK收到了4次),则执行快重传和快恢复算法,进入快恢复阶段。

快重传

  1. 触发条件
    • 发送方连续收到三个重复的ACK时,触发快重传。这表明可能有一个报文段丢失,但网络还没有拥塞到需要超时重传的程度。
  2. 窗口大小变化过程
    • 快重传本身不直接改变 cwnd 大小,但它是快恢复的前置条件。在收到三个重复ACK后,发送方立即重传丢失的报文段,而不是等待超时。
  3. 转换条件
    • 执行快重传后,立即进入快恢复阶段。

快恢复

  1. 触发条件
    • 执行快重传后进入快恢复阶段。
  2. 窗口大小变化过程
    • ssthresh 设置为当前 cwnd 的一半(四舍五入)。
    • 然后将 cwnd 设置为 ssthresh 加上3倍的MSS(因为收到了三个重复ACK,意味着有三个数据包已经离开了网络,所以可以适当增加窗口)。
    • 之后每收到一个重复的ACK,cwnd 增加1个MSS。当收到对重传报文段的ACK时,将 cwnd 设置为 ssthresh,进入拥塞避免阶段。
  3. 转换条件
    • 收到对重传报文段的ACK后,进入拥塞避免阶段。
    • 如果在快恢复阶段发生超时,将 ssthresh 设置为当前 cwnd 的一半(四舍五入),同时将 cwnd 重新设置为1个MSS,进入慢启动阶段。