kademlia java_死磕以太坊源码分析之Kademlia算法

本文深入分析了以太坊中的Kademlia算法,这是一种点对点分布式哈希表,确保了一致性和性能。KAD算法通过异或距离进行节点路由和查询,节点信息存储在K桶中,通过K桶更新和路由查找机制实现高效查询。节点加入和离开网络时,Kad网络能够自我调整并保持稳定。
摘要由CSDN通过智能技术生成

死磕以太坊源码分析之Kademlia算法

KAD 算法概述

Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能。使用一种基于异或指标的拓扑结构来路由查询和定位节点,这简化了算法并有助于证明。该拓扑结构有一个特点:每次消息交换都能够传递或强化有效信息。系统利用这些信息进行并发的异步查询,可以容忍节点故障,并且故障不会导致用户超时。

KAD算法要处理的问题

如何分配存储内容到各个节点,新增/删除内容如何处理

如何找到存储文件的节点/地址/路径

节点状态

节点的基本属性包括如下:

节点ID,Node ID

节点IP地址与端口号

在 Kad 网络中,所有节点都被当作一颗二叉树的叶子,并且每一个节点的位置都由其 ID 值的最短前缀唯一的确定。

对于任意一个节点,都可以把这颗二叉树分解为一系列连续的,不包含自己的子树。最高层的子树,由整颗树不包含自己的树的另一半组成;下一层子树由剩下部分不包含自己的一半组成;依此类推,直到分割完整颗树。图 1 就展示了节点0011如何进行子树的划分:

bacd2c5969e4f80dc286f028deb2052e.png

虚线包含的部分就是各子树,由上到下各层的前缀分别为0,01,000,0010。

Kad 协议确保每个节点知道其各子树的至少一个节点,只要这些子树非空。在这个前提下,每个节点都可以通过ID值来找到任何一个节点。这个路由的过程是通过所谓的 XOR(异或)距离得到的。

图 2 就演示了节点0011如何通过连续查询来找到节点1110的。节点0011通过在逐步底层的子树间不断学习并查询最佳节点,获得了越来越接近的节点,最终收敛到目标节点上。

d4dce080e9fa55925e8c71bef14440be.png

需要说明的是:只有第一步查询的节点101,是节点0011已经知道的,后面各步查询的节点,都是由上一步查询返回的更接近目标的节点,这是一个递归操作的过程。

节点距离

Kad 网络中每个节点都有一个 160 bit 的 ID 值作为标志符,Key 也是一个 160 bit 的标志符,每一个加入 Kad 网络的计算机都会在 160 bit 的 key 空间被分配一个节点 ID(node ID)值(可以认为 ID 是随机产生的), 对的数据就存放在 ID 值“最”接近 key 值的节点上。

判断两个节点 x,y 的距离远近是基于数学上的异或的二进制运算, d(x,y)=x⊕y ,既对应位相同时结果为0,不同时结果为1。例如:

010101

XOR 110001

----------

100100

则这两个节点的距离为 32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值