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

Guia do Lag em Jogos › Causas-raiz da retransmissão TCP

Retransmissão rápida espúria por pacotes fora de ordem Reordering triggers spurious fast retransmit

ID da causa rt-reorder · Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)

Abrir o card interativo, com figuras e simulações →

Quando a ordem dos pacotes muda ao passar por vários caminhos ou links agregados, quem recebe avisa com ACKs duplicados que “falta um pacote”, e quem envia reenvia um pacote que tinha chegado sem problema.

Por quê Equipamentos que dividem o caminho pacote a pacote, LAGs (agregação de links) que distribuem pacote a pacote e o momento da troca de rota embaralham a ordem → Efeito Um pacote posterior chega antes e se acumulam 3 ACKs duplicados → retransmissão rápida → Na tela Os pacotes de jogo, esparsos, quase não são afetados. As atualizações grandes em lugares lotados e o download de patches ficam lentos, com engasgos de vez em quando

Sintomas
Engasgos, Input lag
Fatores
Jitter
Quem é afetado
Região ou operadora específica, Servidor inteiro
Quando
Sempre, Quando junta muita gente
Responsável
Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)
O que fazer (Equipe de infraestrutura)
Rede: distribuir por conexão (ECMP e LAG com hash de endereço e porta), sem dividir pacote a pacote. Servidores/SO: usar RACK (detecção de perda por tempo, resistente a pacotes fora de ordem; quando detecta retransmissão espúria via DSACK, aumenta sozinho a tolerância a pacotes fora de ordem), verificar o grau de desordem que o Linux estima automaticamente para cada conexão (valor reordering no ss -ti, inicial tcp_reordering=3).
No gráfico
Sempre alto desde o início · Detecções de pacotes fora de ordem, DSACKs recebidos
Onde olhar
Ver TcpExtTCPSACKReorder e TcpExtTCPTSReorder (vezes em que se detectaram pacotes fora de ordem) e TcpExtTCPDSACKRecv no nstat e, por conexão, reordering (aparece quando é diferente de 3) e reord_seen no ss -ti. Na captura de pacotes, usar o filtro do Wireshark tcp.analysis.out_of_order
Confirma se
Os contadores de pacotes fora de ordem e de DSACK sobem de forma constante, sem relação com o horário, e o valor reordering das conexões que passam por um caminho ou equipamento específico está acima de 3. Na captura do lado que recebe, o pacote posterior chega antes e o anterior chega logo em seguida
Descarta se
Contadores de pacotes fora de ordem parados e TcpExtTCPLostRetransmit aumentando: perda real. DSACK subindo só nos momentos de pico de RTT: “Retransmissão espúria por pico de latência”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
    Dividir o caminho pacote a pacote muda a ordem, e, quando 3 ou mais pacotes posteriores chegam antes, o TCP faz uma retransmissão rápida espúria
  2. RFC 2992: Analysis of an Equal-Cost Multi-Path Algorithm IETF
    ECMP que escolhe o caminho pelo hash dos campos de cabeçalho que identificam o fluxo (distribuição por fluxo)
  3. RFC 5681: TCP Congestion Control IETF
    Retransmissão rápida no terceiro ACK duplicado
  4. RFC 8985: The RACK-TLP Loss Detection Algorithm for TCP IETF
    O RACK detecta perdas por tempo e por isso resiste a pacotes fora de ordem; ao receber DSACK, aumenta o tempo de tolerância à desordem (reo_wnd)
  5. IP Sysctl Linux kernel
    Valor inicial de tcp_reordering 3 (ajustado automaticamente por conexão até tcp_max_reordering), configuração do RACK em tcp_recovery
  6. misc/ss.c iproute2
    ss -ti mostra reordering:valor quando o reordering da conexão é diferente do padrão 3, e reord_seen:vezes quando a conexão já viu pacotes fora de ordem
  7. SNMP counter Linux kernel
    TcpExtTCPSACKReorder e TcpExtTCPTSReorder (detecção de pacotes fora de ordem), TcpExtTCPDSACKRecv (DSACKs recebidos), TcpExtTCPLostRetransmit (pacote reenviado perdido de novo)
  8. include/uapi/linux/tcp.h Linux kernel
    tcpi_reord_seen no tcp_info: quantas vezes a conexão viu pacotes fora de ordem
  9. Display Filter Reference: Transmission Control Protocol Wireshark
    Filtro de exibição tcp.analysis.out_of_order

Veja também

Mesma camada: Causas-raiz da retransmissão TCP

Mesmo sintoma (Engasgos) em outras camadas

Ver o card interativo, com figuras e simulações