主页 > 苹果下载imtoken教程 > 比特币网络架构及节点发现分析

比特币网络架构及节点发现分析

苹果下载imtoken教程 2023-12-11 05:14:26

比特币网络架构和节点发现分析

一、P2P 网络架构

比特币采用基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。

比特币网络可以被认为是按照比特币 P2P 协议运行的节点集合。

本文分析了比特币网络,它与传统的中心化网络有何不同,以及比特币网络如何发现相邻节点。

二、节点类型及分工

虽然比特币P2P网络中的每个节点都是平等的,但根据提供的功能不同,每个节点可能有不同的分工。每个比特币节点都是路由、区块链数据库、挖矿和钱包服务的功能集合。一个全节点包括下图所示的四个功能:

下图是一个比特币网络节点,具有四个完整的功能:钱包、矿工、完整的区块链、网络路由节点。每个节点都参与整个网络的路由功能,也可能包含其他功能。每个节点都参与验证和传播交易和区块信息,发现和维护与对等节点的连接。一个名为“网络路由节点”的橙色圆圈表示此路由功能。

一些节点维护完整的、最新的区块链副本,这样的节点被称为“完整节点”。全节点可以独立验证所有交易,无需任何外部参考。

还有一些节点只保留部分区块链并通过称为简单支付验证 (SPV) 的方法验证交易。此类节点称为“SPV 节点”,也称为“轻量级节点”。

比特币的交易数据怎么看_火币比特币交易手续费_sitechainnode.com 币看比特币行情走势图

三、对等发现

为了能够加入比特币网络,比特币客户端会做几件事:

一个。该节点会记住它最近成功连接的网络节点比特币的交易数据怎么看,并且在重新启动时可以快速重新连接到之前的对等网络。

b.节点在失去现有连接时会尝试发现新节点。

c。在建立一个或多个连接后,该节点会向其相邻节点发送一条包含其自身 IP 地址的消息。然后相邻节点依次将消息转发给各自的相邻节点,从而保证节点信息被多个节点接收,保证连接更稳定。

d。新连接的节点可以向其相邻节点发送 get-address getaddr 消息,要求它们返回其已知对等节点的 IP 地址列表。节点可以找到要连接的对等点。

e。当节点启动时,您可以为该节点指定一个活动节点 IP。如果没有,客户端还会维护一个长期稳定运行的节点列表。这样的节点也称为种子节点(其实和BT下载的种子文件一样),可以通过种子节点快速发现网络中的其他节点。

1、比特币的核心部分维护着一个节点列表,它可以在启动时连接到这些节点。当一个完整的节点第一次启动时,它必须被引导到网络。这个过程现在通过一个简短的 DNS 种子列表在比特币的核心实现自动化。选项 -dnsseed 可用于定义此行为,默认设置为 1。DNS 请求返回可连接 IP 地址的列表。从那里,比特币客户端可以连接到整个比特币网络。

比特币的交易数据怎么看_sitechainnode.com 币看比特币行情走势图_火币比特币交易手续费

2、另一种引导方式是使用参数-seednode=。通过该参数,用户可以预先定义在建立对等体列表后连接和断开哪个服务器。另一种方法是在启动 Bitcoin Core 时配置 -connect= 参数以选择要连接的对等点(未配置的 IP 将不会连接)。添加节点的最后一种方法是通过参数 -addnode= 将单个节点添加到节点列表中。

引导过程完成后,节点向其对等节点发送包含其自身 IP 地址的 addr 消息。它的每个对等点都会将此信息转发给自己的对等点,以进一步扩展连接池。

您可以通过getpeerinfo命令查看连接到某个节点的peer节点及相关数据。

3、连接到对等体

节点通过发送版本消息连接到对等点。消息版本包含来自远程节点的节点版本信息、区块信息和时间。一旦对等方收到此消息,它必须回复一个 verack。如果愿意建立对等关系,它会发送自己的版本消息。

