在对等网络中使用的DHT协议中,通过操作XOR计算下一个节点。
这是否意味着变量不是路由表(DHT),让它始终相同?
我是这么认为的,因为在计算散列XOR时,最小值总是有一个。 例如:
Table DHT:
156
124
791
123
My hash:
563
Then
156 xor 563 = 687
124 xor 563 = 591
791 xor 563 = 292
123 xor 563 = 584
然后下一个节点将是123.我是否正确理解DHT的具体细节?
答案 0 :(得分:0)
我不清楚你的意思是"我的哈希"您的节点ID或您正在搜索的内容。假设您正在搜索具有哈希值563的东西,那么123与563的区别仅为3位:
584 = 1001001000
292 = 0100100100
591 = 1001001111
687 = 1010101111
但791
也是如此因此,就距离563而言,选择791或123是相等的。 DHT搜索使用XOR作为距离度量,但在BitTorrent DHT BEP以及original paper it references中,Kademila DHT搜索维护一组并发搜索大小 k 的下一个节点。将 k 设置为1将是限制性的。
FIND NODE将160位ID作为参数。 RPC的接收者为它知道最接近目标ID的k个节点返回⟨IPaddress,UDPport,NodeID⟩三元组。这些三元组可以来自单个k-bucket,或者如果最近的k-bucket未满,它们可能来自多个k-bucket。在任何情况下,RPC接收者必须返回k个项目(除非所有k-buckets中的节点数少于k个,在这种情况下它会返回它知道的每个节点)。
此外,搜索会根据下一个节点的响应速度进行修改,但假设一切响应相同。然后是,如果 k = 1,那么搜索结果将为{123},如果 k = 2则为{123,791},如果 k < / em> = 3,然后是{123,791,124},如果 k &gt; = 4则是{123,791,124,156}。
原始论文中还有一个名为 alpha 的附加参数,并在libtorrent API中记录为 search_branching ,用于控制并发查询的数量搜索节点将随时进行。
如果 alpha >&gt; = 3,则会向每个邻居发出3个来自暗红色节点的同时查询。每个节点都会将 k 最近邻居返回到搜索值。这将重复进行,直到找到目标节点或没有进展,在图片中找到目标节点。