主页 > imtoken.im > 比特币网络节点发现

比特币网络节点发现

imtoken.im 2023-04-06 06:25:38

[目录]

0x0 概述

比特币节点发现是指节点查找其他节点地址(IP和PORT)的方法。 主要有以下几种类型:

为每个地址保留一个时间戳,以跟踪上次查看节点地址的时间。 当从节点接收到消息时,此时间戳会更新。 时间戳仅在地址上更新比特币节点,并在时间戳早于 20 分钟时保存到数据库中。

0x1 获取地址消息

当一个节点收到“getaddr”请求时,它首先计算它在最近 3 小时内有多少个地址有时间戳。 如果地址数超过 2500 个,则随机选择最新的 2500 个地址。

0x01 发现方法 本节点的外网地址

比特币分叉会影响比特币价格吗_比特币期货对比特币影响_比特币节点

本地节点发现自己的外网地址需要使用公共服务。 比特币网络(中本聪版)中的流程如下:

IRC地址

不再支持

DNS地址

节点启动时,会发出dns解析请求,请求种子节点的地址。 截至2017年比特币节点,种子节点域名列表如下:

比特币期货对比特币影响_比特币分叉会影响比特币价格吗_比特币节点

硬编码种子地址

这些地址仅作为最后的手段使用。

地址广播(地址消息)

节点可能会在发送“getaddr”请求后收到“addr”消息中的地址,或者“addr”消息可能会未经请求到达,因为节点在中继它们(见下文)或建立连接时无条件地通告地址。

如果地址来自一个非常旧的版本,它会被忽略; 如果它来自不太旧的版本,如果我们已经有 1000 个地址,它将被忽略。

比特币期货对比特币影响_比特币分叉会影响比特币价格吗_比特币节点

如果发件人发送的地址超过 1000 个,则全部忽略。

从“addr”消息中收到的地址有时间戳,但时间戳不一定可信。

对于邮件中的每个地址:

如果时间戳太低或太高,则设置为 5 天前。

我们从时间戳中减去 2 小时并添加地址。

比特币期货对比特币影响_比特币节点_比特币分叉会影响比特币价格吗

如果该地址在过去 24 小时内并且时间戳现在超过 60 分钟,它将更新为 60 分钟前。

如果地址在过去 24 小时内没有出现,并且时间戳当前超过 24 小时,它将更新为 24 小时前。

地址中继

一旦从“addr”消息(见上文)中添加了地址,它们就可以中继到其他节点。 首先,必须设定以下标准[9]:

对于符合上述条件的每个地址,节点对地址、日期(整数)和一个随机的 256 位值(在客户端启动时生成)进行哈希处理。 节点取哈希值最低的两个地址,并将“addr”消息中继给它们。 这确保每个节点在任何给定时间仅将“addr”消息中继到另外两个客户端,并且随机选择另外两个客户端,并且随机选择至少每 24 小时开始一次。

比特币分叉会影响比特币价格吗_比特币期货对比特币影响_比特币节点

自播

每 24 小时,一个节点向所有连接的节点公布其地址。

它还会清除我们认为远程节点拥有的地址列表,这会触发发送到该节点的刷新。

地址存储

地址存储操作大约每 0.1 秒调用一次并执行一次。

文本文件中给出的地址

客户端将自动读取比特币数据目录中名为“addr.txt”的文件,并将在那里找到的任何地址添加为节点地址。 这些节点对其他地址没有特别的偏好。 它们只是添加到地址池中。

从文本文件加载的地址最初被赋予零时间戳,因此它们不会发布以响应“getaddr”请求。