主页 > imtoken钱包注册教程 > 区块链高级认证

区块链高级认证

imtoken钱包注册教程 2023-03-08 07:34:30

区块链 P2P 网络分类

根据区块链应用的特点,P2P网络根据P2P网络是否去中心化和节点地址是否结构化,分为四类。

四种P2P网络结构各有优缺点,也适用于不同的应用场景。比特币最初的目标是建立一个去中心化的交易平台,致力于替代银行等金融机构实现价值转移和交换。同时,中心化的P2P网络不符合区块链的去中心化特性,没有相关产品。中心化的P2P网络类似于银行等传统中介机构。本文所讨论的中心化系统是指银行类金融中介,不具备P2P功能,仅作为实现区块链产品集成的基准。比较判断。中心化的 P2P 网络是区块链产品致力于替代的标志系统。通过对中心化系统的讨论,本文从P2P应用、区块链应用、是否去中心化、节点能否准确搜索等方面对四种P2P网络进行了比较。

在这里插入图片描述

比特币的 P2P 网络和节点发现

比特币开启了区块链时代,任何节点开放客户端后都可以实现去中心化、可信的比特币交易。然而,当一个全新的节点加入比特币网络时,首先要做的是连接到网络。由于比特币的完全去中心化,节点自由加入和退出,使得新加入的节点无法获得网络中的节点地址来访问网络。为此,比特币设计了三种节点发现方式:

a) 种子节点。Napster 使用中央服务器进行索引。由于中心服务器的存在,新增节点可以稳定接入网络。比特币虽然没有中心化服务器区块链硬分叉如何实现的,但也采用了Napster的思路来设置“种子”节点。比特币硬编码长期稳定节点的子集,在初始启动时提供对网络的初始访问。新节点利用这些稳定节点作为中介连接其他节点,可以不断获取区块链网络节点地址列表,因此这些节点也称为种子节点。下图显示了比特币的源代码。框中的这些地址是初始化比特币时加载的种子地址。

在这里插入图片描述

b) 地址广播。一个节点连接上后,可以以这个节点为中介,获取网络中其他节点的地址。这种方法称为地址广播。广播包括以下两种方式: (a) 主动广播(推送)节点 A 的地址。比特币通过 Net.AdvertiseLocal() 方法将自己的节点信息推送给其他节点。如图 4 所示,这是一个主动的单向过程。Node B收到后,只存储在本地,不响应。同样,Node B 和其他节点也可以通过推送自己的地址,将自己的地址发送给其他连接的节点。该方法使得连接节点能够获得自身节点的地址信息。(b) 主动获取(拉取)其他节点地址。推送自己的地址仅限于它连接的节点,并且仅仅广播地址是不够的。比特币还有另一种地址广播机制,通过 Net.Addresses() 方法主动拉取地址。如图4所示,节点A请求地址后得到节点B,节点B返回节点B记录的地址信息。一次请求一个响应,避免浪费网络资源。Node B 也可以通过向其他节点请求地址来扩展自己的地址库。其他节点主动推送的地址也在拉取动作时返回给请求节点,达到地址广播的目的。比特币地址获取的两种方式是独立的,可以防止攻击者伪造大量虚假地址并大范围传播,

在这里插入图片描述

c) 地址数据库。为了避免种子节点连接数和带宽的限制,比特币节点连接网络后,通过广播获取其他节点信息,并将结果保存起来,以便下次访问网络。比特币客户端将获取到的节点信息保存在本地peers.dat文件中,并使用levelDB格式存储数据。如果节点A和已建立的连接节点B之间没有数据通信,节点A会周期性地向节点B发送ping消息(一个8位的随机数);节点 B 会回复一个 pong 消息,该消息是一个包含 ping 随机数的响应消息,以保持连接。如果一个节点持续连接 20 分钟而没有任何响应,则认为它与网络断开连接。比特币客户端启动后,

比特币通过以上三种方式保持稳定的网络访问,实现了对频繁进出节点地址列表的维护,并且不需要中心组织的存在来保持节点自由加入网络,从而保证了网络的稳定性比特币 P2P 网络。

以太坊的 P2P 网络和节点发现

