BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种现代的TCP拥塞控制算法,旨在优化网络传输性能。BBRv1是BBR的初始版本,而BBRv3则是其后续改进版本。在实验中,研究人员Li Zonglun对BBRv1的行为进行了观察,并发现了一些有趣的现象。
观察现象Li Zonglun编译了BBRv1和v3内核作为可加载模块,以便于源代码的修改和调试。他的关注点在于原始的BBRv1版本。在动态调整环境带宽的实验中,他注意到BBRv1计算的pacing_rate并没有在可用带宽显著下降后立即减少,这与BBRv1依赖过去10个RTT观察到的最大带宽的行为一致。
然而,当通过tcpdump捕获的pcap文件分析实际发送速率时,Li Zonglun却观察到了一个奇怪的现象:实际发送速率随着带宽减少而迅速下降,尽管sk_pacing_rate保持在较高的值,反映了之前的带宽条件。
问题提出Li Zonglun询问为什么sk_pacing_rate维持的值与通过pcap分析观察到的实际发送速率之间存在显著差异,并询问是否有潜在的机制或因素可以解释这种快速调整发送速率的现象。
可能的解决方案邮件发出来以后,开发者Neal回复邮件,建议关注cwnd(拥塞窗口),并提供了一些监测方法。比如: 您可以运行以下命令来监视cwnd和packets_in_flight:
(while true; do ss -tinm 'dst $REMOTE_HOST'; sleep 0.025; done) > /tmp/ss.out.txt &如果发现packets_in_flight(未确认 - 已确认 - 丢失 + 重传)大于等于cwnd,则说明cwnd正在限制行为。特别是,如果数据包丢失率很高,那么BBR通常受到cwnd的限制,而不是受到节奏的限制。
如果这些解释无法解决问题,您可以考虑将.pcap文件发布到Web服务器、Google Drive或Dropbox等位置,以便其他人更详细地分析。
BBR算法的行为受多个因素影响,其中cwnd(拥塞窗口)是一个关键参数。让我们更详细地探讨一下:
cwnd的作用:
cwnd是TCP连接中的一个重要参数,它表示在不发生拥塞的情况下可以发送的未确认数据包数量。
当cwnd较大时,可以发送更多的数据包,从而提高发送速率。
如果cwnd受到限制,那么发送速率将受到影响。
BBR的特点:
BBR算法通过观察网络的带宽和往返传播时间来调整发送速率。
它使用pacing_rate来控制发送速率,但也受到cwnd的限制。
实际发送速率与sk_pacing_rate之间的差异:
sk_pacing_rate是BBR计算的发送速率,但实际发送速率可能受到其他因素的影响,例如丢包率、拥塞窗口等。
当丢包率较高时,BBR通常受到cwnd的限制,而不是受到节奏的限制。
因此,您观察到的实际发送速率下降可能与cwnd的变化有关。
下一步行动进一步监测:
继续使用Neal提供的命令来监视cwnd和packets_in_flight。
如果packets_in_flight大于等于cwnd,那么cwnd可能是限制因素。
分析.pcap文件:
如果问题仍未解决,考虑将.pcap文件发布到Web服务器或云存储中,以便其他人更详细地分析。
分析.pcap文件中的数据包丢失情况、拥塞窗口变化等。
分析到这里,相信你已经对怎么去尝试解决问题,有了足够的思绪,BBR算法的行为复杂且受多个因素影响,需要进一步深入研究。通过监测cwnd和packets_in_flight,我们或许能更好地理解BBR在不同网络环境下的表现。祝您好运!