BBR算法伪代码
以下是BBR算法的伪代码:
-
初始化:
- 设置t = 0, rtt_prop = 0, cwnd = 2 * MSS, pacing_gain = 1, BDP = 0, round_start = true
- 记录初始时刻为t0
-
每个RTT开始前:
- 如果是第一个RTT,记录初始时刻为t0
- 记录RTT开始时的发送窗口大小为cwnd
- 计算BDP = min(rtt_prop * cwnd, MAX_BDP)
- 如果当前时刻t > round_start + 10 * rtt_prop,设置round_start = t
-
发送数据:
- 计算pacing_rate = pacing_gain * BDP / rtt_prop
- 计算发送窗口大小为cwnd
- 发送数据,并根据pacing_rate限制发送速率
-
接收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))
-
重传:
- 如果发生超时,将cwnd减半,并且记录上一次发送窗口大小为cwnd_last
- 如果发生丢包,将cwnd减半,并且记录上一次发送窗口大小为cwnd_last
-
结束:
- 当所有数据发送完成后,关闭连接。
原文地址: https://www.cveoy.top/t/topic/qCY 著作权归作者所有。请勿转载和采集!