/bbr_szncu_algorithm

personal modified algorithm from Google BBR

Primary LanguageC

BBR拥塞控制算法个人修改版

Google推出的BBR可以用于解决长胖网络(具有高速率时延积BDP的传输网络)的性能,他与传统的Reno或者CUBIC的TCP拥塞控制算法相比有了一些革命性的思维。在2016年,谷歌将其所有Youtube服务器集群等全面部署了BBR算法,并在之后一段时间的应用成果后将其开源。

相对于传统拥塞控制算法,BBR不再去关注拥塞的发生,传统拥塞控制算法都是监测拥塞状态机,只有当拥塞发生的时候才会去采取修改拥塞窗口cwnd的方式,传统的RENO或者后面出现的CUBIC方式也有许多问题。Cubic同之前的拥塞控制算法一样,无法区分拥塞丢包和传输错误丢包,只要发现丢包,就会减小拥塞窗口,降低发送速率,而事实上传输错误丢包时网络不一定发生了拥塞,但是传输错误丢包的概率很低,所以对Cubic算法的性能影响不是很大。但是在远距离高延时网络之下,由于错误丢包的现象就大大提升了,CUBIC算法无法判断错误丢包从而导致了许多不必要的降速,不能充分的提高带宽利用率。

而GOOGLE-BBR则不去关心网络是否发生了拥塞情况,而是去不断地关注实时的RTT与带宽BW,不断地调整拥塞窗口与pacing rate(窗口发送间隔)的值,使连接速度尽量达到最大带宽值。

关于本项目

对原BBR项目进行了一些参数修改,使其发送窗口大小调整更加激进,能够更好的适应长距离、高延迟、高丢包的网络环境,但是可能会一定程度地丢失网络公平性。(不过相比于TCP CUBIC来说还算公平吧)