Windows 11 22H2 已经支持 TCP BBR v2 拥塞控制。本文就是阐述协,怎么如何从 Windows 系统默认的 Cubic 拥塞控制切换到 BBR v2 拥塞控制。
查看目前的拥塞控制算法
在 Powershell 中〔开始菜单里搜 Powershell 即可〕输入 Get-NetTCPSetting | Select SettingName, CongestionProvider
命令来查看当前使用的 TCP 拥塞控制
默认状态下看到的结果应该类似这样。
PS C:\Users\admin> Get-NetTCPSetting | Select SettingName, CongestionProvider
SettingName CongestionProvider
----------- ------------------
Automatic
InternetCustom CUBIC
DatacenterCustom CUBIC
Compat NewReno
Datacenter CUBIC
Internet CUBIC
从 CUBIC 切换到 BBR v2
在 Powershell 中输入下面的命令:
netsh int tcp set supplemental Template=Internet CongestionProvider=bbr2
netsh int tcp set supplemental Template=Datacenter CongestionProvider=bbr2
netsh int tcp set supplemental Template=Compat CongestionProvider=bbr2
netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=bbr2
netsh int tcp set supplemental Template=InternetCustom CongestionProvider=bbr2
然后再使用 Get-NetTCPSetting | Select SettingName, CongestionProvider
命令来查看当前使用的 TCP 拥塞控制
从 BBR v2 恢复到原有的 CUBIC
在 Powershell 中输入下面的命令:
netsh int tcp set supplemental Template=Internet CongestionProvider=cubic
netsh int tcp set supplemental Template=Datacenter CongestionProvider=cubic
netsh int tcp set supplemental Template=Compat CongestionProvider=newreno
netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=cubic
netsh int tcp set supplemental Template=InternetCustom CongestionProvider=cubic
然后再使用 Get-NetTCPSetting | Select SettingName, CongestionProvider
命令来查看当前使用的 TCP 拥塞控制
通用优化
Windows 10 以上就行:
netsh int tcp set global dca=enabled
netsh int tcp set global autotuninglevel=normal
netsh int tcp set supplemental template=internet congestionprovider=ctcp
netsh int tcp set global timestamps=enabled
优化前:
优化后:
BBR v2 好在那里?真的适合我吗?
最好的优化就是不优化,现实中 80%以上的网络场景都是不需要优化的,为了不到 20%的场景进行全局优化得不偿失,网络问题的关键不是如何全局优化,而是识别出那不到 20%的部分并优化。
国内这个网络都懂的,如果你晚上想访问国外的网站,除非你或者网站有钞能力可以使用电信 CN2 联通 A 网等精品网络,电信 163 与移动 CMI 晚高峰出口丢包 10%~30%是非常常见的情况,即使是相对用户较少比较富裕的联通 169 网络,出口处一般也有 3%左右的丢包。
BBR〔Bottleneck Bandwidth and Round-trip propagation time,BBR〕是谷歌在 2016 年开发的一种新型的 TCP 拥塞控制算法。在此以前,互联网主要使用基于丢包的拥塞控制策略,只依靠丢失数据包的迹象作为减缓发送速率的信号。这样做的的效果还是不错的,但随着全球化互联网的迅速普及,我们所使用的网络已经发生了巨大的变化。我们在本地拥有了越来越大的带宽,而现在的互联网质量也越来越好。BBR 尝试通过使用全新的拥塞控制来解决这个问题,它使用基于延迟而不是丢包作为决定发送速率的主要因素。
使用 BBR,可以获得显著的网络吞吐量的提升和延迟的降低。吞吐量的改善在远距离路径上尤为明显,比如跨洋的文件或者大数据的传输,尤其是在有轻微丢包的网络条件下。延迟的改善主要体现在最后一公里的路径上,而这一路径经常受到缓冲膨胀〔Bufferbloat〕的影响。所谓「缓冲膨胀」指的网络设备或者系统不必要地设计了过大的缓冲区。当网络链路拥塞时,就会发生缓冲膨胀,从而导致数据包在这些超大缓冲区中长时间排队。在先进先出队列系统中,过大的缓冲区会导致更长的队列和更高的延迟,并且不会提高网络吞吐量。由于 BBR 并不会试图填满缓冲区,所以在避免缓冲区膨胀方面往往会有更好的表现。
BBR2 相比 BBR 更「公平」,同链路下 BBR 会抢占大量 CUBIC 的带宽给自己用,而 BBR2,在有延迟和丢包的情况下,它的速度会慢于 BBR,有时比默认的 CUBIC 还慢,BBR2 还解决了 BBR 在无线网链接下速度恶化的问题,所以开不开得根据自己的链路做测试。