0.前言
在 Windows11 22H2 之后, 也可以为 TCP 开启 BBR2 的拥塞控制算法了 — 尽管有一些小小的问题需要处理。
1.开启 BBR2
使用管理员权限 Powershell 执行以下指令查看系统当前的控制算法:
Get-NetTCPSetting | Select SettingName, CongestionProvider
输出
SettingName CongestionProvider
----------- ------------------
Automatic
InternetCustom CUBIC
DatacenterCustom CUBIC
Compat NewReno
Datacenter CUBIC
Internet CUBIC
可以看到都是 CUBIC, 中间还混了个 NewReno.
使用管理员权限 Powershell 执行以下指令切换至 BBR2 模式, 并重启电脑.
netsh int tcp set supplemental Template=InternetCustom CongestionProvider=bbr2
netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=bbr2
netsh int tcp set supplemental Template=Compat CongestionProvider=bbr2
netsh int tcp set supplemental Template=Internet CongestionProvider=bbr2
netsh int tcp set supplemental Template=Datacenter CongestionProvider=bbr2
即可开启 BBR2.
2.小 Bug 修复
因为当前的 BBR2 尚未完善对环回接口大分段(Large MTU)的处理, 会导致本地 TCP 握手或数据收发出现阻塞或超时. 因此, 要先关闭环回接口大分段(Large MTU).
使用管理员权限 Powershell 执行以下指令
netsh interface ip show global
输出
常规全局参数
---------------------------------------------
...
环回大 Mtu : enabled
...
可以看到, 这个 "环回大 MTU" 是 enable. 需要关闭, 是 disable 也可以执行一遍命令.
使用管理员权限 Powershell 执行以下指令
netsh int ipv4 set global loopbacklargemtu=disable
netsh int ipv6 set global loopbacklargemtu=disable
确保变为 disable 即可.
3.恢复
根据上面的默认值执行代码即可:
netsh int tcp set supplemental Template=InternetCustom CongestionProvider=CUBIC
netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=CUBIC
netsh int tcp set supplemental Template=Compat CongestionProvider=NewReno
netsh int tcp set supplemental Template=Internet CongestionProvider=CUBIC
netsh int tcp set supplemental Template=Datacenter CongestionProvider=CUBIC
文章转载自 Esing 的小站