p2p网络是一种在组网节点之间进行任务分配和工作负载的对等网络。节点之间地位相等、功能相同、无主次之分。没有中心节点,每一个节点既是服务的请求者又是服务的响应者。资源冗余存储,部分节点的故障不影响整体网络的运行。

p2p网络是一个天然的分布式、去中心化的信息存储和查询网络,是区块链网络层的标准解决方案,区块链网络的数据同步、状态更新、消息广播都是通过P2P网络进行的。

在区块链出现之前,p2p网络已经被电驴、BitTorrent所广泛采用,区块链P2P实现大多是对已有P2P网络的微小改进,以适应区块链自身的特点。

以太坊的P2P网络

以太坊的P2P网络由两部分组成:网络发现模块,数据传输模块。

网络发现模块主要包含ping/pong/findNode/sendNeighbours四个方法。

ping/pong方法用于节点发现;

findNode用于查询附近的节点;

sendNeighbours用于返回附近的节点,网络发现的细节参考了Kademlia协议。

整体结构是一个二叉树,每一个节点都是二叉树的一个叶结点,叶结点是一个256位的二进制值,是通过一个512位的公钥计算得到的。两个叶节点间的距离由叶结点进行异或运算得到。每一个节点都拥有一个由32个桶构成的路由表。表中由近及远存储了已经发现的节点,每个桶最多存储16个节点。

当一个节点A加入网络时,先通过外部机制,获取到初始路由表。A向路由表中距离自己最近的节点B发送ping消息,如果节点B存在则返回pong消息。A向B发送查询附近节点的请求findNode,B从自己的路由表中返回16个距A最近的节点。如果返回的节点中,C比B离A更近,则A向C发出ping请求,并重复以上步骤,直到找不到距离A更近的节点为止(如图一)。在一个拥有2^n个节点的网络中,最多需要n次就可以找到距离A最近的节点列表。实际项目中,可以通过并行查找提高效率,通常使用UDP协议。

(图一)

数据传输模块负责和已发现的节点进行数据交换。A节点给B节点发送一个hello消息,定义了相互之间数据交互的规则,然后通过send和receive对加密数据进行交换,获取到数据之后,先解密然后存储到本地数据库。

当节点需要广播消息时,则取出附近的节点,向附近节点发送消息,附近节点发现这是一个广播消息,也会向其他附近节点发送该消息,直至传遍整个网络。

多侧链的p2p网络

第三代区块链项目通常都具有多侧链功能。而常规的P2P网络无法很好的适应该需求。FairBlock区块链项目在实现过程中对现有的p2p网络进行了改进,使得单个P2P网络可以同时运行多个侧链。每一个节点都为自己关心的所有侧链单独维护一张路由表(如图二)节点之前互相发现和消息传递时,都会增加额外的侧链编号字段,以唯一表示当前正在运行的侧链。同一节点可以同时运行多个侧链,而不会互相影响。

(图二)

在FB的基于CPOS的测试网络中,同时运行了100个侧链,平均3秒左右即可生成一个新的区块,在侧链增多的情况下,区块生成速度和传播速度几乎不受影响。

