Kademlia使用2个节点ID的XOR作为它们相距距离的度量.使用路由表存储桶的想法是,节点具有与其"接近"的网络的详细知识,并且从您的ID获得的知识越少.
为了找到最接近特定密钥的一组节点,节点将首先从其自己的路由表中查询它知道的最接近的节点.平均而言,这些查找中的一半将落入存储桶0所覆盖的地址空间中.但该存储桶仅允许包含20个节点,因此这些节点几乎不可能是最接近的节点.但是,该存储桶中的每个节点都将具有该部分地址空间的更详细知识,并且很可能能够从其自己的路由表中提供更好的关闭节点列表,然后也可以查询这些节点,依此类推.
通过这种方式,迭代查找可以非常快速地进入实际上最接近的节点组.
当你说
迭代160*20个节点以找到最接近的节点是不可行的
我认为你的意思是实际查询每一个都是不可行的; 因为迭代通过这样的列表来提取最接近的列表正是由节点处理查找请求(RPC)的方式.
请注意,在实际场景中,桶的数量不太可能达到160附近.例如,对于十亿个节点的网络,平均桶数将为27.
至于在原始Kademlia论文中选择的实际值,我不知道为什么将桶大小指定为20.但是,我想,160是从SHA1散列的位大小派生的.通常,散列函数用于生成要存储的给定值的密钥.如果使用SHA1进行哈希冲突的风险相当低,那么这很好.如果不是,则可以使用不同的散列算法,例如SHA256将产生多达256个桶.
归档时间: |
|
查看次数: |
1859 次 |
最近记录: |