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

一、概念篇

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

二、TCP连接

此部分的流程如下图

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

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

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

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

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

三、UDP连接

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

1.启动UDP端口监听

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

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

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

2021年最新以太坊源码导读-p2p架构相关推荐

  1. 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现

    p2p(peer to peer)负责以太坊节点间的通信,主要包括底层节点发现(discover)和上层协议运行两大块,本文主要描述其中节点发现部分的实现 数据结构 节点发现功能主要涉及 Server ...

  2. 3 v4 中心节点固定_死磕以太坊源码分析之p2p节点发现

    死磕以太坊源码分析之p2p节点发现 在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解. 节点发现概述 节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中. 以 ...

  3. 以太坊源码学习 -- EVM

    以太坊源码学习 – EVM 学习文档链接:here 一.虚拟机外 主要功能: 执行前将Transaction类型转化成Message,创建虚拟机(EVM)对象,计算一些Gas消耗,以及执行交易完毕后创 ...

  4. 以太坊源码分析-交易

    以太坊源码分析-交易 机理 先说一点区块链转账的基本概念和流程 用户输入转账的地址和转入的地址和转出的金额 系统通过转出的地址的私钥对转账信息进行签名(用于证明这 笔交易确实有本人进行) 系统对交易信 ...

  5. 以太坊源码学习(一) 正本清源

    以太坊源码学习(一)正本清源 背景 geth源码一直在不断增加,优化,发展到现在已经非常庞大,第一次看geth源码,会有不小的难度.虽然如此,还是可以从geth仓库的第一个commit开始,这时的代码 ...

  6. php区块链以太坊,兄弟连区块链教程以太坊源码分析CMD深入分析(一)

    兄弟连区块链教程以太坊源码分析CMD深入分析. cmd包分析 cmd下面总共有13个子包,除了util包之外,每个子包都有一个主函数,每个主函数的init方法中都定义了该主函数支持的命令,如 geth ...

  7. 以太坊源码阅读3——MPT原理

    以太坊源码阅读3--MPT原理 介绍 MPT(Merkel-Patricia Tree),翻译为梅克尔-帕特里夏树 MPT提供了一个基于密码学验证的底层数据结构,用来存储键值对( key-value) ...

  8. 以太坊源码阅读2——RLP编码

    以太坊源码阅读2--RLP编码 RLP介绍 目前网上的资料都是RLP(Recursive Length prefix),叫递归长度前缀编码,但目前源码的doc.go的第20行里面的注释写的是 The ...

  9. 以太坊源码分析(2)——以太坊APP对象

    前言 从这一节开始,我将开始以太坊代码全覆盖讲解,讲解的流程是: 以太坊程序入口 基本框架 以太坊协议 发送一笔交易后发生了什么 启动挖矿 以太坊共识 p2p 网络 阅读本系列文章,将默认读者具备一定 ...

最新文章

  1. LabVIEW生成应用程序(exe)和安装程序(installer)
  2. Linux基础命令(常用的)
  3. 字符串处理问题[2]:将一个数字型…
  4. 信息学奥赛一本通C++语言——1023:Hello,World!的大小
  5. day11 java的继承
  6. linux 权限管理命令
  7. 计算机二级python考试大纲2020_【2020年9月全国计算机二级Python考试大纲】- 环球网校...
  8. java 将bean转化为map,将javabean转化为map对象
  9. Android无界面编程之使用Service
  10. 04-cmake语法-STREQUAL
  11. DelegatingFilterProxy详解
  12. java 快速创建map_快速创建Map并初始化,超级简单
  13. Struts2框架之文件下载
  14. 计算机管理没有Android手机项,电脑没有手机驱动各品牌解决办法
  15. 4-2. 打印九九口诀表
  16. Redis列表与集合
  17. go语言工具_Concurrent Map
  18. ORALC/HIVE 的STDDEV、STDDEV_POP、STDDEV_SAMP等函数
  19. 他们为国效力40年,不如Angelababy发呆1天
  20. 《百度》文库下载券免费下载文档教程

热门文章

  1. 电商用户行为实时分析系统(Flink1.10.1)
  2. LINGO学习笔记01
  3. MMA-Mathematica初步了解和使用-MMA
  4. 产品经理(PM)和产品负责人(PO)的区别
  5. 用html编写诗句春晓,春晓-古诗
  6. 全志 Tina Linux 存储介质切换:eMMC,SPI NAND,SPI NOR,SD Card,SD NAND
  7. axios get带参数的请求方法
  8. 亲身经历,全盘加密需慎重!!开启TPM后可能会加密硬盘 这个按钮不要碰
  9. 初学者制作VMOS场效应管小功放
  10. addons软件下载_addons手机正版下载|