如何理解Kademlia(KAD)协议

时间:2012-02-16 05:02:15

标签: p2p dht kademlia

最近,我已经阅读了Kademlia协议的文档,我试图理解该协议,但我还是有一些问题: 为什么节点在知道其ID但是ip或端口时必须找到另一个节点? 为什么他不知道ip或端口时有ID,他在哪里获得ID? 我认为两个不同节点之间的“距离”不是路由距离或实际距离,它只是一个虚拟距离,可以用算法快速找到节点,就是这样吗?

也许我的英语不是很清楚,因为英语不是我的母语,但如果你需要,我会尽力表达自己。 非常感谢!

2 个答案:

答案 0 :(得分:18)

正如cHao所说,网络的分布式特性意味着节点需要将他们的ID及其联系方式发布到他们与之交谈的其他节点。没有将ID映射到联系信息的中心位置,因此每个节点必须在其自己的路由表中为网络上的节点子集保留此映射。

Kademlia路由表的结构使得节点可以详细了解靠近它们的网络,并且可以进一步减少知识的数量。

使用按位XOR作为ID之间的名义距离的度量具有以下优点:对于给定的目标ID,没有两个ID可以与目标具有相同的距离。

想象一个简单的例子,其中ID在00到63的范围内。如果使用Kademlia,例如作为距离度量的纯数学差异,15和35将是相同的距离25 - 两者的距离都是10.使用XOR,15和25之间的距离是22,而25到35之间的距离是58。

通过这种方式,可以明确地计算出与目标ID最近的k个组。

常数k在Kademlia中有两种用法,但它主要是复制因子。换句话说,一条数据存储在最靠近数据ID的k个节点上。

查找过程旨在返回一组k个节点(在每个节点上存储数据之前)或返回单个数据(从查找迭代期间持有它的第一个节点)。

因此,纯Kademlia并不是最适合查找单个节点,因此我不确定您的部分问题是否过于相关。如果您确实想要使用Kademlia来查找单个节点,那么在任何节点返回目标节点的联系人详细信息时,可能需要修改查找过程以尽早完成(就像目标节点的查找完成一样)在过程中被发现。)

答案 1 :(得分:8)

由于网络是分布式的,根据定义,没有一个ID->地址映射的主表。节点不必(通常也不)知道所有其他节点。 “查找”节点的过程基本上是直接询问与目标“最接近”的已知节点,而不是直接询问目标节点,而是关于哪些节点与目标更接近。该查询的结果为您提供了下一组要查询的节点,并且该过程重复 - 并且因为一个节点将返回比它更接近的结果,每次迭代往往会发现距离目标越近越近的节点到达一个节点,可以说“哦,节点X?他就在那边。”

至少那是我对它的理解。