▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/Not Enough Bandwidth
Not Enough Bandwidth

Not Enough Bandwidth

Not Enough Bandwidth (NEB) - мод для Майнкрафт, который оптимизирует сетевой трафик на сервере и клиенте. Снижает исходящий трафик до 18% от исходного в ванильной среде и до 13.8% в модифицированной. Идеально для больших серверов и сборок модов.

Оцените первым
227.7K
22

Not Enough Bandwidth (NEB)

Для чего это нужно

В Майнкрафте, особенно на серверах с десятками игроков и кучей модов, сетевой трафик может быть просто огромным. Каждый шаг игрока, каждый блок, каждый пакет данных - всё это летит по сети. На слабом канале или при большом онлайне начинаются лаги, тики проседают, игроки жалуются. Мод Not Enough Bandwidth как раз решает эту проблему - он сжимает и оптимизирует передаваемые данные так, что нагрузка на сеть падает в разы.

По тестам авторов, в ванильном окружении исходящий трафик сервера сокращается до 18% от исходного размера. А если установлено много модов - ещё лучше: до 13.8% (по сравнению с несжатыми данными). В общем, чем сложнее сборка, тем эффективнее работает NEB.

Кстати, в игре можно нажать Alt+N и посмотреть текущее состояние сетевого трафика - удобно.

Основные фишки

Компактный заголовок пакета

Обычно каждый сетевой пакет содержит строку-идентификатор типа пакета (Identifier). NEB заменяет эту строку компактным индексом - всего 3-4 байта вместо десятков байт строки. Структура индекса:

Фиксированный заголовок 8 бит

┌------------- 1 байт (8 бит) ---------------┐
│               флаги функции                │
├---┬---┬-------------------------------------┤
│ i │ t │      зарезервировано (6 бит)        │
└---┴---┴-------------------------------------┘
  • i = индексирован (1 бит)
  • t = плотный индекс (1 бит, только если i=1)
  • зарезервировано = 6 бит (на будущее)

Тип пакета с индексом

  • Если i=0 (не индексирован):
┌---------------- N байт ----------------
│ Identifier (тип пакета) в UTF-8
└-----------------------------------------
  • Если i=1 и t=0 (индексирован, не плотный):
┌-------- 1 байт ---------┬-------- 1 байт --------┬-------- 1 байт --------┐
┌------------- 12 бит ---------------┬-------------- 12 бит --------------┐
│    namespace-id (ёмкость 4096)     │       path-id (ёмкость 4096)       │
└-------------------------------------┴-------------------------------------┘
  • Если i=1 и t=1 (индексирован, плотный):
┌--------- 1 байт ----------┬--------- 1 байт ---------┐
┌--------- 8 бит ----------┬--------- 8 бит ---------┐
│namespace-id (ёмкость 256)│  path-id (ёмкость 256)  │
└---------------------------┴--------------------------┘

Затем данные пакета.

Занимает 3 байта, если namespace и path меньше 256, и 4 байта - если больше. Поддерживает до 4096 модов с 4096 каналами каждый.

Агрегация и сжатие

В ванильном Майнкрафте часто генерируется куча маленьких пакетов. NEB перехватывает их на уровне Connection, каждые 20 мс собирает в один большой пакет и сжимает его.

┌---┬----┬----┬----┬----┬----┬----...
│ S │ p0 │ s0 │ d0 │ p1 │ s1 │ d1 ...
└---┴----┴----┴----┴----┴----┴----...
    └--пакет 1---┘└--пакет 2---┘
    └----------сжато----------┘
  • S = varint, размер сжатого буфера
  • p = префикс (medium/int/utf-8), тип подпакета
  • s = varint, размер подпакета
  • d = bytes, данные подпакета

Отложенный кэш чанков

В ванильной версии при движении игрока сервер сразу забывает чанки позади него. Если игрок возвращается обратно - чанки приходится передавать заново целиком. NEB задерживает это "забывание", сохраняя чанки в кэше на некоторое время. Это сильно экономит трафик при беготне туда-сюда.

Настройка

Файл конфигурации лежит в config/NotEnoughBandwidthConfig.json.

compatibleMode

РАБОТАЕТ НЕЗАВИСИМО НА КЛИЕНТЕ И СЕРВЕРЕ.

Включает режим совместимости. Если true, используется blackList ниже.

blackList

РАБОТАЕТ НЕЗАВИСИМО НА КЛИЕНТЕ И СЕРВЕРЕ.

Чёрный список для режима совместимости. Пакеты из этого списка NEB пропускает без обработки. По умолчанию там уже есть пакеты Velocity, но можно добавлять свои.

Важно: пакеты из чёрного списка прерывают текущую агрегацию. Если таких пакетов много или они шлются часто - эффективность агрегации-сжатия падает.

contextLevel

РАБОТАЕТ НЕЗАВИСИМО НА КЛИЕНТЕ И СЕРВЕРЕ.

Размер окна контекста для сжатия. Целые числа от 21 до 25 (соответствует от 2MB до 32MB). По умолчанию 23 (8MB). Больше окно - лучше сжатие и экономия трафика, но больше расход памяти.

Для сервера со 100 игроками при значении 25 дополнительный расход памяти составит около 3200MB.

dccSizeLimit, dccDistance, dccTimeout

РАБОТАЕТ ТОЛЬКО НА СЕРВЕРЕ.

Максимальное количество кэшируемых чанков, дистанция кэширования и таймаут для отложенного кэша чанков (DCC). Большие значения потребляют больше памяти, маленькие - чаще вызывают обновления.

Итог

Not Enough Bandwidth - штука полезная в первую очередь для администраторов серверов и создателей сборок модов. Если у вас много игроков или тяжёлая модификация - этот мод реально снизит нагрузку на сеть без потери функциональности. На клиенте тоже можно поставить для симметрии.

Партнёрский материал

Как поиграть с друзьями с модом Not Enough Bandwidth?

Мод Not Enough Bandwidth куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода Not Enough Bandwidth будет готов за пару минут - BungeeHost сделает всё за вас.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

26.1.x1.21.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Ссылки

Детали

Лицензия:
Опубликован:6 месяцев назад
Обновлён:1 месяц назад
Главная