如何理解Kademlia(KAD)协议

roc*_*oud 8 p2p dht kademlia

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

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

Fra*_*ser 19

正如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来查找单个节点,那么在任何节点返回目标节点的联系人详细信息时,可能需要修改查找过程以尽早完成(就像目标节点的查找完成一样)在过程中被发现).


cHa*_*Hao 8

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

至少那就是我对它的理解.