p2p源码目录
discover/ 基于UDP的节点发现V4协议
discv5/ 节点发现V5协议
enode/ 节点信息
enr/ 以太坊节点记录(ethereum node records)
nat/ 网络地址转换,用于内网穿透
netutil/
protocol/
simulations/ 本地p2p网络的模拟器
dial.go 建立连接请求,以任务的形式
message.go 定义了读写的接口
metrics.go 计时器和计量器工具
peer.go 节点
protocol.go 子协议
rlpx.go 加密传输协议
server.go 底层p2p网络的函数入口
启动p2p网络
启动p2p网络主要会做以下几件事:
- 发现远程节点,建立相邻节点列表
- 监听远程节点发过来的建立TCP请求
- 向远程节点发送建立TCP连接请求
首先找到p2p网络启动的入口:
Start()
start
函数主要做了以下6件事:
- 初始化server的字段
- 设置本地节点setupLocalNode
- 设置监听TCP连接请求setupListening
- 设置节点发现(setupDiscovery)V4版本
- 设置最大可以主动发起的连接为50/3
- srv.run(dialer) 发起建立TCP连接请求
其中setupLocalNode、setupListening、setupDiscovery、