将Windows拥塞算法更改为CTCP

Compound TCP ,简称CTCP,是微软自Windows Vista及Window Server 2008开始在TCP栈中引入的一个算法。它旨在积极调整发送方的拥塞窗口,以在不损害公平原则的基础上优化TCP对高带宽时延积连接的表现。

类似近段时间在 Linux 中常用的 TCP BBR( Bottleneck Bandwidth and Round-trip propagation time) , CTCP 能提升在高延时环境下的网络通讯质量。经过测试,开启CTCP后, 能显著改善与网络互通性较差的海外服务器上传文件、远程连接等操作的速度。

更新:对于Windows 11/Windows Server 2025,已经可以设置BBR2。

Windows 11/Windows Server 2025

对于可以设置的值,可以使用PowerShell

[Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetTCPSetting.CongestionProvider].DeclaredMembers.Name

输出如

PS C:\Users\Administrator> [Microsoft.PowerShell.Cmdletization.GeneratedTypes.NetTCPSetting.CongestionProvider].DeclaredMembers.Name
value__
Default
NewReno
CTCP
DCTCP
LEDBAT
CUBIC
BBR2

查看当前配置

PS C:\Users\Administrator> Get-NetTCPSetting | Select SettingName, CongestionProvider

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

可以参考下面的PowerShell设置拥塞控制模式,其中,$CongestionProvider 为上述步骤中获得,系统支持的拥塞控制模式,如BBR2/CTCP等。

$CongestionProvider = "BBR2" 
netsh int tcp set supplemental template=InternetCustom CongestionProvider=$CongestionProvider
netsh int tcp set supplemental template=DatacenterCustom CongestionProvider=$CongestionProvider
netsh int tcp set supplemental template=Compat CongestionProvider=$CongestionProvider
netsh int tcp set supplemental template=Datacenter CongestionProvider=$CongestionProvider
netsh int tcp set supplemental template=Internet CongestionProvider=$CongestionProvider
Get-NetTCPSetting | Select SettingName, CongestionProvider

如需还原,参照上述的记录,修改即可,如

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=Datacenter CongestionProvider=CUBIC
netsh int tcp set supplemental template=Internet CongestionProvider=CUBIC

对于 Windows 10 系统

查看当前TCP全局参数

 netsh int tcp show global 

查看TCP默认模板及补充参数

 netsh int tcp show supplemental 

在这里能看到当前默认拥塞控制程序

执行下面的更改命令,重启系统。再次查看参数,确认已完成更改。

netsh int tcp set supplemental template=internet congestionprovider=ctcp 

Windows Server 2019/2016

在Windows 2019中,Cubic被选为默认的拥塞控制算法,如果要修改为CTCP,参考下面链接。

Server 2019 network performance

Set-NetTCPSetting

Disabling LEDBaT on Your Windows 2016/2019 Server

Windows Vista/2008/7

在Beta版Windows Server 2008中,CTCP默认是开启的,而在Vista和Win7中默认是关闭的,需要手动开启。

显示当前设置: netsh interface tcp show global 。 Add-On Congestion Control Provider 项nonectcp 代表关闭或开启。

开启 CTCP: netsh interface tcp set global congestionprovider=ctcp

关闭 CTCP: netsh interface tcp set global congestionprovider=none

Windows 2003 & XP 64bit

修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TCPCongestionControl 中的值,1为开启,0为关闭。

参考资料

https://github.com/MicrosoftDocs/windows-powershell-docs/issues/3302

https://learn.microsoft.com/en-us/powershell/module/nettcpip/get-nettcpsetting?view=windowsserver2025-ps

CTCP进驻Windows的故事

Compound TCP – Wikipedia

发表回复

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

Back to Top