对于开发人员来说 Google/BBR 算法,只需要关心以下几个部分:
1、bbr_pacing_rate
/*
" BBR.pacing_rate: The current pacing rate for a BBR flow, which
" controls inter-packet spacing.
*/
即:BBR发送起搏速率,指示间隔多少微妙,脉冲发送 cwnd 大小限制的数据
1000000 分之一秒(单位)
2、bbr_cwnd
The maximum allowed number of bytes in flight.
即:BBR最大飞行大小,指示起搏飞行的最大字节数限制。
3、flight
即:BBR正在飞行的大小,UNA未确认的字节数
4、在每次 ack 之后,重新计算 pacing_rate、cwnd,recovery_window、及RTT(需要丢失字节数 lost_bytes)
Based on Google/BbrSender::UpdateBandwidthAndMinRt,但需注意:BBR需要控制协议,提供采样数据,在每次ACK时记录帧的传送TX、ACK_TIME。
重点:
在BBR之中,ACK分为三个过程:
1、ACK前置阶段
标记进入ACK处理状态,且在 ack_state 初始化本次采样的容器及正在飞行的字节数(in_flight/send_una)、早前累积确认的字节数(total_by