比特币节点的七种连接出身:ConnectionType 的岗位与名额 图 1
比特币节点的七种连接出身:ConnectionType 的岗位与名额 · 图 1

运行 bitcoin-cli getpeerinfo,每条连接都会带一个 connection_type 字段:feeler、block-relay-only、addr-fetch……这些词不是日志装饰,而是比特币核心给每条连接登记的”出身档案”。v31.0 源码把连接的出身定为七类,写在 src/node/connection_types.h,并且专门留了注释提醒改动者同步四处文档。本文把七类各自的职责、名额和生命周期讲清——读连接状态、排查”节点为什么不给我传交易”这类问题时,这个字段是第一入口。

一、七类出身逐个看。INBOUND:对方主动连进来的连接,握手完成前我们只知道这一点,之后的行为再修正描述。OUTBOUND_FULL_RELAY:默认的主力外连,源码注释明确它”对中继内容没有限制——默认中继区块、地址与交易”,系统会自动向地址库里的候选发起最多 8 条(MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 8),这是”8 个出站邻居”常识的出处。MANUAL:用户通过 -addnode/-connect 或 addnode RPC 点名建立的连接,上限 8 条;注释特别写明,手工连接即使表现异常,节点也不自动断开、不进不鼓励名单——你对它负责,系统就不越权。FEELER:短命探针连接,约每 2 分钟开一条(FEELER_INTERVAL,上限 1),用途有二:test-before-evict(准备踢掉某条 tried 表老连接前先探个新地址确认网络没坏)和把新地址升入 tried 表;源码注释还澄清,学术文献里的”feeler”只指后者,代码里这个类型把前者也包进来了。BLOCK_RELAY:只收区块、不中继交易和地址的外连,数量上限 2,配合 anchors.dat 里长期锚定的对端建立——这类连接因为不碰交易,很难被外部观测者识别,注释写得很直白:帮助防止分区攻击、混淆网络拓扑。ADDR_FETCH:只为要地址开的短命连接,触发条件是 -seednode 指定的地址,或地址库空到没法外连时的 DNS 种子解析目标;源码在名额计算处有句注释”ADDR_FETCH 不占限额,因为 -seednode 本来就不设限”。PRIVATE_BROADCAST:只在洋葱路由、I2P 这类隐私网络上短暂开启、用来中继对自己敏感的流量(典型是自己新广播的交易),完事即关。

二、名额为什么这么配。八条全中继外连是信息流通与指纹风险的折中:交易和地址宣告天然冗余,来源少一些也能靠传播冗余补齐;而区块下载依赖另外的请求机制,不必靠连接数堆带宽。2 条区块专用加锚定,则把”最不能断的信息流”(新区块)与”最容易暴露的流量”(交易)分车道——交易被邻居掐住最多少赚手续费,区块被掐住是掉队,所以值得用两条刻意难发现的连接兜底。

三、排障时的读法。第一类问题”节点只收块不传交易”:数一数 OUTBOUND_FULL_RELAY 是否真的有 8 条、其中多少条带交易中继能力;如果出站几乎全是 BLOCK_RELAY,多半是连接质量差导致全中继名额建不满。第二类”连接数诡异波动”:FEELER 每 2 分钟闪过一条属正常;ADDR_FETCH 在地址库告急时短暂出现是自救动作,不是异常外连。第三类”我加了 addnode 但好像没人理”:MANUAL 连接不享受自动重连的耐心策略之外的豁免只在”不被自动踢”这一侧,建立失败仍要看网络可达性。

四、改动为什么被要求同步四处文档。connection_types.h 顶部注释点名:增删类型必须同步 rpc/net.cpp 与 qt/rpcconsole.cpp 里的 CONNECTION_TYPE_DOC,以及 guiutil.cpp 与 bitcoin-cli 的 netinfo 仪表盘描述。这条纪律的实质是:connection_type 是被脚本、监控面板和图形界面共同消费的公开词汇,七类是接口的一部分,不是内部实现细节。这也是本文全部以 v31.0 源码为准的原因——这套枚举历史上加过 PRIVATE_BROADCAST,未来的增删同样会先动这份档案。理解连接出身,等于理解了节点怎么给自己身边每条 TCP 连接安排岗位:谁负责传话、谁负责看路、谁干完就下班。

风险提示:本文内容为技术机制科普,不构成任何投资建议、收益承诺或买卖时机判断。涉及协议规则与软件行为的描述以对应软件版本(文中已标注)的官方源码与规范为准。涉及资金操作的,请先在测试网或小额环境验证。

比特币节点的七种连接出身:ConnectionType 的岗位与名额 图 2
比特币节点的七种连接出身:ConnectionType 的岗位与名额 · 图 2