地球人

地球人的空间

世上本没有路
tg_channel
mastodon
pleroma

Windows 操作系統,如何開啟 BBR 擁塞控制算法

BBR 介紹#

BBR(瓶頸帶寬和往返傳播時間)是一種由 Google 開發的較新型的 TCP 擁塞控制算法。它旨在解決傳統擁塞控制算法(如 Reno 或 CUBIC)在某些網絡條件下(尤其是有一定丟包率和延遲的網絡中)帶寬利用率不高和延遲較大的問題。

核心思想#

BBR 的核心思想是不再依賴丟包作為判斷網絡擁塞的主要信號。傳統的擁塞控制算法通常在檢測到丟包時才降低發送速率,但這在緩衝區較大或存在輕微隨機丟包的網絡中,可能導致無法充分利用可用帶寬,或者引入不必要的延遲(緩衝區膨脹)。

BBR 轉而主動測量網絡的兩個關鍵參數

  1. 瓶頸帶寬 (Bottleneck Bandwidth, BtlBw):網絡路徑中數據傳輸速率的上限,即路徑中最窄環節的容量。
  2. 往返傳播時間 (Round-trip Propagation Time, RTprop):數據包在網絡路徑中往返所需的最短時間,不包括在中間設備緩衝區中的排隊時間。

工作機制#

BBR 透過周期性地探測這兩個參數來動態調整其發送行為:

  • 探測瓶頸帶寬:BBR 會在一段時間內以略高於當前估計的瓶頸帶寬的速率發送數據,以探測是否有更高的可用帶寬。
  • 探測往返傳播時間:BBR 會在一段時間內以略低於當前估計的瓶頸帶寬的速率發送數據,以排空路徑中的隊列,從而測量到更準確的 RTprop。

透過這種方式,BBR 試圖將正在傳輸的數據量(inflight data)維持在略高於帶寬延遲積(BDP = BtlBw * RTprop)的水平。這樣既能充分利用瓶頸鏈路的帶寬,又能避免在網絡中造成過長的排隊和高延遲

主要優勢#

  • 高吞吐量:尤其在有一定丟包和延遲的長肥網絡(Long Fat Networks)中,BBR 通常能獲得比傳統算法更高的吞吐量。
  • 低延遲:透過主動控制排隊,BBR 能夠有效降低網絡延遲,避免緩衝區膨脹問題。
  • 對丟包不敏感:由於不主要依賴丟包來判斷擁塞,BBR 在有少量隨機丟包的網絡中表現更穩定。

Windows 開啟 BBR 的條件#

操作系統支持才行。版本要求可能是 Windows 11 version 22H2 及以上。

以管理員身份運行 Powershell,發送以下命令了解系統支持的算法:

[Enum]::GetNames([Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetTCPSetting.CongestionProvider])

它可能會輸出類似:

Default
NewReno
CTCP
DCTCP
LEDBAT
CUBIC
BBR2

這個列表代表了系統在 TCP 設置中所能識別和配置的擁塞控制算法名稱。Default 通常意味著由系統根據特定模板或全局設置來決定使用 CUBIC 或其他算法。

Windows 嘗試使用 BBR 擁塞控制算法#

查看當前配置的擁塞控制算法:

Get-NetTCPSetting | Select SettingName, CongestionProvider

輸出可能如下所示:

SettingName        CongestionProvider
-----------        ------------------
Automatic
InternetCustom     CUBIC
DatacenterCustom   CUBIC
Compat             NewReno
Datacenter         CUBIC
Internet           CUBIC

嘗試開啟:

Set-NetTCPSetting -SettingName InternetCustom -CongestionProvider BBR2

報錯:

Set-NetTCPSetting : Property CongestionProvider is read-only
At line:1 char:1
+ Set-NetTCPSetting -SettingName InternetCustom -CongestionProvider BBR ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (MSFT_NetTCPSett...ystemName = ""):ROOT/StandardCimv2/MSFT_NetTCPSetti
   ng) [Set-NetTCPSetting], CimException
    + FullyQualifiedErrorId : Windows System Error 87,Set-NetTCPSetting

當前 Windows 使用 BBR 算法的問題#

此時,查詢得知, Windows 的 BBR 支持尚不完善,有很多 bugs (前兩個資料提到,開啟 BBR 會破壞 “localhost”(環回接口)TCP 流量,導致同一台機器內的連接變得緩慢或無響應),如:

  • 會破壞 Steam,因為 Steamwebhelper 無法再啟動,並且當使用 Internet Download Manager 時,它會破壞所有下載掛鉤,當改回 CUBIC 時,它們會再次工作 —— Fix BBR2 bugs on Windows 11 - Microsoft Community ,創建於 2025 年 5 月 8 日
  • BBR2 24H2 的新 bug 是連接不穩定。我的 Firefox 瀏覽器會隨機收到 NS_BINDING_ABORT 錯誤。我的 Visual Studio Code Remote 開發插件連接時卡住了,並出現以下錯誤: failed to set up socket for dynamic port forward to remote port =: proxy connection timed out. 。我的 Messenger (UWP) 應用幾乎崩潰(新消息無法顯示)。—— Windows 11 24H2 and BBR2 : r/Windows11
  • 會中斷 Hyper-V 的本地控制台連接(自 Windows 11 23H2 起)。控制台將顯示 Connecting to '[VM]' 幾分鐘,然後失敗並顯示 Video remoting was disconnected ,並彈出 Could not connect to the virtual machine. 的提示。—— 如何在 Windows 上啟用 TCP BBR - Stack Overflow
  • v2rayN 無法更新地理文件、核心或連接到代理伺服器。—— [Bug]: Windows 中的 BBR2 擁塞算法導致 v2rayN 停止工作・2dust/v2rayN

因此決定暫時不开啟 BBR。如果您想嘗試開啟,可以試一下命令:

netsh int tcp set supplemental template=Internet congestionprovider=BBR2
netsh int tcp set supplemental template=InternetCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Datacenter congestionprovider=BBR2
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Compat congestionprovider=BBR2

這裡也可以將  BBR2  替換成  BBR (BBR v1),可以測試一下,對比一下效果。

然後查看當前配置的擁塞控制算法,是否已經配置為 BBR2

Get-NetTCPSetting | Select SettingName, CongestionProvider

在 Windows 11 23H2 / 24H2 上,啟用 BBR v2 可能會導致本地 TCP 連接不可用(例如,導致 adb 無法使用、Steam 失敗等) ,這時請將擁塞控制算法恢復為之前的配置。恢復後無需重啟,問題應該會立即解決。

本文尚不完善,歡迎留言或者評論,告知我最新信息。

參考#

Set-NetTCPSetting (NetTCPIP) | Microsoft Learn

Enable TCP BBR v2 on Linux & Windows 11 - Coxxs

本網頁的其他版本#

本文章有多種語言的版本。

如果您想發表評論,請訪問以下網頁:

ZH EN ZH-TW JA

這些網頁僅支持瀏覽,無法發表評論或留言,但提供了更多語言選項,並且加載時間更短:

ZH EN ZH-TW JA RU KO CS ES AR FR PT DE TR IT NL SV DA FI PL UK HE RO HU EL HR TH HI BN ID SW VI NO

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。