Close

淘金网币圈快讯 > 币圈资源 > 币圈资源-以太坊源码分析(14)P2P分析

币圈资源-以太坊源码分析(14)P2P分析

币圈快讯 币圈资源 2022年08月06日

币圈资源-以太坊源码分析(14)P2P分析

  d)是一种分布式哈希表技术Kademlia(简称Ka,p网络拓扑结构用于建立p2。

  的异或值作为两节点间的距离d基本原理就是以两个节点ID,存储到称之为K桶的表结构中每个节点都将其他节点的信息,it位分层(可理解为桶索引)该表结构按照d的为1的最高b,多K个节点信息每层中存储最。下如:

  查找时节点,己最近的a个节点通过询问距离自,标最近的a个节点让对方返回距离目,节点或者能问的都问了一遍重复这个过程直到找到目标。

  距离的ID值1. 计算,有多少个K桶位数代表了,是160位的经典算法中。太坊中在以,的PublicKeyNodeID为节点,eID的sha3哈希值参与距离计算的是Nod,56位长度2。

  项数不超过K2. K桶的,网络负载而设置的一个常数K值是为平衡系统性能和,是偶数但必须。K=16eth中。

  邻居节点时3. 查找,最多是a个返回节点数,优化而定的参数a也是为了系统, a=3eth中。

  ldb持久化存储所有的邻居节点信息* p2p模块使用独立的leve,接利用历史上已找到的节点从而节点重新启动时能直。

  p2p的Kademlia协议table.go主要实现了。并实现节点的维护策略其中定义了K桶的结构。

  启动时节点,置信息后初始化配, server会启动p2p,r启动过程中在serve,e对象创建、监听udp端口等处理会执行udp对象创建、tabl。routine执行节点发现及维护的服务table对象创建中就包含了启动go。

  干种子节点(新节点第一次启动时从leveldb中随机选取若,的启动节点作为种子节点)使用启动参数或源码中提供,中(内存)出入桶结构;

  oop启动l,新、重验证等处理后台执行节点刷。goroutine中下面写的步骤就在这个;Refresh主要就是do:

  target最近的一批节点1. 在本地K桶中查找距离,ize个(16个)最多bucketS;sult记为re;逻辑:从列表中查找节点i(节点加入result的,d(i使得,t) d(ntarge,get)tar;中还有空间如果列表,入节点n直接加;了有效的i如果找到,i位置的节点则用n替换)

  查询失败4. 若,节点信息更新失败,dnodeFailures次(5次)若该节点总失败次数达到maxFin,除该节点信息则从本地移;

  查询成功5. 若,理(注意:这里会执行更新K桶的操作对返回的节点执行bondall处,ong是否成功不管pingp,入K桶都会加。点总是连不上如果某个节,制删掉的)会被刷新机,在线节点去掉不;对在线节点对在线. ,未见过如果,加入result中则按照步骤1的规则;

  节点执行bondall处理在lookup中会对返回的,每个节点执行bond处理bondall中主要是对。

  给定的远程节点有一个连接bond确保本地节点和,接成功如果连,连接table中会放到本地一个。dnode之前在执行fin,接已建立必须有连。数有一定限制活跃的连接,络负载占用以便限制网。

  或者对他执行findnode失败过1. 如果节点有一段时间没出现了,ngpong则执行pi;

  、百家号百+计划获得者作为今日头条青云计划,2019搜狗科技文化作者、2021百家号季度影响力创作者2019百度数码年度作者、百家号科技领域最具人气作者、,芒体验大奖、2015中国新媒体创业大赛总决赛季军、2018百度动态年度实力红人等诸多大奖曾荣获2013搜狐最佳行业媒体人、2015中国新媒体创业大赛北京赛季军、币圈资源 2015年度光。

标签: 比特币交易