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

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

Задержка и потеря ACK (забитая отдача) ACK path congestion on asymmetric links

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

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

Данные дошли нормально, но если ACK «получено» задерживается или теряется в забитой очереди отдачи, отправитель считает данные потерянными и передаёт их повторно.

Почему Дома отдачу забивает выгрузка видео или облачный бэкап → Следствие ACK задерживаются в очереди роутера на сотни ms или выбрасываются при её переполнении → На экране Игровые пакеты от сервера в основном приходят вовремя. Ввод игрока стоит в той же очереди отдачи и запаздывает: задержка ввода и откидывание назад, иногда ложные повторные передачи

Симптомы
Задержка ввода, Откидывание назад
Факторы
Задержка, Потери
У кого
Все в одном доме
Когда
Изредка, случайно, Вечерний пик
Ответственные
Основной ответственный Внешние стороны · Внешние стороны · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
При скачке пинга показывать на экране состояние сети и подсказку «Проверьте, какие программы сейчас что-то выгружают».
Внешние стороны: задачи
Посоветовать игрокам SQM на роутере, чтобы очередь отдачи была короткой, приоритет для мелких пакетов (ACK) и ограничение скорости отдачи (выгрузка видео, облачный бэкап).
Цифры для ориентира
Каждый следующий ACK подтверждает и предыдущие, поэтому потеря нескольких ACK обычно не страшна. Проблема в задержке ACK в очереди.
На графике
Высоко только у некоторых · RTT (пинг) по соединениям
Где смотреть
С ПК игрока сравнить ping до игрового сервера при включённой и выключенной выгрузке (видео, облачный бэкап). На сервере посмотреть rtt соединения этого игрока в ss -ti
Подтверждает
Только во время выгрузки ping поднимается до сотен ms и появляются задержка ввода и откидывание назад, а после остановки выгрузки всё быстро возвращается. На сервере в это время растёт и rtt этого соединения
Опровергает
Если потери и задержка появляются независимо от выгрузки, это «Потери на беспроводном участке» или причина на маршруте. Если запаздывает только направление от сервера к игроку и выгрузка ни при чём, это «Переполнение очереди в узком месте (потери от перегрузки)»
Чем проверить
Проверка на стороне игрока

Источники

  1. RFC 3449: TCP Performance Implications of Network Path Asymmetry IETF
    На асимметричных линиях с узкой отдачей задержка или потеря ACK снижает производительность TCP; ACK подтверждают кумулятивно, поэтому потерю части из них покрывают следующие; меры вроде приоритетного планирования ACK
  2. Smart Queue Management Bufferbloat.net
    Управление очередью и шейпинг на роутере держат очередь короткой
  3. tc-cake(8) — Linux manual page iproute2
    CAKE разделяет потоки и минимизирует задержку для редких потоков (sparse flow)
  4. ss(8) — Linux manual page iproute2
    rtt (среднее время пути туда и обратно) и rttvar (разброс) в ss -i

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

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

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

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