SwarmDrop

核心概念

配对邀请、DHT 在线记录、NAT 穿透与自动选路的工作原理。

理解这几个概念,就理解了 SwarmDrop 如何在没有中央服务器的情况下让两台设备相遇并直传。

整体架构

设备身份

每台设备首次启动时生成一对 Ed25519 密钥。公钥派生出全网唯一的设备 ID,是设备在网络中的地址; 私钥用于签名与加密协商,永不离开本机——桌面端存在应用数据目录下仅本人可读的文件里, 移动端交给系统安全存储(细节与它防什么、不防什么见安全模型)。

配对邀请

跨网络场景下,两台设备彼此并不知道对方的设备 ID,这时用一次性邀请牵线:

  • 发起方生成一条自包含的邀请链接 https://swarm-apps.github.io/SwarmDrop/p/#…,里面已经带上了自己的设备 ID 与可拨地址。
  • 邀请以链接分享,或渲染成二维码让对方扫——两者是同一字符串的不同载体。
  • 邀请带 Ed25519 签名(防篡改)、128-bit capability(防猜测)和有效期, 且只能被消费一次。用过即失效,不会留下长期可复用的凭据。

因为邀请自带地址,多数情况下不必再查 DHT 就能直接拨通。

DHT 的角色

Kademlia DHT 不用来枚举设备列表:网络里设备太多,且无法预判连接质量。 它只承担一件事——已配对设备的在线记录:设备上线时发布一条自己的可拨地址记录, 对端在直连失败时据此重新找到你。记录不携带任何设备信息。

NAT 穿透与自动选路

知道对方 PeerId 后,连接按这个顺序推进,自动选最快可用路径:

  1. 直连:双方都在公网时直接握手。
  2. DCUtR 打洞:借中继协调时序,在两侧 NAT 上同时打洞,成功则升级为直连。
  3. Relay 中继:打洞失败时,流量经中继节点转发。由于端到端加密,中继看不到明文。

局域网内则完全不用 DHT:mDNS 直接发现同网设备,延迟最低。

引导节点

新节点要加入 DHT 网络,需要一个已知的入口,即引导节点。 SwarmDrop 自带一个公共引导节点,你也可以自建,连发现层都不依赖第三方。

On this page