主页 > imtoken钱包下载安卓教程 > P2P网络和区块链

P2P网络和区块链

imtoken钱包下载安卓教程 2023-03-11 07:23:07

提到区块链,就不得不提到P2P网络。 P2P是区块链技术的实现方式之一。 P2P和区块链有着密不可分的情节,都具有去中心化的特点。 在P2P网络中,一个节点,既可以是服务器,也可以是客户端。 每个节点都是平等的,并形成一个对等网络。 通常,套接字用于网络编程。 这就是P2P。

P2P中一般有4种网络模型,也代表了P2P发展的4个阶段:集中式、纯分布式、混合式和结构化模型。 下面分别介绍一下

1. P2P网络模型

1.中心化

即有一个中心节点存储所有其他节点的索引信息,索引信息一般包括节点IP地址、端口、节点资源等。 集中式路由的优点是结构简单,易于实现。 但缺点也很明显。 由于中心节点需要存储所有节点的路由信息​​,当节点规模扩大时,容易出现性能瓶颈; 而且还存在单点故障问题。

siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所_以太坊提币钱包

2.纯分布式

去除中心节点,在P2P节点之间建立随机网络,即新加入的节点与P2P网络中的某个节点随机建立连接通道,从而形成随机拓扑。 新节点加入网络的方式有很多种。 最简单的就是随机选择一个已经存在的节点建立邻居关系。 与比特币一样,它使用 DNS 查询其他节点。 DNS一般是硬编码到代码中的。 这些 DNS 服务器将提供比特币节点的 IP 地址列表,以便新节点可以找到其他节点建立连接。 走道。 新节点与邻居节点建立连接后,需要向全网广播,让全网知道该节点的存在。 全网广播方式是节点先向邻居节点广播,邻居节点收到广播报文后,继续向自己的邻居节点广播,以此类推,广播到全网。 这种广播方法也称为泛洪机制。 纯分布式结构不存在集中式结构的单点性能瓶颈和单点故障问题,具有很好的扩展性,但是泛洪机制引入了新的问题,主要是可控性差的问题,包括两个比较大的问题是容易形成泛洪循环。 例如,节点A发送的消息经过节点B到达节点C,节点C再广播给节点A,这样就形成了一个循环; 另一个棘手的问题是响应消息风暴问题是,如果节点A要请求的资源被许多节点拥有,那么在短时间内,大量节点会向节点A发送响应消息。同时,可能导致节点A瞬间瘫痪。

以太坊钱包怎么转币到交易所_以太坊提币钱包_siteweiyangx.com 以太坊可以提币

以太坊提币钱包_siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所

3.混合型

混合型实际上是集中式和分布式结构的混合体。 如下图所示,网络中有多个超级节点组成一个分布式网络,每个超级节点又有多个普通节点与其组成一个局部中心化网络。 当一个新的普通节点加入时,首先选择一个超级节点进行通信,超级节点再向新加入的节点推送其他超级节点的列表,由加入的节点根据具体情况决定选择哪个超级节点作为父节点。到列表中超级节点的状态。 这种结构的泛洪广播只发生在超级节点之间,可以避免大规模泛洪的问题。 在实际应用中,混合结构是一种比较灵活有效的组网架构,实现难度较小。 因此,目前很多系统都是基于混合结构开发和实现的。 事实上,今天的比特币网络也有这种结构,后面会详细说明。

以太坊钱包怎么转币到交易所_以太坊提币钱包_siteweiyangx.com 以太坊可以提币

4.结构化的P2P网络

它也是一种分布式网络结构,但又不同于纯分布式结构。 纯分布式网络是随机网络,而结构化网络是将所有的节点按照一定的结构有序组织起来,比如组成环形网络或者树形网络。 结构化网络的具体实现一般是基于DHT(Distributed Hash Table,分布式哈希表)算法的思想。 DHT只是提出一种网络模型,并不涉及具体实现。 它主要是想解决分布式环境下如何快速准确地路由和定位数据的问题。 具体实现方案包括Chord、Pastry、CAN、Kademlia等算法。 其中,Kademlia 也是以太坊网络的实现算法。 许多常用的 P2P 应用程序,如 BitTorrent 和 eDonkey 也使用 Kademlia。 限于篇幅,这些算法的具体原理不再赘述。 目前我们只需要了解DHT的核心思想即可。

二。 分布式哈希表

在P2P网络中,可以抽象出两种空间:资源空间和节点空间。 资源空间是所有节点保存的资源的集合,节点空间是所有节点的集合。 将所有资源和节点分别编号,比如将资源名称或内容用Hash函数变成一个值(这也是DHT常用的方法),这样每个资源都有一个对应的ID,每个节点也有一个ID ,建立资源ID和节点ID的映射关系,比如如果资源n的所有索引信息都存储在节点n上以太坊提币钱包,那么在查找资源n的时候,直接找到节点n即可,这样就避免了一般的洪广播can route更快、更准确地定位数据。 当然,在实际应用中,资源ID和节点ID之间并没有一一对应关系,但是由于ID都是数字,所以存在大小关系或者偏序关系等。基于这些关系,映射两者之间可以建立关系。 这就是DHT的核心思想。 DHT算法在资源编号和节点编号上采用分布式哈希表,使得资源空间和节点空间的编号具有唯一性、均匀分布等良好性质,能够满足结构化分布式网络的要求。

siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所_以太坊提币钱包

DHT实现方案:Chord、Pastry、CAN、Tapestry、Kademlia(以太坊使用)等。

综上所述,这就是P2P网络的理论基础。 不同的区块链可能使用不同的网络模型,但基本原理是相同的。后面会讲解最具代表性的两个区块链网络:比特币网络和以太坊网络

3. 比特币网络(混合)

首先,比特币网络中的节点主要有四个功能:钱包、挖矿、区块链数据库、网络路由。 每个节点都会有路由功能,但不是所有其他功能。 不同类型的节点可能只包含部分功能。 通常,只有比特币核心节点才会包含所有四大功能。

siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所_以太坊提币钱包

所有节点都将参与验证和广播交易和区块信息,并发现和维护与其他节点的连接。 有些节点会包含一个完整的区块链数据库,包括所有的交易数据,也称为全节点。 其他节点只存储区块链数据库的一部分,一般只存储区块头,不存储交易数据,它们会通过“简化交易验证(SPV)”完成交易验证,这类节点也称为SPV节点或Lightweight Node。 钱包一般是PC或手机客户端的一个功能。 用户可以通过钱包查看自己账户的金额、管理钱包地址和私钥、发起交易等。 除了比特币核心钱包是全节点外,大部分钱包都是轻节点。 挖矿节点与其他挖矿节点竞争,通过解决工作量证明 (PoW) 算法问题来创建新区块。 有的挖矿节点也是全节点,也就是存储了一个完整的区块链数据库。 这样的节点一般都是独立矿工(Solo Miner)。 还有一些挖矿节点不是独立挖矿,而是和其他节点一起接入矿池,参与集体挖矿。 这样的节点一般被称为矿池矿工(Pool Miner)。 这样就会形成一个本地中心化的矿池网络,中心节点是矿池服务器,其他所有挖矿节点都连接到矿池服务器上。 矿池矿工与矿池服务器之间的通信不是使用标准的比特币协议,而是矿池挖矿协议,矿池服务器作为一个全节点然后使用主网的比特币协议与其他比特币通信节点进行通信。

在整个比特币网络中,除了主网使用比特币协议作为不同节点之间的通信协议外,还有很多扩展网络,包括上面提到的矿池网络。 不同的矿池网络也可能使用不同的矿池挖矿协议。 目前主流的特定矿池协议应该是Stratum协议,它不仅支持挖矿节点,还支持瘦客户端钱包。 一个扩展的比特币网络,包括比特币协议主网、Stratum网络和其他矿池网络的各个节点,大致如下图所示:

以太坊提币钱包_以太坊钱包怎么转币到交易所_siteweiyangx.com 以太坊可以提币

以太坊提币钱包_siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所

此外,对挖矿也有特殊要求。 我们知道,矿工创建一个新区块后,需要广播给全网所有节点。 当全网接受该区块时,矿工的挖矿奖励被认为是有效的,然后可以对下一个区块进行哈希。 计算。 所以矿工必须尽量减少新区块的广播和下一个区块的哈希计算之间的时间。 如果仅使用上图所示的比特币协议网络在矿工之间传播区块,无疑会存在较高的网络延迟。 因此,需要一个专用的传播网络来加速新区块在矿工之间的同步传播。 这个专门的网络也被称为比特币传播网络或比特币中继网络(Bitcoin Relay Network)。

4.以太坊网络(结构化P2P网络)

