TcpAckFrequency unter Windows konfigurieren: Unterschied zwischen den Versionen

Aus MILLENNIUM ARTS ISP - Hilfe | FAQ
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „'''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 Netzwerkbedingun…“)
 
KKeine Bearbeitungszusammenfassung
 
Zeile 3: Zeile 3:
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.
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.


== Verzögerte TCP-Bestätigungen ==
== Technischer Hintergrund ==


TCP verwendet verzögerte Bestätigungen, um nicht für jedes empfangene Segment ein separates Bestätigungspaket senden zu müssen. Windows sendet üblicherweise eine Bestätigung, wenn:
=== 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
* ein weiteres TCP-Segment empfangen wurde oder
* innerhalb von ungefähr 200 Millisekunden kein weiteres Segment eingetroffen ist.
* 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 auf eine Bestätigung warten, kann dadurch jedoch zusätzliche Latenz entstehen.
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.


== Registrierungspfad ==
=== 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:
Die Einstellung muss beim tatsächlich verwendeten Netzwerkadapter eingetragen werden:
Zeile 20: Zeile 34:
</pre>
</pre>


Unterhalb von '''Interfaces''' befinden sich mehrere Schlüssel mit GUID-Bezeichnungen. Der richtige Schlüssel lässt sich anhand der dort eingetragenen IP-Adresse, des DHCP-Servers oder des Standardgateways identifizieren.
Unterhalb von '''Interfaces''' befinden sich mehrere Schlüssel mit GUID-Bezeichnungen.
Die Änderung gilt nur für die ausgewählte Netzwerkschnittstelle.
 
Der richtige Schlüssel lässt sich unter anderem anhand folgender Einträge erkennen:


== TcpAckFrequency ==
* IP-Adresse
* DHCP-Adresse
* DHCP-Server
* Standardgateway
* DNS-Server
 
Die Änderung gilt ausschließlich für die ausgewählte Netzwerkschnittstelle.
 
=== Name und Datentyp ===


'''Name:'''
'''Name:'''
Zeile 49: Zeile 72:
</pre>
</pre>


Der Standardwert bedeutet, dass Windows normalerweise nach jeweils zwei empfangenen TCP-Segmenten eine Bestätigung sendet.
== Bedeutung der Werte ==


== Wert 1 ==
=== Wert 1: Jedes Segment bestätigen ===


<pre>
<pre>
Zeile 57: Zeile 80:
</pre>
</pre>


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:
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 vielen kleinen TCP-Paketen
* älteren Online-Spielen mit kleinen TCP-Paketen
* Terminal- und Fernsteuerungsanwendungen
* Terminal- und Fernsteuerungsanwendungen
* bestimmten Datenbankverbindungen
* bestimmten Datenbankverbindungen
* selbst entwickelten TCP-Protokollen mit ungünstigem Bestätigungsverhalten
* selbst entwickelten TCP-Protokollen
* Anwendungen mit ungünstigem Zusammenspiel zwischen verzögerten ACKs und dem Nagle-Algorithmus


Der Wert reduziert nicht grundsätzlich den gemessenen Ping zum Server. ICMP-Ping und TCP-Bestätigungsverhalten sind unterschiedliche Vorgänge.
Der Wert reduziert jedoch nicht grundsätzlich den gemessenen Ping zum Server.


== Wert 2 ==
=== Wert 2: Windows-Standard ===


<pre>
<pre>
Zeile 72: Zeile 98:
</pre>
</pre>


Dies 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.
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 ==
=== Wert 0 ===


<pre>
<pre>
Zeile 83: Zeile 113:


== TcpAckFrequency auf 1 setzen ==
== 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.
Unterhalb der GUID des verwendeten Netzwerkadapters wird ein neuer '''DWORD-Wert (32-Bit)''' mit dem Namen '''TcpAckFrequency''' angelegt.
Als Wert wird eingetragen:
Als Wert wird eingetragen:


Zeile 93: Zeile 126:
Da der Wert bei hexadezimaler und dezimaler Eingabe identisch ist, spielt die gewählte Basis hierbei keine Rolle.
Da der Wert bei hexadezimaler und dezimaler Eingabe identisch ist, spielt die gewählte Basis hierbei keine Rolle.


== Registrierungsdatei ==
=== Registrierungsdatei ===


Die GUID muss durch die Kennung des tatsächlich verwendeten Netzwerkadapters ersetzt werden:
Die GUID muss durch die Kennung des tatsächlich verwendeten Netzwerkadapters ersetzt werden:
Zeile 104: Zeile 137:
</pre>
</pre>


== Einstellung über das Windows-Terminal ==
=== Windows-Terminal ===
 
Das Windows-Terminal oder die Eingabeaufforderung muss als Administrator geöffnet werden.


Das Windows-Terminal muss als Administrator geöffnet werden. Die Schnittstellen-GUID ist entsprechend anzupassen:
Die Schnittstellen-GUID ist entsprechend anzupassen:


<pre>
<pre>
Zeile 114: Zeile 149:
Anschließend sollte Windows neu gestartet werden.
Anschließend sollte Windows neu gestartet werden.


== Mögliche Vorteile ==
== 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.
Eine Verringerung auf '''1''' kann sinnvoll sein, wenn eine konkrete Anwendung durch verzögerte TCP-Bestätigungen reproduzierbar ausgebremst wird.
Mögliche Auswirkungen:
 
Mögliche Auswirkungen sind:


* geringere Verzögerung bei kleinen TCP-Nachrichten
* geringere Verzögerung bei kleinen TCP-Nachrichten
* schnellere Bestätigung einzelner TCP-Segmente
* schnellere Bestätigung einzelner TCP-Segmente
* weniger Wechselwirkung zwischen verzögerten ACKs und dem Nagle-Algorithmus
* weniger Wechselwirkung mit dem Nagle-Algorithmus
* verbessertes Verhalten einzelner älterer Client-Server-Anwendungen
* verbessertes Verhalten einzelner älterer Client-Server-Anwendungen


Eine Wirkung sollte immer mit der konkreten Anwendung geprüft werden.
Eine Wirkung sollte immer mit der konkreten Anwendung geprüft werden.


== Mögliche Nachteile ==
=== Mögliche Nachteile ===


Durch die unmittelbare Bestätigung jedes Segments werden mehr ACK-Pakete erzeugt.
Durch die unmittelbare Bestätigung jedes Segments werden mehr ACK-Pakete erzeugt.
Mögliche Folgen:
 
Mögliche Folgen sind:


* höherer Protokollaufwand
* höherer Protokollaufwand
Zeile 135: Zeile 174:
* geringfügig höhere CPU- und Netzwerklast
* geringfügig höhere CPU- und Netzwerklast
* unter bestimmten Bedingungen geringerer Datendurchsatz
* unter bestimmten Bedingungen geringerer Datendurchsatz
* keine messbare Verbesserung bei Anwendungen, die UDP verwenden
* keine messbare Verbesserung bei UDP-Anwendungen
* keine Wirkung bei Anwendungen mit eigener Socket- und Paketsteuerung
* keine Wirkung bei Anwendungen mit eigener Socket- und Paketsteuerung


Viele moderne Spiele verwenden für zeitkritische Daten überwiegend UDP. In diesen Fällen hat '''TcpAckFrequency''' auf den eigentlichen Spieldatenverkehr keine Wirkung.
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 ==
=== TcpNoDelay ===


Im Zusammenhang mit '''TcpAckFrequency''' wird häufig zusätzlich folgender Registry-Wert empfohlen:
Im Zusammenhang mit '''TcpAckFrequency''' wird häufig zusätzlich folgender Registry-Wert empfohlen:
Zeile 148: Zeile 214:
</pre>
</pre>


'''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 eingestellt. Eine Anwendung kann die Socketoption '''TCP_NODELAY''' selbst aktivieren oder deaktivieren.
'''TCP_NODELAY''' deaktiviert grundsätzlich den Nagle-Algorithmus.


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.'''
Dieser fasst kleine ausgehende Datenblöcke zusammen, um die Anzahl kleiner TCP-Pakete zu reduzieren.


Das Deaktivieren des Nagle-Algorithmus kann zwar Verzögerungen kleiner Nachrichten reduzieren, erhöht jedoch den Protokollaufwand und kann schlecht programmierte Anwendungen lediglich kaschieren.
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.


== TcpDelAckTicks ==
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:
Der ebenfalls häufig genannte Wert lautet:
Zeile 170: Zeile 242:
</pre>
</pre>


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.  
Der Wert '''0''' wurde insbesondere als Lösung für ein spezielles Leistungsproblem unter Windows 2000 beschrieben.


== Bewertung der verbreiteten Kombination ==
Für Windows XP und Windows Server 2003 empfahl Microsoft bei demselben Problem bereits stattdessen:


Häufig wird folgende Kombination verwendet:
<pre>
TcpAckFrequency = 1
</pre>
 
Für aktuelle Windows-Versionen ist '''TcpDelAckTicks''' nicht als allgemeiner Netzwerk- oder Spiele-Tweak zu empfehlen.
 
=== Verbreitete Kombination ===
 
Häufig wird folgende Kombination empfohlen:


<pre>
<pre>
Zeile 182: Zeile 262:
</pre>
</pre>


Diese Kombination sollte nicht pauschal übernommen werden:
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.
* '''TcpAckFrequency = 1''' ist technisch dokumentiert, sollte aber nur gezielt getestet werden.
Zeile 191: Zeile 273:
* Zusätzliche ACK- und TCP-Pakete können den Netzwerkaufwand erhöhen.
* Zusätzliche ACK- und TCP-Pakete können den Netzwerkaufwand erhöhen.


== Wann ist TcpAckFrequency sinnvoll? ==
== Sicherung und Wiederherstellung ==


Ein Test mit dem Wert '''1''' kann sinnvoll sein, wenn:
=== Registrierungsschlüssel sichern ===
 
* die betroffene Anwendung TCP verwendet
* viele kleine Datenpakete übertragen werden
* Verzögerungen reproduzierbar durch TCP-Bestätigungen entstehen
* ein Paketmitschnitt das verzögerte ACK-Verhalten bestätigt
* vor und nach der Änderung objektiv gemessen wird
 
== Wann ist die Änderung nicht sinnvoll? ==
 
Die Einstellung ist keine geeignete Lösung für:
 
* hohen Ping durch eine weit entfernte Gegenstelle
* überlastete Router oder Internetverbindungen
* WLAN-Störungen
* Paketverluste
* schlechte Serveranbindung
* DNS-Verzögerungen
* UDP-basierten Datenverkehr
* langsame Downloads aufgrund begrenzter Bandbreite
 
== Vorhandenen Schlüssel sichern ==


Die Schnittstellen-GUID muss entsprechend angepasst werden:
Die Schnittstellen-GUID muss entsprechend angepasst werden:
Zeile 222: Zeile 283:
</pre>
</pre>


== Rückgängig machen ==
=== TcpAckFrequency löschen ===


Um wieder das Windows-Standardverhalten zu verwenden, wird der selbst angelegte Wert gelöscht:
Um wieder das Windows-Standardverhalten zu verwenden, wird der selbst angelegte Wert gelöscht:
Zeile 230: Zeile 291:
</pre>
</pre>


Alternativ kann der Wert auf '''2''' gesetzt werden:
=== Standardwert 2 setzen ===
 
Alternativ kann der Wert ausdrücklich auf '''2''' gesetzt werden:


<pre>
<pre>
Zeile 240: Zeile 303:
== Fazit ==
== 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 TCP-Socketoption gesteuert werden. '''TcpDelAckTicks''' ist hauptsächlich für ältere Windows-Versionen und spezielle Fehlerfälle dokumentiert.
'''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.
Für normale Systeme sollte das Windows-Standardverhalten beibehalten werden, sofern kein konkretes und messbares TCP-Latenzproblem besteht.


[[Kategorie:Registry – Netzwerk]]
[[Kategorie:Registry – Netzwerk]]

Aktuelle Version vom 12. Juli 2026, 11:54 Uhr

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.