Der Nagle-Algorithmus sammelt kleine Pakete, Delayed ACK schickt die Bestätigung verzögert. Zusammen verzögern beide jede in Teilen geschriebene Nachricht um 40–200 ms.
Warum Kleine Nachrichten werden in Teilen geschrieben, ohne dass TCP_NODELAY aktiviert ist → Folge Sender wartet auf das ACK, Empfänger schickt das ACK verzögert → Auf dem Bildschirm Niedriger Ping, aber jede Aktion gleichmäßig träge: Input-Lag
Server: TCP_NODELAY aktivieren, Nachrichten eines Ticks sammeln und in einem Schreibvorgang senden, sich nicht darauf verlassen, Delayed ACK beim Empfänger abzuschalten (TCP_QUICKACK unter Linux wirkt nur kurz, unter Windows ist ein Registry-Eingriff auf jedem PC nötig), denn das Spiel hat das nicht sicher unter Kontrolle. Client: TCP_NODELAY aktivieren, Nachrichten eines Frames sammeln und in einem Schreibvorgang senden.
Größenordnungen
Delayed ACK dauert unter Linux meist 40 ms (je nach Situation bis zu 200 ms). Bei Windows waren es in älteren Versionen 200 ms, in aktuellen sind es 40 ms (Standardvorlage von Windows Server 2019: 40 ms). Über Delayed ACK entscheidet das Betriebssystem des Empfängers. Sendet der Server Nachrichten bei aktivem Nagle in Teilen, kann es deshalb je nach empfangendem PC zu 40–200 ms Verzögerung kommen.
Im Graphen
Von Anfang an dauerhaft hoch · Antwortzeit auf Aktionen (RTT im Spiel)
Wo nachsehen
Im Paketmitschnitt auf dem Server (tcpdump, Wireshark) die Abstände zwischen Anfrage und Antwort prüfen, kontrollieren, ob Server- und Client-Code TCP_NODELAY aktivieren
Spricht dafür
Niedriger Ping, aber zwischen kleinen Paketen wiederholen sich Lücken von rund 40 ms (bei älteren Windows-Versionen 200 ms), die direkt nach dem Eintreffen des ACK der Gegenseite enden. Mit TCP_NODELAY verschwinden sie
Spricht dagegen
Antwortabstände ähnlich dem Ping: diese Ursache scheidet aus. Erzeugt der Spielserver seine Antworten selbst verspätet: Serververarbeitung („Rückstau in der Message-Queue“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Quellen
RFC 9293: Transmission Control Protocol (TCP)IETF Nagle hält kleine Daten zurück, solange unbestätigte Daten unterwegs sind, muss pro Verbindung abschaltbar sein, Delayed ACK unter 0,5 s, Problem des Zusammenspiels beider
Design issues - Sending small data segments over TCP with WinsockMicrosoft Ältere Windows-TCP-Versionen starten beim Datenempfang einen Delayed-ACK-Timer von 200 ms, Nagle ist standardmäßig aktiv, sodass kleine Pakete auf das ACK warten, Abhilfe mit TCP_NODELAY