来年做哪些网站致富,4000套微信小游戏源码,免费注册域名网,wordpress插件轮播图区块链中P2P介绍p2p是什么为什么区块链需要P2P比特币、以太坊、超级账本和EOS的P2P对比P2P是什么P2P作为区块链网络中去中心化的标识P2P全称对等式网络(peer-to-peer)#xff0c;又称点对点技术#xff0c;是无中心服务器、依靠用户群(peers)交换信息的互联网体系#xff1b…区块链中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密钥建立确认身份并进行身份验证链接已经建立确认生层交换协议并运行这些协议NodeNode节点唯一的表示网络中的一个以太坊节点并且Node节点有如下的信息IP地址连接使用的UDP/TCP端口号ID以太坊网络中唯一标识一个节点本质上是一个椭圆曲线公钥(PublicKey)与Server的PrivateKey对应。一个节点的IP地址不一定是固定的但ID是唯一的。用于节点间的距离计算的shatableTable主要用来管理与本节点与其他节点的连接的建立更新删除bucket – 所有peer按与本节点的距离远近放在不同的桶(bucket)中refreshReq – 更新Table请求通道Table会循环的监控并对peer节点进行刷新定时(30s)启动Peer刷新过程的定时器接收其他线程投递到Table的刷新Peer连接的通知当收到该通知时启动更新定时重新检查以连接节点的有效性的定时器udpudp的底层接受数据包循环负责接收其他节点的packet并将解析后的信息交给另一个循环处理这个循环处理负责控制消息的向上递交和收发控制节点发现的流程邻居初始化当一个节点启动后它会首先向配置的静态节点发起连接发起连接的过程称为Dial此时的Dial需要知道IP地址如果不知道需要有一个解析IP的过程(根据ID来解析)建立连接下面两个都成功则加入table中秘钥链接和确认上层协议确认探活检测(Revalidate)有效性检测就是利用ping消息进行探活操作。Table启动了一个定时器(0~10s)定期随机选择一个bucket向其末尾的节点发送ping消息如果对方回应了pong则探活成功。更新邻居关系定期(定时器超时)或不定期(收到refreshReq)地进行更新邻居关系(发现新邻居)两者都调用doRefresh()方法该方法对在网络上查找离自身和三个随机节点最近的若干个节点。EOS