区块链P2P网络

原创: Andy.Chen 区块链技术开发驿站


阅读大概需要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节点交易过程

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

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

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

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

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

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

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

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

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

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

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

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

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

节点交互逻辑

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

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

交互指令-版本号Version

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

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

版本号的代码结构:

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

发送版本号

版本命令处理器

请求指令-inv

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

Inv结构

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

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

请求指令-getData

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

Block 区块同步

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

总结

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


ps: 有兴趣想加入技术交流群的朋友,请先加我微信andy_tocm,然后发送“加群”留言。

                                                                ---End---

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容