4 个版本 (2 个破坏性版本)

0.3.0 2021年4月23日
0.2.2 2021年3月2日
0.2.1 2021年1月26日
0.1.0 2021年1月14日

#remote-peer 中排名 6

每月下载量 25
用于 libp2p-rs

MIT 许可证

720KB
13K SLoC

libp2prs-kad

rust-libp2p和go-libp2p之间kad实现的比较

Kbuckets,又称路由表

go

  • 桶根据需要扩展

  • 无multiaddr,依赖于peerstore

  • 插入

    • 初始化,用所有已连接的节点填充kbuckets
    • 修复低节点
    • 当远程节点向我们发送RPC时
    • 当我们迭代查询远程节点并成功时

    // TryAddPeer尝试将节点添加到路由表。// 如果节点已在路由表中且之前已查询过,此调用为空操作。// 如果节点已在路由表中但之前未查询过,我们将它的LastUsefulAt值设置为当前时间。这需要完成,因为我们第一次连接到它们时不会标记节点为"有用的"(通过设置LastUsefulAt值)。// // 如果节点是一个queryPeer,即我们查询过它或它查询过我们,我们将LastSuccessfulOutboundQuery设置为当前时间。// 如果节点只是一个我们连接到/它连接到我们而没有任何DHT查询的节点,我们将其视为没有LastSuccessfulOutboundQuery。// // // 如果节点所属的逻辑桶已满且不是最后一个桶,我们尝试用一个新节点替换该桶中LastSuccessfulOutboundQuery超过最大允许阈值的现有节点。如果在那个桶中没有这样的节点,我们不会将节点添加到路由表,并返回错误"ErrPeerRejectedNoCapacity"。

    返回一个布尔值,如果对等方是新添加到路由表的,则设置为true,否则为false。// 它还返回在对等方添加到路由表过程中发生的任何错误。如果错误不是nil,// 布尔值将始终为false,即如果对等方不在路由表中,则不会将其添加到路由表。// // 返回值为false且error=nil表示该对等方已在路由表中。

  • 删除

    • 当发现远程对等方未对出站查询做出响应时
    • 刷新管理器:无法连接到远程对等方
    • handlePeerChangeEvent:远程被认为不符合Kad对等方标准

Rust

  • 所有桶在开始时都初始化
  • kbuckets中嵌入multiaddr
  • 插入:当与远程对等方确认Kad协议时 -> 内部/外部协议升级完成
    • 如果空间足够,则插入,否则挂起
      • KademliaBucketInserts决定如何插入:OnConnected或手动
    • 如果对等方已在RT中或挂起,则更新地址和状态
  • 删除:仅手动
  • 更新:当发现对等方已断开连接时
    • 始终更新地址和状态
  • NoeStatus:影响如何将新对等方插入RT

依赖项

~20–33MB
~619K SLoC