惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
Recorded Future
Recorded Future
博客园 - Franky
F
Fortinet All Blogs
The Register - Security
The Register - Security
雷峰网
雷峰网
博客园 - 【当耐特】
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
S
Schneier on Security
Latest news
Latest news
S
Securelist
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
NISL@THU
NISL@THU
Cyberwarzone
Cyberwarzone
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
Spread Privacy
Spread Privacy
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
SecWiki News
SecWiki News
N
News and Events Feed by Topic
T
Threatpost
The GitHub Blog
The GitHub Blog
博客园_首页
F
Full Disclosure
爱范儿
爱范儿
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Stack Overflow Blog
Stack Overflow Blog
Last Week in AI
Last Week in AI
月光博客
月光博客
C
Check Point Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
博客园 - 司徒正美

博客园 - 若-飞

企业AI Agent落地的核心逻辑与路径 基于langchain,Function Call的成功率怎么解决? LangChain Checkpoint(检查点)是什么?—— Agent 的"存档机制" RAG 设计:Embedding 如何切分 AI 客服系统设计:RAG 知识库设计 Go 百万连接服务器设计:从网卡到业务的全链路解析 深度解析 sync.Pool:从设计哲学到生产实践 Goroutine 泄漏:原因、检测与防范 Go Channel 关闭与超时机制完全指南 Go Map 无限增长问题解决方案 LangChain 聊天记录压缩:原理、机制与实战 揭开 sklearn 文本分类的核心原理:从词袋到逻辑回归 大模型“胡说八道”怎么办?一张图读懂检测、评估与修复全方案 企业级AI知识库权限隔离设计:让AI“懂规矩”比“懂知识”更重要 RAG系统设计全解析:从架构到多模态的核心知识图谱 RAG召回率提升全攻略:7大核心方法让检索更精准 RAG召回率提升秘籍:Metadata过滤的底层原理与实践 构建更好的RAG系统:深入理解混合搜索 一文搞懂 RAG 中 Retriever 和 Reranker 的区别 一文搞懂 RAG 的召回率(Recall)是什么? LangChain / LangGraph、MCP、Harness Engineer 与 Claude Code 的对应关系 Agent Harness 技术笔记:从 Trajectory 到 Function Calling Loop BLEU 是什么?——从原理到工程实践 一文讲清:Approve / Permit / Permit2 的本质区别 分库分表后跨分页查询的完整方案 ai如何处理私有数据 ai幻觉是啥,以及如何解决 别再让大模型“凭空瞎猜”了!带你认识AI最强外挂:ChromaDB 用 useQuery 管请求:TanStack React Query 入门小结 HD钱包--BIP44 TRON 四种 API 面怎么选:从节点协议到 JSON-RPC 再到 TronGrid 以太坊节点存储与共识机制全解析 BSC节点发现协议全解析:UDP发现、Bootnode引导与Gossip交易广播 Solidity中的bytes与string:深入理解这两种特殊的动态数组 智能合约自毁:当资产还在,合约死了 —— 深度解析 selfdestruct 导致的资产锁定风险 TDengine CLI (taos) 使用指南 —— Docker 本地开发实战 在 macOS 上用 DBeaver 连接 TDengine:踩坑总结与最终配置指南 Solidity Storage Slot 深度解析 Geth Snapshot Export/Import 深度解析: 不是备份工具,而是数据分析利器 基于BSC 公链的数据备份与 Snapshot 机制深度解析 Docker 共享内存完全指南:从原理到实践,避免常见的理解误区 Docker容器"僵尸状态"问题排查与自动重启方案 SSE协议深度解析:被低估的HTTP服务器推送标准 TDengine vs MySQL:时序数据处理的时代之选 Proxmox 启用 QEMU Guest Agent 实战指南 解决 Blockscout "batch too large" 错误的完整指南 一文讲清楚什么是基准测试(Benchmark) Rust中的宏(Macro):编译时的代码生成魔法 Docker优雅关闭的艺术:为什么stop_grace_period能防止数据丢失 为什么 Go 没有依赖注入和 Bean 机制?语言设计哲学对比
以太坊节点发现背后的分布式哈希表(DHT)与 Kademlia 原理解析
若-飞 · 2026-02-23 · via 博客园 - 若-飞

以太坊 P2P 网络是完全去中心化的,每个节点既是客户端又是路由器。理解它的节点发现机制,需要掌握 分布式哈希表(DHT)Kademlia 算法以及 XOR 距离 的概念。本文将从理论到实践,帮助你理清以太坊网络如何高效查找节点,并应对节点动态加入或离开。


