01
网络协议栈
PlatON网络的基本实现是全分布式结构化拓扑1(Decentralized Structured Topology),完全基于 RELOAD (REsource LOcation And Discovery) 基础协议 [RFC6940] 和 Kademlia 协议 [Kademlia]。下图为 PlatON 网络整体分层结构。网络分层-
1.1 链接层
链接层定位于实现数据的安全传输,提供多种协议来防止窃听、篡改、消息伪造;提供安全、可认证的连接;保证消息来源认证和消息数据的完整性。网络分层
本层实现安全传输层协议 (TLS) 和数据包传输层安全性协议 (DTLS)。针对密码算法,PlatON 扩展实现为插件机制,可灵活支持国际标准算法 (包括 SHA256、SHA3、ECDSA、RSA、3DES、AES、RSA-OAEP、ECIES 等),同时将率先支持中国国密算法 (SM2、SM3、SM4、SM9 等)。
1.2 分组转发和链接管理
负责提供分组转发服务来实现存储路由表,同时负责点对点建立连接,包括位于 NAT设备和防火墙后的节点。RELOAD 使用 ICE 方法[RFC5245]实现 NAT 穿越2。
1.3 拓扑插件
RELOAD 是一个 P2P 网络框架,支持扩展不同的拓扑算法来实现全分布式非结构化拓扑或全分布式结构化拓扑网络。网络分层
拓扑算法可利用消息传输组件来管理消息的收发,利用存储组件来管理数据的存储。拓扑算法与分组转发和链接管理层紧密配合,提供多种路由功能来满足不同需求。PlatON 网络采用 Kademlia 算法来实现全分布式结构化拓扑网络。
1.4 数据存储
负责数据的存储,通过与拓扑插件的配合完成数据的复制、迁移等动作,同时与消息传输组件配合完成数据消息的收发。RELOAD 支持字符串、数组和 dictionary 类型的数据 存储。网络分层
1.5 消息传输
负责对应用提供可靠的点对点消息传输服务。PlatON 在 RELOAD 基础上扩展了分区泛洪算法来进行消息的快速全网广播。
1.6 应用层
利用 RELOAD 底层的通信、存储能力来构建服务发现扩展,以及基于服务发现的 TURN3 服务、SIP4 服务、计算服务、数据服务、存储服务、区块链服务等。网络分层
以下章节主要描述应用层各服务的网络协议。
02:
服务发现
在 P2P 覆盖网络中,有些节点负责对外部提供服务,有些节点负责向其他节点请求服务,比如中继服务、语音邮件服务、网关定位服务、转码服务等。PlatON 中也需要部分节点提供算力服务、TURN 服务、SIP 服务等。其中服务发现是关键问题所在。
2.1 ReDiR 树
在 P2P 网络中,最简单的方式是在 DHT5(Distributed Hash Table,分布式哈希表,是一种分布式存储方法) 中以一个特定的 KEY 保存所有提供某个服务的节点 ID。但使用这种方法,将使存储节点的存储负载过大,而且会导致路由到存储节点的服务查询请求过多,造成消息处理负载过大。网络分层
为解决以上问题,PlatON 使用 ReDiR(Recursive Distributed Rendezvous) [RFC7374]来实现服务发现机制,ReDiR 可以支持数万的服务提供节点及服务查询节点。
ReDiR 使用树状结构实现 P2P 服务发现机制。同时使用 RELOAD 覆盖网络的存储能 力保存数据,每一类服务部存储为一棵 ReDiR 树,树节点保存服务提供节点的信息。当某个节点请求查找指定服务的提供者时,对 ReDiR 树做有限次的查找就可以找到与请求节点 最匹配的服务提供节点。
ReDiR 树节点使用 RELOAD 的 dictionary 结构存储服务提供节点,每一个 ReDiR 树节 点属于 ReDiR 树的某一层(level),ReDiR 树的根节点为第 0 层, 根节点的子节点位于第1层,第一层的子节点位于第 2 层,以此类推。
ReDiR 树每层容纳的节点数取决于分支因子 b,每层最多容纳 blevel个节点,每个节点 用 (level, j) 来唯一标识,其中 level 为节点所在的层数,j 表示该节点为相应层中第 j 个节 点。在每一层中,blevel个树节点把第 level 层分为个 blevel 个 KEY 空间。网络分层
所有服务节点映射存储到相应的 KEY 空间,每个 KEY 空间由一个树节点负责存储,树节点 (level, j) 包含的 KEY 范围为
其中 0 ≤ b" < b,树节点 (level, j) 中保存的资源 ID 取值为 ID = hash (service, level, j)。下图2为分支因子为 2 的 ReDiR 树。
2.2 服务发布
在 RELOAD 覆盖网络中,KEY 为 k 的节点 n 发布服务的步骤如下:
步骤一:选择一个初始层 l = lstart,一般为 2。
步骤二:节点 n 发送查询请求到负责 KEY 空间 I(l, k) 的树节点,获取该树节点存储的服务节点列表。网络分层
·步骤三:节点 n 发送存储请求将自身信息存储到负责 KEY 空间 I(l, k) 的树节点中。
步骤四:检查第一步返回的结果,如果节点 n 的 KEY 值 k 是其中最大或最小的,则将 当前层数减 1,重复第 2-3 步,直到节点 n 的 KEY 值不是最大或最小,或者到达根节 点为止。
同理,节点 n 从层 l = lstart往下层遍历处理,直到满足以下条件为止:负责 KEY 空间 I(l, k) 的树节点中,节点 n 为唯一一个服务节点。
2.3 服务更新
注册到 ReDiR 中的服务状态都是动态的,服务节点需要定期重复服务发布流程来更新 服务状态。若超时未更新,负责存储的树节点需要将其从存储中删除。网络分层
2.4 服务查找
服务查找过程跟服务发布类似,也是从一个初始层 l = lstart 开始,每一步获取到当前 KEY 空间 I(l, k) 中的服务节点列表,按照以下方法处理:
步骤一:如果没有返回任何服务节点,则表明 KEY(k) 对应的服务节点存在更大的 KEY 空间,将层数减 1 然后重复查询,如果当前 level 为 0 则查询失败。
步骤二:如果在返回的服务节点中,k 不是其中最大或最小的,则表明对应的服务节点 一定存在的子空间中,将层数加 1,然后重复查询。网络分层
步骤三:否则,返回的结果为最接近 KEY(k) 的服务节点,查询成功。网络分层-
03:
计算服务
如何高效地进行计算节点间通信在 PlatON 中变得十分重要。建立在 RELOAD 协议基 础上的计算服务,实现了计算服务的发布、计算服务的发现、计算会话的建立等。
3.1 发布算力服务
计算节点加入 PlatON 网络提供算力服务,在注册为算力服务提供方之前,需要利用 STUN6协议[RFC5389]来判断出自己是否在 NAT 设备后面。如果己经在 NAT 设备后面,则需要通过服务发现找到一个 TURN 服务来为自己提供公网的服务能力。计算节点需要把自 己的 IP 地址或从 TURN 服务获取到的 Relay 地址注册到 PlatON 网络。
计算节点在发布算力服务时,使用服务发现扩展协议进行服务发布和更新,将自己发 布到 KEY 空间 I(l, power) 中,power 为节点提供的算力。
3.2 发现算力服务
PlatON 计算时,需要根据算力匹配计算节点,使用服务发现扩展协议查找 KEY 空间I(l, power),power 为需要的算力参数。网络分层
3.3 计算任务发布
PlatON 在 RELOAD 基础上封装了计算任务分发协议,把计算任务通过 P2P 通讯分发给提供算力服务的计算节点。为保证计算的可靠性和性能,计算任务分发保持一定的冗余 度,即同时分发给多个计算节点。
3.4 安全多方计算协议
PlatON 在 RELOAD 基础上封装了 GC 和 OT 的协议,以支持安全多方计算。安全多方 计算中多个数据方通过 SIP 协议建立计算会话。
04:
区块链服
区块链服务的节点使用 RELOAD 框架的消息传输组件进行交易数据的转发和区块数据的同步,以及共识过程中的点对点的通讯。
4.1 区块链节点的加入
多个区块链可以同时运行在 PlatON 网络中,区块链在 PlatON 网络中也作为一种特殊 的“服务”存在,节点选择加入指定的区块链时,需要使用服务发布方法将自己发布为指 定区块链服务(服务名为指定区块链名称)的提供者。
客户端发起交易时可以使用服务发现方法根据区块链名称查找到指定区块链的节点, 并向其发起区块链交易。网络分层
4.2 交易数据的转发
利用 RELOAD 消息传输组件的快速广播能力,区块链交易能够迅速扩散到全网并打包到区块中。
4.3 区块数据的同步
PlatON 中,每个全节点都保持一份区块链的完整副本,区块经过共识后广播到整个 RELOAD 覆盖网络,各节点接收验证成功后保存到本地。
区块数据使用 RELOAD 消息组件的广播功能进行同步。
4.4 可验证计算证明共识协议
Giskard 共识算法中,基于计算贡献值加权权益选举出共识节点,该选举过程就是区块 链交易。选举出来的多个共识节点通过异步 BFT 协议出块,异步 BFT 协议基于 RELOAD 协议实现。网络分层-