TcpAckFrequency unter Windows konfigurieren
TcpAckFrequency beeinflusst, nach wie vielen empfangenen TCP-Segmenten Windows eine Empfangsbestätigung sendet. Der Wert kann die Verzögerung kleiner, interaktiver TCP-Übertragungen reduzieren, erhöht dabei jedoch die Anzahl der übertragenen Bestätigungspakete.
Die Einstellung erhöht weder die verfügbare Bandbreite noch die Geschwindigkeit des Internetanschlusses. Eine Verbesserung ist nur bei bestimmten TCP-Anwendungen und Netzwerkbedingungen möglich.
Technischer Hintergrund
Verzögerte TCP-Bestätigungen
TCP verwendet verzögerte Bestätigungen, damit nicht für jedes empfangene Segment ein eigenes Bestätigungspaket übertragen werden muss.
Windows sendet üblicherweise eine Bestätigung, wenn:
- ein weiteres TCP-Segment empfangen wurde oder
- innerhalb von ungefähr 200 Millisekunden kein weiteres Segment eingetroffen ist.
Dieses Verhalten reduziert den Netzwerk- und Protokollaufwand. Bei Anwendungen, die viele kleine Datenpakete austauschen und jeweils auf eine Bestätigung warten, kann dadurch jedoch zusätzliche Latenz entstehen.
Grenzen der Einstellung
TcpAckFrequency beeinflusst ausschließlich TCP-Verbindungen.
Die Einstellung bewirkt keine grundsätzliche Verringerung des gemessenen Pings. ICMP-Ping, TCP-Bestätigungen und anwendungsinterne Verzögerungen sind unterschiedliche Vorgänge.
Auch auf UDP-Datenverkehr hat die Einstellung keine Wirkung.
Registrierungseinstellung
Registrierungspfad
Die Einstellung muss beim tatsächlich verwendeten Netzwerkadapter eingetragen werden:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}
Unterhalb von Interfaces befinden sich mehrere Schlüssel mit GUID-Bezeichnungen.
Der richtige Schlüssel lässt sich unter anderem anhand folgender Einträge erkennen:
- IP-Adresse
- DHCP-Adresse
- DHCP-Server
- Standardgateway
- DNS-Server
Die Änderung gilt ausschließlich für die ausgewählte Netzwerkschnittstelle.
Name und Datentyp
Name:
TcpAckFrequency
Typ:
DWORD-Wert (32-Bit)
Dokumentierter Wertebereich:
0 bis 255
Standardwert:
2
Bedeutung der Werte
Wert 1: Jedes Segment bestätigen
TcpAckFrequency = 1
Mit dem Wert 1 bestätigt Windows jedes empfangene TCP-Segment unmittelbar, ohne auf ein zweites Segment zu warten.
Dies kann bei bestimmten interaktiven TCP-Anwendungen die Verzögerung reduzieren, beispielsweise bei:
- älteren Online-Spielen mit kleinen TCP-Paketen
- Terminal- und Fernsteuerungsanwendungen
- bestimmten Datenbankverbindungen
- selbst entwickelten TCP-Protokollen
- Anwendungen mit ungünstigem Zusammenspiel zwischen verzögerten ACKs und dem Nagle-Algorithmus
Der Wert reduziert jedoch nicht grundsätzlich den gemessenen Ping zum Server.
Wert 2: Windows-Standard
TcpAckFrequency = 2
Der Wert 2 entspricht dem dokumentierten Standardverhalten.
Windows bestätigt normalerweise jedes zweite empfangene TCP-Segment oder sendet eine Bestätigung nach Ablauf des verzögerten ACK-Timers.
Für normale Internet-, Dateiübertragungs-, Streaming- und Arbeitsplatzsysteme ist dies grundsätzlich die sinnvolle Einstellung.
Wert 0
TcpAckFrequency = 0
Der Wert 0 ist nicht gültig und wird von Windows wie der Standardwert 2 behandelt.
TcpAckFrequency auf 1 setzen
Änderung im Registrierungseditor
Unterhalb der GUID des verwendeten Netzwerkadapters wird ein neuer DWORD-Wert (32-Bit) mit dem Namen TcpAckFrequency angelegt.
Als Wert wird eingetragen:
1
Da der Wert bei hexadezimaler und dezimaler Eingabe identisch ist, spielt die gewählte Basis hierbei keine Rolle.
Registrierungsdatei
Die GUID muss durch die Kennung des tatsächlich verwendeten Netzwerkadapters ersetzt werden:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}]
"TcpAckFrequency"=dword:00000001
Windows-Terminal
Das Windows-Terminal oder die Eingabeaufforderung muss als Administrator geöffnet werden.
Die Schnittstellen-GUID ist entsprechend anzupassen:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}" /v TcpAckFrequency /t REG_DWORD /d 1 /f
Anschließend sollte Windows neu gestartet werden.
Bewertung der Änderung
Mögliche Vorteile
Eine Verringerung auf 1 kann sinnvoll sein, wenn eine konkrete Anwendung durch verzögerte TCP-Bestätigungen reproduzierbar ausgebremst wird.
Mögliche Auswirkungen sind:
- geringere Verzögerung bei kleinen TCP-Nachrichten
- schnellere Bestätigung einzelner TCP-Segmente
- weniger Wechselwirkung mit dem Nagle-Algorithmus
- verbessertes Verhalten einzelner älterer Client-Server-Anwendungen
Eine Wirkung sollte immer mit der konkreten Anwendung geprüft werden.
Mögliche Nachteile
Durch die unmittelbare Bestätigung jedes Segments werden mehr ACK-Pakete erzeugt.
Mögliche Folgen sind:
- höherer Protokollaufwand
- mehr kleine Netzwerkpakete
- geringfügig höhere CPU- und Netzwerklast
- unter bestimmten Bedingungen geringerer Datendurchsatz
- keine messbare Verbesserung bei UDP-Anwendungen
- keine Wirkung bei Anwendungen mit eigener Socket- und Paketsteuerung
Viele moderne Spiele verwenden für zeitkritische Daten überwiegend UDP. In diesen Fällen beeinflusst TcpAckFrequency den eigentlichen Spieldatenverkehr nicht.
Sinnvolle Einsatzbereiche
Ein Test mit dem Wert 1 kann sinnvoll sein, wenn:
- die betroffene Anwendung TCP verwendet
- viele kleine Datenpakete übertragen werden
- die Gegenstelle auf TCP-Bestätigungen wartet
- Verzögerungen reproduzierbar durch verzögerte ACKs entstehen
- ein Paketmitschnitt das Verhalten bestätigt
- vor und nach der Änderung objektiv gemessen wird
Nicht geeignete Einsatzbereiche
Die Einstellung ist keine geeignete Lösung für:
- hohen Ping durch weit entfernte Server
- überlastete Internetverbindungen
- überlastete Router
- WLAN-Störungen
- Paketverluste
- schlechte Serveranbindung
- DNS-Verzögerungen
- UDP-basierten Datenverkehr
- langsame Downloads aufgrund begrenzter Bandbreite
Verwandte Registry-Werte
TcpNoDelay
Im Zusammenhang mit TcpAckFrequency wird häufig zusätzlich folgender Registry-Wert empfohlen:
TcpNoDelay = 1
TCP_NODELAY deaktiviert grundsätzlich den Nagle-Algorithmus.
Dieser fasst kleine ausgehende Datenblöcke zusammen, um die Anzahl kleiner TCP-Pakete zu reduzieren.
Auf modernen Windows-Systemen wird dieses Verhalten normalerweise von der jeweiligen Anwendung für jeden TCP-Socket gesteuert. Eine Anwendung kann die Socketoption TCP_NODELAY selbst aktivieren oder deaktivieren.
Ein pauschaler Registry-Eintrag unter der Netzwerkschnittstelle ist für aktuelle Windows-Versionen nicht eindeutig als allgemeine Systemeinstellung dokumentiert.
TcpNoDelay sollte daher nicht automatisch zusammen mit TcpAckFrequency angelegt werden.
Das Deaktivieren des Nagle-Algorithmus kann Verzögerungen kleiner Nachrichten reduzieren, erhöht jedoch den Protokollaufwand und kann schlecht programmierte Anwendungen lediglich kaschieren.
TcpDelAckTicks
Der ebenfalls häufig genannte Wert lautet:
TcpDelAckTicks
Dieser Wert wurde von Microsoft für ältere Windows-Versionen dokumentiert und beeinflusste den Timer für verzögerte TCP-Bestätigungen.
Beispiel:
TcpDelAckTicks = 0
Der Wert 0 wurde insbesondere als Lösung für ein spezielles Leistungsproblem unter Windows 2000 beschrieben.
Für Windows XP und Windows Server 2003 empfahl Microsoft bei demselben Problem bereits stattdessen:
TcpAckFrequency = 1
Für aktuelle Windows-Versionen ist TcpDelAckTicks nicht als allgemeiner Netzwerk- oder Spiele-Tweak zu empfehlen.
Verbreitete Kombination
Häufig wird folgende Kombination empfohlen:
TcpAckFrequency = 1 TcpNoDelay = 1 TcpDelAckTicks = 1
Diese Kombination sollte nicht pauschal übernommen werden.
Die einzelnen Werte sind wie folgt zu bewerten:
- TcpAckFrequency = 1 ist technisch dokumentiert, sollte aber nur gezielt getestet werden.
- TcpNoDelay = 1 ist als pauschaler Registry-Eintrag für aktuelle Windows-Versionen nicht ausreichend dokumentiert.
- TcpDelAckTicks stammt aus älteren Windows-Implementierungen und speziellen Fehlerbehebungen.
- Die Kombination erhöht nicht automatisch die Internetgeschwindigkeit.
- Bei UDP-Anwendungen bleibt sie wirkungslos.
- Zusätzliche ACK- und TCP-Pakete können den Netzwerkaufwand erhöhen.
Sicherung und Wiederherstellung
Registrierungsschlüssel sichern
Die Schnittstellen-GUID muss entsprechend angepasst werden:
reg export "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}" "%USERPROFILE%\Desktop\TCP-Schnittstelle.reg" /y
TcpAckFrequency löschen
Um wieder das Windows-Standardverhalten zu verwenden, wird der selbst angelegte Wert gelöscht:
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}" /v TcpAckFrequency /f
Standardwert 2 setzen
Alternativ kann der Wert ausdrücklich auf 2 gesetzt werden:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Schnittstellen-GUID}" /v TcpAckFrequency /t REG_DWORD /d 2 /f
Anschließend sollte Windows neu gestartet werden.
Fazit
TcpAckFrequency = 1 kann bei einzelnen TCP-Anwendungen die Verzögerung kleiner Datenübertragungen reduzieren.
Eine allgemeine Verringerung des Internet-Pings oder eine höhere Netzwerkgeschwindigkeit ist dadurch nicht zu erwarten.
TcpNoDelay sollte vorzugsweise von der jeweiligen Anwendung über die entsprechende TCP-Socketoption gesteuert werden. TcpDelAckTicks ist hauptsächlich für ältere Windows-Versionen und spezielle Fehlerfälle dokumentiert.
Für normale Systeme sollte das Windows-Standardverhalten beibehalten werden, sofern kein konkretes und messbares TCP-Latenzproblem besteht.