Mit jeder weiteren gescheiterten Retransmission verdoppelt sich die Wartezeit, und aus einer kurzen Leitungsunterbrechung wird ein langer Stillstand.
Warum Leitung kurz unterbrochen, auch die Retransmissions scheitern nacheinander → Folge Wartezeit bis zum nächsten Versuch verdoppelt sich jeweils, etwa 0,3 → 0,6 → 1,2 → 2,4 s (bei 100 ms Ping) → Auf dem Bildschirm Leitung 1 s unterbrochen, Spiel steht über 2 s still. Bei längerer Unterbrechung am Ende Verbindungsabbruch
Server: auf Heartbeats antworten und Verbindungen nach einer festen Zeit ohne Empfang selbst aufräumen (Aufgabezeitpunkt per TCP_USER_TIMEOUT verkürzen), Session per Session-Token fortsetzen, zuverlässiges UDP. Client: Heartbeats in kurzen Abständen senden und bei ausbleibender Antwort schnell neu verbinden, ohne auf die TCP-Retransmission zu warten.
Größenordnungen
Das RTO (Wartezeit bis zur Retransmission) beträgt unter Linux mindestens „Ping + 200 ms“, beim Verbindungsaufbau beginnt es bei 1 s. Mit der Standardeinstellung (tcp_retries2=15) gibt Linux die Verbindung selbst bei dauerhaft scheiternden Retransmissions erst nach etwa 15 Minuten auf.
Im Graphen
Lücke, dann alles auf einmal · RTO und Backoff pro Verbindung, abgelaufene RTOs
Wo nachsehen
Hängende Verbindung mit ss -ti auf rto (Wartezeit bis zur Retransmission in ms) und backoff (Zahl aufeinanderfolgender Abläufe) prüfen, für den ganzen Server den Zuwachs von TcpExtTCPTimeouts (abgelaufene Retransmission-Timer) in nstat -az ansehen
Spricht dafür
backoff der hängenden Verbindung ist mindestens 1, rto liegt im Sekundenbereich, und zur selben Zeit steigt TCPTimeouts
Spricht dagegen
Retransmissions enden per Fast Retransmit, kein RTO-Ablauf: Stillstand nur kurz. Dann eher „TCP-Head-of-Line-Blocking“
net/ipv4/tcp_input.c (Linux v6.12)Linux kernel Linux-RTO = geglättete RTT + RTT-Schwankung, die Untergrenze der Schwankung ist tcp_rto_min (200 ms), daher ist das RTO mindestens RTT + 200 ms
IP SysctlLinux kernel tcp_rto_min_us standardmäßig 200 ms, erstes RTO einer Verbindungsanfrage 1 s, mit tcp_retries2=15 dauert es bis zur Aufgabe mindestens 924,6 s (ca. 15 Minuten)
ss(8) — Linux manual pageiproute2 rto (Retransmission-Timer, ms) und backoff (Zahl der exponentiellen Backoffs) bei -i
net/ipv4/tcp_timer.c (Linux v6.12)Linux kernel Bei jedem Ablauf des Retransmission-Timers steigt TCPTimeouts, backoff wird um eins erhöht und das RTO verdoppelt (bis zum Maximum)