此文目的协助你解读 P2P 网络,并阐释一些以太坊的构建细节。P2P 技术利用终端设备的非常丰富资源,需要减轻中心化系统的短板,而且从九十年代开始,这项技术就早已被 eMule,bitTorrent 和 Skype 等著名软件所使用。P2P 技术也是比特币或者以太坊区块链系统的核心组件(我们的项目 Shyft Network 就就是指这些区块链中派生出来的)。很多人都听闻过 P2P,但是不告诉它究竟是什么。
那竟然我们从理解什么是 P2P 网络开始吧。什么是 P2P网络?点对点(P2P)网络是一种网络覆盖层(overlay network)——就是说,它是创建在公开发表互联网之上的。从数学的角度来说,P2P 网络可以被视为一个有向图 G = (V,E),其中 V 是网络中的对等节点子集,E 是对等节点所连成的边的子集(也即节点间连接的子集)。
每个对等节点 p 都有一个独一无二的标识号 pid。子集 E 中的边(p,q)指 p 可通过必要连接的路径向 q 发送到消息;也就是说,p 用于 q 的 pid 作为目的地址,在网络之上向 q 发送到消息。尽管在底层的 TCP/IP 网络中,相近的 IP 地址可以翻译为在地理位置上互相相似,但很少有这么具体的必要关联。
理想情况下,所有的对等节点间都应当有一条路径连接。但因为每个节点对网络拓扑和其他对等节点只有一个不原始的视图,所以网络覆盖层必须中间节点将消息发送至准确目的。图的结构为每对节点获取了多条中间路径,因此就算对等节点转变,也可通过图的连通性获取网络的恢复能力。
对每个对等节点来说,图的连通性通过与其他对等节点的相邻关系来体现。当对等节点重新加入或者离开了网络,相邻的对等节点可能会持有人不准确的相邻信息。因此用于网络覆盖层确保机制(Overlay maintenance mechanisms)留存改版的相邻信息,使得所有节点间维持连通性。P2P 网络中的参与者向其他网络参与者获取部分资源。
不必须中心化的协调者,每个对等节点都可贡献计算出来周期(CPU),磁盘存储和网络带宽。传统的 客户端-服务器 模型中,服务器获取资源,客户端用于资源;与之比较的,在 P2P 网络中,对等节点既是网络资源的供应者,也是消费者。因此,P2P 网络可以很好地解决 客户端-服务器 模型下的一些短板,比如可扩展性和单点故障。
一般来说,P2P 网络不会有一个门槛,节点的资源贡献低于这个门槛才能重新加入网络。度量资源贡献的标准应当是公平的,比如说,拒绝网络中每个对等节点的平均值贡献应当在 P2P 系统总体平均值的统计资料范围内等。资源贡献应当是双方互助的。
代价贡献后可获得的利益,更有着用户重新加入 P2P 应用于。以太坊的 P2P 网络是如何工作的?以太坊的官方客户端节点软件 Geth,基于一种覆盖层确保机制 (称为 Kademlia 分布式哈希表格)构建了对等节点找到协议(RLPx 节点找到协议)。虽然 Kademlia 是为了在 P2P 网络中有效地定位和存储内容而设计的,以太坊的 P2P 网络要用它来找到新的对等节点。Kademlia以太坊网络中,每个客户端节点都配有有一个 enode ID,之后将此 ID 用 SHA3 算法骑侍郎列入一个 256 位的值。
Kademlia 用于 XOR 操作者定义距离,因此两个 256 位的数字之间的距离是他们的按位密文值(bitwise exclusive OR)。每个对等节点都享有一个包括 256 个有所不同的桶(buckets)的数据结构,每个桶 i 中存储与本节点距离在 2i-1 到 2i 之间的 16 个节点。
为了找到一个新的对等节点,以太坊节点自由选择自己作为目标 x,从桶中找寻到 16 个与目标 x 最近的节点,网卓新闻网,之后催促这 16 个节点,让它们从自己的桶中各找到 16 个与目标 x “更加将近” 的节点并回到,这样以来,不会获得最少 16x16 个新发现的节点。之后催促这 16x16 个新发现的节点中离目标 x 最近的 16 个节点,让它们回到与 x 更加将近的 16 个节点。这个过程持续递归,直到没新的节点被找到。
对等节点间通信Geth 用于 UDP 相连互相交换 P2P 网络的信息。有 4 种类型的 UDP 消息。一条 *ping* 消息催促一条 *pong* 消息作为回到。
此对消息用来辨别邻接节点否可号召。一条 *findnode* 消息催促一条 *neighbors* 消息(其中包括 16 个早已被号召节点知悉的节点列表)作为回到。当创建好对等节点的相连之后,Geth 节点通过加密和证书的 TCP 相连来互相交换区块链信息。
本文来源:金宝搏188网址登录-www.sekainokitte.com