bitcoin - 连接到硬编码节点后比特币对等发现如何工作?

标签 bitcoin peer bitcoind bitcoin-testnet peer-discovery

我正在修改比特币源代码,并试图理解 testnet 模式下对等发现机制的确切工作方式,为此我做了以下更改:

  1. 禁用 DNS 种子发现以强制 bitcoind 回退以连接到硬编码节点。

  2. 将默认的硬编码节点更改为我已知的 4 个地址,比方说 A、B、C 和 D,我确保它们始终在线。

现在,当我运行 bitcoind 客户端(称之为 E)时,它连接到 A、B、C 或 D 之一,运行相同的 bitcoind 修改版本。它通过交换 getaddraddr 消息从它首先连接到的硬编码节点获取对等地址,但我不确定之后它是如何进行的。我有以下疑问:

一个。如果一个节点退回到连接到硬编码节点,它应该像我的情况那样只连接到一个硬编码节点,还是可以连接到多个硬编码节点?

通过 addr 消息获取对等地址后,节点 E 何时开始连接到这些对等点?

如果可能,请指出相关的代码文件/部分。谢谢

最佳答案

一个。没有“硬编码节点”,只有节点的 DNS 种子,当您通过 DNS 请求运行它们时,您将在每个请求中获得新节点。

B.如果节点未连接到它的最大节点容量(它是 8 个事件节点和 125 个非事件节点),它将尝试连接到新节点,第二次它会收到 addr 消息
你可以在这里找到它们:

现场网络:https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L102
测试网:https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L181

关于bitcoin - 连接到硬编码节点后比特币对等发现如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388891/

相关文章:

node.js - 无法解析来自 uglifyjs-webpack-plugin@2.2.0 的依赖项 : npm ERR! 对等 webpack @"^4.0.0"

azure - 通过一个 Azure 订阅连接另一个订阅

java - 向本地 bitcoind 发出四次请求后出现 SocketTimeoutException

linux - VPS 添加仓库错误

p2p - 比特币客户端如何确定第一个连接的IP地址?

c++ - 在 Mac OS X 上构建 bitcoind 时出现同样的错误

python - 我什么时候可以安全地使用 float 来做数学?

java - Webrtc:onIceConnectionChange 和 onConnectionChange 之间有什么区别

json - 用于确定交易确认的区 block 链 API

transactions - 如何获取对非钱包比特币地址进行的最后交易?