一旦建立对等关系,节点就可以向远程节点发送getaddr和addr消息,以获取其他对等节点信息。为了保持与对等点的连接,默认情况下,节点至少每 30 分钟向对等点发送一次消息。如果超过 90 分钟没有收到回复,则节点认为连接断开。

4、块广播

与对等节点建立连接后,双方互相发送包含最新区块哈希值的getblocks消息。如果一个节点认为自己有最新的区块信息或有更长的链,它会发送一个包含最多 500 个最新区块的哈希的 inv 消息,表明它有更长的链。接收节点使用 getdata 请求块详细信息,远程节点使用命令块发送此信息。在处理完 500 个区块信息后,节点可以通过 getblocks 请求更多的区块信息。这些区块在被接收节点认证后被确认。

新区块的确认也可以通过矿工挖掘和发布区块来找到。扩散过程与上述类似。通过之前的连接,新的区块以inv消息的形式发布,接收节点可以通过getdata请求这些区块的详细信息。

sitechainnode.com 币看比特币行情走势图_比特币的交易数据怎么看_火币比特币交易手续费

5、交易广播

与对等节点的交易是通过 inv 消息实现的。如果收到getdata信息,则通过发送tx实现交易。对等点接收有关有效交易的信息并以类似的方式传播它。如果交易信息在一段时间内没有放入区块,该交易将从内存池中清除,原节点会重新发送交易信息。

6、行为不端的节点

对于所有广播,那些行为不端(通过发布错误信息占用带宽和浪费计算资源)的节点将受到惩罚。如果节点惩罚分数超过阈值 -banscore=,它将被禁止加入网络几秒钟。这个时间由参数-bantime=定义,默认值为86400秒,也就是24小时。

7、警告

为了应对可能出现的漏洞和攻击,比特币开发者提供比特币警告服务RSS。比特币用户可以使用 getinfo 命令查看其特定客户端版本的错误消息。

此信息通过警报消息尽可能多地传播给每个连接的对等方。

错误消息使用特定的 ECDSA 私钥进行签名,由极少数开发人员控制。

补充资源:如果想了解各种消息的详细结构和所有消息类别,可以参考比特币Wiki上的协议描述。

比特币的交易数据怎么看_sitechainnode.com 币看比特币行情走势图_火币比特币交易手续费

四、通过dns种子获取节点列表数据

1、什么是dns种子

返回比特币网络上的完整节点 IP 用于协助节点发现的 DNS 服务器地址。

2、在哪里可以找到它

我们在比特币源码中搜索关键字“seed.bitcoin.sipa.be”,最新的代码位置在chainparams中。在 cpp 中。

3、如何获取节点列表

这里需要用到开源项目,项目地址

下面开始具体操作。

我们使用的dns是seed.bitcoin.sipa.be

比特币的交易数据怎么看_sitechainnode.com 币看比特币行情走势图_火币比特币交易手续费

xiaoyu@xiaoyu-Parallels-Virtual-Platform:~/bitcoin-seeder$ dig -t NS testnet-seed. bitcoin.jonasschnelli.ch

再次查看项目文件夹,发现多了两个文件

dnsseed.dat

dnsseed.dump

查看 dnsseed.dump 文件,因此您有一个节点列表。

4、总结

将dns种子数据硬编码到项目中,也解决了分布式系统中先有鸡还是先有蛋的问题。

五、节点通信简述

比特币节点通常使用TCP协议,使用8333端口与相邻节点建立连接,在建立连接时还会有一个认证“握手”通信过程,确定协议版本、软件版本、节点IP、区块高度等

当一个节点连接到相邻节点时,它开始与相邻节点同步区块链数据(轻量级钱包应用程序实际上并不同步所有区块数据),节点之间交换一个getblocks消息,其中包含区块链的最顶层哈希本地区块链。如果一个节点识别出它接收到的哈希值不属于顶部块,而是属于一个不是顶部块的旧块比特币的交易数据怎么看,则称其自己的本地区块链比其他节点的区块链更强大。 long,并告诉其他节点该区块需要补充,其他节点发送getdata消息请求区块,验证后更新到本地区块链。

参考文章: