核心概念
当前状态
设计阶段文档。下面描述的模型还在演进,欢迎在 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 是主体,能力是它的供给,路径是系统根据供给和实时网络状况算出来的结果。 用户配置的是前两者,第三者由系统负责 —— 这就是"自动网络"的含义。
下一步:架构 讲这套模型怎么落到具体实现上。