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
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 项none
或 ctcp
代表关闭或开启。
开启 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