4.2.1. 概述
天玄链 P2P 模块提供高效、通用、安全以及节点发现的网络通信基础功能,支持区块链消息的 RPC 调用,单播、片内广播和全局广播。主要功能:
- 区块链节点标识:通过区块链节点标识 (nodeId) ,唯一标识一个区块链节点,在区块链网络上通过区块链节点标识对区块链节点进行唯一区分确认。
管理网络连接:维持区块链网络上区块链节点间的 TCP 长连接,自动断开异常连接,自动发起重连。
消息收发:在区块链网络的区块链节点间,进行消息的 RPC 调用,单播、片内广播和全局广播。
4.2.2. 详细设计
4.2.2.1. 区块链节点标识
区块链节点标识由椭圆曲线算法的公钥生成,每个区块链节点必须有唯一的椭圆曲线密钥对,区块链节点标识在区块链网络中唯一标识一个区块链节点。
通常情况下,一个节点要加入区块链网络,至少要准备三个文件:
- node.key:节点密钥,EC/ED/SM 等格式
- node.crt:节点证书,由 CA 颁发
- ca.crt:CA 证书,CA 机构提供
4.2.2.2. 管理网络连接
区块链节点间,会自动发起和维持 TCP 长连接,在系统故障、网络异常时,主动发起重连,区块链节点间建立连接时,会使用 CA 证书进行认证。
连接建立流程
建立 TLS 链接既是为了验证节点身份的合法性,又为后续新节点发送入网请求做准备。建立 TLS 链接的步骤如下:
- 节点利用密钥文件
node.key
和chain.crt
初始化 SSLContext 。 - 节点发送 TLS 链接请求给共识节点,请求建立连接。
- 当双向身份认证通过后,TLS 链接建立成功,新节点与共识节点可以进行通信。
4.2.2.3. 消息收发
区块链节点间消息支持单播、组播和广播
RPC 调用 会向单一区块链节点发送消息,并同步等待响应结果。 例如,区块链节点 A 区块链节点B根据节点 ID ,会发起一个有 RPC 标识的消息单播发送,节点 B 收到该 RPC 消息后,会依据具体的消息,将处理结果返回节点 A 。
单播 单个区块链节点向单个区块链节点发送消息,通过区块链节点 ID 区分。 例如,区块链节点 A 区块链节点 B 根据节点 ID ,筛选在线节点发送消息。
片内广播 单个区块链节点向同一分片内的区块链节点发送消息。 例如,区块链节点 A 会依据自身所在分片,获取所有相同分片的 Peer 节点,逐个发起单播流程。
全局广播 单个区块链节点向所有区块链节点发送消息。 例如,区块链节点 A 获取所有的区块链节点,逐个发起单播流程。