一、传统哈希表回顾

在单机环境下,哈希表是一种简单高效的数据结构:

例如:

直接把数据存到数组下标 12,可以做到 O(1) 查找。但是,当节点分布在全球、数据量巨大时,这种方式无法扩展,也没有中心服务器来维护全局索引。


二、分布式哈希表(DHT)是什么?

DHT 的目标是:

在去中心化网络中,让任意节点都能快速找到某个 key 所在的节点,且不依赖中心服务器。

核心思想:

  1. 节点映射到哈希空间
    每个节点通过公钥生成 256 位 NodeID。

  2. 数据 key 也映射到同一空间
    数据的 key 通过哈希得到 keyID。

  3. 距离决定谁负责存储
    NodeID 与 keyID 距离最小的节点负责存储该数据。

image


三、逻辑图示:哈希空间

假设用简化的 8 位空间(0~255)表示整个哈希空间:

数据 key:

  • 计算距离:

    • distance(A,72) = |10-72| = 62

    • distance(B,72) = |76-72| = 4 ← 最近

    • distance(C,72) = |233-72| = 161

  • 所以 key "apple" 由节点 B 负责。


四、Kademlia 算法与 XOR 距离

以太坊节点发现采用 Kademlia DHT

image

1. XOR 距离

特点:

  • 对称:distance(A,B) = distance(B,A)

  • 前缀分层:XOR 越小,二进制前缀越匹配

  • 不依赖物理距离:逻辑上越近不意味着网络延迟低

物理网络延迟由客户端策略优化,而不是 XOR 距离决定。


2. 路由表结构(K-buckets)

每个节点维护一个分层路由表:

Bucket 距离范围 (XOR) 节点数上限
0 2^0~2^1 k (通常16)
1 2^1~2^2 k
2 2^2~2^3 k
... ... ...
  • 越远的 bucket 节点越稀疏

  • 保证每个节点都能快速逼近任意 targetID


3. 查找流程

假设要查找 targetID = 10101000

  1. 选出本地 XOR 最近的节点

  2. findnode 消息

  3. 对方返回更接近 targetID 的节点

  4. 递归逼近,直到找到目标或最接近的节点

逻辑上类似逐步匹配二进制前缀:


五、节点动态变化:加入和删除

1. 新节点加入

  • 新节点生成 NodeID

  • 向网络发送 ping 消息

  • 通过 Kademlia 递归查找,加入路由表

  • 节点发现算法会将该节点放入对应 bucket

数据迁移

  • 新节点可能成为某些 keyID 的最近节点

  • 这些 key 会被复制到新节点(通常通过 key republishing / replication

  • 保证数据可访问性和负载均衡

示意图:

image


2. 节点离开 / 下线

  • Bucket 检测节点失效(ping 超时)

  • 从路由表中移除

  • 负责的 key 由逻辑上最近的剩余节点接管

示意图:

image

小结

  • DHT 通过 XOR 距离保证 数据动态迁移与负载均衡

  • 网络对节点 churn 自适应,保证高可用性


六、逻辑拓扑 vs 物理拓扑

类型 决定因素 作用
逻辑拓扑 XOR 距离 + Kademlia 决定查找路径和数据存储责任
物理拓扑 网络延迟 / 客户端策略 决定连接稳定性和传播速度

客户端(Geth / Erigon / Nethermind)会在逻辑拓扑上优化物理连接:

  • 剔除高延迟节点

  • 优先保持响应快的 peers

  • 限制最大 peers

image


七、节点发现到数据传播流程

  • 逻辑空间 决定谁负责 key

  • 物理网络 决定传播效率


八、DHT 优势总结

特性 意义
去中心化 无单点故障
O(logN) 查找 可扩展
自动负载均衡 哈希均匀分布数据
节点动态加入/离开 自适应,保证数据可用性

九、核心结论

  • DHT = 将节点和数据映射到同一数学空间,逻辑距离决定数据归属

  • Kademlia = DHT 实现,利用 XOR 距离快速递归逼近

  • XOR 距离 = 数学逻辑距离,不是物理距离

  • 节点加入/删除 = 数据会迁移到新的逻辑最靠近节点,保证高可用

  • 以太坊 P2P 网络 = 逻辑拓扑 + 加密连接 + Gossip 扩散

简单来说:以太坊 P2P 网络通过 XOR 构建了一个数学上的“位置图”,用 Kademlia 实现高效查找,再通过 RLPx 和 Gossip 完成安全可靠的数据传播,同时支持节点动态变化。