Routing 为什么Kademlia会构建它的路由表呢?
我知道Kademlia路由表由160个桶组成 节点被放入bucket 0-159中,这取决于它们的前缀长度(即本地节点键和节点的异或中前导未设置位的数量)Routing 为什么Kademlia会构建它的路由表呢?,routing,p2p,dht,kademlia,Routing,P2p,Dht,Kademlia,我知道Kademlia路由表由160个桶组成 节点被放入bucket 0-159中,这取决于它们的前缀长度(即本地节点键和节点的异或中前导未设置位的数量) 为什么会这样,是否有任何性能方面的好处(除了迭代160*20个节点以找到最近的节点是不可行的之外) Kademlia使用两个节点ID的XOR作为它们之间距离的度量。路由表bucket的思想是,节点对“靠近”它的网络有详细的了解,而从它的ID中获得的信息越少 要查找最接近某个特定键的一组节点,节点首先要从自己的路由表中查询它知道的最接近的节点。
为什么会这样,是否有任何性能方面的好处(除了迭代160*20个节点以找到最近的节点是不可行的之外) Kademlia使用两个节点ID的XOR作为它们之间距离的度量。路由表bucket的思想是,节点对“靠近”它的网络有详细的了解,而从它的ID中获得的信息越少 要查找最接近某个特定键的一组节点,节点首先要从自己的路由表中查询它知道的最接近的节点。平均而言,这些查找中有一半将落在bucket 0所覆盖的地址空间中。但该存储桶只允许包含20个节点,因此这些节点实际距离最近的可能性很小。但是,该bucket中的每个节点都将对该部分地址空间有更详细的了解,并且可能能够从自己的路由表中提供一个更好的关闭节点列表,然后也可以查询这些节点,依此类推 通过这种方式,迭代查找可以非常快速地在实际最近的节点组上进行搜索 当你说 迭代160*20个节点以查找最近的节点是不可行的 我认为你的意思是,实际上询问每一个问题都是不可行的;因为遍历这样的列表以提取最近的列表正是节点处理查找请求(RPC)的方式 请注意,在实际场景中,桶数不太可能接近160。例如,对于一个10亿节点的网络,平均存储桶数将为27 至于原始Kademlia论文中选择的实际值,我不知道为什么桶大小被指定为20。但是,我认为160是从SHA1散列的位大小派生出来的。通常使用哈希函数为要存储的给定值生成密钥。如果使用SHA1的哈希冲突的风险相当低,那么这是可以接受的。如果没有,可以使用不同的哈希算法,例如SHA256将产生多达256个存储桶 为什么会这样,是否有任何性能优势 这种组织与XOR度量相结合,创建了分层的局部性,确保查询稍微靠近目标的节点时,会知道更接近目标的节点。这会产生指数收敛 也许你可以把它看作是一个分布式的区间搜索 我知道Kademlia路由表由160个桶组成 一个包含(最多)160个bucket的平面阵列只是许多实现用于近似正确路由表布局的基本方式 使用桶拆分或多主路由表,您需要一个实际的树布局,其中可能包含160多个桶 事实上,这是一个多宿DHT节点的基于树的路由表的一小部分,有89个节点ID,完整的表比这个大(这些基本上是89个ID中两个的区域):
它的查找缓存甚至更大,由7k个存储桶组成。这个多主DHT客户端是什么?你能再告诉我一些吗?我不介意看到它的来源。它在bittorrent DHT上运行吗?我自己在pythonIt中编写了一个MDHT客户端,这意味着它是一个作为多个节点运行的客户端,例如多个IP。是的,是bittorrent dht。可以在这里找到来源:是的,有性能优势。这有助于将查找时间保持在O(日志n)。详细解释
0000000... entries:8 replacements:8
0000001000... entries:8 replacements:8
0000001001000... entries:8 replacements:8
00000010010010... entries:8 replacements:8
00000010010011000... entries:8 replacements:8
000000100100110010... entries:8 replacements:8
0000001001001100110... entries:8 replacements:8
00000010010011001110... entries:8 replacements:8
0000001001001100111100... entries:5 replacements:0
0000001001001100111101... entries:8 replacements:0
000000100100110011111... entries:8 replacements:0
0000001001001101... entries:8 replacements:8
000000100100111... entries:8 replacements:8
000000100101... entries:8 replacements:8
00000010011... entries:8 replacements:8
000000101... entries:8 replacements:8
00000011... entries:8 replacements:8
0000010... entries:8 replacements:8
0000011000... entries:8 replacements:8
0000011001000... entries:8 replacements:8
00000110010010... entries:8 replacements:8
00000110010011000... entries:8 replacements:8
000001100100110010... entries:8 replacements:8
0000011001001100110... entries:8 replacements:8
00000110010011001110... entries:8 replacements:5
0000011001001100111100... entries:6 replacements:0
0000011001001100111101... entries:2 replacements:0
000001100100110011111... entries:8 replacements:0
0000011001001101... entries:8 replacements:8
000001100100111... entries:8 replacements:8
000001100101... entries:8 replacements:8
00000110011... entries:8 replacements:8
000001101... entries:8 replacements:8
00000111... entries:8 replacements:8