BBR即时带宽的计算

 BBR算法中每收到一个ack,就计算一下即时带宽,论文[1]给出的计算公式为:
deliveryRate=(delivered-packet.delivered)/(now-packet.delivered_time) ,其中,假设收到的ack是对一个数据包的确认,那么delivered增加1,delivered说明的是成功接收数据包的数量,packet.delivered是数据包packet发送时,发送端接收到最新的ack确认的收据包数量,packet.delivered_time为接收到最新ack的时间戳。
 举例说明,假设网络中rtt不发生变化。在初始状态,发送端向网络中均匀地发送10个数据包,这10个包在发送端中packet.delivered均为0,packet.delivered_time为发送时的时戳。在下一个rtt周期,开始发送11-20之间的包。假设在第一个rtt的末尾(在发送第11个包之前),收到第一个包的ack确认,收到ack的时间假设为rtt,delivered值增加为1,这个时候计算的带宽为(1-packet(1).delivered)/(now-packet(1).delivered_time)=1/rtt(pkts/s)。
 发送端在第11包发送的时候,标记packet(11).delivered为1,packet(11).delivered_time=接收第1个ack的时刻。在发送第12个数据包之前,收到对第二包ack的确认,delivered为2,标记packet(12).delivered为2,packet(12).delivered_time=接收第2个ack的时刻,这个时候计算的即时带宽为(2-packet(2).delivered)/(now-packet(2).delivered_time)=2/rtt(pkts/s)。
 ……
 在发送第20个数据包之前,收到对第10包ack的确认,delivered为10,标记packet(20).delivered为10,packet(20).delivered_time=接收第10个ack的时刻,这个时候计算的即时带宽为(10-packet(10).delivered)/(now-packet(10).delivered_time)=10/rtt(pkts/s)。
 ……
 之后的带宽计算,就可以反映出,在一个rtt间隔内,向网络中发送数据包的数量。
 具体的代码可见[3],tp->delivered为收到最新ack时的确认接收数据包的计数器。函数tcp_rate_skb_sent负责记录发送的数据包packet.delivered_time(tp->delivered_mstamp)和packet.delivered(tp->delivered)。函数tcp_rate_gen获取时间间隔(now-packet.delivered_time)。
 另外,BBR的主动带宽探测思想,并不是无源之水,之前就有类似的idea[4]。
[1]Cardwell N, Cheng Y, Gunn C S, et al. BBR: Congestion-based congestion control[J]. Queue, 2016, 14(5): 50.
[2]来自Google的TCP BBR拥塞控制算法解析
[3]tcp bbr rate
[4]PCP: Efficient Endpoint Congestion Control

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值