
Reticulum v1.4.2
基于密码学的网络协议栈,用于通过 LoRa、分组无线电、WiFi 及各种媒介构建不可阻挡的网络。
Reticulum 网络栈 

[!WARNING]
目前有大量仓促推出、错误、可疑、直接有害,且在大多数情况下完全由 LLM 生成的 Reticulum 实现、“文档”、“指南”和面向用户应用程序的仿冒品,正以光鲜亮丽但最终具有误导性或彻头彻尾欺骗性的宣传进行营销。有关更详细的信息,请参阅手册中 Brandolini 参考章节的相关部分。已知良好的社区实现列在本 readme 的社区实现部分。有关 Reticulum 社区认可的软件和项目,请参阅手册中的使用 Reticulum 的程序章节。
从 RNS 源代码或文档衍生的机器生成内容(例如“实现”、出售的“指南”等),在若干有据可查的案例中,违反了授予复制和分发权利的开源许可证。
此类项目所作出的任何版权主张或授予许可的声明(Apache、GPL 等)均为无效授予。违规者本身以及所有使用侵权衍生品的下游项目,均对法律后果承担直接和个人责任。
请勿使用这些“项目”,它们对我们过去十年来精心构建的整个生态系统构成危害。

本仓库是一个公开镜像。所有开发工作都在其他地方进行。
要理解本系统的基本理念和目标,请阅读 Reticulum 之禅。
Reticulum 是基于密码学的网络栈,用于使用现成硬件构建局域网和广域网。它甚至可以在极高延迟和极低带宽下运行。Reticulum 允许你使用现成的工具构建广域网,并提供端到端加密和连接、发起者匿名、自动配置的密码学支持多跳传输、高效寻址、不可伪造的送达确认等。
Reticulum 的愿景是让任何人都能成为自己的网络运营商,并以低廉且简便的方式,用无数独立、可互连且自主的网络覆盖广阔区域。Reticulum 不是 一个网络。它是用于构建数千个网络的工具。没有终止开关、监视、审查和控制的网络。可以自由互操作、关联和解除关联,且无需中央监管的网络。为人类服务的网络。为人民服务的网络。
Reticulum 是一个完整的网络栈,不依赖 IP 或更高层,但也可以使用 IP 作为 Reticulum 的底层载体。因此,通过互联网或私有 IP 网络隧道传输 Reticulum 是轻而易举的。
由于不依赖传统网络栈,节省下来的开销被用于实现一个直接构建在密码学原则之上的网络栈,从而即使在开放且无需信任的网络中也能实现韧性和稳定功能。
无需内核模块或驱动程序。Reticulum 完全在用户空间运行,几乎可以在任何运行 Python 3 的系统上运行。
阅读手册
Reticulum 的完整文档可在 markqvist.github.io/Reticulum/manual/ 获取。
你也可以下载 Reticulum 手册 PDF 版或 EPUB 格式电子书。
更多信息,请参阅 reticulum.network 和 wiki 的 FAQ 部分。
显著特性
- 无需协调的全局唯一寻址和标识
- 在异构载体上完全自配置的多跳路由
- 在异构拓扑上灵活扩展
- Reticulum 可以在任意物理介质和拓扑组合上承载数据
- 低带宽网络可以与大型高带宽网络共存并互操作
- 发起者匿名,通信时不暴露你的身份
- Reticulum 不在任何数据包中包含源地址
- 以非对称 X25519 加密和 Ed25519 签名为所有通信的基础
- 基础 Reticulum 身份密钥是 512 位椭圆曲线密钥集
- 所有通信类型均提供前向保密,无论是单个数据包还是链路
- Reticulum 对加密令牌使用以下格式:
- 每包和链路临时密钥,源自 Curve25519 上的 ECDH 密钥交换
- AES-256 CBC 模式,带 PKCS7 填充
- 使用 SHA256 的 HMAC 进行认证
- IV 通过 os.urandom() 生成
- 不可伪造的数据包送达确认
- 灵活且可扩展的接口系统
- Reticulum 包含大量内置接口类型
- 能够加载和使用用户或社区提供的自定义接口类型
- 轻松创建自己的自定义接口,以通过任何方式通信
- 在所有支持的接口类型上提供认证和虚拟网络分段
- 直观且易于使用的 API
- 比套接字 API 更简单易用,但更强大
- 使构建分布式和去中心化应用程序变得更加简单
- 可靠且高效地传输任意数量的数据
- Reticulum 可以处理几字节的数据或数 GB 的文件
- 排序、压缩、传输协调和校验和均自动完成
- API 非常易于使用,并提供传输进度
- 轻量、灵活且可扩展的请求/响应机制
- 高效的链路建立
- 建立加密且经过验证的链路总成本仅为 3 个数据包,共 297 字节
- 保持链路打开的成本低至每秒 0.44 比特
- 通过 Channel 和 Buffer 机制实现可靠的顺序交付
社区资源
此处列出的参考资料并非由 Reticulum 项目或其维护者运行、管理或审核。它们由社区中专注、独立的志愿者提供,以造福任何有兴趣进一步了解 Reticulum 的人。
如果你发现任何不再准确、不正确或只是不够最新的内容,请不要向这些资源的维护者提出要求或抱怨。相反,请自己承担起任务,通过参与并贡献你希望看到的改进来帮助改善,就像上述资源的创建者自己所做的那样。
参考实现
本仓库中的 Python 代码是 Reticulum 的参考实现。Reticulum 协议完全且权威地由该参考实现及其相关手册定义。它由 Mark Qvist 维护,其 Reticulum 身份标识为 <bc7291552be7a58f361522990465165c>。
目前不存在,也永远不会存在二阶协议规范衍生品。你无法获得比一个可执行、功能正常、可测试、已部署并在全球 24/7 运行的规范更好的规范。
不存在,也永远不会存在单独的、衍生的“正式规范”、“RFC”或任何类似 Reticulum 的东西:
参考实现就是最终、权威的规范。
与 Reticulum 协议的兼容性定义为与该参考实现具有完全互操作性以及足够的功能对等性。任何实现这一点的特定协议实现就是 Reticulum。任何未实现这一点的就不是 Reticulum。
参考实现根据 Reticulum 许可证授权。
Reticulum 协议于 2016 年贡献给公共领域。
社区实现
此处列出的实现已证明具有线路兼容性、足够的功能对等性、合理的安全和开发实践、长期承诺以及对实现质量的关注。此外,它们拥有至少 18 个月活跃开发的记录。
最重要的是,它们的开发者和维护者被社区认可为真正知道自己在做什么,并致力于改善整个 Reticulum 生态系统。
- Chad Atterman 的 microReticulum 是一个面向 32 位微控制器的 C++ 实现。
- Quad4 的 Reticulum-Go 是一个面向桌面、移动和嵌入式系统的 Go 实现。
如果你是未列于上述列表中的实现维护者,并认为它遵循同样严格的严谨性和承诺标准而值得纳入,你的提议将受到欢迎。
警告! 目前有大量仓促推出、错误、可疑、直接有害,且在大多数情况下完全由 LLM 生成的 Reticulum 实现(以及面向用户的应用程序)仿冒品,正以光鲜亮丽但最终具有误导性或彻头彻尾欺骗性的宣传进行营销和推广。其中大多数要么是快速吸引眼球或圈钱,完全未经审查、不兼容、没有维护或人工监督,积极试图分裂社区,或兼而有之。
有关此主题的更广泛信息,请阅读手册中的 Brandolini 参考章节(关于法律基础,请特别参阅无效授予)。该章节非常长、非常详细,是礼貌、审慎的分析,旨在作为关于这些问题的不断演进、分节的参考资料。
如果你更想阅读简短、未经过滤且相当愤怒的版本,它由针对该现象整体某一特定表现形式的实际回应组成,并作为示例使用,你可以阅读是的,我很愤怒。如果你能接受那种沟通方式,它以非常不同的语言传达了相同的观点。
Reticulum 核心维护者和开发者强烈建议不要使用任何此类“实现”。少数要么恶意、要么寻求关注、要么无能的人的欺骗性和自私行为已对开发者、节点运营者、用户以及社区和整个 Reticulum 项目造成了重大的损害以及时间和资源浪费。
我们善意但紧急地请求所有用户在评估使用上述未列出的任何实现的潜在可能性时,保持谨慎、常识和健康的怀疑态度;并接受选择这样做会将潜在损害的责任从不负责任或恶意的个人转移到你自己身上。
Reticulum 应用示例
如果你想快速了解 Reticulum 能做什么,请查看手册中的使用 Reticulum 的程序部分,或以下资源:
- LXMF 是构建在 Reticulum 之上的分布式、容忍延迟和中断的消息传输协议
- LXST 协议和框架通过 Reticulum 提供实时音频和信号传输。它包含用于构建基于语音的应用程序和硬件设备(例如
rnphone程序)的原语和实用工具,可用于构建硬件电话。 - 关于离网、加密且有韧性的网状通信平台,请参阅 Nomad Network
- Android、Linux、macOS 和 Windows 应用 Sideband 具有图形界面和许多高级功能,例如文件传输、图像和语音消息、实时语音通话、分布式遥测系统、地图功能以及完整的插件可扩展性。
- MeshChatX 是一个功能齐全的 LXMF 客户端,内置许多工具和功能,还支持图像和语音消息、文件传输和语音通话。它还包括用于浏览 Nomad Network 节点的内置页面浏览器。
- 你可以使用随附的 rnsh 程序通过 Reticulum 建立远程 shell 会话。
- 随附的 rngit 系统提供了通过 Reticulum 管理、托管、协作和交互 Git 仓库的完整解决方案。
Reticulum 可以在哪里使用?
几乎可以在任何能够支持至少半双工信道、吞吐量大于每秒 5 比特且 MTU 为 500 字节的介质上使用。数据电台、调制解调器、LoRa 电台、串行线路、AX.25 TNC、业余无线电数字模式、WiFi 和以太网设备、自由空间光链路以及类似系统,都是 Reticulum 可以使用的物理设备类型示例。
一种名为 RNode 的开源 LoRa 接口专为与 Reticulum 配合使用而设计。你可以自行构建,也可以购买完整的收发器,只需通过 USB、WiFi 或蓝牙连接到主机即可。
Reticulum 也可以封装在现有 IP 网络上,因此没有什么能阻止你在有线以太网、本地 WiFi 网络或互联网上使用它,它同样可以正常工作。事实上,Reticulum 的优势之一就是它能轻松地将不同介质连接成一个自配置、有韧性且加密的网状网络,使用任何可用的基础设施组合。
例如,可以设置一个同时连接到 LoRa 电台、分组无线电 TNC 和 WiFi 网络的 Raspberry Pi。一旦配置好接口,Reticulum 将处理其余工作,WiFi 网络上的任何设备都可以与网络 LoRa 和分组无线电侧的节点通信,反之亦然。
我该如何开始?
开始使用 Reticulum 网络栈的最佳方式取决于你想做什么。有关完整细节和示例,请查看 Reticulum 手册中的快速入门部分。
要在你的系统上简单地安装 Reticulum 及相关实用工具,最简单的方法是通过 pip。然后你可以启动任何使用 Reticulum 的程序,或使用 rnsd 实用工具将 Reticulum 作为系统服务启动。```bash
pip install rns
如果你使用的操作系统阻止普通用户通过 `pip` 安装软件包,你可以通过编辑 `~/.config/pip/pip.conf` 文件,并在 `[global]` 部分添加以下指令,使 `pip` 恢复正常行为:```text
[global]
break-system-packages = true
或者,你可以使用 pipx 工具在隔离环境中安装 Reticulum:```bash
pipx install rns
首次启动时,Reticulum 会创建一个默认配置文件,提供与本地可访问的其他 Reticulum 对等节点之间的基本连接。默认配置文件包含一些示例,以及创建更复杂配置的参考。