对等网络
对等网络又称P2P网络。P2P网络的每个节点都可以承担客户端或服务端功能,这一点不同于传统的客户端/服务端(client/server,C/S)结构。
节点与节点之间进行相互连接组成了一个简易P2P模型,但其第一步就是要寻找对方。
按照寻找方式,可将P2P网络分为四类,也是P2P网络发展阶段代表。
集中式网络
分布式网络
混合式网络
结构化网络
集中式网络
集中式P2P2网络结构,在网络中设置一个中心节点,其他节点都与其连接,并把自身资源的索引信息上传到中心。
当节点与节点进行交互时,需要通过中心节点查找信息,才能实现节点间连接。
优点
结构简单
容易实现
缺点
随着规模增加,中心节点准确性与及时性受限
纯分布式网络
纯分布式网络的核心思想:令节点通过泛洪机制向全网广播查询请求,每个节点收到查询消息后搜索本地资源是否有资源可以为请求节点服务,如果有,则向请求节点返回搜索结果。
优点
无中心节点、避免单点故障
缺点
泛洪循环、响应风暴
混合式网络
混合网络模式混合了集中式和分布式结构,由若干超级节点和普通节点组成分布式网络。
新节点加入
当一个新的节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点。
优点
考虑了节点之间性能差异
实现难度小
缺点
存在泛洪循环问题
去中心化效果不好
结构化网络
结构化P2P网络与纯分布式结构不同,重要思想就是将资源索引信息进行有序组织并按照某种规律保存到相应的节点。
结构化网络有时也被称作为DHT网络
因为实现资源索引信息进行有序组织的依赖于DHT(全称叫分布式哈希表,Distributed HashTable),是一种分布式存储方法。可见DHT对于结构化网络是非常重要的。
DHT基本思想
为理解这DHT基本思想。我们需要将P2P网络抽象为2类空间,即资源空间与节点空间。
结构化排序
将资源编号为1的所有索引信息放在节点编号为1的节点之上,然后形成一种结构化的排序,例如环状。
区块链网络技术
预备知识
节点
节点一般具有以下功能
全节点
全节点具备节点的所有功能,存储了区块链所有的数据,也就具有以下特征:
完整数据库
广播交易
验证交易
同步数据
提高安全
轻节点
轻节点只存储了区块链数据库的一部分,即只存储区块头而不存储交易数据,它们会通过相对简单的方式完成交易校验。
特征
可以离线
验证自己交易
存储部分数据
无法辨识长链
轻节点验证支付方法
SPV
SPV是“Simplified Payment Verification”(简单支付验证)的缩写,是轻节点验证支付的一种方法。基本原理依赖于布隆过滤器和默克尔验证:
布隆过滤器
布隆过滤器(Bloom Filter)由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构,支持高效查询数据。
其基本机制如图:
默克尔验证
只需要获得交易1以及Hash34即可验证
TCP协议
预备知识
网络协议
网络中互相通信的对等实体之间交换信息时必须遵守的规则的集合。
TCP协议概述
TCP协议,即传输控制协议(transmission Control Protocol)是一种传输层通信协议。
TCP通信需要经过创建连接,数据传送、终止连接三个步骤。
特点:
- 使用TCP协议一个节点向另外一个节点发送数据之前,两个进程必须先要“握手”(建立连接);
- 传输数据完毕后,必须释放已经建立的TCP连接。
建立连接
在TCP协议中可以采用三次握手(Three- way Handshake)进行建立初始连接。
地址广播及发现
每个节点保存和维护一份区块链信息,为保证全网的一致性,节点需要进行同步信息。按照同步功能可以划分为交易同步和状态同步。
在一些区块链项目中,会为新加入的节点指定若干个种子节点,新节点可以从种子节点获得区块链网络其他节点的信息,以便方便新加入节点与其他节点进行交互。
同步区块数据
节点在加入区块链网络以后,需要与其他相邻节点建立联系,广播自己的地址,让其他网络的节点知道自己的节点信息。
同步
交易同步:为生成区块提供基础
状态同步:区块链节点的数据状态保持在最新
区块高度
一个区块的高度是指在区块链中它和创世区块之间的块数。
同步过程
在TCP协议中主要通过以下过程保持状态同步。
数据传播协议
交易同步数据
在TCP协议中主要通过以下过程保持交易同步
检测存活节点
在区块链网络系统由于时间不同步,节点之间通信还需要检测节点的状态。在TCP协议中可以采取心跳机制进行检验节点是否存活。其机制如下:
每隔若干时间发送一个固定信息给对方节点,对方节点收到后回复一个固定信息。如果没有对方节点消息,则为断开。
八卦协议
八卦协议,即Gossip协议。Gossip Protocol最早在1987年发表在ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance》中被提出。
Gossip有众多的别名“闲话算法”、“疫情传播算法”、“病毒感染算法”、“谣言传播算法‘。
是一种去中心化分布式通信协议
实现节点最终一致性
Gossip天然具有分布式容错的优点
基本要点
Gossip协议可类比八卦新闻在社交网络中的传播
- 每个节点都正确性地传播消息;
- 散播消息的节点,随机选择k个邻节点散播消息
- 每次散播消息都选择尚未发送过的节点进行散播
- 收到消息的节点不再往发送节点散播,避免泛洪循环问题
经过若干次循环,整个节点消息将会达到最终一致性,即形成同步状态。
五大优势
拓展性
容错
去中心化
一致性收敛
过程简单
两大劣势
信息延迟
信息冗余
数据验证机制
概述
数据验证是区块链技术极为重要的一环,包括交易验证和区块验证。
交易验证
- 有效的交易会在网络中传播
- 无效的交易将会在第一个节点处被废弃
区块验证
确保只有有效的区块会在网络中传播
数据验证过程
交易验证和区块验证都遵循类似的过程。
交易验证的内容
交易验证包括交易格式、交易数据结构、格式语法结构、输入输出等。
例如:
- 交易的语法和数据结构必须正确
- 输入与输出列表都不能为空
- 交易的字节大小是小于MAX_BLOCK_SIZE的
- 每一个输出值,以及总量,必须在规定值的范围内
- 没有哈希等于0,N等于-1的输入
- ……
区块验证的内容
区块验证包括区块格式、哈希值、时间戳、创世块等。
例如:
- 区块的数据结构语法上有效
- 区块头的哈希值小于目标难度(确认包含足够的工作量证明)
- 区块时间戳早于验证时刻未来两个小时(允许时间错误)
- 区块大小在长度限制之内
- 第一个交易(且只有第一个)是coinbase交易
- ……
对等网络路由
对等网络路由机制简介
P2P网络的一个重要问题
P2P网络的根本思想就是在于对等和共享
在P2P系统中,资源是分散在各个节点之上
节点频繁地加入或退出都相当自由,几乎没有规律可循。
集中式P2P路由机制
主要采用目录索引的机制来发现P2P网络中的节点。其机制如下:
非结构化P2P路由机制
按照路由机制策略,非结构化P2P网络的路由机制可以分为两大类:盲目搜索和启发式搜索。
盲目搜索
通过在网络中传播查询信息并且把这些信息不断扩散给每个节点。通过这种泛洪方式来搜索想要的资源。其机制如下:
启发式搜索
启发式搜索是盲目搜索泛洪的改进,节点不是向所有邻居节点发送查询请求,而是选择其中一部分在过去表现优秀的邻居节点进行发送。表现优秀标准如下:
- 选择在以往的查询中返回结果最多的邻居节点
- 选择在以往的查询中响应时间最快的邻居节点
- 选择在线时间最长的邻居节点
结构化P2P路由机制
以太坊基于DHT思想一个算法-Kademlia算法
其机制如下(以座位号为1的小王寻找书籍《水浒传》为例)
通信机制
HTTP协议
简介
HTTP协议即超文本传输协议(Hypertext Transfer Protocol),是建立在TCP协议之上的一种应用协议。
工作原理
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下过程:
协议规范内容
请求报文
HTTP请求报文大致可分为请求行、请求头、空行、请求体四部分。
请求行:请求方法、URI、HTTP版本等
请求头:可以接受的信息类型等
空行:用于区分报文正文
请求体:请求的具体内容格式
响应报文
HTTP响应报文大致可分为响应行、响应头、空行、响应体四部分。
响应行:状态码、HTTP版本等
响应头:处理消息的基本方法等
空行:用于区分报文正文
响应体:响应的具体内容格式
IPC
简述
IPC(Inter-Process Communication,进程间通信)是指两个进程的数据之间产生交互。
Websock
简述
Websock是基于TCP的应用层协议,实现双向通信。工作流程与HTTP类似。
TCP、HTTP、Websock区别与联系
消息序列协议
序列化
序列化(serialization)是指将对象序列化为二进制形式(字节数组),也称为编码(Encode),主要用于网络传输、数据持久化等。
反序列化是序列化的逆向过程,把字节数组反序列化为对象,把字节序列恢复为对象的过程称为对象的反序列化。
XML
XML(Extensible Markup Language)是一种常用的序列化和反序列化协议。
优点
- 具有人机可读性
- 可指定元素或特性的名称
缺点
- 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息
- 必须有一个将由XmlSerializer序列化的默认构造函数
- 只能序列化公共属性和字段,不能序列化方法
- 文件庞大,文件格式复杂,传输占带宽
JSON
JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。
优点
- 前后兼容性高,数据格式比较简单,易于读写
- 序列化后数据较小,可扩展性好,兼容性好
- 与XML相比,其协议比较简单,解析速度比较快
缺点
- 数据描述性比XML差
- 不适合性能要求为ms级别的情况
- 额外空间开销比较大
Protobuf
Protocol buffers 由谷歌开源而来。它将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应数据结构的POJO对象和protobuf相关的方法和属性。
优点
- 序列化后码流小,性能高
- 结构化数据存储格式(XML JSON等)
- 通过标识字段的顺序,可以实现协议的前向兼容
- 结构化的文档更容易管理和维护
缺点
需要依赖于工具生成代码
序列化协议选择的标准
每种序列化协议都有优点和缺点,下面条件可以作为选择序列化协议的参考。主要包括通用性、强健性、可读性、功能性、兼容性、安全性。
通用性:跨平台、跨语言;实施标准
强健性:是否处于测试阶段;是否存在妥协
可读性:人眼可读性;调试简单
功能性:时间复杂度;空间复杂度
兼容性:向上兼容;向下兼容
安全性:降低服务可用性;成本大大提高
数据接口
RPC
简介
RPC(Remote Procedure Call Protocol)远程过程调用协议。
一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC是一项广泛用于支持分布式应用程序的技术。
RPC的主要目的是为组件提供一种相互通信的方式。
RPC只是协议,而非实现。
RPC实现:Dubbo, Thrift,GRPC, Hetty ……
调用过程
Restful
简述
Restful即表现层状态转化。是一种基于HTTPS协议的一种接口设计规范。
基本操作
RPC与Restful比较
两种协议,适合不同的场景,RPC适合大型企业内部服务调用,而Restful适合小型企业。
RPC | Restful | |
---|---|---|
传输协议 | 可以基于TCP协议,也可以基于HTTP协议 | 基于HTTP协议 |
传输效率 | 使用TCP协议,让请求报文体积更小,或者使用HTTP2协议,提高传输效率 | 基于HTTP1.1的协议,请求中会包含很多无用内容 基于HTTP2.0,效率约等于RPC |
性能消耗 | 可以基于thrift实现高效的二进制传输 | 大部分通过json实现,比thrift要更消耗性能 |
负载均衡 | 自带了负载均衡策略 | 需配置Nginx,HAProxy来实现 |
服务治理 | 能做到自动通知,不影响上游 | 需要事先通知,修改Nginx/HAProxy配置 |
ABI
简述
ABI全程为Application Binary Interface,表示应用程序二进制接口,是指两个程序模块之间的接口。可以简单理解为编译器、连接器需要遵循的规则。
规范内容
数据类型、格式
调用顺序
目标文件格式
跨链
互操作性
2020年世界经济论坛与德勤合作分布了一份关于“供应链区块链包容性部署——区块链互操作性框架”的报告。
- 区块链的互操作性非常重要
- 区块链的互操作性支持多种功能
- 区块链的互操作性支持钱包兼容
互操作性
- 区块链交换和利用数据的能力
- 在两个或多个区块链之间移动数字资产的能力
跨链定义
跨链是指在实现不同区块链网络之间的价值和信息传输的协议或者技术。
实践案例
Ripple、Polkadot blockchain、Blocknet、Aion Online、WanChain等。
跨链分类
从技术角度,我们可以根据“交易如何确认”,“在哪确认’,以及”由谁来确认‘等不同的方案将该过程概括为三种实现方式:
公证人机制(Notary Schemes)
侧链/中继(Sidechains/Relays)
哈希锁定(Hash-locking)
几种可能的跨链应用场景包括资产交换、原子交易、预言机、信息互通等。这里可以参考2016年Buterin的一篇综述性文章《Chain interoperability》。
公证人机制
公证人机制是一种简单的跨链机制,在这种公证制度中,一个或者一组受信任的实体充当第三方,主动或者被动进行交易确认和验证。
分类
- 单签名公证人机制
一个节点做公证人 速度快、安全性低、非中心化
- 多签名公证人机制
多个节点利用签名机制做公证人组 安全性高
- 分布式签名公证人机制
多个公证人,通过随机方式产生 安全性高,灵活
公证人机制未能很好解决中心化问题。
中继
中继模式本质上是公证人和侧链机制的融合和扩展。
侧链是指与主区块链平行的“区块链”。具有以下三个特征:
侧链是相对的
侧链与主链是独立的
侧链与主链可以连接互通,即跨链
侧链跨链的基本机制——双向锚定(Two-Way Pegging)
在锁定主链数字货币的同时,将等价的侧链数字货币进行释放。根据锁定和释放的模式,即交易验证,又可以划分为以下几类:单一托管模式、联盟模式、SPV模式、驱动链模式。
侧链跨链交易验证模式
交易验证模式 | 简介 |
---|---|
单一托管模式 | 在主链上指定一个托管方(比如交易所)来锁定和释放数字货币 |
联盟模式 | 多个托管中心共同确认锁定和释放数字货币 |
SPV模式 | 通过SPV算法进行管理数字货币释放与锁定活动 |
驱动链模式 | 节点通过投票方式何时解锁数字资产以及将解锁数字资产发送到何处 |
中继模式落地项目
通过对侧链知识的介绍,这里可以将中继链看作是为跨链交易验证而设计的区块链。
Polkadot是由原以太坊主要核心开发者推出的公有链。
Cosmos是Tendermint团队推出的一个支持跨链交互的异构网络。其机制如下
哈希时间锁定协议
哈希时间锁定协议(Hashed-Timelock Agreements,HTLA是),是哈希锁定合约的泛化,主要目的在于适应跨链交易。
在哈希时间锁定协议中只需发送者、连接方、接受者三方,即可实现代币的交易,期间不需要任何交易所平台;且在交易失败时,代币并未发生实际转移,不需要支付额外的交易费用。
基本原理
以小王以1单位A币交换小李价值10个单位C币服务为例