Ist die zulässige Paketgröße auf einem Abschnitt der Strecke kleiner geworden und wird die Meldung „Paket zu groß“ (ICMP) blockiert, verschwinden große Pakete immer wieder, egal wie oft sie erneut gesendet werden.
Warum Auf VPN- oder Tunnelstrecken sinkt die maximale Größe, und eine Firewall blockiert die Meldung über die Überschreitung → Folge Der Sender kennt den Grund nicht und sendet dasselbe große Paket immer wieder, das RTO verdoppelt sich jedes Mal → Auf dem Bildschirm Normalerweise unauffällig, aber sobald große Datenmengen fließen (Inventar, volle Orte, Laden beim Betreten), hängen auch alle nachfolgenden kleinen Pakete fest: Freeze, am Ende Verbindungsabbruch oder Endlos-Laden
Soll die Größe serverseitig gesenkt werden, die maximale Segmentgröße des Sockets (TCP_MAXSEG) setzen. Nachrichten im Spielcode klein zu stückeln reicht nicht (TCP packt die zu sendenden Daten wieder zu Segmenten in MSS-Größe zusammen).
Aufgaben Infrastrukturteam
Netzwerk: MSS-Clamping an den Grenzgeräten, ICMP für Größenüberschreitung (Typ 3 Code 4, fragmentation needed) in Firewalls und Netzwerk-ACLs der Cloud erlauben. Server/OS: Path-MTU einstellen, prüfen, dass auch Server-Firewall und Cloud-Security-Groups ICMP für Größenüberschreitung nicht blockieren, als letztes Sicherheitsnetz tcp_mtu_probing=1 unter Linux.
Größenordnungen
Meist 1.500 Byte, nach einem Tunnel um die 1.400. Wird dasselbe Paket 5- bis 6-mal erneut gesendet, dauert der Stillstand über 10 s.
Im Graphen
Nur einzelne Ausreißer · RTO und Backoff pro Verbindung, Verbindungsabbrüche nach Region und Provider
Wo nachsehen
Retransmissions der betroffenen Verbindung per Paketmitschnitt auf dem Server oder mit bcc tcpretrans -s (zeigt Sequenznummern) prüfen, mit ss -ti mss, pmtu und backoff dieser Verbindung ansehen. Vom Server aus einen kleinen Ping und einen 1.500-Byte-Ping mit gesetztem DF (ping -M do -s 1472) an die Adresse des Spielers senden und vergleichen
Spricht dafür
Ein bis zur MSS gefülltes Paket wird mit derselben Sequenznummer und jeweils doppeltem Abstand immer wieder gesendet, kleinere Pakete kommen durch. Kein ICMP für Größenüberschreitung (Wireshark-Filter icmp.type == 3 and icmp.code == 4), der kleine Ping wird beantwortet, nur der große DF-Ping verschwindet ohne Antwort
Spricht dagegen
Auch kleine Pakete verschwinden: größenunabhängiger Verlust („Warteschlangenüberlauf am Engpass“, „Routenwechsel oder defekter ECMP-Pfad“). Kommt ICMP für Größenüberschreitung an und sinkt pmtu in ss -ti, funktioniert die Path MTU Discovery korrekt
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
Mit tcp_mtu_probing=1 wird erst nach einigen Sekunden aufeinanderfolgender Retransmission-Timeouts (entspricht tcp_retries1=3) ein Blackhole angenommen und die MSS auf 1.024 Byte gesenkt. Bis dahin steht alles still. Das ist daher nur das letzte Sicherheitsnetz, Vorrang hat die vorbeugende MSS-Anpassung.
Quellen
RFC 1191: Path MTU discoveryIETF Path MTU Discovery: Zu große Pakete werden per ICMP „fragmentation needed and DF set“ (Typ 3 Code 4) gemeldet
IP SysctlLinux kernel tcp_mtu_probing: 0 aus, 1 nur bei erkanntem Blackhole, 2 immer (Start-MSS ist tcp_base_mss). tcp_retries1 standardmäßig 3
net/ipv4/tcp_timer.cLinux kernel Folgen tcp_retries1 RTO-Retransmissions aufeinander, gilt das als erkanntes Blackhole, MTU-Probing wird aktiviert und die MSS gesenkt
iptables-extensions(8) — Linux manual pagenetfilter TCPMSS --clamp-mss-to-pmtu: umgeht das Hängenbleiben großer Pakete an Abschnitten, die ICMP blockieren, durch Anpassung der MSS im SYN
tcp(7) — Linux manual pageLinux man-pages TCP_MAXSEG: maximale Segmentgröße ausgehender Pakete, vor dem Verbindungsaufbau gesetzt ändert sie auch die der Gegenseite gemeldete MSS
MTU considerations | Cloud VPNGoogle Cloud MTU des Cloud-VPN-Gateways 1.460 Byte, Payload-MTU eines IPv4-Tunnels 1.406 Byte (nach dem Tunnel um die 1.400)
ss(8) — Linux manual pageiproute2 mss, pmtu (Path-MTU) und backoff (wie oft sich das RTO verdoppelt hat) bei ss -i
ping(8) — Linux manual pageiputils -M do setzt DF und sendet keine Pakete, die größer als die dem Kernel bekannte Path-MTU sind, -s ist die Datengröße (ICMP-Header mit 8 Byte kommt hinzu)