区块链中的网络结构和交易扩散

in #cn3 months ago

点对点网络是搭建区块链建筑的混凝土。

网络模型

在日常工作生活中,我们接触的大部分网络应用架构都是客户端 - 服务器模型(CS应用架构)。

CS模型的运行机制是这样的:各个客户端向服务器发送请求,而服务端负责接收并处理请求,最终给客户端返回处理结果。
image.png

可以清晰认识到这是一个中心化的网络架构,其服务能力完全取决于中心的服务器,如果中心服务器因意外导致宕机,那整个服务就瘫痪了。整个应用的可用性通常依赖于服务器的活性,与客户端无关。

单点故障(Single Point of Failure,简称SPoF)是指在一个系统或网络中,某个组件、设备、服务或应用的失败会导致整个系统或部分系统无法正常工作的情况。简而言之,单点故障是系统中的一个薄弱环节,一旦这个环节出现问题,就可能引发更广泛的系统故障或服务中断。

P2P网络: 点对点网络则完全不同,它是一种分布式的网络架构,并不存在单一的中心服务器。网络中每个节点的权利与义务都是一致的。

image.png

每个节点都拥有向网络中其他节点发起请求的权利,同时也有着必须响应其他节点请求的义务。

P2P(Peer-to-Peer)网络模型是一种分布式网络架构,其中每个参与者(称为“节点”或“对等体”)既是客户端又是服务器。在P2P网络中,节点可以直接相互通信和交换数据,而不需要中央服务器来协调或控制这些交互。这种模型与传统的客户端-服务器模型形成对比,在传统的客户端-服务器模型中,用户(客户端)从中央服务器请求和接收资源或服务。

P2P网络模型的主要特点包括:

  • 去中心化
    P2P网络没有中央控制点,每个节点都平等地参与网络中的数据交换和通信。

  • 资源共享
    P2P网络能够自动组织和配置,新节点可以随时加入或离开网络,而不会影响网络的整体功能。

  • 自组织
    随着更多节点的加入,网络的总体资源和带宽可以增加,从而提高网络的可扩展性。

  • 可扩展性
    P2P网络由于其分布式特性,能够抵御节点故障和网络攻击,即使部分节点出现问题,网络仍然可以继续运行。

  • 弹性和容错性
    P2P网络的核心优势之一是资源共享,用户可以共享文件、带宽、存储空间和其他资源。


Q: 节点权利与义务的对等意味着什么呢?

A: 代表点对点网络的可用性是随着节点数的增多而增强的,网络的运行并不依赖任何单一节点,节点可以任意地加入或者退出。即使一些节点宕机或者遭受攻击,只要还有正常运行的节点,整个系统依旧可以照常运作。

区块链是一种摒弃可信任第三方的技术手段,而中心化网络架构俨然就是为第三方中介量身打造。区块链需要摆脱中心节点的束缚,将权利与义务分散到每个节点,而采用点对点网络模型,正好顺应了这一思想


网络拓扑结构

区块链的去中心化是相对去中心化,而绝对去中心化只是一个理想状态,如果对应到点对点网络,这其实是由点对点网络的拓扑结构决定的。

P2P的网络拓扑结构主要分为2大类:结构化和非结构化拓扑。

网络拓扑结构是指计算机网络中各个节点(如计算机、打印机、路由器等)的物理布局或逻辑关系。它是网络设计和分析的基础,影响着网络的性能、可靠性、扩展性和管理。理解网络拓扑结构有助于更好地规划和维护网络统。

中心化网络中,客户端要想让服务器响应自己的请求,必须先将自己的请求发送到服务器,而这就要求客户端知道服务器在哪,就像你上网必须要知道网址一样。而点对点网络则不一样,所有节点互为服务器客户端,因此节点必须知道其他节点的地址,才能加入网络。

P2P 中节点的发现和加入网络拓扑中是一个需要思考的问题。对节点发现机制处理的不同,也就形成了不同的网络拓扑结构

  • 中心索引节点
    引入了一个中心索引节点,用来保存其他所有节点的接入信息。新节点的加入首先将自身信息传入中心节点,从而换取已在网络中其他节点的连接信息,随后与其他节点组成点对点网络,这种结构与我们使用搜索引擎进行信息检索是类似的,但存在单点故障的可能性,一旦中心索引节点宕机,新节点将无法加入网络。
    image.png
  • 无中心化任意节点
    新节点选择连接一个已存在网络中的节点,被连接的节点可以告知新节点它连接的其他节点信息,这样新节点可以随机选择再连接到其他节点,这样就形成了一张没有规律的网络拓扑结构。
    image.png
    此种结构节点加入与发现效率比较低下,依赖本地网络环境。

  • 种子节点
    整个网络由多个种子节点形成主干网络,而其他普通节点则连接到某个种子节点,这样就形成了整体分散局部集中的混合结构
    image.png

  • 结构化网络
    跟上面讲的三种拓扑不同,节点间的连接遵循某种算法,组成了一种有序的结构化网络,比如树形网络结构。大多数结构化网络的算法都是基于分布式哈希表算法实现的,这是一种用于在大量节点的系统中快速定位目标节点的索引算法。


