Skip to content

核心概念 ​

当前状态

设计阶段文档。下面描述的模型还在演进,欢迎在 Issues 里提意见。

整套系统只有三个需要理解的概念:Node、能力、路径。

Node ​

Meshora 把每一台设备抽象成一个 Node。Node 不只是连接的端点,它还是能力的载体。

一个 Node 由三部分定义:

组成说明
身份一对密钥。公钥就是这个 Node 的身份,不依赖 IP、主机名或账号。私钥永远不离开设备。
能力这个 Node 愿意为网络提供什么(见下)。一个 Node 可以同时提供多项。
端点它当前可以被访问到的地址集合。会随网络环境变化,由系统持续更新。

公钥即身份带来一个直接好处:认证和加密用的是同一套密钥。不需要额外的证书体系, 也不存在"IP 变了就认不出来"的问题 —— 换网络只是端点变了,身份没变。

能力 ​

能力是 Node 对整张网络的声明:我能做什么。这是长期的模型,1.0.0 只用到其中和联机有关的部分:

能力1.0.0
直连(P2P)用 —— 能打洞就直连
中继(Relay)用 —— 打不通时兜底
虚拟局域网(含广播 / 组播转发)用 —— 1.0.0 的核心,见局域网联机
低延迟档位用 —— 选路时抖动优先
网络出口(Gateway)不做,1.0 之后
按应用分流不做,1.0 之后

关键点是能力可以组合,也可以只提供一部分。放到联机里:

  • 每个玩家的电脑:加入虚拟局域网,能直连就直连
  • 一台有公网 IP 的服务器:当中继,它自己不参与联机

能力不是权限,是供给。谁能用某个 Node 的某项能力,由 ACL 另行决定。

路径 ​

路径是两个 Node 之间流量实际走的那条线。同一对 Node 之间,路径会随时间变化:

路径类型何时使用
直连(Direct)NAT 穿透成功,双方能互相到达。延迟最低,不消耗任何第三方带宽。
中继(Relay)穿透失败或还没成功时的回退。可用性最高,延迟取决于中继位置。

系统持续探测每条候选路径的延迟、丢包、抖动、带宽,并据此切换。 切换对上层是透明的 —— 连接不会断,因为加密会话建立在 Node 身份之上,而不是绑在某个 IP 和端口上。

这一点值得强调:路径是会变的,连接不会断。 从 Wi-Fi 切到蜂窝网, 底层端点全换了,但两个 Node 之间的会话仍然成立。

三者的关系 ​

text
Node  ──声明──▶  能力
  │                │
  └──之间存在──▶  路径  ◀──由能力和网络状况共同决定

Node 是主体,能力是它的供给,路径是系统根据供给和实时网络状况算出来的结果。 用户配置的是前两者,第三者由系统负责 —— 这就是"自动网络"的含义。

下一步:架构 讲这套模型怎么落到具体实现上。

以 MIT 协议发布 · 首页背景由 Paper Shaders 驱动(Apache-2.0)