この記事では、WindowsデバイスでBBR輻輳制御アルゴリズムを有効にする方法と、この機能を使用することで発生する可能性のある問題について簡単に紹介します。

BBRの紹介

BBR(Bottleneck Bandwidth and Round-trip propagation time)は、Googleが開発した比較的新しいTCPの輻輳制御アルゴリズムです。従来の輻輳制御アルゴリズム(RenoやCUBICなど)が、特定のネットワーク条件下(特に一定のパケット損失率と遅延があるネットワーク)で帯域利用率が低く、遅延が大きいという問題を解決することを目的としています。

コアとなる考え方

BBRのコアとなる考え方は、パケット損失をネットワーク輻輳の主要な信号として依存しないことです。従来の輻輳制御アルゴリズムは通常、パケット損失を検出したときに送信速度を低下させますが、これはバッファが大きい、またはわずかなランダムパケット損失が存在するネットワークでは、利用可能な帯域幅を十分に活用できないか、不要な遅延(バッファの膨張)を引き起こす可能性があります。

BBRは、代わりにネットワークの2つの重要なパラメータを積極的に測定します

  1. ボトルネック帯域幅 (Bottleneck Bandwidth, BtlBw):ネットワークパスにおけるデータ転送速度の上限、つまりパスの中で最も狭い部分の容量。
  2. 往復伝播時間 (Round-trip Propagation Time, RTprop):データパケットがネットワークパスを往復するのに必要な最短時間。中間デバイスのバッファでのキューイング時間は含まれません。

動作メカニズム

BBRは、これらの2つのパラメータを周期的に検出し、送信動作を動的に調整します。

  • ボトルネック帯域幅の検出: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サポートはまだ不完全であり、多くのバグがあります(最初の2つの資料で言及されているように、BBRを有効にすると「localhost」(ループバックインターフェース)TCPトラフィックが破壊され、同じマシン内の接続が遅くなるか応答しなくなる可能性があります)。例:

  • Steamを破壊します。Steamwebhelperを起動できなくなり、Internet Download Managerを使用すると、すべてのダウンロードフックが破壊されます。CUBICに戻すと、再び動作します。—— Fix BBR2 bugs on Windows 11 - Microsoft Community 、2025年5月8日に作成
  • BBR2 24H2の新しいバグは、接続が不安定になることです。私の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

ここで、BBR2BBR(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

https://github.com/google/bbr

本ウェブページの他のバージョン

この記事には複数の言語版があります。

コメントを投稿する場合は、次のページにアクセスしてください。

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