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

Game-Lag-Whitepaper › Grundursachen von TCP-Retransmissions

Unnötige Retransmission durch Latenzsprünge Spurious RTO from delay spikes

Ursachen-ID rt-spurious-delay · Hauptzuständig Extern (Extern) · Beteiligt Server-Infrastruktur (Infrastrukturteam), Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Das Paket ist gar nicht verschwunden, es kommt nur kurz sehr spät an. Dauert diese Verzögerung länger als das RTO, wertet der Sender das als Verlust und sendet erneut.

Warum Bufferbloat, WLAN-Energiesparen, Zustandswechsel im Mobilfunk oder pausierte virtuelle Maschine: kurzzeitig mehrere hundert ms Latenz → Folge Das RTO läuft zuerst ab, es folgt eine Retransmission, kurz darauf kommt auch das Original an (der Empfänger erhält es doppelt) → Auf dem Bildschirm Freeze und Zeitraffer kommen vom Latenzsprung selbst. Die unnötige Retransmission verlängert den Freeze kaum, treibt aber die Retransmission-Metriken nach oben und wird für Verlust gehalten

Symptome
Freeze, Zeitraffer, Input-Lag
Faktoren
Latenz, Jitter
Wer ist betroffen
Nur ich, Ganzer Server
Wann
Gelegentlich, zufällig, Nach Inaktivität
Zuständigkeit
Hauptzuständig Extern (Extern) · Beteiligt Server-Infrastruktur (Infrastrukturteam), Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Clients ab Android 10 fordern im Spiel den WLAN-Modus mit niedriger Latenz an (WLAN-Lock WIFI_MODE_FULL_LOW_LATENCY, gilt nur bei eingeschaltetem Bildschirm und Spiel im Vordergrund), um Latenzsprünge durch Energiesparen zu verringern.
Aufgaben Infrastrukturteam
Burstable-Instanzen meiden, RTO-Minimum nicht zu weit senken, F-RTO und Timestamps beibehalten (tcp_frto, tcp_timestamps), Retransmission-Metriken zusammen mit TCPSpuriousRTOs und TCPDSACKRecv in nstat betrachten, damit sie nicht fälschlich als Verlust gelten.
Aufgaben Extern
Um die Latenzsprünge selbst zu verringern, Spieler auf SQM am Router und das Abschalten des WLAN-Energiesparmodus hinweisen.
Größenordnungen
Linux erkennt unnötige RTOs per F-RTO und nimmt die Drosselung der Senderate teils wieder zurück. Zu prüfen sind TCPSpuriousRTOs (als unnötig eingestufte RTOs) und TCPDSACKRecv (wie oft der Empfänger „schon erhalten“ gemeldet hat) in nstat.
Im Graphen
Vereinzelte Spitzen ohne Muster · RTT (Ping), unnötige RTOs
Wo nachsehen
nstat im Minutentakt ausführen und den Zuwachs von TcpExtTCPTimeouts (abgelaufene RTOs), TcpExtTCPSpuriousRTOs, TcpExtTCPDSACKRecv und TcpExtTCPLostRetransmit gemeinsam betrachten. Liegt ein Paketmitschnitt vor, den Wireshark-Filter tcp.analysis.spurious_retransmission nutzen
Spricht dafür
Steigen die RTOs, steigen auch TcpExtTCPSpuriousRTOs oder TcpExtTCPDSACKRecv, gleichzeitig schießt die RTT auf mehrere hundert ms hoch. Im Mitschnitt auf Empfängerseite sind Original und Retransmission beide angekommen
Spricht dagegen
TcpExtTCPSpuriousRTOs und DSACK unverändert, aber TcpExtTCPLostRetransmit steigt (auch die Retransmission geht verloren): echter Verlust. RTT ohne Spitzen, aber dauerhaft viele DSACKs: „Unnötiger Fast Retransmit durch vertauschte Reihenfolge“
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)

Quellen

  1. RFC 5682: Forward RTO-Recovery (F-RTO): An Algorithm for Detecting Spurious Retransmission Timeouts with TCP IETF
    F-RTO: erkennt anhand der ACKs nach einem RTO, ob das RTO unnötig war
  2. RFC 3481: TCP over Second (2.5G) and Third (3G) Generation Wireless Networks IETF
    Latenzsprünge im Mobilfunknetz (Handover, Link-Wiederherstellung usw.) verursachen unnötige TCP-Timeouts und Retransmissions sowie eine Verkleinerung des Congestion Window
  3. RFC 2883: An Extension to the Selective Acknowledgement (SACK) Option for TCP IETF
    DSACK: Der Empfänger meldet doppelt empfangene Daten, so erkennt der Sender unnötige Retransmissions
  4. SNMP counter Linux kernel
    TcpExtTCPSpuriousRTOs (von F-RTO erkannte unnötige RTOs), TcpExtTCPDSACKRecv (Zahl empfangener DSACKs), TcpExtTCPLostRetransmit (wie oft SACK meldet, dass auch ein erneut gesendetes Paket verloren ging)
  5. IP Sysctl Linux kernel
    tcp_frto standardmäßig aktiv (vorteilhaft in Funknetzen mit schwankender RTT), tcp_timestamps standardmäßig 1
  6. RFC 6298: Computing TCP's Retransmission Timer IETF
    Begründung, dass ein großes RTO-Minimum nötig ist, um unnötige Retransmissions zu vermeiden (Empfehlung: mindestens 1 s)
  7. WifiManager Android (Google)
    WIFI_MODE_FULL_LOW_LATENCY (API 29, Android 10): WLAN-Lock mit niedriger Latenz, der nur greift, wenn das Gerät mit einem AP verbunden, der Bildschirm eingeschaltet und die App im Vordergrund ist
  8. net/ipv4/proc.c Linux kernel
    In nstat angezeigte Zählernamen TCPTimeouts, TCPSpuriousRTOs, TCPDSACKRecv und TCPLostRetransmit
  9. net/ipv4/tcp_timer.c Linux kernel
    TCPTimeouts steigt, wenn der Retransmission-Timer (RTO) abläuft
  10. nstat(8) — Linux manual page iproute2
    nstat zeigt standardmäßig den Zuwachs seit dem letzten Aufruf
  11. Display Filter Reference: Transmission Control Protocol Wireshark
    Anzeigefilter tcp.analysis.spurious_retransmission

Verwandte Ursachen

Gleiche Schicht: Grundursachen von TCP-Retransmissions

Ursachen aus anderen Schichten mit demselben Symptom (Freeze)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen