主页 > imtoken钱包最新版下载不能 > 比特币网络原理分析

比特币网络原理分析

本文是《比特币步步为营》的第五篇——比特币网络原理解析。 我们知道区块链的底层是一个P2P网络。 在本文中比特币工作原理,我们只会简单的讲一下比特币P2P网络的原理,不会涉及代码层面的知识。 在接下来的两节中,将进行代码分析。

1 P2P基础知识

之前讲过P2P知识——拓扑和内容路由的简单分析。 让我们在这里简单回顾一下:

1.1 什么是P2P

对等网络,即对等计算机网络,是一种在对等点(Peer)之间分配任务和工作负载的分布式应用架构,是由对等点对等点形成的网络或网络形式应用层的计算模型。

比特币工作原理_比特币 挖矿 原理_比特币挖矿机原理

1.2 P2P拓扑结构

P2P拓扑结构经历了四个阶段:集中式、纯分布式、混合式和结构化。

2 比特币网络 P2P

比特币采用上述P2P拓扑结构? 个人觉得应该介于纯分布式和混合之间,更倾向于混合。

3 节点发现

比特币挖矿机原理_比特币 挖矿 原理_比特币工作原理

比特币中有两种节点发现方式:

(1) 使用种子节点:比特币网络中会有若干个种子节点,这些种子节点是硬编码在比特币代码中的。 这些种子节点为新进入网络的其他节点提供路由功能。

当一个普通节点(如节点A)连接到种子节点时,会获取种子节点上其他节点(如节点B、C)的信息。 有了很多节点信息后,节点A会记录下来,等待下次重启,可以从DB中读取自己记录的节点信息。 如果自己记录的节点下线,会继续读取种子信息。

(2) 引导节点:如果已经知道一些节点信息,可以在启动时直接指定这些节点。

4 地址广播和发现

比特币工作原理_比特币挖矿机原理_比特币 挖矿 原理

新节点加入网络后,自身存储的其他节点信息不够用。 此时,它可以发送getAddr消息给连接的节点,比如种子节点。 收到getAddr消息的节点会查询自己缓存的peer信息比特币工作原理,并发送给请求的peer。

新节点加入后,发送addr消息,收到addr消息的节点会广播新节点的地址,这样新节点的信息很快就会传遍全网。

5 握手协议

发现节点后,要连接,连接的第一步就是握手。 握手的主要内容是检查对方是否是正确的节点,比如是否是同一个网络(networkId相同),版本号是否太旧等。

握手的步骤是一方(A)发送version消息,另一方(B)收到后发送verAck消息进行确认。 然后对方(B)发送version消息,等待(A)方的verAck。 经过这个交互过程,双方就可以建立连接,进行通信了。

比特币 挖矿 原理_比特币挖矿机原理_比特币工作原理

另外btcd版本的getAddr消息是在发送version消息的时候检查peer的数量是否满足一定的阈值,如果不满足就顺带发送getAddr消息。

6 连接管理

btcd版本的连接管理主要由connManager处理。 它定义了入站(传入请求)管理、出站(请求他人)管理、连接建立管理、连接消息管理等组件。

7 消息交换

比特币消息通信主要分为peer、block、message、inv等。 定义了一个staleHandler协程来监控消息处理的进度; 还定义了一个queueHandler协程,通过它调度所有的任务; 对于每条消息,定义了一个特殊的处理程序方法。

比特币 挖矿 原理_比特币挖矿机原理_比特币工作原理

8 参考资料

比特币源代码

比特币源码分析--P2P网络初始化

9 其他

本文是《比特币步步为营》的第五篇——比特币网络原理解析。

有什么问题可以直接留言,也可以关注公众号“chainerup”提问留言,或者加入知识星球“chainerup”~