Yggdrasil:一种完全去中心化的实验性紧凑型路由方案
About
Blog
Documentation
FAQ
GitHub
关于
Yggdrasil 是一种实验性的紧凑型路由方案,它是完全去中心化的,并且只需要少量状态即可工作。它主要是一种最短路径方案,网络将尝试找到到达目的地的最直接路径。
节点是平等的参与者,并使用peering connections连接到彼此,这些连接携带网络流量。Peering 可以在任何 IP 网络上建立——无论是直接的有线或无线链路、局域网甚至是 Internet。在某些情况下,附近的设备也可以使用多播发现自动设置 peering。
Yggdrasil 网络上的所有节点都是路由器,并将自动传递流量,以帮助其尽可能地靠近目的地。这意味着,即使在连接稀疏的网络中,所有节点都可以被该网络上的所有其他节点访问。即使节点位于 NAT 之后也没关系——一旦建立 peering,流量就会在该 peering 上双向流动。
Yggdrasil 还被设计为能够容忍网络中的变化。例如,如果链路发生故障,网络将自我修复并使用其他链路来路由流量(如果可用)。这使得它适合在 mesh networks 中使用,在 mesh networks 中,网络拓扑结构可能会而且经常会发生变化。
网络上的每个节点都具有与位置无关的加密身份,并且在我们当前的实验性实现中,稳定的 IPv6 地址是从该密钥生成的。这允许支持 IPv6 的应用程序在 Yggdrasil 上工作,而无需进行大量修改。该地址是完全可移动的,并且随着节点在网络中移动而保留在该节点上。
为什么选择 Yggdrasil?
当今存在的许多网络本质上是分层的,需要大量的手动配置,并且通常依赖于一定程度的中心化才能扩展。这通常使得快速、临时地设置网络变得困难或不切实际,因此大多数人严重依赖他们的 Internet 服务提供商 (ISP)。 另一方面,Yggdrasil 需要非常少的配置才能工作,并且可以使用 Yggdrasil 快速轻松地构建完整的多跳网络。 节点不需要从中央机构分配地址;他们可以生成自己的加密身份,更重要的是,他们可以在漫游时保留此地址。一旦建立 peering connections,路由信息就会在整个网络中快速且自动地传播。 这种在所有网络节点之间提供完整的端到端可路由性的能力意味着 Yggdrasil 可能是真正的边缘计算场景以及真实世界的 mesh networks 的一项支持技术,因为它不依赖于 Internet 才能运行。
Yggdrasil 与其他项目相比如何?
Yggdrasil 经常与其他试图创建匿名覆盖网络的项目进行比较,例如 Tor、I2P、Lokinet 等。这些项目与 Yggdrasil 非常不同,部分原因是它们试图保证匿名性。Yggdrasil 不旨在提供并且不保证匿名性。这些项目也有意地按设计而非按方便性进行叠加,而 Yggdrasil 今天仅作为叠加网络存在,因为它是一种测试设计的简单方法。 Yggdrasil 经常与 VPN 项目(例如 Wireguard、Tailscale、Nebula 和 Zerotier)进行比较。虽然可以使用 Yggdrasil 来构建私有网络和/或点对点 VPN 链路,但这并不是我们明确的主要目标。重要的是要理解,将私有网络的任何单个节点连接到另一个网络(例如公共 peer)将导致两个网络桥接在一起。 最后,Yggdrasil 没有原生出口节点,也没有任何出口节点的概念,用于提供对公共 Internet 或其他网络的访问。这可以使用代理或基于 Yggdrasil 的其他隧道解决方案来实现,但这并不是我们明确旨在提供的东西。
该项目的状态如何?
Yggdrasil 目前是一个 alpha 级别的研究项目,正在进行开发但会积极维护。我们预计,未来的 beta 质量版本应该知道足够多,以便在面对 wire format 更改时保持兼容性,并且功能基本完整。如果出现“稳定”的 1.0 版本,它可能会具备完整的功能,不期望未来的 wire format 发生更改,并且没有已知的严重错误。 该项目的真正目标是测试 Yggdrasil 路由方案的可扩展性,我们正在使用我们的overlay network implementation 来实现这一点。在现实世界中研究网络的行为最容易通过大量运行该软件并加入公共测试网络的参与者来实现。我们已尽力支持尽可能多的平台,并有许多您可以连接到的public peers 以加入网络,因此请随意尝试。 也就是说,我们建议不要在 Yggdrasil 上运行任何关键任务型工作负载,并且仅依靠 Yggdrasil 来应对任何生死攸关的情况可能很危险。可能存在我们尚不知道的故障模式! 该项目可能会达到许多可能的结果:
- 该项目可能达到一个相当稳定的状态,但永远不会吸引足够多的用户
- 该项目可能会吸引足够多的用户,但在此过程中会揭示固有的设计缺陷(也许是未来项目或协议版本的学习练习)
- 该项目最终可能会完美运行,即使网络不断增长,在这种情况下,值得考虑编写更好优化的实现和/或将重要部分转移到其他项目中