2019-11-29-learnForp2p

About Ethereum p2p

p2p通信协议族的结构设计

在这里插入图片描述

分为三层结构:

  • 1.第一层,pkg eth中:eth.peer代表了远端通信对象和其所有的通信操作,它封装了更底层的p2p.Peer对象以及读写通道。eth.peerSet:是peer的集合类型。被eth.Ethereum,eth.ProtocolManager等顶层管理模块使用。
  • 2.第二层,pkg p2p中,可认为是泛化的p2p通信结构。p2p.Peer{}代表远端通信对象,封装自更底层的连接对象的conn{},通信用通信用的通道对象protoRW{},以及启动监听、处理新加入连接或断开连接的p2p.Server{}。p2p.Protocol{},针对上层应用特意开辟的类型,主要作用是包括容纳上层应用程序所要求的回调函数等,并通过p2p.Server{}在新连接建立后,将其产地给通信对象peer。
  • 第三层,是golang自带的网络代码包,分为两部分:1.pkg net,包括代表网络连接的接口,代表网络地址的以及他们的实现类,2.pkg syscall,包括更底层的网络相关系统调用类等,可视为封装了网络层(IP)和传输层(TCP)协议的系统实现。

从逻辑应用分类的角度也可以分成三层:

1.基于udp的邻居发现层;

基于udp的邻居发现层使用Kad (Kademlia p2p网络协议)节点发现机制,与网络中的其他节点进行ping pong握手、交换邻居的方式发现邻居,计算节点之间的距离,动态维护邻居表。

2.基于tcp的加密通信层;

基于tcp的加密通信层与节点发现层发现的节点进行握手建立安全加密连接,负责对核心层协议提供的数据进行编解码与加解密、安全传输,rlpx为该层实际使用的协议。

3.核心协议层。

核心协议层负责将需要发送的业务数据传入加密通信层,并处理从加密通信层收到的业务数据。

理论上,无论是tcp还是udp通信,只要知道了ip地址和端口号就可以进行通行了。为了找到通信对方的地址,可以从两种方式入手:1.初始连接(种子节点)2.地址传播发现(泛洪、分布式哈希表)。

c/s模式

c/s模式上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值