区块链网络拓扑

不同的链网使用的拓扑结构不同,导致相应的实现算法也不一致。

比特币采用的是类似于混合型的网络拓扑结构,一个新节点的加入需要给节点指定几个已在比特币网络中的相邻节点信息,可以是普通节点,也可以是种子节点。

当建立节点间连接以后,新节点将自身信息发送给相邻节点,相邻节点再将新节点的信息依次转发给它们各自的相邻节点,从而保证了新节点信息在网络中被广泛传播。新节点也可以从相邻节点获取该节点的相邻节点信息,从而选择性地连接更多节点,增强节点自身与整个网络连接的稳定性。

比特币中的点对点网络相对简单,也更容易理解,但信息传递的效率不高,并且对网络带宽的负载要求较高

以太坊的选择则不太一样,使用的是结构化网络拓扑,打造这种结构,离不开基于分布式哈希表思想的Kademlia 算法(后面简称Kad 算法)。

简单来讲,Kad 算法定义了一种节点间距离计算的方法,用于新节点的发现。那具体怎么计算呢?
image.png

  1. 节点 A 首先从自身存储节点信息的 K 桶中找出 2 个与自己距离最近的节点(自身节点关联节点B,节点C)
  2. 之后请求这 2个节点,要求他们从各自的 K 桶中分别找出 2 个与节点 A 更近的节点。(节点B:节点D/F近;节点C: 节点E/F近。)
  3. 那么节点 A 最多可以得到 2 × 2 个新节点信息,随后再请求这 2×2 个新节点中距离节点 A 最近的 2 个节点。让它们再分别返回与节点 A 距离更近的 2 个节点,整个过程持续迭代,直到没有新节点被发现。(返回节点E,F,无新节点)

通过这种办法,节点 A 只与自己距离最近的节点连接,这保持了以太坊网络中节点的有序

但你需要注意,节点间的距离是逻辑距离,而并非是物理距离,也就是说即便两个以太坊节点运行在同一台电脑上,它们之间的逻辑距离也可能无限远,这是算法本身导致的


交易的扩散

区块链网络不生产交易,而只是交易的搬运工。(如下图简单展示区块链网络)
image.png

从区块链网络示意图中可以看到,在区块链网络外围有大量的手机、电脑、汽车等外联设备,这些设备与任意的区
块链节点连接,就能从该节点获取与自身相关的信息,诸如余额、历史交易等等。

同时,外联设备所构建的交易会随之发送到与之相连的节点,所以它们是区块链网络的交易源头。

Q: 那么外联设备将交易发送至某一区块链节点之后,交易在区块链网络中又是如何扩散的呢?
A: 简单如下图例子,通过箭头方向表示交易从任意外联设备产生的交易,是如何在区块链网络上扩散交易信息。
image.png

交易扩散的通用逻辑:
当交易被发送至连接节点后,节点随后就将交易发送到了和它连接的、相邻的其他节点,其他节点依次将交易扩散给其连接的节点,而最终会有一个时刻,所有的节点都会收到该交易。

不同网络拓扑对重复接收相同交易处理上的处理会有差别。

  • 以太坊网络的节点只与自己最近距离的相邻节点连接,交易的扩散并不存在回路的可能性,它的扩散路径更像是一种单向的持续向外广播,就像水永远只向低处流一样,交易会逐渐远离最初的节点,交易扩散效率较高

  • 比特币的交易扩散对此的处理则有所不同。它的网络拓扑是随机的,交易扩散的时候是扩散至与之连接的节点,但扩散前并不知道对方是否已经接收过相同的交易,因此网络扩散的效率是较低的。随着网络节点规模的大,节点间连接关系更为无序,大量的网络带宽浪费在对交易的重复扩散中。节点接收到重复交易并不会再次理会,而是直接丢弃,白白做了无用功。

  • 比特币对区块的扩散也遵循交易扩散的通用逻辑,只不过此时并不需要外联设备的参与,而是由首先满足共识条件的矿工节点发出。

总的来说,点对点网络是区块链中最常用的网络交互模型,相比于中心架构的客户端服务器模型,每个节点具有对等的权利与义务,与区块链的去中心化特性相得益彰。

但点对点网络节点发现机制比中心化网络复杂得多,对此处理的不同衍生出中心、随机、混合及结构化等不同的网络拓扑结构。不同区块链有不同的选择,影响了区块链网络对交易及区块扩散处理上的不同。

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.028
BTC 64078.16
ETH 3471.05
USDT 1.00
SBD 2.52