宽带优化

宽带优化

大量保存你的MC带宽。

BandwidthOptimizer

BandwidthOptimizer 是一个客户端与服务器端的网络带宽优化模组,专为重模组化的 Minecraft 服务器设计。它在尽量保留解码后原始 Minecraft 数据包流的前提下,减少重复且可压缩的 PLAY 流量。

它专为整合包和公共服务器设计,在这些环境中,登录同步、自定义负载、机器网络、存储系统以及频繁的区块访问可能会产生大量网络流量。它不是 FPS 优化器,也不应被视为常规服务器、代理或网络调优的替代品。

Discord Server GitHub Repository

BandwidthOptimizer preview

支持

开发状态

BandwidthOptimizer 仍在积极开发中。Bug 和模组兼容性问题仍可能出现,尤其是在大型整合包、代理网络以及具有大量自定义负载流量的服务器中。

该模组旨在优化网络数据包,而非修改世界数据或存档文件。当数据包、边界或模组交互看起来不安全时,BandwidthOptimizer 会尝试回退到直接或旁路行为,而不是强制进行优化。

如果您遇到问题,请连同客户端日志、服务器日志(如适用,还包括代理日志)以及 BandwidthOptimizer 报告文件一起报告。欢迎提供兼容性报告、建议和贡献。

功能特性

  • 将已编码的 Minecraft 数据包包装成可逆的传输帧。
  • 使用流式 Zstd 压缩合适的数据包负载。
  • 对重复的数据包结构使用同步的字面量/模板映射。
  • 在遵守协议和刷新边界的同时,批量处理安全的小型数据包组。
  • 通过 full、ref 和 patch 传输决策来复用区块数据。
  • 在重连和兼容的代理服务器切换时,保留可复用的区块缓存数据。
  • 绕过敏感数据包、协议转换和不安全的时序边界,而不是强制每个数据包都走相同的优化路径。
  • 提供 HUD、服务器统计、来源报告、绕过报告和解码器转储文件,用于调试和可复现的测量。

工作原理

BandwidthOptimizer 在正常游戏逻辑之下工作。在发送端,它在 Minecraft 或加载器将完整数据包编码为字节后观察这些数据包。然后,传输层可以包装、批量处理、压缩或绕过该编码数据包。

在接收端,传输帧在正常数据包处理继续之前被解包回原始的编码数据包字节。设计目标是数据包流等价性:恢复后,接收端应该看到与没有 BandwidthOptimizer 时相同的数据包类型、内容以及相对顺序。

层 用途
透明传输 携带已编码的数据包字节,无需重写游戏逻辑。
流式 Zstd 压缩受益于字节级压缩的数据包主体。
字面量/模板映射 减少重复的数据包结构,同时保持发送端和接收端状态同步。
轻量批量路径 对完整模板工作过于昂贵的敏感刷新路径,使用成本更低的批量编码。
区块传输 根据可用的缓存状态和安全检查,为区块相关流量选择 full、ref、patch 或 bypass。
边界控制 在协议转换、登录/配置/游戏状态切换、代理切换和陈旧时期周围强制刷新、绕过、预热或重置。
报告 记录原始流量、优化后流量、绕过原因、数据包排名和解码器故障,用于故障排除。

实测结果

带宽减少取决于整合包、玩家活动、代理设置以及哪些数据包主导流量。以下示例来自真实的重模组化服务器测试期间收集的 BandwidthOptimizer 报告文件。它们是示例,而非保证结果。

此模组的主要指标是实际进入 BandwidthOptimizer 传输路径流量的压缩率。整个服务器的原始/实际总量是有用的背景信息,但它们也包括直接数据包、兼容性绕过、缓存复用以及来自不应或无法压缩的模组的流量。例如,一些模组流量(如 WATUT/YSM 风格的存在或模型更新)可能会被绕过或压缩效果不佳,因此不应混入主要的传输压缩声明中。

实时 HUD 快照:

环境 客户端优化流量 服务器原始到实际 服务器优化流量 直接流量 玩家数 来源
Create Delight Remake 服务器 1 23.21 MB -> 3.93 MB (16.9%) 305.35 GB -> 51.12 GB (16.7%) 40.28 GB (13.2%) 49.46 GB (16.2%) 13 HUD 快照,v2.7.6.10。
Create Delight Remake 服务器 2 24.51 MB -> 4.15 MB (16.9%) 516.70 GB -> 83.24 GB (16.1%) 57.57 GB (11.1%) 57.01 GB (11.0%) 15 HUD 快照,v2.7.6.10。

来源报告的受管传输总量:

环境 受管传输 不含 WATUT/YSM 类流 备注
Create 核心服务器 38976.09 MiB -> 9455.03 MiB (24.3%) 34580.44 MiB -> 5236.56 MiB (15.1%) 真实混合流量,包含大量已压缩/难压缩的来源。
Create 镜像服务器 1046.16 MiB -> 253.89 MiB (24.3%) 902.82 MiB -> 113.55 MiB (12.6%) 较小的混合样本;WATUT 类流量可见。
Create 测试服务器 1174.31 MiB -> 112.24 MiB (9.6%) 同一样本 此 TopN 样本中无 WATUT/YSM 例外。
Create Delight 7865.72 MiB -> 1622.43 MiB (20.6%) 7774.54 MiB -> 1539.90 MiB (19.8%) 公共整合包来源报告快照。
Create Delight 次要快照 4567.66 MiB -> 603.15 MiB (13.2%) 未分离 较早的报告快照。

高影响流量来源示例:

来源 环境 观察到的原始流量 实际传输量 实际/原始比率
ClientboundLevelChunkWithLightPacket Create 核心服务器 9062.88 MiB 481.85 MiB 5.3%
ClientboundLevelChunkWithLightPacket Create 测试服务器 713.65 MiB 16.84 MiB 2.4%
ClientboundTabListPacket Create 核心服务器 6354.97 MiB 655.45 MiB 10.3%
lightmanscurrency:network Create 核心服务器 8206.80 MiB 593.69 MiB 7.2%
create:deployer 方块实体数据 Create Delight 510.41 MiB 71.61 MiB 14.0%

低收益流量来源示例:

来源 环境 观察到的原始流量 实际传输量 实际/原始比率 路径
watut:main Create 核心服务器 4157.94 MiB 3974.80 MiB 95.6% BATCH_DIRECT_FALLBACK
yes_steve_model:2_6_0 Create 核心服务器 514.63 MiB 510.50 MiB 99.2% BATCH_TRANSPORT_SHARE
watut:main Create 镜像服务器 146.07 MiB 143.07 MiB 97.9% BATCH_TRANSPORT_SHARE
watut:main Create Delight 91.18 MiB 82.53 MiB 90.5% BATCH_TRANSPORT_SHARE

这些数据流已经过压缩、加密或接近随机,因此再次压缩几乎没有空间。这里仍然列出它们,是因为它们解释了为什么混合服务器的总比率可能看起来比上述高影响力的数据包族更差。

要在您自己的服务器上复现可比较的测量结果:

  1. 在服务器和客户端上安装相同版本的 BandwidthOptimizer。
  2. 在固定时间内运行相同的活动模式,例如登录高峰、频繁区块旅行、机械密集区域或正常在线游戏。
  3. 优先查看 HUD optimized flow 行,或过滤来源报告,只保留进入传输的路径行,如 BATCH_TRANSPORT_*、SINGLE_TRANSPORT 或区块传输行。
  4. 将直接/绕过行分开。不要将 bandwidthoptimizer:transport 载体数据包视为新的原始来源流量。
  5. 分享结果时,请包含整合包、加载器、Minecraft 版本、玩家数和测试持续时间。

重要报告位置:

bandwidthoptimizer-native/transport-source-report/latest-source-report.md
bandwidthoptimizer-native/transport-bypass-report/latest-bypass-report.md
bandwidthoptimizer-native/decoder-exception-dump/

在当前的测试集中,还使用 BandwidthOptimizer 诊断输出检查了 Mechanomania。可用的快照包含绕过和数据包排名报告,但不包含来源原始/实际摘要,因此它被列为已测试环境,而非用作压缩率声明。

已测试的整合包环境

作者已在多个重模组化环境中测试了 BandwidthOptimizer,包括:

  • Create Delight
  • Brass Concerto
  • Aeronautics
  • Mechanomania

这意味着这些环境已用于兼容性测试。这并不保证涵盖所有可能的模组组合、代理拓扑或服务器配置。

支持的版本

选择与您的 Minecraft 版本和加载器都匹配的构建。

加载器 Minecraft 备注
Forge 1.19.2 目标 Forge 43.x。
Forge 1.20.1 目标 Forge 47.x。
Fabric / Quilt 1.20.1 需要 Fabric API。为 Fabric 和 Quilt 加载器发布。
Fabric / Quilt 1.21.1 需要 Fabric API。为 Fabric 和 Quilt 加载器发布。
NeoForge 1.21.1 目标 NeoForge 21.x。

依赖项

  • 与下载构建匹配的 Minecraft 和对应模组加载器。
  • Fabric 和 Quilt 构建需要 Fabric API。
  • 服务器和每个客户端上必须安装相同版本的 BandwidthOptimizer。