以太坊是在比特币的基础上发展起来的,借鉴了很多比特币的思想。就连白皮书也有一半的内容来描述比特币的功能。因此,以太坊不仅可以实现类似比特币的交易系统,还希望构建一个基于区块链的生态环境,拓展依托以太坊的去中心化应用Dapps。以太坊开发者开发了分布式消息平台 Whisper 和分布式存储平台和内容分发服务平台 Swarm。这些应用程序的实现依赖于节点准确地根据需要找到另一个节点的地址的能力,而不是结构。P2P网络结构无法满足。因此,以太坊采用结构化的 P2P 网络,通过 DHT 技术进行结构化。DHT通过哈希算法将P2P网络节点哈希成标准长度的数据,整个网络形成一个巨大的哈希表。每个参与节点都有一部分哈希表,并存储和维护自己的数据。哈希表分布在 P2P 网络的每个节点上。任何接入 P2P 网络的节点在哈希表中都有自己的 ID,可以通过 DHT 进行搜索。其他节点也可以根据ID值准确搜索到多个节点。虽然 DHT 支持节点自由加入或离开,但 DHT 复杂的维护机制使其无法适应节点的高频变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。整个网络形成一个巨大的哈希表。每个参与节点都有一部分哈希表,并存储和维护自己的数据。哈希表分布在 P2P 网络的每个节点上。任何接入 P2P 网络的节点在哈希表中都有自己的 ID,可以通过 DHT 进行搜索。其他节点也可以根据ID值准确搜索到多个节点。虽然 DHT 支持节点自由加入或离开,但 DHT 复杂的维护机制使其无法适应节点的高频变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。整个网络形成一个巨大的哈希表。每个参与节点都有一部分哈希表,并存储和维护自己的数据。哈希表分布在 P2P 网络的每个节点上。任何接入 P2P 网络的节点在哈希表中都有自己的 ID,可以通过 DHT 进行搜索。其他节点也可以根据ID值准确搜索到多个节点。虽然 DHT 支持节点自由加入或离开,但 DHT 复杂的维护机制使其无法适应节点的高频变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。哈希表分布在 P2P 网络的每个节点上。任何接入 P2P 网络的节点在哈希表中都有自己的 ID,可以通过 DHT 进行搜索。其他节点也可以根据ID值准确搜索到多个节点。虽然 DHT 支持节点自由加入或离开,但 DHT 复杂的维护机制使其无法适应节点的高频变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。哈希表分布在 P2P 网络的每个节点上。任何接入 P2P 网络的节点在哈希表中都有自己的 ID,可以通过 DHT 进行搜索。其他节点也可以根据ID值准确搜索到多个节点。虽然 DHT 支持节点自由加入或离开,但 DHT 复杂的维护机制使其无法适应节点的高频变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。DHT复杂的维护机制使其无法适应高频节点的变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。DHT复杂的维护机制使其无法适应高频节点的变化。以太坊使用 Kadenlia (KAD) 协议,这是一种 DHT 协议,可以快速准确地查找地址。

卡德简介

与传统的 DHT 相比,KAD 具有以下优势:

KAD的查询请求是并行异步的,可以避免节点退出或故障导致查询失败;

KAD 简化了节点为了相互了解而必须发送的配置消息的数量,并在查找时自动交换配置信息;

KAD 使用二叉树节点划分为多个 KAD 桶,以简化查询结构。使用单向异或算法(XOR)计算距离,保证对同一targetID的所有查询都会收敛到同一路径,从而减少节点间查询网络消耗,提高查询效率;

节点用来记录其他节点是否可用的算法可以防止一些常见的拒绝服务(DOS)攻击。与传统 KAD 相比,以太坊 KAD 具有不同的收敛方式。传统的 KAD 使用自己的 selfID 作为收敛目标,而以太坊不仅使用自己的 selfID 作为收敛目标,还使用随机生成的 targetID 作为收敛目标,生成更大范围的哈希表。

以太坊节点发现

