Not Enough Bandwidth
NEB использует различные методы для экономии сетевого трафика во время игры в Minecraft.
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 234 тыс.
- Подписчиков на Modrinth
- 23
- версий
- 7
- Обновлён
- 6 октября 20266 окт.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Not Enough Bandwidth (NEB)

Введение
NEB использует различные методы, чтобы максимально экономить сетевой трафик во время игры в Minecraft, оставаясь при этом незаметным как для модов, так и для игроков.
В наборе данных ZZZZ от TeaCon Jiachen по сравнению с необработанными несжатыми данными NEB теоретически может сократить исходящий трафик сервера до 7,6% от исходного размера, а фактически измеренное значение составляет примерно 13,8%.
В тестах, проведённых в ванильной среде, исходящий трафик сервера был сокращён до 18% от исходного размера. Теоретически, чем больше установлено модов, тем больше и сложнее контент, передаваемый по сети, что приводит к лучшей производительности сжатия.
Нажмите Alt+N в игре, чтобы легко просмотреть состояние сетевого трафика.
Основные возможности
Компактный заголовок пакета
Оптимизация кодирования и декодирования 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 на сервере?
Нужен и в игре, и на сервере