跳转到正文
buybitcoinsmart

术语表 /节点与软件

Addrv2

Addrv2是什么?
Addrv2 是比特币节点之间用于传播对等节点地址的点对点消息,可表达旧版 addr 消息无法表达的地址,每个地址都带有一字节的网络 ID,用于标明 Tor v3、I2P 或 Cjdns。

规定于 BIP-155。

旧版 addr 消息的地址字段固定为16字节,无法容纳32字节的 Tor v3 onion 地址。BIP-155用一字节的网络 ID 加上最长512字节的地址取代了该字段,每条消息最多包含1,000个条目。如果您通过 Tor 运行节点,以免持有量与家庭 IP 地址关联,其他节点就是通过 addrv2 得知该节点存在的。

运作方式

Addrv2 沿用了前代消息的结构,只重写了一个字段。

每个条目包含五项内容:该节点上次被发现处于连接状态的 Unix 时间戳;服务位字段,已改用 CompactSize 编码,因此不再总是占用八字节;一字节的网络 ID;地址本身;以及16位的端口,若该网络没有端口,则必须为零。BIP-155保留了七个 ID:0x01 为 IPv4,占4字节;0x02 为 IPv6,占16字节;0x03 为 Tor v2,占10字节;0x04 为 Tor v3,占32字节;0x05 为 I2P,占32字节;0x06 为 Cjdns,占16字节;0x07 为 Yggdrasil,占16字节。包含超过1,000个条目的消息、长度超过512字节的地址,以及长度与其 ID 不符的地址,都应被拒绝。

其中两个 ID 需要补充说明。Tor v2 已停止运作:该 BIP 于2025-10-01发布的2.0.0版记载,客户端不得再传播或转发 ID 0x03,收到时必须忽略;Bitcoin Core 在其枚举中保留了该编号,同时在文档中注明 TORV2 已不再受支持。Core 完全没有实现第七个 ID,因为该枚举(src/netaddress.h 中的 BIP155Network)从 IPV4 = 1到 CJDNS = 6即告结束,MAX_ADDRV2_SIZE 设为规范中所规定的同样的512字节。

对 addrv2 的支持是经协商确定的,而不是默认存在的。节点通过发送 sendaddrv2 来宣告支持,时机要求严格:只能在对等节点的 version 消息之后、verack 之前发送,Core 会断开发送时机过晚的对等节点以强制执行这一点。如果始终不发送,对等节点就会继续使用旧格式,并悄悄丢弃旧字段无法表达的所有地址类型。2.1.0版(日期为2026-08-03)补上了一处相关的缺口,规定封装在 IPv6 中的 IPv4 地址,即::ffff:0:0/96范围,不得使用 IPv6 的 ID 传输,因为同一台机器以两个 ID 出现,会被算作两个不同的对等节点。

在哪里会遇到它

Addrv2 在 Bitcoin Core 中表现为网络标签,而不是您能直接读到的内容。

getpeerinfo 调用会为每个连接标注网络名称,getnodeaddresses 则接受网络名称作为参数:src/rpc/net.cpp 中的帮助文本以 getnodeaddresses 4 "i2p" 和 -named getnodeaddresses network=onion count=12作为示例。getaddrmaninfo 调用更进一步,按网络细分所存储的地址池,给出 new、tried 和 total 的数量,最后附上 all_networks 总计。ipv4 和 ipv6 之外的各行,记录的是任何 addr 消息都无法编码的地址,无论您的节点最初是如何得知它们的。

onion 的例子说明实际传输的内容很少。Tor v3 地址在 .onion 后缀之前有56个 base32 字符,编码了一个32字节的 ed25519 公钥、一个两字节的 SHA3-256校验和以及一字节的版本号。网络上只传输公钥,接收节点会重建其余部分,因为版本号始终为3,校验和则由其已有的数据计算得出。

对持有者来说,这只是底层机制,唯一可见的影响是:默认通过 Tor 路由全部流量的钱包(Wasabi 即是其一),以及通过 Tor 连接您自己节点的钱包(例如 Blockstream Green),都依赖于 onion 对等节点首先能够被找到。

Addrv2 vs 比特币地址

比特币地址和 addrv2 地址只是名称里有相同的三个字母,别无共同之处。Addrv2 条目是网络上的一个位置,回答的是某台机器位于何处,它无法接收任何比特币。把 onion 地址粘贴到钱包的发送栏,会因格式错误而被拒绝,这正是正确的结果。

请勿混淆

常见问题

我必须在节点上启用 addrv2 吗?

不必。Bitcoin Core 会在 BIP-155要求的时间窗口内为您发送 sendaddrv2 消息:在对等节点的 version 消息之后、verack 之前,且仅当协商的协议版本不低于70016时才发送,因为较旧的软件可能会拒绝它不认识的消息类型。从不回应该消息的对等节点,会继续收到旧版 addr 格式。

addrv2 会加密我节点的流量吗?

不会。Addrv2 只改变节点能够谈及哪些地址,而不改变链路本身如何受到保护。加密连接是另一项单独的协商,即 BIP-324定义的 v2 传输协议,Bitcoin Core 通过其专属的服务位来标示对它的支持。

为什么 BIP-155仍然列出 Tor v2 的网络 ID?

该 id 仍保留在表中,但已标记为不再使用。该 BIP 的第2.0.0版(日期为2025-10-01)记载,Tor v2 已不再运行,客户端不得传播或转发 id 0x03,并且在接收时必须忽略它。Bitcoin Core 在其 BIP155Network 枚举中保留了 TORV2 = 3,并将该 id 记录为不再受支持。

接着阅读

相关术语

节点与软件中的更多术语

阅读本页英文版