p2p网络

https://github.com/ethereum/devp2p?tab=readme-ov-file

1.Kad 算法

Kademlia 算法,一种分布式哈希表(DHT,Distributed Hash Table)的实现。DHT 技术是去中心化 P2P 网络中最核心的一种路由寻址技术,可以在无中心服务器(trackerless)的情况下,在网络中快速找到目标节点。Kademlia算法为DHT的一种实现,应用于 IPFSeMuleBitTorrent 等。

1.1 什么是分布式哈希表

哈希表可看作一个kv数据库,分布式哈希表就是不同的kv在不同的机器上。下文称存储部分kv的一台机器为一个节点。

对于一个DHT,最基础的是要提供两个功能:1、存储一个kv;2、输入一个key,返回对应的value。

1.2 关键部分

  • Node ID:在 P2P 网络中, 节点是通过唯一 ID 来进行标识的,在原始的 Kad 算法中,使用 160 bit 哈希空间来作为 Node ID。
  • Node Distance: 每个节点保存着自己附近(nearest)节点的信息,但是在 Kademlia 中,这个距离不是指物理距离,而是指一种逻辑距离,通过异或运算得知。
  • XOR:异或运算,XOR 是一种位运算,用于计算两个节点之间距离的远近。把两个节点的 Node ID 进行 XOR 运算,XOR 的结果越小,表示距离越近。
  • K-Bucket:用一个 Bucket 来保存与当前节点距离在某个范围内的所有节点列表,比如 bucket0, bucket1, bucket2 … bucketN 分别记录[1, 2), [2, 4), [4, 8), … [2^i, 2^(i+1)) 范围内的节点列表;
  • Bucket 分裂:如果初始 bucket 数量不够,则需要分裂(和实现有关)。
  • Routing Table: 记录所有 buckets,每个 bucket 限制最多保存 k 个节点,如下图:
  • Update: 在节点 bootstrap 过程中,需要把连接上的 peer 节点更新到自己的 Routing table 中对应的 bucket 中;
  • LookUp:查找目标节点,找到与目标节点最近(nearest/closest)的 bucket,如果已在 bucket 中,则直接返回,否则向该 bucket 中的节点发送查询请求,这些节点继续迭代查找;
  • 收敛 & 时间复杂度:查找会最终收敛至目标节点,整个查询过程复杂度是 Log N;

2.Discv4

以太坊早期版本采用了一种基于Kademlia改进的节点发现协议,通常称为Discv4。这个协议允许节点通过交换一种特殊的标识符(节点ID)来发现和建立与其他节点的连接。

3.Discv5(ENR)

随着时间和技术的发展,以太坊社区开始着手开发并测试Discv5协议,这是一个全新的节点发现协议,基于Ethereum Node Records (ENR)。ENR引入了更先进的加密身份认证和安全机制,增强了节点之间的隐私保护和网络的安全性。

最后更新于