Forge 和 NeoForge 构建使用在 config/ 下生成的加载器配置文件。Fabric 和 Quilt 构建包含匹配的运行时代码,但仍需要 Fabric API。

安装

  1. 为您的加载器和 Minecraft 版本下载 BandwidthOptimizer jar 文件。
  2. 将 jar 文件放入服务器的 mods 文件夹中。
  3. 将相同版本的 BandwidthOptimizer 放入每个客户端的 mods 文件夹中。
  4. 如果使用 Fabric 或 Quilt 构建,请安装 Fabric API。
  5. 重启服务器和客户端。

如果客户端和服务器版本不匹配,传输通道可能会被禁用或无法正确协商。

配置

主要的加载器生成配置文件:

config/bandwidthoptimizer-common.toml
config/bandwidthoptimizer-client.toml

重要区域:

区域 用途
PLAY 批量选项 控制引用去重、SHA-256 字典、模板字典、Zstd、流式 Zstd 和异步批量编码。
模板字典限制 限制映射工作的数据包大小、条目数、负载字节数、差异运行次数和更改字节数。
区块缓存预算 控制客户端区块缓存内存和持久备份行为。
调试分析 启用更繁重的手动分析命令,如传输报告和数据包排名。
解码器转储 在检测到解码器故障时,写入详细的数据包转储。
运行时属性 高级覆盖,例如 bandwidthoptimizer.transport.batchWindowMillis、bandwidthoptimizer.transport.mappingEnabled 和 bandwidthoptimizer.transport.zstdEnabled。

大多数服务器应从默认配置开始,仅在比较更改前后的报告输出时才更改这些选项。

命令

命令 描述
/bandwidthoptimizer 显示可用的 BandwidthOptimizer 命令。
/bandwidthoptimizer hud 切换客户端 HUD。
/bandwidthoptimizer stats 显示服务器带宽总量。
/bandwidthoptimizer stats total 显示持久化的服务器总带宽统计。
/bandwidthoptimizer stats players [limit] 显示顶级玩家/频道带宽统计。
/bandwidthoptimizer stats reset 重置持久化的服务器带宽统计。
/bandwidthoptimizer test transportreport run [ticks] 开始短暂的传输压缩报告。需要启用调试分析。
/bandwidthoptimizer test transportreport status 显示传输报告捕获状态。
/bandwidthoptimizer test packetrank run [ticks] 开始数据包排名捕获。需要启用调试分析。
/bandwidthoptimizer test packetrank status 显示数据包排名捕获状态。

兼容性范围

BandwidthOptimizer 有意绕过或刷新那些优化可能会改变可观察时序或顺序的数据包和状态。这包括协议转换、强时序边界、陈旧的传输时期、不安全的服务器绑定载体大小、选定的兼容性案例,以及直接传递比包装更安全的数据包。

支持并测试了 Velocity 代理设置,但代理切换和重连行为可能会暴露任何传输层中的时序敏感 Bug。报告代理问题时,请包含客户端日志、后端服务器日志、代理日志以及生成的 BandwidthOptimizer 报告文件。

限制

  • 客户端和服务器都必须安装此模组。
  • 结果因整合包、在线人数、流量来源和活动模式而异。
  • 已压缩、加密或接近随机的数据流(如 WATUT/YSM 风格的存在或模型数据)可能几乎没有额外的压缩收益。
  • 某些数据包被有意直接发送,因为优化它们的成本可能高于节省的成本,或可能带来兼容性风险。
  • 大型登录或重连高峰即使经过压缩,仍可能产生网络压力。
  • BandwidthOptimizer 减少网络流量;它不直接优化 FPS、TPS、世界生成、数据库延迟或代理路由。

报告问题

报告问题时,请包含:

  • Minecraft 版本、加载器和 BandwidthOptimizer 版本。
  • 是否使用了像 Velocity 这样的代理。
  • 问题发生时间附近的客户端日志和服务器日志。
  • 如果问题涉及服务器切换或重连,请提供代理日志。
  • 如果可用,请提供 latest-source-report.md 和 latest-bypass-report.md。
  • 如果报告了数据包解码器错误,请提供解码器转储文件。
  • 整合包名称或主要网络密集型模组的简短列表。

致谢

感谢服务器所有者、整合包维护者和玩家,他们提供了来自重模组化服务器的日志、数据包转储、兼容性报告和真实流量样本。正是这些报告使优化和兼容性规则变得实用,而非停留在理论层面。

许可证

此项目根据 GNU LGPL 2.1-only 许可证授权。