种子节点

  a)硬编码种子节点。同比特币及其他 P2P软件一样,新节点使用硬编码的种子节点,接入以太坊 P2P网络。它由节点信息、网络地址URL和数据协议三部分构成。节点信息是 16进制转换过的128bit节点ID;网络地址 URL是分割符@后的 IP地址;数据协议是 TCP监听端口号(listening port)30303或者 UDP发现端口号(discovery port)30301。
  b)矿池种子节点。通过IP查询工具查询图 5中的地址,分别来自爱尔兰、美国、巴西、澳大利亚、新加坡以及德国。跨国通信的高延迟无法满足国内节点网络需求。为了更加便捷地接入网络,EthFans发起星火节点计划。EthFans鼓励国内对以太坊项目感兴趣的组织和个人分享其稳定运行节点地址信息,筛选其中优质节点,打包成 staticnodes.json文件后发布。以太坊用户下载后可以连接到更多国内节点,加快了以太坊国内的网络速度。类似的配置文件还有 trustednodes.json,该文件保存信任节点信息。这两个文件不限定内容,只限定文件名及格式,以固定文件名的形式硬编码保存在配置文件内,配置的节点会在以太坊启动时加载。

在这里插入图片描述

在这里插入图片描述

2)地址数据库类似于比特币,以太坊也使用地址数据库来存储连接的节点。以太坊使用 LevelDB 作为历史文件格式来生成多个历史数据库文件。对于第一次连接以太坊网络的节点,地址库为空,地址列表逐渐被后续广播的地址填满。对于再次连接以太坊的节点区块链硬分叉如何实现的,以太坊在启动时使用 loadSeedNodes() 方法将种子节点和历史数据一起读取,从而快速高效地连接到以太坊 P2P 网络

3)地址查询以太坊P2P网络最大的特点就是可以进行地址查询。以太坊的 KAD 参数配置如图 7 所示。

在这里插入图片描述

4)地址广播因为固定的KAD表结构,每个节点根据自己的nodeID有一个唯一的固定位置,所以以太坊没有办法主动广播自己的地址。但是通过doRefresh()方法的lookup()方法,搜索离自己最近的16个节点进行连接,然后随机生成3个targetID,使用lookup()方法查找节点。搜索后,使用乒乓方式进行双向通信。另一个节点会将连接的节点保存到自己的KAD桶中,并将节点信息存储在地址数据库中。这样就将自己节点的地址通知给其他节点。目标。

Hyperledger 的 P2P 网络和节点发现

随着比特币和以太坊的飞速发展,区块链技术的应用范围不再局限于交易系统。对于一些企业级的问题,区块链也是一个完美的解决方案,比如物流链、供应链等非中心系统,实现货物追踪、防篡改等问题。Hyperledger Fabric 应运而生。Fabric作为企业级区块链应用,对每个节点都有不同的权限,交易处理只能通过超级节点完成。尽管 Fabric 没有实现去中心化,但它可以通过在不同节点之间划分工作负载来优化网络效率。为了保证区块链网络的安全性、可靠性和可测量性,Fabric 采用 Gossip 作为 P2P 网络传播协议。Gossip 支持超级节点网络架构。超级节点具有稳定的网络服务和计算处理能力。他们负责Fabric的交易排序和新区块广播功能,维护Fabric网络信息更新,节点列表管理等内容。

八卦的描述

Gossip 是基于传染病的传播机制形成的,作为底层通信协议被广泛应用于分布式系统中。Gossip 并不是一个新的 P2P 网络理念。与传统的泛洪和路由算法相比,Gossip 提供了清晰的网络通信类型。Facebook 开发的 cassandra 使用 Gossip 协议,这是一种流行的分布式结构化数据存储解决方案。Gossip 负责维护新节点的发现,循环检查节点,淘汰离线节点,更新 Fabric 网络上的节点列表。Fabric 通过广播与节点列表中的节点通信,发现新的区块或本地错误和丢失的区块,并更新和维护本地账本数据。Gossip 协议有以下三种通信类型:

    a)Push,即主动信息推送。假设自身为节点 A,随机选择节点列表中的 N个节点作为目标节点。主动推送包含节点 A自身 ID的信息至 N个节点,N个节点接收后,对比自身数据、更新自身信息。N个节点也可以继续 push信息至其他节点。
    b)Pull,即主动拉取信息。假设自身为节点 A,随机选择节点列表中的 N个节点作为目标节点。节点 A将自身 ID和请求内容如节点列表、区块信息等封装成请求报文,主动发送给N个节点,N个节点收到请求后将相应信息返回给节点 A,节点 A对比本地数据后更新自身本地数据。
   c)Push/Pull,即混合模式。该模式虽然综合了 push与 pull的优点,但是网络资源消耗较大。假设自身为节点 A,pull取 N个节点信息后同节点 A本地数据比较,再将较新数据 push至N个节点,N个节点比较后更新自身数据。每个节点发送消息前都会通过自身节点的安全标志符PKI_ID和加密签名封装消息。恶意节点没有 Fabric证书颁发机构(CA)认证的密钥而无法冒充其他节点发送信息,保障通信安全性。Gossip启动流程的 Fabric源码

