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

Game Lag White Paper › Root causes of TCP retransmission

Spurious fast retransmit from reordering Reordering triggers spurious fast retransmit

Cause ID rt-reorder · Primary owner Infra team (Network infrastructure) · Also Infra team (Server infrastructure)

Open the interactive card with figures and simulations →

When packets get out of order crossing multiple paths or bundled links, the receiver signals “a packet is missing” with duplicate ACKs, and the sender resends a packet that arrived fine.

Why Devices that split traffic across paths per packet, LAGs (link bundles) that spread traffic per packet, and route changes shuffle packet order → Effect Later packets arrive first and three duplicate ACKs pile up → fast retransmit → On screen Sparse game packets are barely affected. Large updates in crowded areas and patch downloads slow down, with occasional stutter

Symptoms
Stutter, Input lag
Factors
Jitter
Who’s affected
Specific region/ISP, Whole server
When
Always, When crowds gather
Owner
Primary owner Infra team (Network infrastructure) · Also Infra team (Server infrastructure)
Infra team action items
Network: switch from per-packet to per-connection load balancing (hash ECMP and LAG on address and port). Servers/OS: use RACK (time-based loss detection that tolerates reordering; when DSACK reveals spurious retransmissions, it automatically widens its reordering allowance), check the reordering degree Linux estimates automatically for each connection (the reordering value in ss -ti, starting from tcp_reordering=3).
On the graph
Always high · Reordering detections, DSACKs received
Where to look
nstat TcpExtTCPSACKReorder and TcpExtTCPTSReorder (reordering detections) and TcpExtTCPDSACKRecv; per connection, reordering (shown when not 3) and reord_seen in ss -ti. In a packet capture, the Wireshark filter tcp.analysis.out_of_order
Confirmed if
Reordering counters and DSACK climb steadily at all hours, and connections through a specific path or device show a reordering value above 3. The receiver-side capture shows later packets arriving first, with the earlier ones following shortly
Ruled out if
Reordering counters flat while TcpExtTCPLostRetransmit rises: real loss. DSACK rising only at moments when RTT jumps: “Spurious retransmission from latency spikes”
Check with
Infra tools (no game code needed)

Sources

  1. RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
    Splitting paths per packet reorders packets, and when 3 or more later packets arrive first, TCP performs a spurious fast retransmit
  2. RFC 2992: Analysis of an Equal-Cost Multi-Path Algorithm IETF
    ECMP that picks a path from a hash of the header fields identifying a flow (per-flow load balancing)
  3. RFC 5681: TCP Congestion Control IETF
    Fast retransmit on the third duplicate ACK
  4. RFC 8985: The RACK-TLP Loss Detection Algorithm for TCP IETF
    RACK detects loss by time, so it tolerates reordering, and it widens its reordering window (reo_wnd) when it receives DSACKs
  5. IP Sysctl Linux kernel
    tcp_reordering starts at 3 (adjusted automatically per connection up to tcp_max_reordering), RACK setting in tcp_recovery
  6. misc/ss.c iproute2
    ss -ti shows reordering:value when a connection’s reordering differs from the default of 3, and reord_seen:count once the connection has seen reordering
  7. SNMP counter Linux kernel
    TcpExtTCPSACKReorder, TcpExtTCPTSReorder (reordering detected), TcpExtTCPDSACKRecv (DSACKs received), TcpExtTCPLostRetransmit (a retransmitted packet lost again)
  8. include/uapi/linux/tcp.h Linux kernel
    tcpi_reord_seen in tcp_info: how many times the connection has seen reordering
  9. Display Filter Reference: Transmission Control Protocol Wireshark
    tcp.analysis.out_of_order display filter

See also

Same layer: Root causes of TCP retransmission

Same symptom (Stutter), other layers

View the interactive card with figures and simulations