最近研究TCP的性能优化,这里先总结下TCP的参数调优,主要参考下面网址并加上自己的一些理解和总结:
网址:https://www.speedguide.net/articles/windows-8-10-2012-server-tcpip-tweaks-5077
1.1 拥塞控制算法
Win10系统默认的是cubic拥塞控制算法,系统支持CTCP,DCTCP,CUBIC,NewReno四种拥塞控制算。
CTCP: 基于丢包和延迟的拥塞控制算法,ctcp维护了两个拥塞控制窗口,AIMD窗口和基于延迟的窗口,真正的滑动窗口是这两个窗口值之和。这是一种较新的拥塞控制方法,它更激进地增加了用于宽带连接的TCP发送窗口(具有较大的RWIN和BDP)。CTCP试图通过监视延迟变化和包丢失来最大化吞吐量。它还确保其行为不会对其他TCP连接产生负面影响。CTCP增加了接收窗口和发送的数据量,在高延迟/宽带互联网连接场景下,可以显著提高吞吐量和丢包恢复。
DCTCP: 基于显式拥塞通知(ECN)信令的网络拥塞反馈调整TCP窗口,旨在提高 低延迟/本地链路的吞吐量。
CUBIC: 基于丢包的拥塞控制算法,对丢包敏感,对延迟不敏感。TCP拥塞窗口使用三次方生长函数。它是为高速TCP传输而设计的。唯一的缺点是, 在大型BDP网络(如互联网)与非托管队列,如ADSL和LTE,它可能会导致bufferbloat。理论上它应该和CTCP一样好。
NewReno:基于丢包的拥塞控制算法,对丢包敏感,对延迟不敏感。不如cubic性能好。
微软推荐:CTCP或者CUBIC
设置命令:
cmd命令:
netsh int tcp set supplemental Internet
congestionprovider=ctcp
PowerShell命令:
Set-NetTCPSetting -SettingName InternetCustom
-CongestionProvider CTCP
1.2 滑动窗口相关
1) Receive
Window Auto-Tuning Level:
接收窗口自动调整级别,TCP接收窗口在TCP连接中起着非常重要的作用。它可以限制吞吐量,特别是在高速、高延迟的环境中,比如大多数internet连接。可能的设置如下:
disabled:为tcp接收窗口使用一个固定的值。将其限制为64KB(限制为65535)。
highlyrestricted:非常保守地允许接收窗口增长超过默认值
restricted:tcp接收窗口的增长严格控制超出其默认值的限制
normal:默认值,允许接收窗口增长以适应大多数情况
experimental:允许接收窗口增长以适应极端的场景(不推荐,它会降低常见场景的性能,仅用于研究目的)。它支持超过16 MB的RW