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

Libro blanco del lag en juegos › Causas raíz de la retransmisión TCP

Cambio de ruta o ruta ECMP defectuosa Route change / bad ECMP member

ID de la causa rt-path · Responsable principal Infraestructura de red (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo), Externo (Externo)

Abrir la ficha interactiva con gráficos y simulaciones →

Se pierden paquetes durante los segundos en que cambia una ruta de internet, o en las conexiones asignadas a una ruta defectuosa entre varias rutas ECMP.

Por qué Recálculo de rutas BGP, o un dispositivo o enlace defectuoso en una de varias rutas (ECMP, LAG) → Efecto Pérdida temporal durante el cambio de ruta, o pérdida constante solo en las conexiones que van por esa ruta → En pantalla De repente, congelamiento de unos segundos seguido de cámara rápida, o “al reconectar se arregla” (se asigna otra ruta)

Síntomas
Congelamiento, Cámara rápida, Teletransporte
Factores
Pérdida de paquetes
A quién afecta
Una región o un ISP
Cuándo
De vez en cuando, al azar
Responsable
Responsable principal Infraestructura de red (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo), Externo (Externo)
Tareas (Equipo de desarrollo)
Guardar estadísticas de retransmisión por conexión (TCP_INFO) para poder sacar la IP, el puerto y la hora de quienes lo sufren, no cortar enseguida las conexiones que se detienen unos segundos.
Tareas (Equipo de infraestructura)
Monitorear la tasa de retransmisión por región e ISP, comprobar si la ruta cambia al reconectar, contratar enlaces con varios ISP, revisar si hay enlaces defectuosos entre las rutas ECMP y LAG de nuestros dispositivos, medir la ruta también con el mismo puerto TCP que el juego (mtr --tcp --port; como la ruta depende de la dirección y el puerto, un ping normal puede ir por otra ruta y salir limpio).
Tareas (Externo)
Reportar al ISP la ruta defectuosa adjuntando mediciones de ruta hechas con el mismo puerto TCP y la comparación antes y después de reconectar.
En el gráfico
Salto en escalón · RTT (ping), tasa de retransmisión por región/ISP
Dónde mirar
Agrupar las retransmisiones por conexión con bcc tcpretrans -c para sacar la dirección y el puerto de los jugadores afectados, y comparar mtr (mtr -T -P PORT) con el mismo puerto TCP que el juego, del servidor al jugador y del jugador al servidor. Comparar también los resultados antes y después de reconectar
Se confirma si
A partir de un momento concreto, el RTT de una región o un ISP cambia en escalón y la pérdida se concentra durante unos segundos; o bien, dentro de un mismo ISP, solo algunas conexiones (combinaciones de dirección y puerto) retransmiten de forma constante y mejoran al reconectar. A veces el ping normal sale limpio y la pérdida solo aparece en el mtr por TCP
Se descarta si
Si todas las conexiones de ese ISP empeoran juntas en el pico de la noche, apunta a “Desbordamiento de la cola en el cuello de botella (pérdida por congestión)”. Si solo un jugador va mal y la pérdida empieza ya en el ping al router, a “Pérdida en el tramo inalámbrico”
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Casos reales
Cloudflare 2020: Pérdida de tráfico en algunas ciudades por un error de configuración en la red troncal de Cloudflare

Fuentes

  1. RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
    Con múltiples rutas, los resultados de herramientas de diagnóstico como ping y traceroute son poco confiables; explica cómo fijar la ruta aplicando un hash a cada flujo
  2. RFC 2992: Analysis of an Equal-Cost Multi-Path Algorithm IETF
    ECMP elige el siguiente salto con un hash de los campos de cabecera que identifican el flujo (un mismo flujo, una misma ruta)
  3. tcp(7) — Linux manual page Linux man-pages
    TCP_INFO: consulta del estado de cada socket (struct tcp_info)
  4. mtr(8) manual page source mtr
    -T (--tcp) envía las sondas como TCP SYN, sin ICMP, y -P (--port) indica el puerto de destino
  5. Demonstrations of tcpretrans, the Linux eBPF/bcc version IO Visor
    Muestra una línea por retransmisión con la dirección y el puerto remotos, y -c agrega el número de retransmisiones por flujo

Ver también

Misma capa: Causas raíz de la retransmisión TCP

Causas de otras capas con el mismo síntoma (Congelamiento)

Ver la ficha interactiva con gráficos y simulaciones