区块链P2P网络

article/2025/9/27 22:19:24

区块链P2P网络

阅读大概需要10分钟

前言

上两篇文章中我们聊了共识机制,今天我们聊一下区块链技术中的另外一个核心技术点:P2P网络(Peer to peer networking)。首先澄清一点的是这里讲的P2P这个概念跟平时我们在互联网金融圈提及的P2P概念不一样,这里聊的区块链技术P2P是指点对点的对等网络,它是区块链系统技术中的重要组成部分,而并非是互联网金融的网络借贷P2P。从当前p2p技术应用领域来看,它的应用已经非常成熟,也非常广泛,从文件共享到协助处理,从流媒体到点对点通信技术,像VoIP,BT,电驴 等等。

P2P网络主要的特点

去中心化

可扩展性

健壮性

高性价比

隐私保护

负载均衡

 

什么是区块链P2P网络

区块链P2P网络是一个去中心化的点对点网络,这意味着跟传统网络C/S结构模式不一样,它是没有服务端,客户端的概念,它是由多个节点成员组成的网络结构,每个节点都是安全的网络成员,彼此节点之间处于对等的地位,相互节点之间共享资源,它既是资源的提供者(客户端)也可以资源的接受者(服务端),节点之间的通信一般采用socket 编程方式进行通信。

P2P网络结构是扁平化的拓扑结构,相互节点之间没有层次之分,如图示。

区块链P2P网络中的节点功能主要有:钱包交易功能、挖矿功能、区块链数据库功能、网络路由功能。

钱包交易功能:发起转账交易、查看账户余额、管理用户钱包地址的公钥、私钥。

挖矿功能:将用户的交易打包产生新的区块,与其它挖矿节点具有竟争性。

区块链数据库功能:存储所有区块交易数据信息,一个完整的区块链数据库容量是比较大,像比特币来讲它的Size 大于140G。

网络路由功能:每个节点必须具备的,寻找附近节点的连接;比如比特币网络中使用硬编码DNS-seed方式来做初始节点发现,以太坊采用Kademlia(Kad)算法实现节点间路由,定位连接。

 

区块链P2P网络的节点

全节点:全节点需要参与区块的校验,对交易进行确认,以及交易信息的广播,因此全节点必须包含完整的区块链数据库副本,包括所有交易的数据信息,另外全节点也必须具备执行路由的操作,帮助节点与节点之间的连接发现,全节点越多就直接影响整个网络交易的效率,因为它们执行决策功能,决定了一个区块和一笔交易的是否有有效性。

矿工节点: 矿工节点一般是运行在性能比较高的硬件上(上一篇文章有提到“PoW挖矿机的进化史”),目标是通过解决工作量证明(PoW)算法问题,与其它矿工节点抢夺记账权。如果挖矿节点同时也存储了完整的区块链数据库,这样它属于是全节点,这种节点也称为独立矿工(Solo Miner)。另外有一部分矿工节点是由多个单独节点联合组成连接到矿池,参与集体挖矿的,这种节点叫矿池矿工(Pool Miner)。这种矿池矿工节点,一般是由一个内部矿池网络搭建,中心节点是矿池服务器,然后由分散的矿工通过矿池内部协议连接到矿池服务器,然后再由矿池服务器作为一个全节点方式与其它区块链节点通过主网方式进行通信连接。

SPV(Simplified Payment Verification)节点:也叫轻节点,简单支付验证,这类节点它不会存储完整的区块链数据库,只存储其中一部分,而不会存储所有交易数据,例如它只存储区块头的Hash数据。SPV节点主要完成支付交易的校验,不过它不是验证所有的交易,而只是一个交易子集,例如,转账到某个指定地址的交易。一个SPV节点依赖于全节点来获得数据,允许多个SPV节点连接到一个全节点。钱包应用就是采用SPV节点方式,个人不需要下载完整的区块链数据库,也可以完成交易验证。

 

