一、 对等网络
对等网络又称 P2P 网络。
二、节点类型
- 全节点(Full Node)
所有节点都会参与校验和广播交易及区块信息,且会发现和维持与其他节点的连接。有些节点会包含完整的区块链数据库,包括所有交易数据,这种节点也称为全节点(Full Node)。
- SPV 节点或轻节点(Lightweight Node)
一些节点只存储了区块链数据库的一部分,一般只存储区块头而不存储交易数据,这样的节点也称为 SPV 节点或轻节点(Lightweight Node)。
三、 数据传播协议
1、建立初始连接
一个新节点如果要加入到区块链网络,一般需要建立 TCP 连接,即三次握手(Three-Way Handshake)。
2、 地址广播及发现
节点在加入区块链网络以后,需要与其他相邻节点建立联系,广播自己的地址,让其他网络的节点知道自己的节点信息。
3、 区块链同步
在区块链 P2P 网络中,每一个节点保存和维护一份区块链信息,但是由于新区块的产生是分布式的,因此每个节点的区块信息并不是最新的,为保证全网的一致 性,节点需要进行同步信息。
4、交易传播
一笔新交易产生时,会先被广播到区块链网络中的其它参与节点。节点将交易 单广播至全网,每个节点会将数笔未验证的交易 Hash 值收集到区块中,每个区块可以包含数百笔或上千笔交易。最快完成 POW 的节点,会将自己的区块传播给其他节点。
5、 检测节点存活
发送 ping 消息,用于检测节点是否存活; 响应 pong 消息,返回 pong 消息,告诉对方节点还存活。
6、 Gossip 协议:“八卦版”区块链通信协议
每个节点可能知道所有其他节点,也可能仅知道几个邻居节点,只要这些节可以通过网络连通,最终他们的状态都是一致的,因此 Gossip 天然具有分布式容错的优点。
四、通信机制
1、RPC
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。
2、HTTP 连接
HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是 Web 联网的基础,也是手机联网常用的协议之一,HTTP 协议是建立在 TCP 协议之上的一种应用。
3、 SOCKET
Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。应用层可以和传输层通过 Socket 接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
五、消息序列化协议
1、XML
XML(Extensible Markup Language)是一种常用的序列化和反序列化协议, 具有以下优缺点:
- 优点:
- 具有人机可读性好可指定元素或特性的名称
- 缺点:
- 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息
- 类必须有一个将由 XmlSerializer 序列化的默认构造函数
- 只能序列化公共属性和字段不能序列化方法
- 文件庞大,文件格式复杂,传输占带宽
- 场景:
- 当做配置文件存储数据实时数据转换
2、JSON
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
JSON 采用与编程语言无 关的文本格式,但是也使用了类 C 语言(包括 C, C++, C#, Java,JavaScript, Perl, Python 等)的习惯,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
- 优点:
- 前后兼容性高
- 数据格式比较简单,易于读写
- 序列化后数据较小,可扩展性好,兼容性好
- 与 XML 相比,其协议比较简单,解析速度比较快
- 缺点:
- 数据的描述性比 XML 差
- 不适合性能要求为 ms 级别的情况
- 额外空间开销比较大
- 场景:
- 跨防火墙访问
- 可调式性要求高的情况
- 基于 Web browser 的 Ajax请求
- 传输数据量相对小,实时性要求相对低(例如秒级别)的服务
3、Protobuf
Protocol buffers 由谷歌开源而来,在谷歌内部久经考验。它将数据结构 以.proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和Protobuf 相关的方法和属性。其特性适合于远程调用。