基于侧链的P2P网络设计相关推荐

  1. 区块链基于WebSocket 构建P2P网络

    区块链基于WebSocket 构建P2P网络今天我们重点分析,在常见的java web开发中,比如boot框架开发的区块链系统,每个节点既是服务端又是客户端,因此不能引用spring-boot-sta ...

  2. 深入理解以太坊 P2P 网络设计

    前言 在设计公链时,节点与节点之间建立连接需要 P2P 协议,从而实现数据的同步,于此同时上层应用还需要封装一些通信逻辑,比如节点之间的区块同步.交易数据同步等. 本篇文章将对 P2P 网络发展进行简 ...

  3. 区块链中Java基于WebSocket构建P2P网络

    一.pom依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-We ...

  4. kademlia算法学习(区块链P2P网络设计)

    如今很多P2P网络的实现都采用DHT的方式实现查找,其中Kademlia(简称Kad)算法由于其简单性.灵活性.安全性成为主流的实现方式.下面我们就来详细分析这个应用于比特币和以太坊P2P网络中的Ka ...

  5. 基于Sip的P2P设计和原理分析

    基于Sip的P2P设计和原理分析 1.            SIP网络 2.            P2P技术在互联网上的应用 3.            P2P网络架构 3.1.    集中目录式 ...

  6. 基于Qt的P2P局域网聊天及文件传送软件设计

    基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09         这是我的<通信网络>的课程设计作业,之 ...

  7. 基于p2p点播html5源码,毕业论文-基于HTML5的P2P流媒体传输系统的设计与实现.docx...

    PAGE 单位代码 学号 分类号 毕业设计(论文) 基于HTML5的P2P流媒体传输技术的 设计与实现 院(系)名称 专业名称 计算机科学与技术 学生姓名 指导教师 2014年6月 北京航空航天大学毕 ...

  8. 基于TCP/UDP的P2P网络通信协议研究与实现

    此章节是理论知识,下个章节会奉献源码 摘    要 对等式网络(peer-to-peer,简称P2P),又称点对点技术,是一种实现网络中不同主机直接通信的技术.在物联网的应用中,大量的设备需要能进行点 ...

  9. 计算机网络课程设计之基于 IP 多播的网络会议程序

    前言 本实验难点在于环境的配置,尤其是多网卡配置,经过查阅资料和多次小伙伴们测试,最后终于找到问题的根源 问题分析和配置主要放在实验结果与分析栏中 结尾附上指导书的IP多播源码 白嫖容易,创作不易,本 ...

最新文章

  1. tp5.0分页样式调控
  2. hdu 1003 A + B Problem II 使用整型数组轻松实现大数求和
  3. think php自增,thinkphp5分表自增ID解决方案
  4. iPhone与Android手机 各个型号的UserAgent
  5. python编程首选_为什么说学编程首选是python
  6. 正则表达式——(一)
  7. 计算机硬盘无法查找文件,硬盘系统中的文件搜索技巧整理
  8. c语言用if如何删除末尾空格,新人提问:如何将输出时每行最后一个空格删除
  9. 纪念一个曾经的产品(目录)
  10. Subclipse更新地址
  11. Win11任务栏透明度怎么调整?Win11任务栏透明度设置教程
  12. iOS 打包流程教程
  13. java 拖拉机_Java——io流
  14. DNS配置错误如何修复
  15. mybatis 中between and用法
  16. java options设置_JAVA_TOOL_OPTIONS和_JAVA_OPTIONS
  17. 辅助驾驶功能开发-功能规范篇(04)- 交通拥堵辅助及集成式巡航辅助TJA/ICA
  18. easyexcel 列头合并_2020-05-19:EasyExcel自定义合并单元格
  19. 在销量压力下,国产手机开始降价了,但还没有放下最后的面子
  20. 深度学习驱动智能搜索引擎,RankBrain革了SEO的命

热门文章

  1. Python花式表白的几种姿势!马上就520了,准备好了吗!
  2. 零基础学软件测试需要学什么?附全套学习路线图+课程
  3. sftp乱码处理问题
  4. CATIA V6二次开发——用VB脚本实现布尔运算
  5. SecureCRT如何直接执行vb脚本运维脚本的方法
  6. 1278: 实现计算器基本功能(1级)编写程序分模块设计实现计算器的基本运算功能(加减乘除,除数默认不为0)。
  7. 一、Vue环境搭建及基础用法
  8. Sony索尼CMOS图像传感器SubLVDS与SLVS-EC接口FPGA开发方案
  9. 中国大学MOOC_浙大博弈论基础笔记4-5
  10. 【附源码】Java计算机毕业设计人事系统(程序+LW+部署)