UDP-пакет больше MTU (размера, который можно отправить за один раз) фрагментируется на уровне IP, и при потере всего одного фрагмента выбрасывается весь пакет.
Почему Снапшот людного места больше 1 500 байт → Следствие Пакет уходит несколькими фрагментами, и при потере любого из них выбрасывается целиком → На экране Чем больше пакет, тем в разы выше доля потерь. Телепортация только в людных местах
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Самим разбивать данные на пакеты не больше 1 200 байт, отправлять только изменения.
Цифры для ориентира
На линии с потерями 2% пакет из 4 фрагментов теряется примерно в 8% случаев. Некоторые файрволы и провайдеры вообще отбрасывают фрагментированные пакеты, и тогда игрок не получает ни одного большого пакета.
На графике
Растёт вслед за онлайном и нагрузкой · число IP-фрагментов (IpFragCreates), размер снапшота
Где смотреть
Посмотреть на сервере прирост IpFragCreates (число фрагментов, созданных при отправке) в nstat -az, а на принимающей стороне IpReasmFails (число неудачных сборок). Проверить распределение размеров UDP-пакетов по логам игрового сервера или захвату пакетов
Подтверждает
В людных местах растёт IpFragCreates, встречаются UDP-пакеты больше 1 500 байт, и в это же время растёт число жалоб на телепортацию
Опровергает
Если IpFragCreates не растёт, при отправке с сервера фрагментации нет
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
RFC 8085: UDP Usage GuidelinesIETF Если потерян один фрагмент, пакет не собрать, и он теряется целиком. UDP-приложениям следует избегать IP-фрагментации
net/ipv4/proc.c (Linux v6.12)Linux kernel Имена счётчиков, которые показывает nstat: FragCreates (число созданных фрагментов) и ReasmFails (число неудачных сборок) в группе Ip