How to Configure TCP Delayed ACK Timeout in Windows 11 Using PowerShell

In standard TCP/IP networking, the Transmission Control Protocol implements a mechanism known as Delayed Acknowledgments (Delayed ACK, RFC 1122). Instead of dispatching an immediate acknowledgment packet for every incoming segment, the operating system holds the ACK for a predetermined time window — typically up to 200 milliseconds — or until a second segment arrives. This strategy allows the network stack to combine the ACK with outgoing application response data (piggybacking) or acknowledge multiple incoming segments with a single packet, reducing bandwidth overhead and packet processing strain.

However, when combined with Nagle’s algorithm or deployed in latency-critical scenarios such as financial trading terminals, database replication channels, online multiplayer telemetry, or real-time gaming, delayed ACKs introduce unnecessary microsecond-to-millisecond latency spikes. Windows 11 provides native PowerShell cmdlets within the NetTCPIP module to query, configure, and tune the TCP Delayed ACK timeout and frequency on network profiles.

Understanding TCP Delayed ACK Behaviour and Nagle’s Interaction

Delayed ACKs operate by establishing a timer whenever an unacknowledged TCP segment arrives without immediate outbound data. If no subsequent packet arrives before the timer expires, the kernel fires a standalone ACK. The problem arises when an application transmits data in small chunks: Nagle’s algorithm halts outbound packet transmission until the previous segment’s ACK arrives, while the receiver’s Delayed ACK timer waits for additional packets before sending the ACK. This circular dependency — known as the “Nagle vs Delayed ACK deadlock” — forces both systems to wait for the full timeout duration before communication progresses.

In modern Windows networking stacks, delayed ACK parameters are managed through TCP settings profiles assigned to network interfaces (such as InternetCustom, Datacenter, or Compat):

  • DelayedAckTimeoutMs: Specifies the maximum duration in milliseconds (ranging between 10 ms and 200 ms) that the TCP stack holds an unacknowledged segment before dispatching an ACK.
  • DelayedAckFrequency: Controls the number of full-sized packets that must arrive before an immediate ACK is forced (default is 2, meaning every second segment triggers an immediate ACK; setting this to 1 forces an ACK for every single segment).

Inspecting Current TCP Settings and Profiles in PowerShell

To inspect the active TCP configuration on Windows 11, launch an elevated PowerShell session (Run as Administrator) and execute the Get-NetTCPSetting cmdlet:

Get-NetTCPSetting | Select-Object SettingName, DelayedAckTimeoutMs, DelayedAckFrequency, AutoTuningLevelLocal, CongestionProvider | Format-Table -AutoSize

To view the detailed configuration of the standard Internet profile applied to client network adapters:

Get-NetTCPSetting -SettingName "Internet" | Select-Object -Property *

You can also identify which network profiles are currently bound to your physical network adapters:

Get-NetTransportFilter | Select-Object SettingName, DestinationPrefix, LocalPortStart, RemotePortStart

Creating and Modifying Custom TCP Settings with DelayedAckTimeoutMs

Windows 11 protects built-in templates like Internet and Datacenter from direct permanent modifications of certain protected timing variables. Instead, Microsoft provides the InternetCustom or custom profile framework to tune latency-sensitive parameters.

To configure the Delayed ACK timeout on the custom profile, execute the following command:

Set-NetTCPSetting -SettingName "InternetCustom" -DelayedAckTimeoutMs 20 -DelayedAckFrequency 1

In this configuration:

  • -DelayedAckTimeoutMs 20 drops the maximum delayed ACK wait time from the standard 200 ms down to 20 ms.
  • -DelayedAckFrequency 1 configures the stack to acknowledge every individual TCP segment immediately upon arrival, effectively disabling delayed ACK wait queues for incoming payloads.

To apply this customized profile to all standard outbound and inbound network traffic traversing your network interfaces, configure the transport filter to associate the InternetCustom profile:

Set-NetTransportFilter -SettingName "InternetCustom" -ApplyProfile Yes

Confirm that the custom settings have been applied successfully:

Get-NetTCPSetting -SettingName "InternetCustom" | Select-Object SettingName, DelayedAckTimeoutMs, DelayedAckFrequency

Configuring Adapter-Level Delayed ACK via Windows Registry

For specialized scenarios where tuning must be restricted to a single physical network interface (for example, a dedicated 10GbE network adapter used for high-frequency database clustering or iSCSI storage), Windows allows setting TcpAckFrequency and TCPDelAckTicks directly within the adapter’s registry GUID key.

First, identify the Network Interface GUID for your target adapter:

Get-NetAdapter | Select-Object Name, InterfaceDescription, InterfaceGuid

Copy the InterfaceGuid (formatted like {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}). Then, construct the registry path:

$AdapterGuid = "{YOUR-ADAPTER-GUID-HERE}"
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\$AdapterGuid"

Configure immediate ACKs (frequency of 1) and minimise delayed ACK ticks using PowerShell:

# Set TcpAckFrequency to 1 (immediate ACK for every packet)
Set-ItemProperty -Path $RegistryPath -Name "TcpAckFrequency" -Value 1 -Type DWord

# Set TCPDelAckTicks to 1 (each tick represents 100ms; setting to 1 reduces the ceiling to 100ms)
Set-ItemProperty -Path $RegistryPath -Name "TCPDelAckTicks" -Value 1 -Type DWord

Verify that the values are registered accurately in the Windows kernel:

Get-ItemProperty -Path $RegistryPath | Select-Object TcpAckFrequency, TCPDelAckTicks

Restart the network adapter to ensure the NDIS driver and TCP/IP stack reload the registry configuration:

Restart-NetAdapter -Name "Ethernet"

Validating Latency Reductions and Network Performance

After adjusting the delayed ACK parameters, validate that the lower latency is reflected in packet exchanges. You can measure ping latency and round-trip time (RTT) under sustained load using PowerShell’s Test-NetConnection:

Test-NetConnection -ComputerName "1.1.1.1" -CommonTCPPort HTTP -InformationLevel Detailed

To inspect TCP packet exchanges and verify that ACKs are dispatched immediately without 100–200ms delays, capture packets using pktmon (Windows Packet Monitor):

# Add a capture filter for target TCP traffic
pktmon filter add -p 443

# Start real-time packet monitoring
pktmon start --etw -m real-time

# Stop capture after running tests
pktmon stop

Reverting to Default Windows 11 TCP Delayed ACK Settings

If network throughput suffers on high-bandwidth file transfer links due to excessive standalone ACK generation, revert the settings back to Microsoft defaults.

Reset the InternetCustom profile parameters:

Set-NetTCPSetting -SettingName "InternetCustom" -DelayedAckTimeoutMs 40 -DelayedAckFrequency 2

To completely clear any adapter-specific registry overrides:

Remove-ItemProperty -Path $RegistryPath -Name "TcpAckFrequency" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $RegistryPath -Name "TCPDelAckTicks" -ErrorAction SilentlyContinue
Restart-NetAdapter -Name "Ethernet"

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.