gossip 区块链_区块链中的P2P

区块链中P2P介绍

p2p是什么

为什么区块链需要P2P

比特币、以太坊、超级账本和EOS的P2P对比

P2P是什么

P2P作为区块链网络中去中心化的标识

P2P全称对等式网络(peer-to-peer),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系;与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。

优势

可在网络的中央及边缘区域共享内容和资源。在客户端/服务器网络中,通常只能在网络的中央区域共享内

由对等方组成的网络易于扩展,而且比单台服务器更加可靠。单台服务器会受制于单点故障,或者会在网络使用率偏高时,形为瓶颈。

由对等方组成的网络可共享处理器,整合计算资源以执行分布式计算任务,而不只是单纯依赖一台计算机,如一台超级计算机。

用户可直接访问对等计算机上的共享资源。网络中的对等方可直接在本地存储器上共享文件,而不必在中央服务器上进行共享。

p2p网络的三个特性

离散性:构成系统的节点并没有任何中央式的协调机制。

伸缩性:即使有成千上万个节点,系统仍然应该十分有效率。

容错性:即使节点不断地加入、离开或是停止工作,系统仍然必须达到一定的可靠度。

为什么区块链会选择P2P作为网络基础

上面介绍P2P的时候说过,他是无中心服务器的,中心服务器就意味着,当受到攻击的时候,中心服务器一旦宕机,整个网络和服务就会出现问题。而P2P网络的优势在于,每个节点既是客户端又是服务端,所以当受到攻击时,任何一台机器垮掉,也不会影响整体的服务。

区块链的核心是去中心化,这和P2P网络的观念不约而同,所以选择P2P的理由也就很充分。

通过区块链技术学习P2P

首先看一下P2P的整体技术点:

首先是如何发现peers,在P2P网络中,发现节点是最开始、最重要和最难的一部分;

节点之间建立链接;发现节点之后,就要进行握手链接,确定节点之间的通信协议等

节点之间的通信;链接建立之后,就可以正常的进行通信了;

以上三点解决之后,基本就可以实现一个简单的P2P网络。如果想要实现一个比较完整的P2P网络,当然还有很多的细节需要考虑,比如说,节点发现协议,快速定位节点,安全性,节点的加入和退出机制,节点的心跳保活等。我们主要介绍的是DHT分布式哈希表的知识点;

比特币、以太坊、超级账本和EOS都使用了DHT的具体实现;

链类型

使用的P2P协议

区块链

Gossip协议

超级账本

Gossip协议

以太坊

Kademlia协议

EOS

自己实现的P2P协议 (待研究)

比特币

节点发现

新节点启动后,想要参与协同运作,必须发现其他的比特币节点,也就是至少需要发现一个比特币网络中的节点,并建立联系。

新节点找到对等体的方法:

- 种子节点:使用多个DNS服务器(比特币节点专用)来解析比特币节点的IP。

- 节点引荐:如果不知道DNS,则必须知道至少一个比特币节点的IP。

节点链接

节点向peer节点发送version消息开始握手,peer节点需要检验版本,秘钥等数据,验证通过,会返回verack消息。

握手消息完成,节点发送包含自己IP地址和addr的消息给peer节点,对等节点收到,继续向它的对等节点发出addr消息,这样新节点的IP地址就会在P2P网络中广播出去(Gossip协议的Rumor-Mongering);

因为网络中,节点可以随时加入和离开,所以所有的节点必须在一个节点退出的时候,寻找新节点,并且在其他节点启动的时候,对其进行帮组。

超级账本

以太坊

以太坊使用的是kademlia协议,简称Kad协议,具体的Kad协议在其他的文章中介绍。本文我们只需要知道Kad使用UDP进行节点间消息通信,每个节点根据与邻居节点距离之间的距离(NodeID的差距),分别放到不同的桶(bucket)中,且有4种消息

ping – 用于探测其他节点是否还存在

store – 接收者受到后,将信息中key/value对存储在本节点

findnode – 接受者向发送者返回 k 个它知道的与目标结点距离最近的节点

findvalue – 和findnode 差不多,区别是如果接收者本地存在与目标结点对应的value,那么就回复这个值给发送者。

以太坊中的P2P网络是比较完整的,很值得学习,有发现、子协议和Nat映射等模块。我们主要讲解的是发现模块;

整体结构:

结构名

作用

Server

本地客户端服务

Node

节点的信息

table

存储peer节点的结构

udp

底层节点的通讯协议

Server

当本地启动一个客户端,并配置好静态peer节点的配置信息之后,启动的Server会进行三个操作

主动发现邻居

ECDH密钥建立,确认身份并进行身份验证

链接已经建立,确认生层交换协议,并运行这些协议

Node

Node节点唯一的表示网络中的一个以太坊节点,并且Node节点有如下的信息:

