以下是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/qCY 著作权归作者所有。请勿转载和采集!

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