한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L8 Sockets und Protokolle

TCP-Head-of-Line-Blocking Head-of-line blocking

Ursachen-ID sk-hol · Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Um die Reihenfolge einzuhalten, gibt TCP später eingetroffene Pakete erst an das Spiel weiter, wenn ein verlorenes Paket erneut angekommen ist.

Warum Ein einzelnes Paket geht verloren → Folge Die nachfolgenden Pakete sind angekommen, warten aber im Empfangspuffer → Auf dem Bildschirm Stillstand, dann löst sich alles auf einmal: Zeitraffer

Symptome
Freeze, Zeitraffer
Faktoren
Paketverlust, Stillstand
Wer ist betroffen
Nur ich
Wann
Gelegentlich, zufällig
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Server: Echtzeitpositionen per UDP, nur Unverzichtbares zuverlässig übertragen, auf mehrere Streams aufteilen. Client: Netzwerkverarbeitung auf dasselbe Verfahren wie beim Server umstellen (UDP, getrennte Kanäle).
Größenordnungen
Geht ein Paket verloren, dauert der Stillstand mindestens eine Umlaufzeit und etwas mehr. Geht auch die Retransmission verloren, sind es mehrere hundert ms bis einige Sekunden.
Im Graphen
Lücke, dann alles auf einmal · Empfangsvolumen pro Verbindung, Retransmissions
Wo nachsehen
Per Paketmitschnitt auf dem Server (tcpdump, Wireshark) in der Verbindung des Spielers die Retransmissions und die Lücken davor und danach prüfen, für den ganzen Server den Zuwachs von TcpRetransSegs in nstat -az ansehen
Spricht dafür
Die Stillstandsphase beginnt mit der Retransmission eines einzelnen Pakets, direkt nach dessen Eintreffen werden die aufgestauten Daten auf einmal verarbeitet (Empfangsvolumen erst bei 0, dann ein Schwall)
Spricht dagegen
Spiel kommuniziert per UDP: trifft nicht zu. Stillstand ohne Retransmission: Server-Tick prüfen („Überschrittenes Tick-Budget“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)

Quellen

  1. RFC 9293: Transmission Control Protocol (TCP) IETF
    TCP ist ein zuverlässiger Bytestream-Dienst, der die Reihenfolge einhält
  2. RFC 5681: TCP Congestion Control IETF
    Verlust wird an 3 doppelten ACKs erkannt und per Fast Retransmit behoben, sonst wird auf den Retransmission-Timer gewartet
  3. RFC 6298: Computing TCP's Retransmission Timer IETF
    Backoff, das den Retransmission-Timer bei jedem Ablauf verdoppelt
  4. net/ipv4/proc.c (Linux v6.12) Linux kernel
    Von nstat angezeigte Zählernamen: RetransSegs der Gruppe Tcp (Zahl erneut gesendeter Segmente)

Verwandte Ursachen

Gleiche Schicht: L8 Sockets und Protokolle

Ursachen aus anderen Schichten mit demselben Symptom (Freeze)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen