Перейти к содержимому

Not Enough Bandwidth

NEB использует различные методы для экономии сетевого трафика во время игры в Minecraft.

NeoForge
Загрузчики
NeoForge
Скачиваний на Modrinth
234 тыс.
Подписчиков на Modrinth
23
версий
7
Обновлён
6 октября 20266 окт.
Опубликован
в 2026

Коротко о моде

Работает на NeoForge
Для Minecraft 1.21.1, 26.1–26.2
Нужен и в игре, и на сервере
Последняя версия — 26.2-0+beta от 6 октября 2026
Лицензия GPL-3.0-or-later — бесплатно
Где нужен
В игреобязателенНа сервереобязателен

Нужен и в игре, и на сервере

Версии игры1.21.1, 26.1–26.2
Описание переведено автоматическиПоказать оригинал (EN)

Not Enough Bandwidth (NEB)

icon

Введение

NEB использует различные методы, чтобы максимально экономить сетевой трафик во время игры в Minecraft, оставаясь при этом незаметным как для модов, так и для игроков.

В наборе данных ZZZZ от TeaCon Jiachen по сравнению с необработанными несжатыми данными NEB теоретически может сократить исходящий трафик сервера до 7,6% от исходного размера, а фактически измеренное значение составляет примерно 13,8%.

output

В тестах, проведённых в ванильной среде, исходящий трафик сервера был сокращён до 18% от исходного размера. Теоретически, чем больше установлено модов, тем больше и сложнее контент, передаваемый по сети, что приводит к лучшей производительности сжатия.

Нажмите Alt+N в игре, чтобы легко просмотреть состояние сетевого трафика.

image

Основные возможности

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

Оптимизация кодирования и декодирования CustomPacketPayload путём замены заголовка пакета Identifier (тип пакета) на компактный индекс. Это сокращает накладные расходы заголовка сетевого пакета мода до фиксированных 3-4 байт вместо длины строки, соответствующей типу сетевого пакета.

Структура индекса выглядит следующим образом:

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

┌------------- 1 byte (8 bits) ---------------┐
│               function flags                │
├---┬---┬-------------------------------------┤
│ i │ t │      reserved (6 bits)              │
└---┴---┴-------------------------------------┘
  • i = indexed (1 бит)
  • t = tight_indexed (1 бит, действителен только если i=1)
  • reserved = 6 бит (для будущего использования)

Индексированный тип пакета

  • Если i=0 (не индексирован):
┌---------------- N bytes ----------------
│ Identifier (packet type) in UTF-8
└-----------------------------------------
  • Если i=1 и t=0 (индексирован, НЕ tight):
┌-------- 1 byte ---------┬-------- 1 byte --------┬-------- 1 byte --------┐
┌------------- 12 bits ---------------┬-------------- 12 bits --------------┐
│    namespace-id (capacity 4096)     │       path-id (capacity 4096)       │
└-------------------------------------┴-------------------------------------┘
  • Если i=1 и t=1 (индексирован, tight):
┌--------- 1 byte ----------┬--------- 1 byte ---------┐
┌--------- 8 bits ----------┬--------- 8 bits ---------┐
│namespace-id (capacity 256)│  path-id (capacity 256)  │
└---------------------------┴--------------------------┘

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

Он занимает 3 байта, когда пространство имён сетевого пакета и соответствующий ему путь меньше 256, и 4 байта, когда больше 256. Это поддерживает до 4096 модов, по 4096 каналов на мод.

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

Оптимизация ситуации, когда ванильная игра часто создаёт большое количество маленьких сетевых пакетов. Перехват передачи на уровне Connection, их сбор в один большой сетевой пакет каждые 20 мс и отправка после сжатия.

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

Delayed Chunk Cache

В Vanilla, когда игрок двигается, сервер даёт клиенту команду немедленно забыть чанки позади него; если игрок вернётся на исходную позицию, полные данные чанков придётся отправлять заново. Отложив это «забывание», можно сэкономить трафик передачи чанков, возникающий при брожении по округе.

Конфиг

Изменяйте файл конфигурации по пути config/NotEnoughBandwidthConfig.json.

compatibleMode

WORK INDEPENDENTLY ON CLIENT AND SERVER.

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

blackList

WORK INDEPENDENTLY ON CLIENT AND SERVER.

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

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

contextLevel

WORK INDEPENDENTLY ON CLIENT AND SERVER.

Размер контекстного окна, используемого для сжатия. Допустимые значения — целые числа от 21 до 25, что соответствует от 2MB до 32MB. По умолчанию — 23 (8MB).

Большее контекстное окно даёт лучшее сжатие и экономию трафика, но потребляет больше памяти.

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

dccSizeLimit, dccDistance, dccTimeout

ONLY WORK ON SERVER.

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

Частые вопросы

Как установить Not Enough Bandwidth?

Установите NeoForge под свою версию Minecraft, скачайте Not Enough Bandwidth под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть Not Enough Bandwidth?

У Not Enough Bandwidth есть сборки для Minecraft 1.21.1, 26.1–26.2.

Нужен ли Not Enough Bandwidth на сервере?

Нужен и в игре, и на сервере

Лицензия и источник
GNU General Public License v3.0 or laterможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее