01hr网络协议栈 PlatON网络的基本实现是全分布式结构化拓扑1(DecentralizedStructuredTopology),完全基于RELOAD(REsourceLOcationAndDiscovery)基础协议〔RFC6940〕和Kademlia协议〔Kademlia〕。下图为PlatON网络整体分层结构。网络分层 1。1链接层 链接层定位于实现数据的安全传输,提供多种协议来防止窃听、篡改、消息伪造;提供安全、可认证的连接;保证消息来源认证和消息数据的完整性。网络分层 本层实现安全传输层协议(TLS)和数据包传输层安全性协议(DTLS)。针对密码算法,PlatON扩展实现为插件机制,可灵活支持国际标准算法(包括SHA256、SHA3、ECDSA、RSA、3DES、AES、RSAOAEP、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:hr服务发现 在P2P覆盖网络中,有些节点负责对外部提供服务,有些节点负责向其他节点请求服务,比如中继服务、语音邮件服务、网关定位服务、转码服务等。PlatON中也需要部分节点提供算力服务、TURN服务、SIP服务等。其中服务发现是关键问题所在。 2。1ReDiR树 在P2P网络中,最简单的方式是在DHT5(DistributedHashTable,分布式哈希表,是一种分布式存储方法)中以一个特定的KEY保存所有提供某个服务的节点ID。但使用这种方法,将使存储节点的存储负载过大,而且会导致路由到存储节点的服务查询请求过多,造成消息处理负载过大。网络分层 为解决以上问题,PlatON使用ReDiR(RecursiveDistributedRendezvous)〔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范围为 其中0b,树节点(level,j)中保存的资源ID取值为IDhash(service,level,j)。下图2为分支因子为2的ReDiR树。 2。2服务发布 在RELOAD覆盖网络中,KEY为k的节点n发布服务的步骤如下: 步骤一:选择一个初始层llstart,一般为2。 步骤二:节点n发送查询请求到负责KEY空间I(l,k)的树节点,获取该树节点存储的服务节点列表。网络分层 步骤三:节点n发送存储请求将自身信息存储到负责KEY空间I(l,k)的树节点中。 步骤四:检查第一步返回的结果,如果节点n的KEY值k是其中最大或最小的,则将当前层数减1,重复第23步,直到节点n的KEY值不是最大或最小,或者到达根节点为止。 同理,节点n从层llstart往下层遍历处理,直到满足以下条件为止:负责KEY空间I(l,k)的树节点中,节点n为唯一一个服务节点。 2。3服务更新 注册到ReDiR中的服务状态都是动态的,服务节点需要定期重复服务发布流程来更新服务状态。若超时未更新,负责存储的树节点需要将其从存储中删除。网络分层 2。4服务查找 服务查找过程跟服务发布类似,也是从一个初始层llstart开始,每一步获取到当前KEY空间I(l,k)中的服务节点列表,按照以下方法处理: 步骤一:如果没有返回任何服务节点,则表明KEY(k)对应的服务节点存在更大的KEY空间,将层数减1然后重复查询,如果当前level为0则查询失败。 步骤二:如果在返回的服务节点中,k不是其中最大或最小的,则表明对应的服务节点一定存在的子空间中,将层数加1,然后重复查询。网络分层 步骤三:否则,返回的结果为最接近KEY(k)的服务节点,查询成功。网络分层 03:hr计算服务 如何高效地进行计算节点间通信在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:hr区块链服 区块链服务的节点使用RELOAD框架的消息传输组件进行交易数据的转发和区块数据的同步,以及共识过程中的点对点的通讯。 4。1区块链节点的加入 多个区块链可以同时运行在PlatON网络中,区块链在PlatON网络中也作为一种特殊的服务存在,节点选择加入指定的区块链时,需要使用服务发布方法将自己发布为指定区块链服务(服务名为指定区块链名称)的提供者。 客户端发起交易时可以使用服务发现方法根据区块链名称查找到指定区块链的节点,并向其发起区块链交易。网络分层 4。2交易数据的转发 利用RELOAD消息传输组件的快速广播能力,区块链交易能够迅速扩散到全网并打包到区块中。 4。3区块数据的同步 PlatON中,每个全节点都保持一份区块链的完整副本,区块经过共识后广播到整个RELOAD覆盖网络,各节点接收验证成功后保存到本地。 区块数据使用RELOAD消息组件的广播功能进行同步。 4。4可验证计算证明共识协议 Giskard共识算法中,基于计算贡献值加权权益选举出共识节点,该选举过程就是区块链交易。选举出来的多个共识节点通过异步BFT协议出块,异步BFT协议基于RELOAD协议实现。网络分层