在这里插入图片描述

Fabric 节点发现

1)种子节点Fabric不是硬编码的形式,而是通过core.yaml配置文件配置的配置文件的形式。以太坊采用 Viper 作为配置文件加载方案。Viper是国外电脑爱好者spf13(昵称)编写的开源配置方案。它不关心文件格式,可以获取本地环境变量,也可以从远程端获取配置文件。同时它还具有缓冲机制,无需重启服务即可使用。动态加载新配置项的值并实时生效。这对 Fabric 网络至关重要,超级节点管理员可以在不影响系统运行或重启系统的情况下更新配置信息并使其生效。但是,由于比特币和以太坊的去中心化,所有节点只有在需要改变时才能投票。一旦无法达成共识,就会产生分叉。例如,比特币分为比特币(BTC)和比特币现金(BCH)。以太坊然后它分叉成以太坊(ETH)和以太坊经典(ETC)。种子节点的加载过程如下:

a) 启动Gossip服务的newGossipService()方法,在服务启动过程中调用g.connect2BootstrapPeers()方法加载种子节点。

b) 通过g.BootstrapPeers()方法读取core.yaml配置文件,获取bootstrap超级节点的值,保存为endpoint终端地址的临时变量。

c) 启动连接 g.disc.Connect 方法将端点作为参数传递。

d) 使用d.createMembershipRequest()方法生成请求信息,赋值给临时变量m,加密签名为请求信息req。

e) 将endpoint与自己的PKIID结合,使用god.sendUtilAcked()方法将req信息发送到对应的endpoint。

f) 获取端点节点返回的信息后更新地址库。

2)地址数据库Fabirc是超级节点的形式,需要访问超级节点;并且使用场景是企业级应用,所以不需要保存历史数据,因为保存数据和验证节点是否在线需要大量的资源。由于有超级节点,所以每次只需要从超级节点取地址即可。超级节点还完成地址数据库的工作。加载种子地址后,将得到的节点列表保存在内存中,而不是比特币和以太坊的文件格式。节点通过解析收到的消息来检查节点是否正常,然后维护节点列表。同时,它还定期与连接节点通信。一旦连接的节点在配置的时间后没有响应,

3)地址广播Gossip通过启动g.syncDiscovery()的loop方法,定时ss循环寻找节点。通过随机选择节点列表中的N个节点,push请求节点列表信息并同步自己的节点列表。core.yaml中默认配置S为4s,N为3个节点,可根据需要进行更改。在推送的同时,它还将自己的节点信息传递给其他节点,并广播到全网。

4)地址查询Fabric没有业务场景需要查询某个ID的地址,所以目前不支持地址查询。但是由于超级节点的存在,超级节点拥有所有连接节点的地址信息,可以通过扩展Fabric代码来增加功能进行搜索。

分析比较

每种 P2P 网络结构都有自己的优点和缺点。针对不同的区块链应用场景和不同的业务需求,P2P网络的使用方式也不同。区块链的主要应用场景是代币交易系统。为了更直观地比较不同区块链系统的P2P网络结构,采用银行类中介系统来替代中心化网络结构的产品。网络结构属于建筑设计层面,不同于功能点。本文仅描述不同区块链产品的网络结构,不做分数对比。区块链作为一种创新产品,其主要特点是去中心化、匿名性、可信赖性和智能合约,属于功能创新。本文通过分析区块链产品源代码的技术实现,分别对应去中心化、隐私保护、安全性、应用丰富性四个维度,对其底层架构和技术特点进行分析比较。代表不同的功能点,功能点属性具有相同的权重。P2P网络虽然不是区块链的创新内容,但作为区块链的底层技术支撑,网络的好坏决定了区块链产品的成败。本文从源代码技术的角度,将P2P网络作为区块链的一个功能点进行分析比较。通过从访问效率维度评估区块链P2P网络的优缺点,假设五个评价维度都是功能点属性是合理的。, 重量相同。

