2021年最新以太坊源码导读-p2p架构

2021年最新以太坊源码导读-p2p架构前面部分的内容都是源码导读 可能有的朋友没有耐心把所有代码看完 这里我采用尽可能简单的方式来介绍 p2p 这部分的代码究竟做了什么 一 概念篇 p2p 是 peer to peer 的缩写 以太坊网络是一个去中心的对等网络 因此需要有一个机制来实现网络间节点的相互发现 即当一个新的节点运行起来后 究竟如何加入网络 加入网络之后 节点之间如何通信 p2p 部分采用了 UDP 协议做网络发现 采用了 TCP 协议用于节点间通信 下面简单介绍两个协议的基本流程 二 TCP 连接此部分的流程如下图 1 打

  前面部分的内容都是源码导读,可能有的朋友没有耐心把所有代码看完。这里我采用尽可能简单的方式来介绍p2p这部分的代码究竟做了什么。

一、概念篇

p2p是peer-to-peer的缩写,以太坊网络是一个去中心的对等网络,因此需要有一个机制来实现网络间节点的相互发现,即当一个新的节点运行起来后,究竟如何加入网络?加入网络之后,节点之间如何通信?p2p部分采用了UDP协议做网络发现,采用了TCP协议用于节点间通信。下面简单介绍两个协议的基本流程。

二、TCP连接

此部分的流程如下图

2021年最新以太坊源码导读-p2p架构

1.打开TCP端口监听,这是一个可选项,因为有的节点可能只希望从其他的节点同步数据,并不希望监听端口,监听端口意味着有其他节点连入服务器,这会消耗节点的性能及网络的流量。

2.插槽。插槽是一个抽象的概念,默认有50个插槽,只有当插槽有空闲的时候,服务器才会处理新到来的连接。这个设计保证了服务器的安全,设定了服务器最多同时处理新到来的连接的上限,使得服务器不会因为大量连接同时到来而性能骤降。

3.ip白名单。这也是一个关于安全的设计,只有符合网络策略的节点才能与服务器建立连接。

4.握手协议。握手会有两次,第一次是p2p网络通用的RLPx协议(关于此协议,大家请自行百度,我就不赘述了)握手,这个协议实现了加密的通信;第二次是节点支持的协议的握手,可能存在节点间版本不一致的情况,因此,节点间沟通自身支持的协议名称及对应版本,确保双方至少有一个协议相同,否则无法通信。

5.一切完成之后,服务器与对等节点建立了连接,并持续处理节点消息的收发。

三、UDP连接

这部分的内容涉及kademlia算法,如果不明白请先搜索学习。大致的逻辑也很简单,如下图。

2021年最新以太坊源码导读-p2p架构

1.启动UDP端口监听

2.根据配置的bootstrap node初始化table,此处的table是一个kademlia算法中桶的实现

3.启动一个独立的goroutine,定期更新桶中的节点,并持久化节点到本地DB

4.启动一个独立的goroutine,响应来自其他节点的消息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224659.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:26
下一篇 2026年3月17日 上午11:27


相关推荐

  • 万字干货|LLM Agent 实战指南:从 0 到 1 搭建智能体,这篇讲透了!

    万字干货|LLM Agent 实战指南:从 0 到 1 搭建智能体,这篇讲透了!

    2026年3月15日
    4
  • jupyter的代码能用pycharm运行吗_pycharm怎么登录

    jupyter的代码能用pycharm运行吗_pycharm怎么登录准备阶段:Professional版的PyCharm激活PyCharm,按照这个教程走的,因为内网机无法上网,用的第3种激活方法确认服务器的tensorflow调用GPU跑tf程序没问题。准备好SSH的usernameandpassword准备好SSH的usernameandpassword配置pycharmref:使用PyCharm通过SSH连接远程GP…

    2025年7月8日
    5
  • 世界各个地区WIFI 2.4G及5G信道划分表(附无线通信频率分配表)

    目前主流的无线WIFI网络设备802.11a/b/g/n/ac:传统802.111997年发布两个原始数据率:1Mbps和2Mbps跳频展频(FHSS)或直接序列展布频谱(DSSS)三个不重叠的信道中,工业、科学、医学(ISM)频段频率为2.4GHz最初定义的载波侦听多点接入/避免冲撞(CSMA-CA)802.11a1999年发布提供多种调制类型的数据传输率:6、9、12、18、24…

    2022年4月5日
    529
  • 大数据:数据采集平台之Fluentd

    大数据:数据采集平台之Fluentd大数据:数据采集平台之Fluentd官网:http://docs.fluentd.org/articles/quickstartFluentd是一个开源的数据收集框架。Fluentd使用C/Ruby开发,使用JSON文件来统一日志数据。它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。最后它也同时提供了高可靠和很好的扩展性。TreasureData,Inc对该产品提供支持和维…

    2022年5月1日
    128
  • 图像特征提取总结_将劣势转化为优势的例子

    图像特征提取总结_将劣势转化为优势的例子转载地址:https://blog.csdn.net/lskyne/article/details/8654856 特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。 特征的定义        至今为止特征没有万能和精确的定义。…

    2025年7月8日
    4
  • win10jdk环境变量配置[通俗易懂]

    win10jdk环境变量配置[通俗易懂]在win10上安装jdk后,发现命令行中java-version命令可运行,但javac则提示“javac不是内部或外部命令……”,经过尝试发现需要将两个bin的路径都设置到环境变量中,而且需要使用绝对路径,不可以引用其他环境变量,例如我的环境变量设置是:C:\ProgramFiles(x86)\Java\jdk1.8.0_112\jre\bin;C:\ProgramFiles(

    2022年7月21日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号