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

Анатомия игровых лагов › Первопричины повторных передач TCP

Смена маршрута и неисправный путь ECMP Route change / bad ECMP member

ID причины rt-path · Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера, Внешние стороны · Внешние стороны

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Пакеты пропадают в течение нескольких секунд, пока меняется интернет-маршрут, или постоянно на соединениях, попавших на неисправный путь среди нескольких путей ECMP.

Почему Пересчёт маршрутов BGP или неисправное оборудование либо линия связи на одном из нескольких путей (ECMP, LAG) → Следствие Временные потери во время переключения маршрута или постоянные потери только у соединений на этом пути → На экране Внезапный фриз на несколько секунд, потом перемотка, или «после перезахода лучше» (соединение попало на другой путь)

Симптомы
Фриз, Перемотка, Телепортация
Факторы
Потери
У кого
Один регион или провайдер
Когда
Изредка, случайно
Ответственные
Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера, Внешние стороны · Внешние стороны
Команда разработки: задачи
Записывать статистику повторных передач по соединениям (TCP_INFO), чтобы можно было найти IP, порт и время у пострадавших игроков, не рвать сразу соединение, вставшее на несколько секунд.
Команда инфраструктуры: задачи
Отслеживать долю повторных передач по регионам и провайдерам, проверять, меняется ли путь при перезаходе, иметь линии нескольких провайдеров, проверить пути ECMP и LAG на нашем оборудовании на неисправные линки, измерять маршрут через тот же TCP-порт, что и игра (mtr --tcp --port. Путь выбирается по адресу и порту, поэтому обычный ping может пойти другим путём и показать, что всё в порядке).
Внешние стороны: задачи
Сообщить провайдеру о неисправном пути, приложив результаты измерения маршрута через тот же TCP-порт и сравнение до и после перезахода.
На графике
Ступенька вверх с определённого момента · RTT (пинг), доля повторных передач по регионам и провайдерам
Где смотреть
Собрать повторные передачи по соединениям через bcc tcpretrans -c и выделить адреса и порты пострадавших игроков, затем запустить mtr через тот же TCP-порт, что и игра (mtr -T -P PORT), с сервера к игроку и от игрока к серверу и сравнить. Сравнить и результаты до и после перезахода
Подтверждает
С определённого момента RTT региона или провайдера меняется ступенькой и на несколько секунд сгущаются потери, или даже внутри одного провайдера постоянно повторно передают только некоторые соединения (сочетания адреса и порта), а перезаход помогает. Бывает, что обычный ping в порядке, а потери видны только в TCP mtr
Опровергает
Если в вечерний пик ухудшаются все соединения этого провайдера, это «Переполнение очереди в узком месте (потери от перегрузки)». Если плохо только у одного игрока и потери начинаются уже в ping до роутера, это «Потери на беспроводном участке»
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Реальные инциденты
Cloudflare 2020: Потеря трафика в части городов из-за ошибки в настройке магистрали Cloudflare

Источники

  1. RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
    Описание того, почему на множественных путях трудно доверять результатам диагностики вроде ping и traceroute, и способа закреплять путь за потоком через хеширование
  2. RFC 2992: Analysis of an Equal-Cost Multi-Path Algorithm IETF
    ECMP выбирает следующий путь по хешу полей заголовка, определяющих поток (один поток идёт одним путём)
  3. tcp(7) — Linux manual page Linux man-pages
    TCP_INFO: запрос состояния сокета (struct tcp_info)
  4. mtr(8) manual page source mtr
    -T (--tcp) использует TCP SYN вместо ICMP, -P (--port) задаёт порт назначения
  5. Demonstrations of tcpretrans, the Linux eBPF/bcc version IO Visor
    Выводит по строке с адресом и портом другой стороны на каждую повторную передачу, -c подсчитывает повторные передачи по потокам

Смотрите также

Тот же слой: Первопричины повторных передач TCP

Причины с тем же симптомом (Фриз) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами