以太坊p2p网络(一):以太坊p2p网络部分结构

一、以太坊p2p模块组成

在以太坊p2p目录下,主要包括以下几个模块:

p2p模块功能
discover包含了Kademlia协议。是基于UDP的p2p节点发现协议。
discv5新的节点发现协议。 还是试验属性
enr实现EIP-778中的以太坊节点记录
nat提供网络端口映射协议
netutil网络包拓展
protocolsp2p子协议拓展
simulationsp2p网络的模拟。

discover模块源码:

  • 发现的节点的持久化存储 database.go
  • Kademlia协议的核心逻辑 tabel.go
  • UDP协议的处理逻辑udp.go
  • 网络地址转换 nat.go

p2p 其他部分源码

  • 节点之间的加密链路处理协议 rlpx.go
  • 挑选节点然后进行连接的处理逻辑 dail.go
  • 节点和节点连接的处理以及协议的处理 peer.go
  • p2p服务器的逻辑 server.go

二、以太坊的网络分层

以太坊的网络如下所示:

(1)、传输层

传输层主要包括TCP和UDP协议,以太坊P2P启动主要包括两个部分启动TCP和启动UDP,默认端口30303。

  • UDP:udp主要用于p2p节点发现,包括nat地址转换,discover发现模块。
  • TCP:tcp主要用于节点和节点连接的区块链数据的处理, 包括接收其他节点的连接和主动连接其他节点的功能,主要逻辑在Peer,同时通过Nat向外暴露地址。

(2) 会话层

会话层主要包括 Peer 管理,NodeTable 管理和 RPC 协议。

p2p(peer to peer)负责以太坊底层节点间的通信,主要包括底层节点发现(discover)和上层协议运行两大部分。

  • NodeTable 管理主要包括底层节点发现
  • Peer管理只要负责上层协议运行
2.1 NodeTable管理源码结构

节点发现功能主要涉及 Server Table udp 这几个数据结构,它们有独自的事件响应循环,节点发现功能便是它们互相协作完成的。其中,每个以太坊客户端启动后都会在本地运行一个Server,并将网络拓扑中相邻的节点视为Node,而Table是Node的容器,udp则是负责维持底层的连接。这些结构的关系如下图:

2.2 Peer 管理源码结构

(3) 表示层

RLPx协议就定义了TCP链接的加密过程。
RLPx使用了(Perfect Forward Secrecy), 简单来说。 链接的两方生成生成随机的私钥,通过随机的私钥得到公钥。 然后双方交换各自的公钥, 这样双方都可以通过自己随机的私钥和对方的公钥来生成一个同样的共享密钥(shared-secret)。后续的通讯使用这个共享密钥作为对称加密算法的密钥。 这样来说。如果有一天一方的私钥被泄露,也只会影响泄露之后的消息的安全性, 对于之前的通讯是安全的(因为通讯的密钥是随机生成的,用完后就消失了)。

(4)应用层

以太坊应用层实现了eth、whisper等子协议。后面会详细分析。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值