IP地址

连接使用的UDP/TCP端口号

ID:以太坊网络中唯一标识一个节点,本质上是一个椭圆曲线公钥(PublicKey),与Server的PrivateKey对应。一个节点的IP地址不一定是固定的,但ID是唯一的。

用于节点间的距离计算的sha

table

Table主要用来管理与本节点与其他节点的连接的建立更新删除:

bucket – 所有peer按与本节点的距离远近放在不同的桶(bucket)中

refreshReq – 更新Table请求通道

Table会循环的监控并对peer节点进行刷新

定时(30s)启动Peer刷新过程的定时器

接收其他线程投递到Table的刷新Peer连接的通知,当收到该通知时启动更新

定时重新检查以连接节点的有效性的定时器

udp

udp的底层接受数据包循环,负责接收其他节点的packet,并将解析后的信息交给另一个循环处理,这个循环处理负责控制消息的向上递交和收发控制

节点发现的流程:

邻居初始化

当一个节点启动后,它会首先向配置的静态节点发起连接,发起连接的过程称为Dial,此时的Dial需要知道IP地址,如果不知道需要有一个解析IP的过程(根据ID来解析)

建立连接,下面两个都成功则加入table中:

秘钥链接和确认

上层协议确认

探活检测(Revalidate)

有效性检测就是利用ping消息进行探活操作。Table启动了一个定时器(0~10s),定期随机选择一个bucket,向其末尾的节点发送ping消息,如果对方回应了pong,则探活成功。

更新邻居关系

定期(定时器超时)或不定期(收到refreshReq)地进行更新邻居关系(发现新邻居),两者都调用doRefresh()方法,该方法对在网络上查找离自身和三个随机节点最近的若干个节点。

EOS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作

我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作。那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息。所以,反射的第一步就是得到Class对象。在…

微型计算机主机箱内的所有部件均由大规模,2012年自考《计算机应用基础》模拟试题...

《计算机应用基础》模拟试题一、单选题 (每空1分,共30分)1. 在Word的编辑状态,当前在汉字输入状态,若要切换到输入大写英文字母状态,应当按( )。A.Caps Lock键 B.Shift键 C.Ctrl 空格键 D.Ctrl Shift键2. 一个完整的计算机系…

织梦自定义图片字段和缩略图一样_织梦图片集模型自定义图片字段调用

创建自定义函数打开/include/extend.func.php文件(注:这个文件就是系统预留的自定义函数接口文件,主要用于二次开发用的。如果你是老版本,默认没有这个文件,自己创建一个PHP文件即可),在最下面的?>上一行加入以下函…

解释型语言和编译型语言的区别_从泛型的使用情况看出你对语言的理解程度(2)...

上篇我们提到&#xff1a;Java中的泛型是不可变的&#xff0c;可以通过<? extends E>实现了泛型的协变&#xff0c;<? super E>实现泛型的逆变。从泛型的使用情况看出你对语言的理解程度&#xff08;1&#xff09;今天我们来讲讲泛型单例工厂&#xff0c;在之前的…

泸州职业技术学院计算机单招试题,2021年泸州职业技术学院单招英语考试模拟试题库...

2021年高职单招升学一对一咨询高职单招郭老师:15683905627(微信)单招考试考什么单招专业技能考试文化统考;文化统考科目包括语文、数学、英语、专业综合理论。单招考试形式&#xff1a;专业技能考试文化统考。专业技能考试形式和内容由各专业大类联考委确定。文化统考科目为语文…

showdoc如何创建文件夹_showDoc生成文档

1. 创建项目2. 获取api_key和api_token1. 打开设置2. 获取api_key和token3. 生成文档1. 先cd进入你的项目目录&#xff0c;命令行模式下输入&#xff1a;wget https://www.showdoc.cc/script/showdoc_api.sh下载完毕&#xff0c;编辑vi showdoc_api.sh脚本内容的前面有两个变量…

win7下安装python失败问题_win7下安装ipython失败

关键就是报错啊大哥,没个报错信息你让我们怎么帮你,天眼通吗?请看:提问的艺术(中文版)在网络世界里&#xff0c;当提出一个技术问题时&#xff0c;你能得到怎样的回答&#xff1f;这取决于挖出答案的难度&#xff0c; 同样取决于你提问的方法。本指南旨在帮助你提高发问技巧&a…

职称计算机技巧集锦,2014职称计算机考试《Excel》使用技巧集锦(4)

四、 数据分析和管理技巧1. 管理加载宏Excel包括各种特殊作用的加载宏&#xff0c;它们使用自定义的函数、向导、对话框和其他工具&#xff0c;扩充了工作表的基本功能。默认情况下&#xff0c;每个加载宏都配置为在第一次使用时安装&#xff0c;也就是说在第一次需要某个加载宏…

