吴寿鹤:以太坊的P2P网络

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?在本次分享中为大家分析导读。

attachments-2018-03-9MDlTgOS5aa74ab46b850.png

作者:吴寿鹤

整理:辉哥

来源:简书

原文链接:http://t.cn/EyASRPn

本文约2000字+,阅读(观看)需要13分钟

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者简介:吴寿鹤,《区块链开发实战——以太坊关键技术与案例分析》的第一作者,《区块链开发实战——Hyperledger Fabric关键技术与案例分析》联合作者,IONChain 离子链 首席架构师,hyperLedger核心项目开发人员,区块链技术社区-区块链兄弟联合创始人。


区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?在本次分享中为大家分析导读。

08d1dc0f27544586b9683e1fb9076c85


TCP/IP的四层网络模型,对应到以太坊主要有3层。TCP/IP的物理层解决物理链路的问题,网络层解决;应用层做应用,QQ,微信等。

UDP用于发现网络,;ETH 是全节点协议,LES协议是轻节点。

第一层和第二层固定,PROTCOL接口校验时不一样就行,就不会误加入。只要种子节点不一样,就不会混淆。底层都是P2P公用包,都是一样的。

b77c2225373e46e7ae8220e9cc26a4b7


为什么需要去中心化的目的呢?节点是自由进出的。发现节点的方法。

69a43d10e6a6418d862e4fd6ac44448c


DHT(Distributed Hash Table,分布式哈希表类似Tracker的根据种子特征码返回种子信息的网络。DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。新版BitComet允许同时连接DHT网络和Tracker,也就是说在完全不连上Tracker服务器的情况下,也可以很好的下载,因为它可以在DHT网络中寻找下载同一文件的其他用户。

7b97fb8b18164fa49fd1063029af43da


距离发现有2种,见上,地理难获取,例如VPN获取会不准确;另外用异或算法,用节点ID。

地理是虚拟位置还是网络多条位置呢?以太坊用异或进行,不用地理位置,不是真正的地理位置。

33b118234b954afc97bbc5de8b157637


异或运算有3种特点。

c2283bcb52694480b348ba4854e1cffc


Kademlia (俗称K桶)是由 Petar Maymounkov 与 David Mazières 所设计的P2P 重叠网络传输协议,以构建分布式的P2P电脑网络。是一种基于异或运算的P2P信息系统。它制定了网络的结构及规范了节点间通讯和交换资讯的方式。在Kad网络中,每个节点只负责处理一小部分搜索和查找源的工作。分配这些工作的时候,通过我们每个用户端的唯一的ID和搜索文件的Hash值之间的匹配来决定。

cbc62281de954c219bae2e3e52b08a90


K-桶初始化的过程:

1、先新建table对象,连接本地database,如果本地没有database,则先新建一个空的database;

2、初始化K-桶,先获得k-桶信息的源节点:

a. 通过setFallbackNodes(bootnodes)来获得5个nursey节点;

b. 通过tab.loadSeedNodes()——>tab.db.querySeeds()来从本地database获得最多30个节点;

3、把上面的节点存入seeds,进行for循环;

4、在循环内执行tab.add(seed),计算seed节点与本节点的距离,选择相应距离的bucket。如果bucket不满,则用bump()存入bucket;如果bucket已满,则放入replacements。

ccf8d0eb95fa463995a2fab3d6c92bb0


table以及k-桶是如何维护:

1、每30分钟自动刷新k-桶(刷新k-桶可以补充或保持table是满的状态,刚初始化的table可能并不是满的,需要不断的补充和更新);

2、每10秒钟就去验证k-桶中的节点是否可以ping通;

3、每30秒就将k-桶中存在超过5分钟的节点存入本地数据库,视作稳定节点;

472cccd0c8c440368ad34f3b67949731


插入之前要做PING/PONG测试,K桶如果满了,最大只有16,如果到16了,如果死了就更新最后一个节点;否则就抛弃最后的节点。

562295936c684d959e73bbbe75e88abb


7323176a489940418a8112bac51f571d


57f6f371b0d84104b1c2695029b680ea


创建过程

eb63ff18ec0e4e9abaccfbc6712cdd42


创建连接

078c59f3a79543b8a87be1cd50f1d821


我们只是建立TCP链接,还没有进行加密。

双方协议表示协议是否一致,通过对方的公钥进行加密,完美的向前兼容安全。

3788aaf46be64babb003aeea958b5b01


加密通道的私钥生成公钥的过程。完美向前安全。

消息进出流程:

702d2bfde4864972bc7f499ae1ddee54


以太坊支持ETH62,ETH63。如果应用层修改后,因为协议不一致,所以不会接入以太坊节点。

93aa2bd18f654604b6ba01ca3f4ba216


389b9fe594ac4c8f835428429fee03ce


消息进出流程

abda740bbb80436eb6554794f0ea053b


消息结构

活动会议部分成员合影:

15965687cd0e4b1599479a7d7d8955e0

本次实录纪要由辉哥(王登辉,创业股平台CTO,HiBlock上海合伙人)记录,转发务必注明出处及本段信息。


文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

attachments-2018-02-kL1zBfXx5a7ffd0b78798.jpg

  • 发表于 2018-12-04 11:28
  • 阅读 ( 244 )
  • 分类:以太坊

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
社区运营-小以

556 篇文章

作家榜 »

  1. 社区运营-小以 556 文章
  2. 社区运营-小链 244 文章
  3. 于中阳Mercina-zy 79 文章
  4. 涂晶 75 文章
  5. 李晓琼 44 文章
  6. 兄弟连区块链培训 42 文章
  7. 吴寿鹤 36 文章
  8. John-smith 25 文章