地球人

地球人的空间

世上本没有路
tg_channel
mastodon
pleroma

Windows オペレーティングシステム、BBR 混雑制御アルゴリズムを有効にする方法

BBR について#

BBR(ボトルネック帯域幅と往復伝播時間)は、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

Linux および Windows 11 で TCP BBR v2 を有効にする - 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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。