区块链中P2P节点交易过程

  1. 通过中心节点创建区块链数据结构。

  2. 中心节点创建一个创世钱包地址,并创建创世区块,同时生成一个钱包地址数据库表和一个区块链数据库表。

  3. 中心节点备份一个只包创世区块的区块链数据库genesis.db。

  4. 启动钱包节点连接到中心节点,并请求下载区块链数据库表。

  5. 启动矿工节点连接到中心节点,并请求下载区块链数据表。

  6. 钱包节点创建多个新的用户钱包地址。

  7. 矿工节点创建矿工钱包地址。

  8. 用户发起转账交易,由钱包节点确认一笔新交易发起。

  9. 矿工节点接收到新交易,并先将一笔新交易存放到内存池。

  10. 当矿工节点交易内存池达到一定数量,即发起打包一个新区块确认,并广播给全网节点。

  11. 中心节点校验确认新区块完成,修改区块链数据表,并广播给所有钱包节点。

  12. 钱包节点收到新区块交易确认广播后,与中心节点进行数据同步。

  13. 用户基于钱包节点查询交易是否成功。

 

节点交互逻辑

节点之间的交互必须遵循特定的协议指令,这些指令包含有消息头和消息体,消息头主要是包含发送的协议指令,消息体是传递的实际内容。

一般指令分为两大类,一类是请求指令,一类是数据交互指令。

交互指令-版本号Version

当节点连接上以后首先是通过交互【版本号】来实现握手的操作,握手完毕后建立长连接。如在比特币系统上采用PING/PONG的消息协议,但在以太坊上将PING/PONG协议提前放在节点发现的逻辑上。

发送版本号格式比如: sendVersion(“主节点ip”,  Version序列化结构值) 【12个字节长度 + 一个Version 序列化后的结构体数据】

版本号的代码结构:

节点之间的版本号请求及数据同步

发送版本号

版本命令处理器

请求指令-inv

Inv 向其他节点展示当前节点拥有什么块和那些交易数据,但它没有包含完整的区块链和交易,只有哈希值。

Inv结构

sendInv(主节点发送所有区块信息给钱包节点)

handleInv 接收处理器(钱包节点接收来自主节点的所有区块信息)

 

请求指令-getData

用于某个块或交易的请求。

Block 区块同步

当接收到一个新块时,把它添加到区块链里,如果还有更多的区块需要下载,即继续从上一个下载的块的节点中继续发出请求,直到把所有块都下载完成后,才对UTXO 集进行重新索引。

总结

本篇主要讲述了区块链技术中的核心技术点P2P网络的概念及特点,同时也介绍了区块链P2P网络的几大节点功能特征,以及相互节点之间的消息交互逻辑实现。

 

 

 


http://chatgpt.dhexx.cn/article/UsSLNgdf.shtml

相关文章

Rust P2P网络应用实战-1 P2P网络核心概念及Ping程序

本系列文章首先研究P2P网络的核心概念,然后详细分析libp2p-rust库中的应用实例,为以后开发P2P网络应用程序打好基础。 P2P网络 P2P(Peer-to-Peer)是一种网络技术,可以在网络中不同的计算机上共享各种计算资源,如CPU、网络带宽和存…

区块链P2P网络协议演进过程

区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服务,实现中心化系统中类似金…

【区块链实战】什么是 P2P 网络,区块链和 P2P 网络有什么关系

目录 一、简介 二、知识点 P2P 网络 区块链节点与 P2P 的关系 区块链节点功能分类 P2P 网络特征 三、什么是 P2P 网络,区块链式使用 P2P 网络做什么 1、P2P 网络概念 2、P2P 网络节点特征 3、P2P 与区块链 4、网络节点功能 一、简介 在白皮书中&#xf…

Peer to Peer ( P2P ) 综述

Peer to Peer ( P2P ) 综述 罗杰文 luojwics.ict.ac.cn 中科院计算技术研究所 2005-11-3 1 绪言 1.1 Peer-To-Peer 介绍 最近几年,对等计算 目前,在学术界、工业界对于P2P没有一个统一的定义,下面列举几个常用的定义供参考: 定义:1、Pe…

Ubuntu对分区扩容

Ubuntu对分区扩容 准备工具 1、U盘 2、准备好的内存空间 3、Ubuntu的镜像文件 4、清楚如何进入自己电脑的BIOS 扩容大致方向try Ubuntu 网络上的扩容方法大都是在自己的Ubuntu下使用GParted,对将要扩容的分区进行卸载,然后进行扩容,但是这样做有个前…

linux ubuntu 分区,查看Ubuntu分区列表方法

今天在Ubuntu修复Grub正好碰到了要展示分区列表看看 不然都不清楚哪个是哪个了。。 sudo fdisk -l 就是这个命令 ubuntuubuntu:~$ sudo fdisk -l Disk /dev/sda: 250.0 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders Units cylinders of 16065 * 512 …

