TcpAckFrequency unter Windows konfigurieren

Aus MILLENNIUM ARTS ISP - Hilfe | FAQ
Zur Navigation springen Zur Suche springen

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.