以下是 BBR 算法的伪代码,详细解释了其工作机制:

  1. 初始化:

    • 设置 t = 0, rtt_prop = 0, cwnd = 2 * MSS, pacing_gain = 1, BDP = 0, round_start = true
    • 记录初始时刻为 t0
  2. 每个 RTT 开始前:

    • 如果是第一个 RTT,记录初始时刻为 t0
    • 记录 RTT 开始时的发送窗口大小为 cwnd
    • 计算 BDP = min(rtt_prop * cwnd, MAX_BDP)
    • 如果当前时刻 t > round_start + 10 * rtt_prop,设置 round_start = t
  3. 发送数据:

    • 计算 pacing_rate = pacing_gain * BDP / rtt_prop
    • 计算发送窗口大小为 cwnd
    • 发送数据,并根据 pacing_rate 限制发送速率
  4. 接收 ACK:

    • 计算 RTT 和 rtt_var
    • 计算 rtt_prop = 0.875 * rtt_prop + 0.125 * RTT
    • 计算 BDP = min(rtt_prop * cwnd, MAX_BDP)
    • 如果当前时刻 t > round_start + 10 * rtt_prop,设置 round_start = t
    • 如果 rtt_var > 0,计算 pacing_gain = 1 + 0.25 * (BDP / (cwnd * MSS) - 1) / sqrt(rtt_var / rtt_prop)
    • 如果 pacing_gain < 1,设置 pacing_gain = 1
    • 如果 pacing_gain > 2.5,设置 pacing_gain = 2.5
    • 如果 cwnd < BDP / MSS,增加 cwnd = cwnd + MSS / cwnd
    • 否则,增加 cwnd = cwnd + MSS / (cwnd * sqrt(cwnd / BDP))
  5. 重传:

    • 如果发生超时,将 cwnd 减半,并且记录上一次发送窗口大小为 cwnd_last
    • 如果发生丢包,将 cwnd 减半,并且记录上一次发送窗口大小为 cwnd_last
  6. 结束:

    • 当所有数据发送完成后,关闭连接。
BBR 算法伪代码详解 - 优化网络性能的关键

原文地址: https://www.cveoy.top/t/topic/lDqU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录