一条消息的二十年瓶颈
节点之间靠 gossip 交换“认识谁”:新连接建立后,互相发送对方的网络地址,让全网地址库不断轮换。比特币的老式 addr 消息用 16 字节固定字段承载地址,Tor v2 隐藏服务靠 OnionCat 映射勉强塞得下,但 Tor v3 的地址是 256 位,比整个字段还大,I2P 等网络同样用不了这个容器。
BIP 155 定义的 addrv2 消息把固定地址字段换成“网络 ID 加变长地址”:每个条目由时间戳、用 CompactSize 编码的 64 位服务位、8 位 networkID、变长地址和 16 位端口组成。规范给出了保留的网络 ID 表:0x01 IPv4(4 字节)、0x02 IPv6(16 字节)、0x03 Tor v2(10 字节,已停用)、0x04 Tor v3(32 字节)、0x05 I2P(32 字节)、0x06 Cjdns(16 字节)、0x07 Yggdrasil(16 字节)。长度与网络 ID 不匹配的条目应当直接拒绝。

数量上限与兼容协商
一条 addrv2 消息最多带 1000 个地址,单个地址最长 512 字节,超限即拒。兼容性靠 sendaddrv2 消息协商:节点想接收新格式,先给对端发一条 sendaddrv2,隐含自己也愿意用 addrv2 发送;没有收到该信号的连接继续用老 addr。这样新旧节点混跑时,v3 地址只在支持的一侧传播。
规范本身也在演进:BIP 155 在 2025 年 10 月发布 2.0.0 版,正式注明 Tor v2 网络已不可用,客户端不得再 gossip 或转发 Tor v2 地址、收到即忽略。这段历史提醒我们:地址表里一个 ID 的生死,对应着整个匿名网络层的退役周期。
对节点运营的实际意义
比特币节点的可达性本身就是抗审查能力的一部分。通过 Tor v3 运行节点的人如果邻居不支持 addrv2,他的地址根本传不出去,节点会变成“隐身”;反过来,你在 getaddrman 或邻居日志里几乎看不到 onion 地址,多半是网络里 addrv2 覆盖率的问题而非没人用。把节点接入匿名网络的步骤与隐私收益边界,见 用 Tor 跑比特币节点。此外 gossip 出来的服务位含义可与握手信息对照阅读,见 节点服务位。
核对与风险提示
不同实现暴露地址库的接口不同,本文不指认任何版本的默认 gossip 策略;判断标准很简单:向邻居宣告 sendaddrv2 后是否还能收到 tor 类型条目。参与网络只涉及运行软件,不涉及任何资金操作;但自行转发或宣称“必达”之前,请理解地址泄露与流量分析仍是开放问题。
风险提示:比特币价格与网络状态波动较大,本文仅作技术与安全科普,不构成任何投资建议;涉及资金操作前请小额试转并逐项核对,所有协议参数以官方规范与源码为准。
排查”隐身”的两条命令思路
思路一:在你自己的节点上询问地址库对 onion 类型的覆盖情况,主流实现都提供按网络类型抽样的接口,如果发现邻居地址库里 Tor 条目极少,而你自己已宣告 sendaddrv2,问题多半在版本分布而非你的配置。思路二:看握手日志里对端是否发来过 sendaddrv2——没收到该信号的对端,你只能退回老 addr,它们永远学不到你的 v3 地址,这是协议兼容的正常表现。两条思路都只需要观察,不要求你改任何默认值。另外注意时间戳字段:gossip 条目带着”最后一次见到”的时间,大量陈旧条目不等于节点死掉,只代表没再被连上;把地址库当网络健康的温度计看,比当名册看更准确。延伸一句:网络 ID 表本身要求新网络必须另开 BIP 预留编号,任何实现都不该私自扩展含义,看到未知 ID 的条目直接丢弃是规范要求,也是防止伪造地址污染地址库的护栏。把这两条思路记熟,你就能把”我的匿名节点别人连不上”从焦虑清单变成一条可验证的排查路径。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。