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

时间:2024-03-18 15:34:47

一、以太坊p2p模块组成

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

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

discover模块源码:

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

p2p 其他部分源码

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

二、以太坊的网络分层

以太坊的网络如下所示:
以太坊p2p网络(一):以太坊p2p网络部分结构

(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则是负责维持底层的连接。这些结构的关系如下图:
以太坊p2p网络(一):以太坊p2p网络部分结构

2.2 Peer 管理源码结构

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

(3) 表示层

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

(4)应用层

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