1)去中心化P2P网络是区块链分发的基石。自比特币成功以来,区块链分布式去中心化的理念深入人心。传统中央金融机构的所有交易都必须由中央系统处理,参与节点之间没有直接的通信,完全是中心化的。比特币和以太坊都是完全去中心化的,所有节点都拥有相同的权限。虽然有种子节点,但在结构上与普通节点没有区别,都是比较高性能和高稳定性的节点。两者执行相同。Fabric 相当于一个分布式集中式系统。超级节点具有中心化服务器的功能。同时,超级节点也是具有分布式特性的分布式集群。因此,Fabric 的去中心化性能介于银行系统和比特币以太坊之间。.

2)节点接入网络效率节点接入网络需要做两件事:

  a)需要发现节点接入区块链网络;
  b)需要同步区块账本数据等信息才能使用区块链服务。银行类中心系统所有维护工作都由中心系统负责,节点接入即可使用服务,所以节点可以快速接入/退出,接入效率最高。由于没有中心节点,账本保存在本地,比特币和以太坊都需要同步全部区块后才进行共识挖矿。但比特币节点地址管理无须构建维护 DHT,可以直接广播而不用进行查找,所以节点发现效率高于以太坊。Fabric有可以灵活配置的超级节点,所以接入效率高于比特币,但弱于有强大性能服务器的银行类金融系统。

3)为了安全,有两种常见的区块链攻击方式:

  a)节点伪造,冒充其他节点进行交易;
  b)Dos攻击,攻击服务提供者使系统瘫痪。中心化金融系统除了采用多种加密方式外,还绑定个人信息,在交易过程中结合人脸识别、PIN密码、指纹及绑定个人信息的智能卡、与密码结合的双重保障等多种方式确保交易安全,强大的网络及服务器能力也使 Dos攻击变得非常困难。比特币与以太坊采用账户与节点分离的设计,不限制节点的加入与退出,使得节点伪造失去意义;所有节点通过共识机制提供服务,无中心系统,Dos只能攻击整个网络,而这样的代价是巨大的,迄今为止没有成功攻击比特币与以太网的 Dos的案例。Fabric采用 CA节点分配密钥以避免伪造节点,同时利用分布式超级节点抵抗攻击。Fabric在安全性上相对比特币、以太坊增加了节点管理,但认证要求弱于银行类系统,所以安全性介于两者之间。

4)隐私保护身份信息隐私保护分为两个层次:基础层次是身份标识保护;高级是不跟踪用户登录行为。由于区块链的去中心化特性,区块链中的隐私问题对应两个方面:基层节点的IP地址是否匿名,以及高级层的身份信息是否保密。节点的IP地址包含物理地理信息等,可以作为节点的身份标识,但是存在一个物理节点被多个用户使用的情况,身份信息可以准确定位用户并跟踪用户行为。由于以太坊有 DHT 来保存节点 IP 地址信息,因此可能是针对性攻击。账户,如比特币,不包含身份信息以保护隐私。Fabric 节点信息存储在中央服务器中。虽然节点之间使用随机连接,但IP地址、身份信息等内容都暴露给超级节点,超级节点对超级节点是公开的,对普通节点是匿名的,所以匿名是在中心系统和分布式系统之间。对于银行类型的中央系统,身份信息是身份验证信息的一部分。身份证等信息对中心服务器开放,但节点不能通信。类似银行的中央系统负责保护身份信息。一旦中央系统作恶,就有可能泄露私人信息。比特币使用泛洪广播,无法定位该节点是最初发送信息的节点还是转发节点;节点地址信息受到保护;账户采用匿名方式保护用户的身份信息。

5)应用的丰富性 P2P网络使区块链系统中的节点能够相互通信,形成系统网络通信的底层。在此基础上,区块链上层扩展了一系列应用。银行系统虽然功能丰富,但由于是中心化系统,参与者无法发布智能合约、分布式扩展应用等,限制了应用扩展。由于比特币不支持智能合约,它的主要功能还是交易系统,所以它的扩展应用最少。以太坊DHT支持精准搜索,可以精准定位范围内的节点或节点地址进行通信,如点对点通信、点对点文件传输等功能,并且在应用丰富度方面表现最好。Fabric支持智能合约,可以像以太坊一样构建扩展应用,但由于没有DHT,不支持精确地址的点对点通信,应用扩展功能弱于以太坊。