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

浏览: 2,407 次浏览 作者: 去年夏天 分类: Windows,技术文章 发布时间: 2023-04-24 16:16

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 拥塞控制

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

8 条评论
  • Kevin.MX

    2024-03-05 14:43

    高速局域网(e.g. 2.5GbE)内 SMB 共享的情况下不建议开启。
    开启 BBR2 之后,2.5GbE 网络下会出现字面意思上的“TCP Slow start” 问题。
    对端 iperf3 -s,本地 iperf3 -c,单线程的情况下,需要大概 30s 才能跑满 2.5GbE。SMB 试了一下,也一样。
    恢复 cubic/newreno 之后,局域网内速度恢复正常。iperf3 拉起来瞬间就是 2.5Gbps。

  • ccuoi

    2023-05-05 17:21

    可以在win2019中使用吗

    1. 去年夏天

      2023-05-09 10:45

      2019还不能用,倒是有本地反代后再处理的偏门办法

  • ccuoi

    2023-05-05 16:53

    windows 2019能否使用这个bbr2?

  • anon

    2023-04-30 19:14

    实测似乎反而会造成国内游戏延迟飙升,对外网访问感觉也没有任何加速——最好的优化果然还是不优化

    1. 去年夏天

      2023-05-05 14:53

      是,改成BBRv2主要是还是对持续性的TCP上传有一些好处(比如BT做种等基于P2P的分享,win下搭建web网页等)

      1. ccuoi

        2023-05-05 15:00

        如果是windows的国外服务器,开启这个会不会有提升

        1. 去年夏天

          2023-05-05 15:13

          如果你的国外服务器是用来提供经由TCP给国内用户传输内容的服务话,有提升。
          比如博客,下载站,论坛,视频站等。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据