机制)
Bitcoin Core 节点入站连接偏少怎么办了解 P2P 出站连接的坏端口bad ports机制【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin你已经部署了一个开启监听的 Bitcoin Core 节点但入站连接incoming connections明显偏少。仓库官方文档给出了一个可直接核对的原因你的监听端口落在了 bad ports坏端口列表里。其他节点在自动建立出站连接时会刻意避开这些端口于是落在上面的节点很难被主动连上。仓库中的 doc/p2p-bad-ports.md 解释了这套机制并给出完整端口列表本文说明如何判断自己的节点是否命中该问题以及如何调整。为什么坏端口会让别人连不上你Bitcoin Core 自动打开出站 P2P 连接时是从自己维护的候选节点列表里挑选一个 address:port。这个列表里的数据来自其他节点在 P2P 网络上转发的未经验证的数据恶意者可以广播一个背后根本没有 Bitcoin 节点监听、或者监听着非 Bitcoin 服务的地址。bad 端口的定义是被那些通常不对公网开放、通常需要认证的服务使用的端口例如 22ssh。Bitcoin Core 在挑选连接目标时向这类端口发起连接可能被高度警惕的管理员视为恶意行为。而像 80http这类通常无需认证的公共端口则不受此影响。因此Bitcoin Core 在自动选择出站连接目标时会跳过坏端口。doc/p2p-bad-ports.md 对此的直接结论是If a node is listening on such a port, it will likely receive fewer incoming connections.如果节点在这样一个端口上监听它很可能收到更少的入站连接。该文档列出的坏端口包括摘录22: ssh 25: smtp 53: domain 110: pop3 161: snmp 179: BGP 3306: MySQL 5432: PostgreSQL 6667: Standard IRC 10080: Amanda 27017: MongoDB完整列表见 doc/p2p-bad-ports.md从 1tcpmux一直到 27017MongoDB涵盖 ssh、telnet、smtp、DNS、各类数据库和 IRC 等。判断自己端口是否受影响直接拿它和这份完整列表对照即可。检查节点是否配置在坏端口上需要检查两处实际配置的端口以及启动日志中的警告。第一步确认当前使用的监听端口。端口由-port或-bind指定写在命令行或配置文件里仓库提供了一份示例配置 share/examples/bitcoin.conf。把配置值与上面的坏端口列表对照如果命中就进入了本文描述的问题场景。第二步在启动日志中核对警告。src/init.cpp 中当-bind或-port指定的端口是坏端口时节点启动会输出一条初始化警告格式如下文档示例22为端口值-bind request to listen on port 22. This port is considered bad and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list.看到这条警告即可确认坏端口问题成立。一个源码注释中明确的细节-port的警告只在未设置-bind和-whitebind时才会打印因为一旦设置了后者-port会被忽略见 src/init.cpp。所以如果你用了-bind不要依赖-port那条警告直接看-bind端口是否命中列表。把监听端口换出坏端口列表并验证确认命中后处理方式是换一个不在坏端口列表上的监听端口然后重启节点。port是必须你自己提供的值替换为列表中不存在的任意可用端口即可# -port 指定 P2P 监听端口port 换成不在 doc/p2p-bad-ports.md 列表中的端口 bitcoind -portport或者在配置文件中写portport使用-bind的节点同理把-bind里的端口换掉。重启后的验证分两步日志中不再出现 This port is considered bad 警告——这是源码中定义的判断依据警告消失说明新端口已被接受为正常监听端口节点按新端口对外监听。文档给出的成功判据是落在坏端口上的节点很可能收到更少的入站连接把端口移出列表即消除了这一原因之后入站连接应恢复正常增长。注意文档用的是 likely receive fewer即坏端口是减少入站连接的可能原因之一而不是绝对的充要条件。机制细节与边界理解这套跳过逻辑的边界能避免误判跳过逻辑位于出站连接选择过程src/net.cpp 中的源码注释写着 Do not connect to bad ports, unless 50 invalid addresses have been selected already——即只在选择过程中尚未累计选中 50 个无效地址时跳过坏端口且该检查仅作用于 IPv4/IPv6 地址。坏端口的判断实现是 src/netbase.cpp 中的IsBadPort函数其源码注释要求列表变更时同步更新 doc/p2p-bad-ports.md所以文档列表与当前代码行为一致。坏端口列表在不同版本中持续扩充过例如 doc/release-notes/release-notes-29.1.md 记录了一笔 p2p: add more bad ports 的变更。最后说明范围本文只覆盖监听端口命中坏端口列表这一条有文档依据的排查路径。如果你的端口不在列表中而入站连接仍然偏少说明原因在别处仓库文档没有展开其他排查方法需要另行调查。【免费下载链接】bitcoinBitcoin Core integration/staging tree项目地址: https://gitcode.com/GitHub_Trending/bi/bitcoin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考