DHT:BitTorrent vs kademlia vs Clone(python) 我正在为内部集群实现我自己的DHT。由于它将用于像bittorrent这样的文件共享程序,所以我首先看到的是“主线DHT”。在那之后,我发现了“纠缠”(python,dht使用扭曲矩阵)、congress(python,dht使用pyev+libev),当然还有原始的“kademlia”

DHT:BitTorrent vs kademlia vs Clone(python) 我正在为内部集群实现我自己的DHT。由于它将用于像bittorrent这样的文件共享程序,所以我首先看到的是“主线DHT”。在那之后,我发现了“纠缠”(python,dht使用扭曲矩阵)、congress(python,dht使用pyev+libev),当然还有原始的“kademlia”,python,bittorrent,xor,dht,kademlia,Python,Bittorrent,Xor,Dht,Kademlia,他们有不同的方法来组织k-bucket: 1) 国会,kademlia使用范围为2*i的固定160个存储桶,kademlia的论文实际上提出了随着路由表的增长动态拆分存储桶的优化方法。这两种方法在逻辑上没有区别,只是为了节省一些空间而进行了优化。在实现固定的全尺寸路由表时,必须找到k个节点来向其发送请求。如果目标所在的存储桶为空,或者其中的节点少于k个,则必须从相邻的存储桶中进行拾取。考虑到这一点,一开始就不要拆分离你最近的bucket,这使得搜索更简单、更快 至于你的观点(1),我想你可能误解

他们有不同的方法来组织k-bucket:


1) 国会,kademlia使用范围为2*i的固定160个存储桶,kademlia的论文实际上提出了随着路由表的增长动态拆分存储桶的优化方法。这两种方法在逻辑上没有区别,只是为了节省一些空间而进行了优化。在实现固定的全尺寸路由表时,必须找到k个节点来向其发送请求。如果目标所在的存储桶为空,或者其中的节点少于k个,则必须从相邻的存储桶中进行拾取。考虑到这一点,一开始就不要拆分离你最近的bucket,这使得搜索更简单、更快

至于你的观点(1),我想你可能误解了卡德姆利亚。路由表存储桶边界总是相对于您自己的节点ID。对于离您较远的每个存储桶,存储桶跨越的ID空间将加倍。若并没有这个属性(比如说,每个bucket覆盖了相等的ID空间范围),您将无法正确地执行搜索,而且它们肯定不会是log(n)


主线DHT实现kademlia。

如果每个节点在第一个bucket中都有ID 0-7,则实现可能无法工作。哪个id进入哪个bucket完全取决于节点的id,否则高id将无法找到。也许你只是错过了距离计算?描述了距离计算的工作原理和原因——纠缠确实正确。据我在恩坦利德和卡德姆利亚的资料中所见,他们的计算方式不同。对于160位id空间:Kademlia将空间拆分为160个bucket,其中0个bucket的id为20,但纠缠在一起:1)开始时,我们有1个bucket的id为0,这需要进行一些小优化。由于最大对等数量由密钥中的位和k限定,因此仅搜索
(160*8)
节点插槽(根据BT的kademlia参数)是否有任何错误?@Matt Joiner(或其他人):我也被困于此。这种优化是纯粹针对节点的内存和CPU时间进行的优化,还是实际改善了整个系统(通过减少延迟或带宽)?@nightcracker:我不确定。我怀疑整个bucket部分都是学术上的胡言乱语,没有理由你不能找到自己的算法来选择最近的节点。如果你想继续并实现其他类型的路由表,请记住,为了使整个网络能够进行O(logn)查找,它仍然需要具有某些属性。我怀疑你能想出一个更简单有效的方法。XOR和计算0位基本上就是你需要做的一切。@Arvid:你的意思肯定是在XOR之后计算前导的0位吗?