map集合的putall_Map.put和Map.putAll方法之间的区别?

当使用putAll而不是put时&#xff0c;我看到巨大的性能优势。 请参见下面的示例程序&#xff1a;公共类SampleTest {public static void main(final String[] args) {final Map testMap new HashMap<>();final Map testMap2 new HashMap<>();final LocalDateTime…

ubuntu20.04自带python版本_替换 ubuntu 自带的python版本

首先在这里下载你想用的各个版本的python&#xff0c;我用的是2.7.11&#xff1a; https://www.python.org/ftp/python/还是老样子&#xff1a; ./configure --> make --> make install接下来将你自带的版本替换成自己的版本&#xff1a; 先 which python 查看你的p…

物料编码是计算机系统对物料,物料编码是什么?

物料编码是唯一标识物料的代码,通常用字符串(定长或不定长)或数字表示.物料编码是计算机系统对物料的惟一识别代码.它用一组代码来代表一种物料.物料编码必须是惟一的,也就是,一种物料不能有多个物料编码,一个物料编码不能有多种物料.目录简介意义原则方法注意事项处理特点展开…

python requests get post_python+requests进行get、post方法接口测试

简介&#xff1a;Requests 是用Python语言编写&#xff0c;基于 urllib&#xff0c;采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便&#xff0c;可以节约我们大量的工作&#xff0c;完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的&…

python中config命令_【Python】 配置解析ConfigParser 命令行参数解析optparser

ConfigParserConfigParser包装了配置文件的读取和写入&#xff0c;使得python程序可以更加轻松操作配置文件了。这里的配置文件是指.ini的那种文件&#xff0c;基本格式如下[section_a]a_key1a_value1a_key2a_value2[section_b]b_key1b_value1b_key2b_value2b_key3 b_value3将一…

sata接口测试软件,如何查看电脑是否支持USB 3.0?Hwinfo32检测SATA端口的方法

Hwinfo32检测SATA端口有很多效用&#xff0c;其中我们查看该SATA是否支持USB 3.0就是一个判断&#xff0c;更多的信息是为了了解SATA目前已经可使用的和在使用的端口情况&#xff0c;具体方法可以查看下文中的方法进行判断。Hwinfo32检测SATA端口的方法&#xff1a;1、直接下载…

python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()

随笔记录方便自己和同路人查阅。#------------------------------------------------我是可耻的分割线-------------------------------------------在处理列表和字典时&#xff0c;尽管传递引用常常是最方便的方法&#xff0c;但如果函数修改了传入的列表或字典&#xff0c;你…

常规计算机 符号键是,电脑键盘上的字母和符号都表示什么

键盘上的键可以根据功能划分为几个组&#xff1a;键入(字母数字)键。这些键包括与传统打字机上相同的字母、数字、标点符号和符号键。控制键。这些键可单独使用或者与其他键组合使用来执行某些操作。最常用的控制键是 Ctrl、Alt、Windows 徽标键 和 Esc。功能键。功能键用于执行…

mfc try catch 捕获并显示_你的异常捕获够优雅不?求你别只会try{...} catch{...}了

文章来源 | cnblogs.com/jurendage/p/11255197.html作者 | 巨人大哥软件开发过程中&#xff0c;不可避免的是需要处理各种异常&#xff0c;就我自己来说&#xff0c;至少有一半以上的时间都是在处理各种异常情况&#xff0c;所以代码中就会出现大量的try {...} catch {...} fin…

vue 修改对象的值视图没有发生改变_在vue中处理对象属性改变视图不更新问题? - echart...

...图等等&#xff0c;但是这些代码比较难写&#xff0c;因此我们通常会用借助echarts&#xff0c;那你知道如何使用echarts吗&#xff1f;这篇文章就和大家讲讲echarts的使用方法&#xff0c;有一定的参考价值&#xff0c;感兴趣的朋友可以看看。以饼状图为例&#xff0c;介绍…

五年级计算机教材内容,五年级计算机教学计划

五年级计算机教学计划教育结构不断发生变革&#xff0c;现代教育和教学理论主张对教学计划的结构实行改革。下面是小编为您整理的关于五年级计算机教学计划的相关资料&#xff0c;欢迎阅读&#xff01;五年级计算机教学计划 范例1一、教材分析选用的教材是&#xff0c;浙江摄影…

linux添加用户命令_为Linux的cp和mv命令添加进度条

cp和mv可能是大家日常中使用最多的Linux命令之一。但是有一个突出的问题是这两个命令都不会有任何提示信息&#xff0c;这在操作大文件时候只能干等。可能大家对此已经习以为常&#xff0c;但是其实上也有解决解决方法&#xff0c;本文我们就介绍一个Gnu Coreutils(cp和mv的源代…