我正在修改比特币源代码,并试图理解 testnet
模式下对等发现机制的确切工作方式,为此我做了以下更改:
禁用 DNS 种子发现以强制 bitcoind 回退以连接到硬编码节点。
将默认的硬编码节点更改为我已知的 4 个地址,比方说 A、B、C 和 D,我确保它们始终在线。
现在,当我运行 bitcoind 客户端(称之为 E)时,它连接到 A、B、C 或 D 之一,运行相同的 bitcoind 修改版本。它通过交换 getaddr
和 addr
消息从它首先连接到的硬编码节点获取对等地址,但我不确定之后它是如何进行的。我有以下疑问:
一个。如果一个节点退回到连接到硬编码节点,它应该像我的情况那样只连接到一个硬编码节点,还是可以连接到多个硬编码节点?
通过 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/