Windows 11 22H2 开启 TCP BBR v2 拥塞控制算法

11 min


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 在无线网链接下速度恶化的问题,所以开不开得根据自己的链路做测试。


Like it? Share with your friends!

0
DUN

Choose A Format
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Video
Youtube and Vimeo Embeds