以太坊节点怎么找到彼此:节点记录 ENR 与发现协议的两次改写 图 1
以太坊节点怎么找到彼此:节点记录 ENR 与发现协议的两次改写 · 图 1

比特币节点靠 DNS 种子域名捞第一批邻居,以太坊走的是另一条路:节点之间用一份可验证、可携带元数据的”名片”互相介绍自己,这份名片叫节点记录(Ethereum Node Record,ENR)。它的存在让以太坊的发现协议能携带更多信息、支持更频繁的网络轮换。这一篇按分层顺序讲:传输层、记录格式、发现协议。

最底下:加密的字节管道

在讨论”怎么找到对方”之前,先记住以太坊节点间通信的底座:devp2p 框架下的 RLPx 传输协议。它规定两条 TCP 连接先完成一次基于密钥的认证握手,之后所有消息都在加密、带完整性保护的会话里流动,上层再复用这条管道跑共识同步、交易广播等子协议。2017 年的 EIP-706 给这层加了 snappy 压缩,握手后的消息负载一律压缩,官方文本里给出的同步流量收益量级是六到八成。传输层解决”连上之后说悄悄话”,发现层解决”该连谁”,两层各自独立演进。

以太坊节点怎么找到彼此:节点记录 ENR 与发现协议的两次改写 图 2
以太坊节点怎么找到彼此:节点记录 ENR 与发现协议的两次改写 · 图 2

中间层:一张签过名的名片

EIP-778(2017 年 11 月定稿)定义了 ENR:一条键值对序列,固定包含序列号(seq)、签名算法标识与签名,再加上任意扩展字段——公网 IP、TCP/UDP 端口、网络标识、以太坊配对用的身份公钥(secp256k1),以及各种能力声明。要点有三。第一,记录由节点私钥签名,接收方可以验证”这张名片确实是它自己发的”,中间人无法伪造端口或地址。第二,seq 单调递增,内容一改 seq 就加一,旧版本自动作废,这让 NAT 后换端口的节点能安全更新自我描述。第三,字段可扩展——后来的 discv5、轻客户端、状态同步都靠往 ENR 里塞新键获得存在感,不必发明新协议。

上层:怎么把名片递出去

最初的发现协议(后来被叫作 discv4)借用了 Kademlia 的结构:节点维护一张按”与我的距离”分桶的路由表,用 UDP 上的 ping/pong 与 findnode 查询逐步收敛出离目标哈希更近的持有者。距离是节点 ID 与目标 ID 的按位异或,这个看似抽象的定义保证了查询路径的可预测性,也让”随机撒种子、快速铺满”成为可能。

discv5 在 2020 年前后逐步成为主流客户端默认(其规范维护在 devp2p 仓库而非某个单号 EIP),改动集中在三处:所有发现消息用 Noise 风格框架加密,旁观者不能像 discv4 时代那样明文抄全网地址表;协议内置 NAT 穿透与端口检查流程,家庭网络的可达性判定更可靠;记录类型支持多链——一张 ENR 可以带多个网络键,同一份记录同时宣告以太坊主网与测试网身份。对普通用户,discv5 最直接的可见变化是:节点日志里”enr:“开头的一长串取代了裸节点 ID,防火墙后节点的自动穿透成功率上升。

冷启动与种子节点

再聪明的路由表也要有第一批联系人。以太坊的冷启动来源是写进客户端的引导节点(bootnode):一组长期在线的公共节点 ENR,随发行版分发。新节点连上引导节点后做一轮 Kademlia 式收敛,之后路由表自持。这条链路解释了为什么引导节点的可用性能影响新节点的启动体验,也解释了为什么发行版维护者对引导节点列表的更换很谨慎。

运行中的节点会持续做后台维护:定期 ping 邻居验证存活、把失败邻居逐出桶、按”久未联系”规则主动补充新邻居。与比特币不同,以太坊的活跃订阅关系(哪些 peer 该继续收区块和交易)由 eth 协议层的拓扑管理维护,发现层只负责提供候选。读日志时把”发现层的邻居”与”eth 层的朋友”分开看,能避免很多误判。

对隐私与运维的实际影响

发现协议是公开系统:节点会响应查询、被记录进别人的路由表,公网地址在发现层面是对等的可见信息。在意这点的运维者常见做法是关掉主动发现、只用静态节点列表(把对端的 ENR 写死在配置里),代价是丧失网络自我修复带来的容灾。另一头,普通桌面用户不需要动任何发现参数——默认行为就是社区验证过的平衡点。

常见误区

一是把 ENR 当成”节点身份证”永久不变:它是可改写的动态记录,可信来自签名和递增 seq,不来自长期稳定。二是把 discv5 的加密当成流量隐身:它只加密发现协议消息,共识与交易数据的传播路径仍在 eth 层,监听者仍可能从后续连接行为做关联分析。三是把引导节点当信任锚:冷启动时它们提供的是地址信息不是共识信息,共识正确性始终由你自己验证的区块决定。

风险提示

调整发现与连接配置可能影响节点可达性与同步质量,请在理解日志含义后小步修改。本文不构成投资建议。

风险提示:本文只描述公开技术机制,不构成任何投资建议。数字资产价格可能剧烈波动。