最近,我读了一篇关于Kademlia协议的文档,我试图理解该协议,但我仍然有一些问题:当一个节点知道自己的ID但知道ip或端口时,为什么他必须找到另一个节点?为什么他在不知道ip和端口的情况下有ID,他从哪里得到的ID?我认为两个不同节点之间的“距离”不是路由距离或真实距离,它只是一个虚拟距离,可以用算法快速找到节点,对吗?
也许我的英语不是很清楚,因为英语不是我的母语,但如果你需要,我会试着把我的意思表达清楚。非常感谢!
发布于 2012-02-16 19:30:28
正如cHao所说,网络的分布式性质意味着节点需要将其ID和联系方式发布给与其交谈的其他节点。没有将is映射到联系人信息的中心位置,因此每个节点必须在自己的路由表中保留网络上节点子集的这种映射。
Kademlia路由表的结构使得节点将拥有离它们较近的网络的详细知识,以及较远的知识呈指数级递减。
使用逐位XOR作为ID之间的概念距离的度量具有以下优点:对于给定的目标ID,没有两个ID可以具有到目标的相同距离。
想象一个简单的示例,其中in在00到63的范围内。例如,如果Kademlia使用纯数学差作为距离的度量,15和35的距离与25的距离相同-两者的距离都是10。使用XOR,15和25之间的距离是22,25和35之间的距离是58。
以这种方式,可以明确地计算出与目标ID最接近的k个ID的组。
常数k在Kademlia中有几个用途,但它主要是复制因子。换句话说,一段数据存储在离数据ID最近的k个节点上。
查找过程被设计为返回一组k个节点(在每个节点上存储数据之前)或返回单个数据段(来自在查找迭代期间持有该数据的第一个节点)。
正因为如此,纯Kademlia并不适合于只查找单个节点,所以我不确定您的问题的这一部分是否太相关。如果您确实希望使用Kademlia查找单个节点,那么可能值得修改查找过程,使其在任何节点返回目标节点的联系信息时尽早结束(这与在查找过程中找到目标值时提前完成查找的方式相同)。
发布于 2012-02-16 13:40:24
由于网络是分布式的,根据定义,没有一个ID->地址映射的主表。节点不必(通常也不会)知道所有其他节点。“查找”节点的过程基本上是询问已知节点“最接近”目标,而不是直接询问目标节点,而是询问哪些节点离目标更近。查询的结果给出了要查询的下一组节点,这个过程会重复--因为一个节点会返回比它更接近的结果,所以每次迭代都会找到离目标越来越近的节点,直到您最终到达一个可以说“哦,节点X?他就在那里”的节点。
至少这是我对它的理解。
https://stackoverflow.com/questions/9305818
复制相似问题