咯咯网

咯咯网

适用于Minecraft的RFC 1149(IP over Avian Carriers)——数据包由鸡在发送和接收方块之间物理搬运。设计上具有丢包特性。

一个用于 Minecraft 的 RFC 1149 "IP 数据报在鸟类载体上的传输标准" 实现。

演示

数据包通过 鸡 在方块之间物理搬运。它们天生不会飞行、无法导航绕过障碍物、也难以抵御攻击的特性,完美复现了真实的 IP 丢包与延迟——障碍物、水体、怪物以及意外的玩家攻击都会成为网络故障的合理来源。

这个 Forge 模组首先是一个玩笑,其次才是一个动手实践的沙盒,让你思考有损网络、前向纠错和重传协议在依赖物理(而非光纤)运行时,其真实行为究竟如何。


内容介绍

概念 RFC 1149 术语 CluckNet 实现
发送端主机 源网关 数据包发送器 方块(红色顶面)
接收端主机 目标网关 数据包接收器 方块(蓝色顶面)
数据报 IP 数据报 鸡身上的 CompoundTag 载荷
鸟类载体 载体 数据包鸡 实体
MTU 1500 字节 16 字节(故意设小,使分块可见)
ACK / NACK TCP ACK 一只返回的鸡,携带丢失分块的索引信息
前向纠错 (RFC 1149 中无此概念) 每条消息附带一个 XOR 奇偶校验块

使用方法(60 秒上手)

  1. 放置一个 数据包发送器 和一个 数据包接收器,位置需确保鸡能在其间行走(最大单步高度为 1,路径上不能有水体)。
  2. 潜行右键点击接收器,再潜行右键点击发送器——两者即配对成功。
  3. 在 书与笔 中写一条消息(不要 署名),并将其放入发送器的 GUI 中。
  4. 观察鸡群在方块世界中行走,搬运着你的数据分块。
  5. 当重组成功时,接收器会返还给你一本 成书。
  6. 如果有鸡死亡,你会获得一个纸物品,上面显示丢失分块的预览信息。如果死亡过多,会自动发回一只 NACK 鸡,发送器会重传丢失的分块。

/clucknet stats 命令可打印全流程的数据包计数器(数据 / 奇偶校验 / 重传 / NACK / 鸡死亡数)。

为什么特别选择鸡?

  • 鸡 不会飞行。它们会滑行,会被 1.5 格高的台阶卡住,会在水中淹死,还会被狼咬死。
  • 发送器和接收器之间 13 格的距离就是 吞吐瓶颈,也是丢包的持续来源——这正是你希望从“尽力而为”传输层得到的效果。

交付语义

接收器采用类似 TCP 的交付方式:只要接收到足够重构消息的分块,消息即交付。 它不会等待所有预期的鸡。

  • 全部 N 个数据分块到达 → 重构并交付。晚到的奇偶校验块被作为冗余数据静默丢弃。
  • N − 1 个数据分块 + 奇偶校验块到达 → 通过 XOR 恢复缺失分块并交付。同一条消息后续到达的任何数据分块将被丢弃。
  • 60 秒内未接收到足够的分块 → 广播 incomplete;该消息 ID 会被额外记住 60 秒,以避免非常晚到的分块被误认为新消息。

与之对应的结果:从视觉上看,聊天消息通常 在所有鸡走进来之前 就已出现。之后到达的鸡被识别为冗余,并被静默丢弃。这标志着网络正在以最大吞吐量运行。

要求

  • Minecraft 1.20.6
  • Minecraft Forge 50.1.x
  • Java 21(如果缺失,Gradle 会在首次运行时自动下载)

CluckNet 当前仅支持 1.20.6 / Forge。欢迎通过 PR 将其移植到 1.20.1 (Forge) 或 1.21.x (NeoForge)——详情请参阅 GitHub 仓库。

更多信息

许可证

MIT。详见 LICENSE。