
此仓库是公共镜像。所有开发都在别处进行。
要理解该系统的基础哲学和目标,请阅读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部分。
此仓库中的Python代码是Reticulum的参考实现。Reticulum协议完全且权威地由该参考实现及其相关手册定义。由Mark Qvist维护,其Reticulum身份标识为<bc7291552be7a58f361522990465165c>。
目前没有,也永远不会存在任何二级协议规范衍生品。你无法获得比可执行、功能完备、可测试、已部署并在全球24/7运行的规范更好的规范。
对于Reticulum,没有也永远不会有一个单独的衍生“正式规范”、“RFC”或任何类似的东西:
参考实现就是最终、权威的规范。
与Reticulum协议的兼容性定义为与此参考实现具有完全的互操作性以及足够的功能对等。任何实现此目标的特定协议实现就是Reticulum。任何未实现此目标的都不是Reticulum。
参考实现遵循Reticulum许可证。
Reticulum协议于2016年奉献给公共领域。
如果你想快速了解Reticulum能做什么,请查看手册的使用Reticulum的程序部分,或以下资源:
rnphone程序。几乎任何能够支持至少半双工信道、吞吐量大于每秒5比特且MTU为500字节的介质。数据无线电、调制解调器、LoRa无线电、串行线、AX.25 TNC、业余无线电数字模式、WiFi和以太网设备、自由空间光链路以及类似系统都是Reticulum可以使用的物理设备类型的例子。
一种名为RNode的开源LoRa接口专为与Reticulum配合使用而设计。你可以自己构建,也可以购买完整的收发器,只需USB连接主机即可。
Reticulum也可以封装在现有IP网络上,因此没有什么能阻止你通过有线以太网、本地WiFi网络或互联网使用它,它在这些网络上同样可以正常工作。事实上,Reticulum的优势之一是它能够轻松地将不同介质连接成一个自配置、弹性和加密的网格,利用任何可用的基础设施混合。
例如,可以设置一个同时连接到LoRa无线电、分组无线电TNC和WiFi网络的树莓派。配置好接口后,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 对等体的基本连接。默认配置文件中包含了一些示例和创建更复杂配置的参考。
如果您的系统上安装了旧版本的 `pip`,您可能需要先使用 `pip install pip --upgrade` 进行升级。如果您尚未安装 `pip`,可以使用系统的软件包管理器(例如 `sudo apt install python3-pip` 或类似命令)进行安装。
有关如何通过多种介质(如分组无线电或 LoRa、串口,或通过使用 UDP 和 TCP 接口的快速 IP 链路和互联网)扩展通信的更多详细示例,请参阅 [Reticulum 手册](https://markqvist.github.io/Reticulum/manual/) 中的 [支持的接口](https://markqvist.github.io/Reticulum/manual/interfaces.html) 部分。
## 包含的实用工具
Reticulum 包含一系列有用的实用工具,用于管理您的网络、查看状态和信息,以及执行其他任务。您可以在 [Reticulum 手册](https://markqvist.github.io/Reticulum/manual/) 的 [包含的实用程序](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) 部分了解有关这些程序的更多信息。
- 系统守护进程 `rnsd`,用于将 Reticulum 作为始终可用的服务运行
- 接口状态实用工具 `rnstatus`,显示接口信息
- 路径查找和管理工具 `rnpath`,允许您查看和修改路径表
- 诊断工具 `rnprobe`,用于检查与目标节点的连接性
- 简单的文件传输程序 `rncp`,使系统之间轻松传输文件
- 身份管理和加密实用工具 `rnid`,允许您管理身份并加密/解密文件
- `rnsh` 程序允许您与远程系统建立完全交互式的 shell 会话
- 远程命令执行程序 `rnx`,允许您运行简单的命令和程序,并从远程系统检索输出
- `rngit` 程序提供了一个完整的多仓库 Git 节点,用于通过 Reticulum 提供仓库服务
- 附带的 `git-remote-rns` 助手允许您通过 Reticulum 与 Git 仓库交互
所有工具(包括 `rnx` 和 `rncp`)即使在极低带宽的链路上(如 LoRa 或分组无线电)也能可靠且良好地运行。如需通过 Reticulum 使用全功能远程 shell,还请查看 [rnsh](https://github.com/acehoss/rnsh) 程序。
## 支持的接口类型和设备
Reticulum 实现了一系列通用接口类型,涵盖了 Reticulum 可以运行的大多数通信硬件。如果您的硬件不受支持,[实现自定义接口模块](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces) 非常简单。
我们欣然接受自定义接口的拉取请求,前提是它们通常有用且在真实世界使用中经过充分测试。
目前,支持以下内置接口:
- 任何以太网设备
- 使用 [RNode](https://unsigned.io/rnode/) 的 LoRa
- 分组无线电 TNC(带或不带 AX.25)
- KISS 兼容的硬件和软件调制解调器
- 任何带有串口的设备
- 基于 IP 网络的 TCP
- 基于 IP 网络的 UDP
- 通过 stdio 或管道的外部程序
- 通过 stdio 或管道的自定义硬件
## 性能
Reticulum 的目标是覆盖一个非常宽的可用的性能范围,但优先考虑在低带宽介质上的功能和性能。目标是提供从每秒 250 比特到每秒 1 吉比特的动态性能范围(在普通硬件上)。
目前,可用的性能范围约为每秒 150 比特到每秒 500 兆比特,比这更快的物理介质尚未饱和。超出当前水平的性能计划在未来的升级中实现,但目前不是高度优先的事项。
## 当前状态
所有核心协议功能均已实现并运行,但随着真实世界使用的探索和理解,可能会添加更多功能。API 和线格式可以认为是稳定的。
## 依赖项
默认 `rns` 包的安装只需要两个外部依赖项,如下所列。几乎所有系统和发行版都有这些依赖项的现成包,当使用 `pip` 安装 `rns` 包时,它们也会被下载并安装。
- [PyCA/cryptography](https://github.com/pyca/cryptography)
- [pyserial](https://github.com/pyserial/pyserial)
在更不寻常的系统中,以及在少数罕见情况下,可能无法安装甚至编译上述一个或多个模块。在这种情况下,您可以改用 `rnspure` 包,该包安装时无需外部依赖项。请注意,`rns` 和 `rnspure` 包的内容是*相同的*。唯一的区别是 `rnspure` 包在安装时不列出任何依赖项。
无论 Reticulum 如何安装和启动,它只会在*需要*且*可用*时加载外部依赖项。例如,如果您想在无法支持 [pyserial](https://github.com/pyserial/pyserial) 的系统上使用 Reticulum,完全可以使用 `rnspure` 包,但 Reticulum 将无法使用基于串口的接口。所有其他可用模块仍会在需要时加载。
**请注意!** 如果您在无法支持 [PyCA/cryptography](https://github.com/pyca/cryptography) 的系统上使用 `rnspure` 包运行 Reticulum,请务必阅读并理解本文档的 [加密原语](#cryptographic-primitives) 部分。
## 引导连接
Reticulum 并不是一个您订阅的服务,也不是一个您“加入”的单一全球网络。Reticulum 提供了通过网络本身发现可用公共接口的功能,并且更广泛的社区提供了各种公开入口点的目录,以引导连接。
要了解如何通过 Reticulum 建立初始连接,请阅读手册中的 [引导连接](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) 部分。
如果您已经大致了解其工作原理,可以使用社区运营的网站(如 [directory.rns.recipes](https://directory.rns.recipes/) 和 [rmap.world](https://rmap.world))查找用于初始连接到全球分布式 Reticulum 骨干网的接口定义。
## 公共测试网
***重要!** 历史上,Reticulum 项目本身曾提供一个面向开发者的测试网。随着全球 Reticulum 节点和入口点数量大幅增长,这个公共测试网(包括阿姆斯特丹测试网入口点)现已退役。如果您仍有依赖此入口点进行连接的实例,请转而使用分布式骨干网。Reticulum 现在包含完整的网络内接口发现和连接引导系统。阅读手册中的 [引导连接](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) 部分以获取指导。*
## 支持 Reticulum
为了实现这一点,我需要您的帮助。请通过以下渠道之一捐款,支持开放、免费和私有通信系统的持续开发:
- 门罗币: ```
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
比特币 ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6
- 以太坊 ```
0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E
Liberapay:https://liberapay.com/Reticulum/
Reticulum 使用一套简单、高效、强大且经过充分测试的密码学原语,这些原语具有广泛可用的实现,既可用于通用 CPU,也可用于微控制器。
选择这套特定原语的主要考虑因素之一是,它们可以在几乎所有当前计算平台上 安全地 实现,且陷阱相对较少。
此处列出的原语 具有权威性。任何声称是 Reticulum 但未使用这些确切原语的,都不是 Reticulum,并且可能是故意被入侵或弱化的克隆。所使用的原语包括:
os.urandom() 或更优方式生成 IV在默认安装配置中,X25519、Ed25519 和 AES-256-CBC 原语由 OpenSSL(通过 PyCA/cryptography 包)提供。哈希函数 SHA-256 和 SHA-512 由标准 Python hashlib 提供。HKDF、HMAC、Token 原语以及 PKCS7 填充函数始终由以下内部实现提供:
Reticulum 还包含了所有必要原语的纯 Python 完整实现。如果启动 Reticulum 时系统上没有 OpenSSL 和 PyCA,Reticulum 将转而使用内部纯 Python 原语。一个次要后果是性能,OpenSSL 后端要 快得多。然而最重要的后果是,使用未经过与 OpenSSL 同等程度的审查、测试和评审的原语,可能会导致安全性下降。
请注意,默认情况下,安装 Reticulum 将 要求 自动安装 OpenSSL 和 PyCA(如果尚未安装)。只有用户特别覆盖此依赖要求时,才可能使用纯 Python 原语,例如通过安装 rnspure 包代替正常的 rns 包,或直接从本地源代码运行。
如果您想使用内部纯 Python 原语,强烈建议 您充分理解这样做所带来的风险,并做出明智的决定,判断这些风险是否对您可接受。
Reticulum 是一个相对较新的软件,应视为如此。尽管其构建时将密码学最佳实践置于首位,但它 尚未 经过外部安全审计,很可能存在隐私或安全漏洞。如果您希望提供帮助,或赞助一次审计,请与我们联系。
Reticulum 的存在离不开其构建所依赖的众多开源工作、所有参与者的贡献,以及多年来支持该项目的每一个人。感谢所有帮助过的人,非常感谢。
许多其他模块和项目要么是 Reticulum 的一部分,要么被 Reticulum 使用。衷心感谢以下项目的作者和贡献者: