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

Game-Lag-Whitepaper › Grundursachen von TCP-Retransmissions

MTU-Blackhole (nur große Pakete gehen wiederholt verloren) PMTU black hole

Ursachen-ID rt-mtu · Hauptzuständig Netzwerk-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam), Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

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

Symptome
Freeze, Verbindungsabbruch, Kein Login / Endlos-Laden
Faktoren
Paketverlust
Wer ist betroffen
Bestimmte Region oder Provider, Nur ich
Wann
Bei bestimmten Aktionen, Direkt nach Login oder Wartung
Zuständigkeit
Hauptzuständig Netzwerk-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Infrastruktur (Infrastrukturteam), Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
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

  1. RFC 1191: Path MTU discovery IETF
    Path MTU Discovery: Zu große Pakete werden per ICMP „fragmentation needed and DF set“ (Typ 3 Code 4) gemeldet
  2. RFC 2923: TCP Problems with Path MTU Discovery IETF
    Problem des PMTU-Blackholes, bei dem wegen blockiertem ICMP nur große Pakete immer wieder verschwinden
  3. RFC 4821: Packetization Layer Path MTU Discovery IETF
    Verfahren, bei dem die Transportschicht die Paketgröße ohne ICMP ermittelt (Grundlage von tcp_mtu_probing unter Linux)
  4. IP Sysctl Linux kernel
    tcp_mtu_probing: 0 aus, 1 nur bei erkanntem Blackhole, 2 immer (Start-MSS ist tcp_base_mss). tcp_retries1 standardmäßig 3
  5. net/ipv4/tcp_timer.c Linux kernel
    Folgen tcp_retries1 RTO-Retransmissions aufeinander, gilt das als erkanntes Blackhole, MTU-Probing wird aktiviert und die MSS gesenkt
  6. include/net/tcp.h Linux kernel
    TCP_BASE_MSS = 1024 Byte
  7. RFC 6298: Computing TCP's Retransmission Timer IETF
    Bei jedem Ablauf des Retransmission-Timers wird das RTO verdoppelt
  8. iptables-extensions(8) — Linux manual page netfilter
    TCPMSS --clamp-mss-to-pmtu: umgeht das Hängenbleiben großer Pakete an Abschnitten, die ICMP blockieren, durch Anpassung der MSS im SYN
  9. tcp(7) — Linux manual page Linux man-pages
    TCP_MAXSEG: maximale Segmentgröße ausgehender Pakete, vor dem Verbindungsaufbau gesetzt ändert sie auch die der Gegenseite gemeldete MSS
  10. Network maximum transmission unit (MTU) for your EC2 instance AWS
    Internet-Gateway und VPN haben MTU 1.500, PMTUD braucht ICMP Typ 3 Code 4, das nicht ankommt, wenn Security Groups oder Netzwerk-ACLs es blockieren
  11. MTU considerations | Cloud VPN Google Cloud
    MTU des Cloud-VPN-Gateways 1.460 Byte, Payload-MTU eines IPv4-Tunnels 1.406 Byte (nach dem Tunnel um die 1.400)
  12. Demonstrations of tcpretrans, the Linux eBPF/bcc version IO Visor
    Zeigt eine Zeile pro Retransmission, -s gibt zusätzlich die Sequenznummer des erneut gesendeten Pakets aus
  13. ss(8) — Linux manual page iproute2
    mss, pmtu (Path-MTU) und backoff (wie oft sich das RTO verdoppelt hat) bei ss -i
  14. ping(8) — Linux manual page iputils
    -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)
  15. Display Filter Reference: Internet Control Message Protocol Wireshark
    Anzeigefilter icmp.type und icmp.code

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