9 个版本 (5 个破坏性更新)
0.6.1 | 2021 年 8 月 6 日 |
---|---|
0.6.0 | 2021 年 1 月 11 日 |
0.5.0 | 2020 年 5 月 2 日 |
0.4.0 | 2019 年 4 月 15 日 |
0.1.0 | 2018 年 12 月 11 日 |
#3 in #kademlia
每月 40 次下载
用于 dsf-daemon
105KB
2.5K SLoC
rust-kad
受 dtantsur/rust-dht 深度启发的 Kademlia DHT 的泛型/基于 futures 的实现,旨在提供一个简单易用、经过良好测试、依赖性低、基于 futures 的 API,用于使用 DHT 并具有任意通信机制和编码
用法
配置
- k - 系统级复制参数,定义桶大小和搜索广度
- 并发性 - 系统级并发参数,同时运行的并行操作数量
状态
进行中
组件
-
接收消息
- 更新适当的 k-桶
- 如果桶不满则添加节点
- 如果桶满则存储挂起项并 ping 最旧的(如果 > 看到时间)
- 对 Ping 响应 NoResult
- 对 FindNodes 响应 NodesFound
- 对 FindValues 响应 NodesFound 或 ValuesFound
- 对于新节点,如果自己的 ID 比已知的附近节点更接近密钥,则发送 STORE RPC
- 更新适当的 k-桶
-
搜索 - 大多数操作的共同点
- 选择 alpha 最接近的节点
- 向所选节点子集发送 RPC
- 如果没有合适的响应,则扩展到 k 个最接近的节点
- 递归直到从 k 个最接近的节点收到响应
-
查找节点
- 使用 FIND_NODE RPC 进行搜索
- 返回节点
-
查找值
- 使用 FIND_VALUE RPC 进行搜索
- 收集值
- 值返回后,在观察到的最接近节点存储 (k, v) 对,该节点未返回值
-
存储值
- 使用 FIND_NODE RPC 进行搜索
- 向 k 个最接近的节点发送 STORE RPC
-
连接
- 将已知节点插入适当的 k-桶
- 对自己 ID 执行 Find Node 查找
- 刷新比最近邻更远的所有 k-桶
-
维护
- 删除无响应/旧的联系人
- 过期值
- 定义时间后的基本过期
- 缓存过期与当前节点和最接近密钥 ID 节点之间的节点数成指数反比
- 刷新 k-桶
- 在可配置周期内未查询过的任何桶中查找FIND_NODES到随机ID
- 重新发布值
- 以定义的周期(每小时)将RPC存储到K个节点
- 除非在同一周期内收到存储RPC
-
桶
- 实现桶拆分(如果比现有方法更有效?)
- 对维护有用/不需要消息未使用的桶
- 为维护目的在桶中反向/生成随机ID
- 实现桶拆分(如果比现有方法更有效?)
问题
- FindValues通常如何处理每个ID可以有多个值的情况?
- 是否存在当源ID比本地ID更接近请求者ID时,STORE有效的情况?
- 这似乎可以忽略
依赖关系
~6MB
~101K SLoC