当前位置{wèi zhi}:主页 > 比特币资讯 > 正文


以太坊源码之p2p网络及节点发现机制

以太坊源码之p2p网络及节点发现机制
  1 分布{distributes}式网络介绍

  以太坊底层分布式网络即p2p网络,使用了经典的kademlia网络,简称kad。

  1.1 kad网介绍

  kademlia在2002年由美国纽约大学的petarp.manmounkov和davidmazieres提出,是一种分布式散列表(dht)技术,以异或运算为距离度量基础,已经{have been}在bittorrent、bitcomet、emule等软件中得到应用。

  1.2 kad网络节点距离

  以太坊网络节点距离计算方法:

  node1:节点1 nodeid node2:节点2 nodeid

  1.3 k桶

  kad的路由表是通过称为k桶的数据构造而成,k桶记录{jì lù}了节点nodeid,distance,endpoint,ip等信息。以太坊k桶按照与target节点距离进行排序,共256个k桶,每个k桶包含16个节点。

  以太坊源码之p2p网络及节点发现机制

以太坊

  图1.1

  1.4 kad通信协议

  以太坊kad网络中节点间通信基于udp,主要{main}由以下几个命令{mìng lìng}构成,若两个节点间ping-pong握手通过,则认为相应节点在线。

  

  2 邻居节点

  2.1 nodetable类主要{main}成员

  c++版本以太坊源码中,nodetable是以太坊 p2p网络的关键类,所有{suǒ yǒu}与邻居节点相关的数据和方法均由nodetable类实现。

  

  

以太坊

  2.2 邻居节点发现方法

  邻居节点是指加入到k桶,并通过ping-pong握手的节点。

  以太坊源码之p2p网络及节点发现机制

以太坊

  图2.1

  邻居节点发现流程{process}说明:

  系统第一次启动随机生成本{cost}机节点nodeid,记为localid,生成后将固定不变,本地节点记为local-eth。 系统读取公共节点信息,ping-pong握手完成后,将其写入k桶。 系统每隔7200ms刷新一次k桶。 刷新k桶流程{process}如下:

  a. 随机生成目标节点id,记为targetid,从1开始{appeared}记录{jì lù}发现次数和刷新时间。668k8com

  b. 计算targetid与localid的距离,记为dlt

  c. k桶中节点的nodeid记为kadid,计算kadid与targetid的距离,记为dkt

  d. 找出k桶中dlt大于dkt的节点,记为k桶节点,向k桶节点发送findnode命令{mìng lìng},findnode命令包含targetid

  e. k桶节点收到{received}findnode命令后,同样执行b-d的过程,将从k桶中找到的节点使用neighbours命令发回给本机节点。

  f. 本机节点收到{received}neighbours后,将收到的节点写入到k桶中。

  g. 若搜索次数不超过8次,刷新时间不超过600ms,则返回到b步骤循环执行。

  2.3 邻居节点网络拓扑及刷新机制。

  以太坊源码之p2p网络及节点发现机制

以太坊

  图2.2

  1 targetid为随机生成的虚拟节点id。

  2 以太坊kad网络与传统kad网络的区别:

  以太坊节点在发现邻居节点的8次循环中,所查找的节点均在距离上向随机生成的targetid收敛。 传统kad网络发现节点时,在距离上向节点本身收敛。

本文地址:http://www.lyghuajun.com//zx/1859.html
上一篇:广州{guǎng zhōu}比特币交易:一文看懂比特币交易的全过程 下一篇:【区块链应用】技术优势与场景痛点 如何{rú hé}恰好“
  分享:   

以太坊源码之p2p网络及节点发现机制


相关推荐