区块链网络技术基础学习笔记

一、 对等网络

对等网络又称 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)是一种常用的序列化和反序列化协议, 具有以下优缺点:

  • 优点:
  1. 具有人机可读性好可指定元素或特性的名称
  • 缺点:
  1. 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息
  2. 类必须有一个将由 XmlSerializer 序列化的默认构造函数
  3. 只能序列化公共属性和字段不能序列化方法
  4. 文件庞大,文件格式复杂,传输占带宽
  • 场景:
  1. 当做配置文件存储数据实时数据转换

2、JSON
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
JSON 采用与编程语言无 关的文本格式,但是也使用了类 C 语言(包括 C, C++, C#, Java,JavaScript, Perl, Python 等)的习惯,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

  • 优点:
  1. 前后兼容性高
  2. 数据格式比较简单,易于读写
  3. 序列化后数据较小,可扩展性好,兼容性好
  4. 与 XML 相比,其协议比较简单,解析速度比较快
  • 缺点:
  1. 数据的描述性比 XML 差
  2. 不适合性能要求为 ms 级别的情况
  3. 额外空间开销比较大
  • 场景:
  1. 跨防火墙访问
  2. 可调式性要求高的情况
  3. 基于 Web browser 的 Ajax请求
  4. 传输数据量相对小,实时性要求相对低(例如秒级别)的服务

3、Protobuf
Protocol buffers 由谷歌开源而来,在谷歌内部久经考验。它将数据结构 以.proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和Protobuf 相关的方法和属性。其特性适合于远程调用。

上一篇:[Leetcode]-- Valid Number


下一篇:反射的另类实现。(不知道这么用还算不算反射了?)