与比特币一样,以太坊的节点也具备钱包、挖矿、区块链数据库、网络路由四大功能。 还有许多不同类型的节点。 除了主网,还有很多扩展网。 但与比特币不同的是,比特币主网的P2P网络是非结构化的,而以太坊的P2P网络是结构化的。 前面我们提到过,以太坊的P2P网络主要是通过Kademlia(简称Kad)算法实现的。 Kad是一种分布式哈希表(DHT)技术。 准确路由和定位数据的问题。 因此,下面主要讲解以太坊的Kad网络。

在 Kad 网络中,每个节点都有一个唯一的节点 ID。 另外,也会计算不同节点之间的距离,但这个距离不是物理距离,而是逻辑距离,是通过两个节点ID(符号为^)异或计算得到的,即A,公式为计算B的两个节点之间的距离是:D(A,B) = A.ID^B.ID。 XOR有一个重要的性质:假设a,b,c为任意三个数,如果a^b = a^c为真,则b = c必为真。 因此,给定节点a和距离L,存在并且只有一个节点b使得D(a,b) = L。这样,可以有效地测量Kad网络中不同节点之间的逻辑距离。

基于异或距离度量,Kad 还可以将整个网络拓扑结构组织成如下图所示的二叉前缀树,每个 NodeID 将映射到二叉树上的一个叶子。

以太坊钱包怎么转币到交易所_siteweiyangx.com 以太坊可以提币_以太坊提币钱包

以太坊钱包怎么转币到交易所_以太坊提币钱包_siteweiyangx.com 以太坊可以提币

映射规则主要是

用二进制形式表示NodeID,然后从高到低依次处理每一位0或1;

二进制的第n位对应二叉树的第n层;

如果该位为0,则进入左子树,如果为1,则进入右子树(反之亦然)

所有的bit都处理完之后,这个NodeID就对应二叉树上的一片叶子

在这种二叉树结构下,对于每一个节点来说,异或距离越近的节点距离越近。 然后,可以根据其异或距离的距离来拆分整个二叉树。 分裂规则是:从根节点开始,分裂不包含自己的子树,然后在包含自己的子树中分裂不包含自己的子树,以此类推,直到只剩下你。 以上图中的110节点为例,从根节点开始,由于110节点在右子树中,所以将左边的整个子树进行分裂,即包括000、001、001、001这三个节点的子树。和 010; 然后,到第二个子树,分裂出不包含节点110的左子树,即包含100和101两个节点的子树; 最后,再次拆分111。 这样一来,超过110个节点的整棵二叉树就分裂成了三棵子树。

子树分裂后,只要知道每个子树中的一个节点,就可以进行递归路由遍历整棵二叉树的所有节点。 但是在实际场景中,由于节点是动态变化的,一般每个子树的一个节点是不知道的,而需要知道多个节点。 因此在Kad中有一个概念叫K-bucket,每个bucket会记录每个子树已知的多个节点。 K-bucket其实就是一个路由表。 如果有m个子树,对应的节点需要维护m个路由表。 每个节点都会维护自己的m个K-buckets,每个K-bucket中记录的节点信息一般会包括NodeID、IP、Endpoint、与Target节点(即维护K-bucket的节点)的异或距离和其他信息。 在以太坊中以太坊提币钱包,每个节点维护的K-buckets数量为256个,这256个K-buckets会根据与Target节点的异或距离进行排序。 每个K-bucket中存储的节点数上限为16个。

siteweiyangx.com 以太坊可以提币_以太坊钱包怎么转币到交易所_以太坊提币钱包

在以太坊的Kad网络中,节点间的通信是基于UDP的,设置了四种主要的通信协议:

Ping:用于检测节点是否在线

Pong:用于响应Ping命令

FindNode:用于查找距离Target节点最近的异或的其他节点

Neighbors:用于响应FindNode命令,会返回一个或多个节点

通过以上四个命令,可以实现添加新节点、刷新K-buckets等机制。

Kademlia算法详解

5.总结

不同结构的P2P网络会有不同的优缺点。 比特币网络的结构显然很容易理解,实现起来也相对容易,而以太坊网络引入异或距离、二叉前缀树、K-bucket等,比比特币快很多。 此外,无论是比特币还是以太坊,它们实际上只是一种或多种协议的集合。 不同的节点实际上可以使用不同的具体实现。 例如,比特币有用 C++ 实现的 Bitcoin Core 和用 Java 实现的 BitcoinJ。 ; 以太坊还有Go语言实现的go-ethereum、C++实现的go-ethereum、Java实现的Ethereum(J)。