在介绍RChain的通信机制之前,先简单介绍一些以太坊的通信机制,它包括以下几个方面,如下详细了解以太坊的通信机制,可以查看https://github.com/ethereum/devp2p/blob/master/rlpx.md

1、Nodes

每个节点用一组信息来代表它所知道的其他节点,这些信息包括每个节点的连接信息以及表结构(比如连接这个节点的平均延迟)。每个节点是通过它的加密公钥来识别的,Kademlia的距离度量用的是256位散列(sha3/Keccak-25)的公钥。

2、Distance Metric

假设有N0和N1两个节点,节点的keys用K0和K1来标识,N0N1的距离是K0和K1的公共前缀的长度,它可以通过简单的查找K0 ^ K1操作的第一个bit(^是一个bit的XOR操作)。因为key是随机指定的,和地理无关,因此一个中国的节点,最近的一个邻居节点是古巴的。

3、Node Table

对于一个特定的节点N,它的对等节点是保存在一个表T当中。下图的表中有256行数据,每一条记录是N在上述的XOR操作的度量距离。表的最大记录数是由一个全局的参数副本数k来定义的。在节点的新增和剔除当中有一些灵活的策略来保证副本数。

在N的整个生命周期当中,这个表T是会被修改。例如我们喜欢基于延迟的路由,我们会在表里面慢慢积累这种信息。表T还可以存储除了表路由之外的数据,比如说信誉数据。

4、Routing

Kademlia是为寻找明确的节点开发的(或者是持有特定的数据的节点),但是在以太坊里面不是这样的。但这是一个RChain可以免费使用的有效想法。它的基于通道的网络需要那些被挑选出来的个人节点。

Kademlia协议的查询部分可以保证N有一个非常良好的大量节点的全局视图,它可以确保我们可以在log2 n的时间内把特定的节点找出来,n是key的比特长度。

为了减少节点的跳数,表可以划分成一堆长度为b比特的chunk,所以每一行代表在B位第i组的差异(而不是在每个单位连续的不同)。

RLPx协议指定b=8,但是Go, Java, and Rust的以太坊客户可以设置b=1。客户单和服务端使用不同的b值是没有问题的。

5、Discovery Protocol

RLPx协议遵循了Kademlia协议密切发现和维护已知节点列表的特点,但是Kademlia并不包括安全通信。RLPx在这点上做了增强,它在第一次连接的时候增加了一个二阶段握手协议。通过公钥来交换,并且所有的通信都是加密的。

6、Bootstrapping

在大多数的P2P系统当中,至少要有一个节点H是已知的,我们的节点N先和节点H握手(尝试把自己添加到H的表T中),如果N像H查询自己的公钥,H将会给N返回离它最近的节点。然后N就可以查询那些新添加的节点的表去发现新的节点,来获取整个网络的全貌。

7、Maintaining Peers

对等列表T每一次收到远程节点的消息的时候都有可能更新,这可以通过周期性的PING/PONG来强制触发。通常,维护对等列表的策略利用了文件共享统计数据的观察结果,那些暂时保持活动的节点将保持更长的活动时间,因此保留响应的节点通常比替换它们要好。

RLPx并不试图规定节点应该作为直接连接节点维护区块链的工作。这些通常是较少的,他们是根据测得的延迟或其他特性选出来的。

8、总结

使用RLPx协议的Ethereumj(以太坊java客户端),是一个网络建立的最直接的途径。RLP编码方案可以用proto buffer代替,网络维护协议的其余部分会变得更简单。拿过来,然后进行二次开发。Kademlia的子集、RLPx、握手协议,提供所有需要的rchain网络机制。如果直接通信节点是从发现的节点列表中选择,在P2P层都可以屏蔽从rchain节点代码内部,没有进一步的认证必要的机器。

RChain节点通信机制(上)的更多相关文章

  1. TensorFlow中的通信机制——Rendezvous(二)gRPC传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传 ...

  2. storm并发机制,通信机制,任务提交

    一.storm的并发 (1)Workers(JVMs):在一个物理节点上可以运行一个或多个独立的JVM进程.一个Topology可以包含一个或多个worker(并行的跑在不同的物理机上),所以work ...

  3. 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  4. Binder通信机制介绍

    1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Android会另起炉灶,采用Binder.接着,会根据 Binder的机制,去理解什么是Serv ...

  5. flux沉思录:面向store和通信机制的前端框架

    一.综述 Flux 被用来描述“单向”的数据流,且包含某些特殊的事件和监听器. 响应式编程是一种面向数据流和变化传播的编程范式 flux是响应式编程的一种? Flux 在本质上采用了模型-视图-控制器 ...

  6. [源码解析] TensorFlow 分布式环境(8) --- 通信机制

    [源码解析] TensorFlow 分布式环境(8) --- 通信机制 目录 [源码解析] TensorFlow 分布式环境(8) --- 通信机制 1. 机制 1.1 消息标识符 1.1.1 定义 ...

  7. .Net中Remoting通信机制

    Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式. 从微软的产品角度 ...

  8. 【单页应用之通信机制】view之间应该如何通信

    前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧 ...

  9. Android 进程通信机制之 AIDL

    什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在 ...

随机推荐

  1. 发布到ASP.NET CORE项目到 Windows server 2012

    原文: https://github.com/zeusro/MarkdownBlog/blob/master/2018/2018-01-17-01.md 发布到ASP.NET CORE项目到 Wind ...

  2. mysql 在B数据库下 创建一个与A数据库中一样的表

    1.创建数据内容与结构一致(不会复制索引以及外键) create table B.test as select * from A.test; 2.把上面的步骤分开,先复制结构 create table ...

  3. Spring读取外部属性-properties

    概述 在Spring中处理外部值最简常用的方法就是外部创建name.properties文件,并在其中声明变量值,供Java进行读取.比如数据源信息配置,Java固定属性位置等.读取的方式一般由三种: ...

  4. python数据处理之基本函数

    一.基本函数篇 1)python strip()函数介绍 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstr ...

  5. 【JavaScript创建对象】

    JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 创建对象的四种方式: <!DOCTYPE html> <html> <head> &l ...

  6. 使用python写天气预告

    先去YY天气注册一个账号,然后就能用API了 http://www.yytianqi.com/ # encoding=utf-8import urllib.requestimport jsonimpo ...

  7. Hadoop(十六)之使用Combiner优化MapReduce

    前言 前面的一篇给大家写了一些MapReduce的一些程序,像去重.词频统计.统计分数.共现次数等.这一篇给大家介绍的是关于Combiner优化操作. 一.Combiner概述 1.1.为什么需要Co ...

  8. 蓝桥杯模拟赛-引爆炸弹-DFS+并查集

    今天整理电脑,翻出来了很久以前大佬给的题,贴一下. 引爆炸弹 1000ms 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸 ...

  9. 2017ecjtu-summer training #7 POJ 2689

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18731   Accepted: 5006 D ...

  10. 2017ecjtu-summer training #5 UVA10382

    题意 问最少可用几个圆覆盖矩形区域. 解析 将圆形转换成矩形有效区域,直径小于等于宽度的圆不考虑,从而转化成区间覆盖问题,然后贪心出最少圆. 贪心思想 每次选择出区域左界比上次选出的区域右界小的且区域 ...