计算机 · 2023年1月9日 0

关于BBR的问题

拥塞窗口

https://groups.google.com/g/bbr-dev/c/Fj2emRS4Wn4

ACK suppression/decimation/acceleration 发生的场景:

1.中间路由器对于同一连接排队的多个TCP ACK只发最后一个,前面的都扔掉,这样就减少了ACK占用的流量;

2.wifi/路由网络中,设备不是每时每刻都可以收发数据的,而是需要向基站申请收发数据的时间片,所以设备收到的ACK不一定是均匀的,而是可能在各个时间片内以burst传输方式收到的。

总之,ACK suppression/decimation/acceleration其实都描述的是一种ACK到达不均匀,不连续的场景,在这种情况下BBR需要允许cwnd大于BDP。因为计算BDP用到的RTTmin其实是通过未受到ACK suppression/decimation/acceleration影响的ACK包得到的。如果BBR限制cwnd为BDP那么就会导致发送受限,链路利用率不充分。

所以,为了克服这种问题,BBR后面增加了一个计算ack aggregation的patch,为cwnd做了一个补偿。

这个帖子的提问者也搞错了一个地方,那就是BBR里的cwnd_gain一直都是2(不考虑START_UP,PROBE_RTT)。所以相当于最开始这个cwnd_gain也相当于对ACK suppression/decimation/acceleration场景下的cwnd做了补偿,用的2倍BDP而不是1倍BDP。BBR对使用2这个值的描述是:

The "estimated_bdp" term allows enough packets in flight to fully
utilize the estimated BDP of the path, by allowing the flow to send
at BBR.BtlBw for a duration of BBR.RTprop.  Scaling up the BDP by
cwnd_gain, selected by the BBR state machine to be above 1.0 at all
times, bounds in-flight data to a small multiple of the BDP, in order
to handle common network and receiver pathologies, such as delayed,
stretched, or aggregated ACKs [A15].

TCP ACK suppression.

看样子是之前这个固定的2倍BDP不能覆盖ack suppression/aggregaion/decimation的情景,2倍的值可能太小,后面才加了计算ack aggregation的patch。