|
本帖最后由 fulibo 于 2024-12-22 11:26 编辑
原帖=Windows 10,11 TCP/IP Tweaks
接收窗口自动调节级别
TCP接收窗口在 TCP 连接中起着非常重要的作用。它可以限制吞吐量,尤其是在高速、高延迟的环境中,
例如大多数互联网连接。有关它如何限制速度的更多信息,请查看我们的TCP 窗口文章。
可能的设置如下:
禁用:对TCP 接收窗口使用固定值。将其限制为 64KB(限制为 65535)。
highlyrestricted:允许接收窗口超出其默认值,非常保守
restricted:在一定程度上限制TCP 接收窗口超出其默认值的增长
normal:默认值,允许接收窗口增长以适应大多数情况
experimental:允许接收窗口增长以适应极端情况(不推荐,它会降低常见情况下的性能,仅用于研究目的。它允许RWIN值超过 16 MB)
默认设置:正常
我们的建议:正常(除非您遇到问题)
netsh int tcp set global autotuninglevel=normal
使用PowerShell cmdlet完成相同操作,只需输入:
Set-NetTCPSetting -SettingName InternetCustom -AutoTuningLevelLocal Normal
==============
禁用 Windows 缩放启发式方法
Windows 8(与 Windows 7 一样)能够自动将其自身的 TCP 窗口自动调整行为更改为更保守的状态,而不管用户设置如何。
当启发式方法限制您的自动调整级别时,您可能会在查看 netsh 设置时看到此消息:
“** 上述自动调整级别设置是 Windows 缩放启发式方法覆盖至少一个配置文件上的任何本地/策略配置的结果。”
当启发式方法限制自动调整级别时,“netsh int tcp show global”命令仍会(错误地)显示用户设置的自动调整级别,
您必须使用“netsh int tcp show heuristics”来查看当前实际的启发式方法限制。
要强制执行用户设置的TCP 接收窗口自动调整级别并防止启发式方法限制TCP 接收窗口的增长方式,
请禁用启发式方法。最好在应用自动调整级别之前禁用此功能,以确保保留用户设置的自动调整级别。
默认状态:取决于操作系统(在 Windows 8.1 中禁用,在 Windows 7 中启用)
可能的设置为:禁用、启用、默认(设置为 Windows 默认状态)
推荐:禁用(保留用户设置的 RWIN 自动调整级别)
netsh int tcp set heuristics disabled
PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -ScalingHeuristics Disabled
===================
附加拥塞控制提供程序 ( CTCP )
TCP 中的传统慢启动和拥塞避免算法通过在传输开始时逐渐增加 TCP 窗口直到达到TCP 接收窗口边界或发生数据包丢失来帮助避免网络拥塞。
对于结合了高 TCP 窗口和更高延迟(高BDP )的宽带互联网连接,这些算法增加 TCP 窗口的速度不够快,无法充分利用连接的带宽。
复合 TCP ( CTCP ) 是一种较新的拥塞控制方法,它可更积极地增加宽带连接的 TCP 发送窗口(具有较大的RWIN和BDP)。
CTCP尝试通过监控延迟变化和数据包丢失来最大化吞吐量。它还确保其行为不会对其他 TCP 连接产生负面影响。
CTCP适用于 Windows 8/10 和 Server 版本。使用CTCP可以显著提高吞吐量和数据包丢失恢复能力。
可能的设置有:none、ctcp、dctcp(数据中心 TCP),以及较新的 Windows 10 版本中的 CUBIC 和 New-Reno。
CTCP - 复合 TCP 增加了接收窗口和发送的数据量。它提高了高延迟/宽带互联网连接的吞吐量。
DCTCP - 数据中心 TCP 根据基于显式拥塞通知 (ECN)信令的网络拥塞反馈调整TCP窗口,旨在提高低延迟/本地链路的吞吐量。
CUBIC -从Windows 10 Creators 更新开始的新默认设置,
Linux 内核 2.6 到 3.2 中的默认设置。使用立方 TCP 拥塞窗口增长函数。
该算法使用自上次拥塞事件以来的时间量(而不是 ACK 计时)来推进 TCP 拥塞窗口。它是为高速 TCP 传输而设计的。
唯一的缺点是它可能会大型BDP网络(如 Internet)中造成一些缓冲区膨胀,例如ADSL和LTE。理论上它的性能与CTCP一样好。
NewReno - RFC 6582(旧版RFC 3782)实现快速重传和快速恢复算法。如果超过 3 个重新排序的数据包,
New Reno 会进入快速恢复模式,这是一个问题。较旧的拥塞控制算法,不推荐使用。
不幸的是,PowerShell cmdlet 仅允许在某些 Windows 版本中更改此设置,
而 netsh 已被弃用,并且在某些 Windows 10 版本中可能存在错误,因此更改拥塞提供程序可能具有挑战性。
微软万岁!幸运的是,早期 Windows 10 版本的默认设置已经是CTCP,
而较新版本的默认设置是 CUBIC(根据PowerShell Get-NetTCPSetting cmdlet)。
默认设置:CUBIC 或CTCP **(在 Windows 8 和早期 Windows 10 版本中,netsh 默认错误地显示“无”,
而 PowerShell Get-NetTCPSetting根据版本显示“ CTCP ”或“CUBIC”)
推荐设置:如果预计会出现网络拥塞/数据包丢失,则使用CTCP进行游戏/延迟/速度设置;
在没有拥塞/数据包丢失的稳定网络上,使用 CUBIC 进行纯吞吐量设置
netsh int tcp set supplemental Internet congestionprovider=ctcp
Set-NetTCPSetting -SettingName InternetCustom -CongestionProvider CTCP
=======================
TCP 烟囱卸载
TCP 烟囱卸载使 Windows 能够卸载与网络适配器连接的所有 TCP 处理(具有适当的驱动程序支持)。
卸载是基于每个连接启动的,可减少与网络相关的 CPU 开销,理论上可通过释放 CPU 时间来执行其他任务,
从而提高整体系统性能。TCP 烟囱卸载通常控制 Windows 中所谓的“TCP 卸载引擎”(TOE)。
这是一个全局设置,必须启用它才能使许多其他卸载正常工作。过去,由于网络适配器驱动程序存在缺陷,
启用此设置会产生一些负面影响,但随着时间的推移,它的实现已经大大改善。
它适用于 CPU 受限的客户端计算机和非常快速的宽带连接,但不建议在某些服务器环境中使用。
此设置的可能状态如下:
自动 - 如果连接为 10 GbE、具有RTT ,则卸载默认 - 此设置将烟囱卸载恢复为系统默认值。
禁用 - 烟囱卸载已禁用。
启用 - 烟囱卸载已启用。
默认:自动
推荐:禁用
netsh int tcp set global chimney=disabled
To set using Powershell cmdlets:
Set-NetOffloadGlobalSetting -Chimney Disabled (recommended: disabled*)
======================
NetDMA 状态
NetDMA (TCPA) 支持高级直接内存访问。本质上,它通过最小化 CPU 使用率来提供更高效地移动网络数据的能力。
NetDMA 通过使用 DMA 引擎,使 CPU 无需处理网卡数据缓冲区和应用程序缓冲区之间的内存数据传输。
默认:禁用
推荐:不管,不要打扰(据微软称,Windows 8 及更高版本不支持此设置)
您仍然可以使用以下方法编辑它:
netsh int tcp set global netdma=disabled
=============
直接缓存访问 (DCA)
直接缓存访问 (DCA) 允许功能强大的 I/O 设备(例如网络控制器)将数据直接传送到 CPU 缓存中。
DCA 的目标是减少高带宽(千兆位)环境中的内存延迟和内存带宽要求。DCA 需要 I/O 设备、系统芯片组和 CPU 的支持。
可能的状态为:启用、禁用
默认状态:禁用
推荐:启用(前提是 CPU/芯片组/NIC 支持)
netsh int tcp set global dca=enabled
=================
校验和卸载
PowerShell Enable-NEtAdapterChecksumOffload cmdlet 可在网络适配器上启用校验和卸载。
其他一些无状态卸载也需要校验和卸载才能工作,包括接收方缩放 ( RSS )、接收段合并 (RSC) 和大型发送卸载 (LSO)。
默认状态:适配器相关
推荐:启用
Enable-NetAdapterChecksumOffload -Name * (用于在所有支持校验和卸载的适配器上启用校验和卸载)
Disable-NetAdapterChecksumOffload -Name * (用于在所有网络适配器上禁用校验和卸载)
Get-NetAdapterChecksumOffload (用于查看支持校验和卸载的网络适配器及其状态)
==================
接收方扩展状态 ( RSS )
接收端缩放设置允许在多个处理器上并行处理接收的数据包,同时避免数据包重新排序。
它通过将数据包分成“流”并使用单个处理器处理给定流的所有数据包来避免数据包重新排序。
通过根据每个数据包中的特定字段计算哈希值将数据包分成流,并使用生成的哈希值选择处理流的处理器。
这种方法可确保属于给定 TCP 连接的所有数据包都将按照网络适配器接收它们的顺序排队到同一个处理器。
默认:启用
推荐:启用(前提是您有 2 个或更多处理器核心以及可以处理RSS的NIC
netsh int tcp set global rss=enabled
Enable-NetAdapterRss -Name * (使用此命令为所有支持 RSS 的适配器启用RSS)
Disable-NetAdapterRss -Name * (使用此命令为所有适配器禁用RSS)
Set-NetOffloadGlobalSetting -ReceiveSideScaling Enabled (所有适配器的备用全局命令)
==================
接收段合并状态 (RSC)
接收段合并 (RSC) 允许NIC将单个中断内到达的多个TCP/IP数据包合并为一个更大的数据包(最大 64KB),这样网络堆栈就不必处理那么多报头,
从而根据工作负载减少 10% 到 30% 的 I/O 开销,从而提高性能。接收段合并 (RCS) 能够收集在同一中断周期内收到的数据包并将它们放在一起,
以便更有效地将它们传送到网络堆栈。这可以显著增加可处理的流量,而不会严重影响 CPU。
可能的状态:启用、禁用、默认
默认状态:在 Windows 10 中启用,在某些旧版本中禁用。
建议:禁用以降低延迟和游戏,或使用Wi-Fi适配器时。当降低 CPU 利用率很重要时,启用可获得略高的吞吐量。
Microsoft 建议为 Web、邮件或数据库服务器禁用它,为文件、FTP 或媒体服务器启用它。
netsh int tcp set global rsc=disabled
Disable-NetAdapterRsc -Name *
Enable-NetAdapterRsc -Name *
Set-NetOffloadGlobalSetting -ReceiveSegmentCoalescing Disabled
===============
数据包合并
此设置通常定义网络数据包的分组,以限制接收中断的数量并减少所需的处理量。
在使用网络驱动程序接口规范 (NDIS) 版本 6.3 及更高版本的网络适配器中,
数据包合并用于对随机和多播流量进行分组以提高效率。为了获得纯粹的吞吐量和效率,应启用此功能;
对于游戏和需要较低延迟但需要稍高 CPU 利用率和稍多多播流量的情况,应禁用此功能。
如果使用 RSC(接收段合并),则必须启用此功能。
可能的状态:启用、禁用、默认
Windows 10 下的默认状态:启用
推荐:禁用(用于游戏和略低的延迟,但代价是更高的 CPU 使用率和更多的多播流量,以及使用Wi-Fi适配器时),
启用(当较低的 CPU 利用率很重要时,用于纯吞吐量
Set-NetOffloadGlobalSetting -PacketCoalescingFilter enabled
Set-NetOffloadGlobalSetting -PacketCoalescingFilter disabled
===========
大量发送卸载 (LSO)
此设置启用 Large Send Offload。启用后,网络适配器硬件用于完成数据分段,理论上比操作系统软件更快。
理论上,此功能可以提高传输性能并减少 CPU 负载。LSO 降低了中断率和到 NIC 的总线事务量。
此设置的问题是在多个级别上存在错误,包括网络适配器驱动程序。众所周知,Intel 和 Broadcom 驱动程序默认启用此功能
,并且可能存在许多问题。它只应在具有最新驱动程序的最新千兆位 NIC 上启用。
由于上述问题,我们建议在网络适配器属性和操作系统级别使用以下设置在操作系统级别禁用 LSO。
默认值:适配器相关推荐:禁用(在网络适配器属性和操作系统级别的TCP/IP
Disable-NetAdapterLso -Name *
Enable-NetAdapterLso -Name *
====================
ECN能力
ECN(显式拥塞通知,RFC 3168)是一种为路由器提供传达网络拥塞的替代方法的机制。它旨在减少重传。
本质上,ECN 假设任何数据包丢失的原因都是路由器拥塞。它允许遇到拥塞的路由器标记数据包,
并允许客户端自动降低其传输速率以防止进一步丢失数据包。传统上,TCP/IP网络通过丢弃数据包来发出拥塞信号。
成功协商 ECN 后,ECN 感知路由器可能会在 IP标头(在 DiffServ 字段中)中设置一个位,
而不是丢弃数据包以发出拥塞信号。接收方将拥塞指示回送给发送方,发送方必须做出反应,就像检测到数据包丢失一样。
在现代 Windows TCP/IP实现中, ECN 默认处于禁用状态,因为它可能会导致一些过时的路由器出现问题,
这些路由器会丢弃设置了 ECN 位的数据包,而不是忽略该位。
可能的设置有:启用、禁用、默认(将状态恢复为系统默认状态)。
默认状态:禁用
建议:仅在存在拥塞/数据包丢失的情况下,针对支持该功能的路由器的短暂、交互式连接和 HTTP 请求启用“启用”,否则禁用
(对于具有大 TCP 窗口的纯批量吞吐量、没有常规拥塞/数据包丢失或不支持 ECN 的过时路由器)。
对于连接不稳定的游戏,可能值得尝试“启用”。
netsh int tcp set global ecncapability=default
netsh int tcp set global ecn=default
To change using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -EcnCapability Disabled
===================
TCP 1323时间戳
RFC 1323 添加了许多有用的选项,最值得注意的是 TCP 窗口的缩放。
“时间戳”(TSOpt)是一个不太常用的 1323 选项,旨在通过重新传输在某个重新传输超时 (RTO) 间隔内未确认的段来提高传输可靠性。
时间戳的问题在于它们会在每个数据包的 20 字节 TCP标头上添加 12 个字节,因此打开它们会造成相当大的开销。
可能的状态:启用、禁用、默认
默认状态:禁用
推荐:禁用
netsh int tcp set global timestamps=disabled
To set using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -Timestamps Disabled
============
初始 RTO 和最小 RTO
重传超时 (RTO) 决定了在连接中止之前需要多少毫秒才能收到未确认的数据。对于低延迟的现代宽带连接,
初始 RTO 的默认超时为 3 秒,通常可以降低该值,除非您身处偏远地区、使用卫星互联网连接或遇到高延迟。
在高延迟情况下,如果定期达到 RTO 值,则可能会增加重传次数。
InitialRTO
默认值:3000(3 秒)
建议:2000(2 秒)至 3000(3 秒)之间。
MinRTO
默认值:300(毫秒)
推荐值:300(毫秒
netsh int tcp set global initialRto=3000
To set using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -InitialRto 3000
set-NetTCPSetting -SettingName InternetCustom -MinRto 300
=============
非 Sack Rtt弹性(Windows 8.1)
为非 SACK 客户端启用/禁用RTT弹性。启用后,这可以帮助降低客户端/连接的速度,因为TCP/IP在重新传输数据包时不会那么积极。
可能的状态:启用、禁用、默认
默认状态:禁用推荐:对于没有太多延迟
变化的 稳定连接,“禁用”对于 ping 波动且存在数据包丢失的连接,“启用”。
netsh int tcp set global nonsackrttresiliency=disabled
To set using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -NonSackRttResiliency disabled
=================
最大 SYN 重新传输次数(Windows 8.1)
设置尝试使用 SYN 数据包重新建立连接的次数。
可能的值:2 至 8
默认值:2
建议:保留为 2
netsh int tsp set global maxsynretransmissions=2
To set using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -MaxSynRetransmissions 2
===================
初始拥塞窗口 (ICW)
创建 TCP 连接时,发送方执行“TCP 慢启动”,无论接收方RWIN值如何。
TCP 慢启动仅发送两帧,等待 ACK 响应,并在没有丢包的情况下成倍增加速度。
如果 200ms 内没有流量,也可以激活此慢启动算法。这对于间歇性数据突发的快速互联网连接来说不是最佳选择。
可以通过将“InitialcongestionWindow”从默认的 2(或 4)帧增加到 10+ 来避免此瓶颈(参见RFC 3390 和RFC 6928)。
以下内容应该适用于 2012 服务器,但它不适用于 Windows 8.1 或 Windows 10 工作站变体(只读设置错误)。
默认设置:2、4 或 10,具体取决于操作系统版本。
建议:10
Set-NetTCPSetting -SettingName InternetCustom -InitialCongestionWindow 10
To set using elevated command prompt:
netsh int tcp set supplemental template=custom icw=10
====================
netsh int tcp set global autotuninglevel=normal
netsh int tcp set heuristics disabled
netsh int tcp set supplemental Internet congestionprovider=ctcp
netsh int tcp set global chimney=disabled
netsh int tcp set global netdma=disabled
netsh int tcp set global dca=enabled
netsh int tcp set global rss=enabled
Enable-NetAdapterChecksumOffload -Name *
Set-NetOffloadGlobalSetting -PacketCoalescingFilter enabled
Disable-NetAdapterLso -Name *
netsh int tcp set global ecncapability=default
netsh int tcp set global ecn=default
netsh int tcp set global timestamps=disabled
netsh int tcp set global initialRto=3000
set-NetTCPSetting -SettingName InternetCustom -MinRto 300
netsh int tcp set global nonsackrttresiliency=disabled
Set-NetTCPSetting -SettingName InternetCustom -InitialCongestionWindow 10
使用Wi-Fi适配器或者玩网游
netsh int tcp set global rsc=disabled
Set-NetOffloadGlobalSetting -PacketCoalescingFilter disabled
|
|