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

Анатомия игровых лагов › L3 Домашняя сеть

Истечение записи в таблице NAT NAT mapping timeout

ID причины hn-nat · Основной ответственный Команда разработки · Разработка клиента · Совместно Команда разработки · Разработка сервера

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

Роутер удаляет из таблицы NAT неактивные соединения, по которым какое-то время не было пакетов. Это частая причина дисконнекта в тот момент, когда игрок после простоя снова начинает двигаться.

Почему Роутер записывает соединение «домашнее устройство ↔ внешний сервер» в таблицу NAT (таблицу трансляции адресов) → Следствие Если пакетов какое-то время нет, запись удаляется (для UDP обычно через 30–120 секунд) → На экране Пакеты сервера больше не попадают в домашнюю сеть, дисконнект

Симптомы
Дисконнект
Факторы
Потери
У кого
Только у меня, Все в одном доме
Когда
После бездействия
Ответственные
Основной ответственный Команда разработки · Разработка клиента · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Клиент: отправлять хартбиты с интервалом не больше половины самого короткого таймаута простоя (запись NAT для UDP гарантированно обновляют только исходящие из дома пакеты, поэтому отправляет клиент), при обрыве автоматически переподключаться. Сервер: отвечать на хартбиты, а если их долго нет, первым закрывать соединение. Если запись NAT удалилась и внешний адрес и порт сменились, узнавать того же игрока по токену сессии (идентификатору, полученному при входе) и продолжать сессию.
На графике
Массовый обрыв соединений · число обрывов (таймаут хартбита), время простоя перед обрывом
Где смотреть
Собрать причины обрывов на сервере и время от последнего пакета по соединению до обрыва (время простоя) и посмотреть их распределение. В тесте увеличивать интервал между UDP-пакетами до 30, 60 и 120 секунд и найти интервал, при котором ответы перестают приходить
Подтверждает
Рвутся только простаивавшие соединения, и время простоя скапливается сразу за определённым значением в диапазоне 30–120 секунд. Если сделать интервал хартбита короче, обрывы пропадают
Опровергает
Если рвётся и во время активной игры, дело в подключении или маршруте. Если короткие значения скапливаются только у определённого мобильного оператора, это «Общий IP провайдера (CGNAT)»
Чем проверить
Нужны логи и метрики игрового сервера или клиента

Источники

  1. RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
    Таймер записи NAT для UDP не должен истекать раньше 2 минут, по умолчанию рекомендуется 5 минут и больше. Обновление исходящими изнутри пакетами обязательно, входящими снаружи необязательно
  2. An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
    Измерения 34 моделей домашних роутеров: записи UDP живут 30–691 с, медиана 90 с, более чем у половины меньше 2 минут, у TCP медиана около 60 минут
  3. RFC 9308: Applicability of the QUIC Transport Protocol IETF
    В интернете, где на маршруте есть NAT, разумный интервал keep-alive около 30 секунд, более частые keep-alive зря тратят трафик и энергию

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

Тот же слой: L3 Домашняя сеть

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

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