U盘安装ubuntu20.04 Linux系统分区方案 Invalid Partition Table

一、简介: 一般磁盘分区表有两种格式:MBR和GPT,目前主要的BIOS系统引导方式也有两种:传统的Legacy BIOS和新型的UEFI BIOS 如果主机BIOS系统引导方式采用传统的Legacy BIOS,那么安装ubuntu系统的磁盘分区表使用MBR格式…

Android布局

目录 1. Android的基础布局 2. LinearLayout 线性布局 3. RelativeLayout 4. 常用的控件 1. Android的基础布局 LinearLayout 线性布局 RelativeLayout 相对布局 TableLayout 表格布局 FrameLayout 帧布局(框架布局) ConstrantLayout 约束布局 &…

安卓布局简单归纳

安卓布局 1.线性布局LinearLayout 2.表格布局TableLayout以及网格布局GridLayout 3.帧布局FrameLayout 4.相对布局RelativeLayout 5.Android2.0已经过时的绝对布局AbsoluteLayout 这里仅谈xml的实现、不涉及java实现 布局管理器及组件的常用共有属性: 属性作用and…

安卓layout布局三等分

关于android LinearLayout的比例布局,主要有以下三个属性需要设置: 1,android:layout_width,android:layout_height,android:layout_weight三个值 2,当为水平布局时,android:layout_height“0dp",当为…

安卓APP(3)——安卓布局控件

嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一、布局的种类 二、布局和页面的关系 三、显示一张美女图 控件的宽度和高度 四、布局背景颜色,背景图,显示两个美女 关于控件ID 五、常用布局之相对布局 RelativeLayout中子控件常…

安卓的相对布局与线性布局

一、安卓布局的种类 Android共有七大基本布局。 分别是:线性布局LinearLayout、表格布局TableLayout、相对布局RelativeLayout、帧布局FrameLayout、绝对布局AbsoluteLayout、网格布局GridLayout。约束布局ConstraintLayout。 其中,表格布局是线性布局的…

Android:布局

Android&#xff1a;布局 LinearLayoutRelativeLayoutFrameLayoutTableLayoutGridLayoutConstraintLayout LinearLayout <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"match_parent"android:layout_…

安卓六大布局之 线性布局(LinearLayout)

Android的界面是有布局和组件协同完成的&#xff0c;布局好比是建筑里的框架&#xff0c;而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列&#xff0c;就组成了用户所看见的界面。 Android的六大布局分别是 LinearLayout&#xff08;线性布局&#xff09;RelativeLayo…

Android-布局管理器

线性布局(Linearlayout) 属性 orientation 布局管理器内组件的排列方式(horizontal&#xff08;水平&#xff09;和vertical&#xff08;垂直&#xff09;&#xff0c;默认值为 horizontal.) layout_weight 权重 用于设置组件占父容器剩余空间的比例 la…

android 布局

android学习笔记&#xff08;一 android布局学习&#xff09; 转自http://blog.sina.com.cn/s/blog_61c62a960100ev3q.html (2009-09-20 20:50:44) 转载 标签&#xff1a; it 分类&#xff1a;android 最近痴迷上了android &#xff0c; 因为有java 语言的基础学起来自己感觉很…

安卓六大布局介绍

安卓六大布局 布局的介绍安卓六大布局 布局的介绍 用户使用安卓看到的应用界面&#xff0c;是通过布局和组件构成的&#xff0c;组件根据布局的格式排列&#xff0c;形成用户所看到的界面。 安卓六大布局 线性布局方式&#xff08;LinearLayout&#xff09; 按照垂直或者水平…

安卓线性布局

安卓线性布局 &#xff08;一&#xff09;界面与布局1、界面2、布局&#xff08;1&#xff09;UI容器&#xff08;2&#xff09;UI控件 (Control)&#xff08;3&#xff09;两种方式声明布局 &#xff08;二&#xff09;线性布局&#xff08;1&#xff09;常用属性 &#xff08…

安卓的常用布局看一篇就够了

目录 1-1 布局通用的属性 1-2 线性布局&#xff08;LinearLayout&#xff09; 1、常见属性&#xff1a; 2、线性布局的例子&#xff1a; 1-3 相对布局&#xff08;RelativeLayout&#xff09; 1、常见属性&#xff1a; 2、 相对布局的例子&#xff1a; 1-4 帧布局&a…