首页
/ Serval DNA 项目中的 Rhizome REST API 详解

Serval DNA 项目中的 Rhizome REST API 详解

2025-06-02 08:11:57作者:虞亚竹Luna

概述

在 Serval DNA 项目中,Rhizome 是一个创新的分布式内容存储和转发服务。与传统的中心化云存储不同,Rhizome 采用去中心化设计,通过网状网络中的节点间自发同步来实现内容分发。本文将深入解析 Rhizome 的 REST API 接口,帮助开发者理解其核心概念和使用方法。

核心概念

Rhizome 存储机制

Rhizome 采用独特的分布式存储方式:

  1. 本地存储:每个节点都维护自己的 Rhizome 存储(数据库),保存所有接收和插入的内容副本
  2. 无中心服务器:内容分散存储在网状网络的所有设备上
  3. 自动同步:当节点建立直接网络连接时,会自动交换内容列表并选择需要同步的内容

Bundle(数据包)结构

Rhizome 中的内容组织单元称为 Bundle,每个 Bundle 包含:

  1. Manifest(清单):包含元数据和签名
    • 元数据部分:键值对形式的各种字段
    • 签名部分:用于验证 Bundle 完整性的数字签名
  2. Payload(有效载荷):实际内容数据(可选)

Bundle 标识与版本控制

  1. Bundle ID (BID):256位 Curve25519 公钥,作为 Bundle 的唯一标识符
  2. Bundle 版本:64位无符号整数,用于版本控制
    • 高版本号自动覆盖低版本号
  3. Bundle Secret:生成 BID 的 Curve25519 私钥,用于签名验证

安全机制

  1. Rhizome Secret:每个身份独有的加密密钥
  2. Bundle Key (BK):可选字段,用于在不暴露身份的情况下恢复 Bundle Secret
  3. 签名验证:所有 Bundle 都使用其 Bundle Secret 进行签名

Manifest 详解

必需字段

每个有效的 Manifest 必须包含以下核心字段:

字段名 描述 格式
id Bundle ID 64位十六进制大写
version 版本号 ASCII十进制
filesize 有效载荷大小 ASCII十进制
service 创建 Bundle 的服务名 字符串
date 创建时间戳 Unix时间戳(毫秒)

可选字段

字段名 描述
sender 发送者 SID
recipient 接收者 SID
name 人类可读标识/文件名
crypt 是否加密(0/1)
BK Bundle Key
tail 日志类型 Bundle 的起始偏移量

签名格式

Manifest 签名采用特定二进制格式:

  1. 元数据与签名间用 NUL(0)字节分隔
  2. 签名块以类型字节开头
  3. 目前仅支持类型23(0x17)的96字节 Curve25519 签名

特殊 Bundle 类型

Journal(日志)

Journal 是一种特殊的 Bundle 类型,具有以下特性:

  1. 只能追加或截断内容,不能修改现有内容
  2. 通过 tail 字段标识已截断的数据量
  3. 同步时只传输新增部分,节省带宽
  4. 存储时会自动回收被截断部分的空间

REST API 详解

通用特性

内容类型

Rhizome API 使用特殊的内容类型:

  1. rhizome/manifest:用于 Manifest 数据

    • 当前仅支持 text+binarysig 格式
    • Content-Type: rhizome/manifest; format=text+binarysig
  2. rhizome/bid:用于 Bundle ID

    • 当前仅支持 hex 格式
    • Content-Type: rhizome/bid; format=hex
  3. rhizome/bundlesecret:用于 Bundle Secret

    • 当前仅支持 hex 格式
    • Content-Type: rhizome/bundlesecret; format=hex

响应头

所有涉及单个 Bundle 的操作都会返回以下响应头:

Serval-Rhizome-Result-Bundle-Status-Code: <状态码>
Serval-Rhizome-Result-Bundle-Status-Message: <状态信息>
Serval-Rhizome-Result-Payload-Status-Code: <有效载荷状态码>
Serval-Rhizome-Result-Payload-Status-Message: <有效载荷状态信息>

实际应用场景

内容分发

  1. 应用程序只需将文件插入本地 Rhizome 存储
  2. Rhizome 自动负责在网络中分发内容
  3. 接收方节点会自动获取并存储内容副本

版本更新

  1. 创建新版本的 Bundle(相同 BID,更高版本号)
  2. 新版本会自动替换网络中的旧版本
  3. 确保所有节点最终获得最新内容

安全通信

  1. 使用 crypt=1 标记加密内容
  2. 结合 recipient 字段实现端到端加密
  3. 只有目标接收者可以解密内容

总结

Serval DNA 的 Rhizome REST API 提供了一套完整的分布式内容存储和分发解决方案。通过理解 Bundle 结构、Manifest 格式和安全机制,开发者可以构建出能在不稳定网络环境中可靠工作的分布式应用。Rhizome 的去中心化设计使其特别适合应急通信、偏远地区网络等场景。

登录后查看全文
热门项目推荐