# P2P 网络革新(Layer-0)

# 概述

在每个去中心化的区块链系统的基础层,都有一个通过P2P网络进行通信的方法。这个基础层可以称为区块链栈的Layer-0。

大多数区块链项目都没有在Layer-0进行创新,而是简单地复制流行的P2P网络实现。

不幸的是,与中心化网络相比,P2P网络有一个很大的缺点,那就是它们的速度和效率都不高。为了克服这个缺陷,我们设计了专属于我们自己的P2P网络架构。在设计过程中,我们的指导原则是构建一个P2P网络体系结构,随着时间的推移,它的速度可以变得几乎与中心化网络一样快。

为了达到这一目标,我们进行了大量的创新,对现有协议的也进行了相应调整。

# P2P Overlay 网络

在TOP Network的生态系统中,有许多必须在彼此之间进行通信和数据传输的组件和子网。如果支持这些组件和子网交互的P2P网络非常弱,那么整个平台都会受到影响。虽然,经过多年的发展,流行的P2P网络已经针对某些特定用例进行了优化,但还不足以支撑一个由许多互不相同,却又互相连接的网络组成,接近无延迟的生态系统。对于需在分片之间持续进行交互的分片系统来说尤其如此。实际上,用于跨分片交流的带宽很快就会成为瓶颈。

我们通过自主构建一个“P2P网络”解决了这一点。我们的“P2P网络”不是一个单片网络,而是许多以分层方式组成的P2P网络,类似于互联网的设计。此外,我们还开发了优化的数据传输和Gossip协议,使带宽消耗最小化,提高节点发现的效率。最后,我们将地理信息嵌入到P2P网络结构中,并实现了智能路由,以减少延迟。

# Kademlia DHT

kademlia

TOP Network中每个P2P网络的基础是一个修改过的Kademlia DHT工具。但是,我们没有用单个Kad网络在所有节点和服务之间进行通信,而是使用了多层的Kad网络。

子P2P网络之间的关系是层次化的,每个子网都有它下面一层的信息。网络的层次结构由zone、cluster和shard实现。每个zone都是一个以cluster和shard为“节点”的Kad网络。cluster和shard是由物理节点组成的子Kad网络。zone是一种逻辑划分,而每个cluster和shard由物理的P2P Kad节点网络组成。本质上,每个子网络充当Kad网络中的一个节点。TOP Network中的每个P2P网络都在一个更大的Kad网络中被虚拟化为单个节点。

# XIP 地址

如前所述,TOP Network的网络架构与互联网非常相似。互联网是一个大型网络,而TOP Network是一个大型的P2P网络。在互联网上,每个设备都被分配一个可路由的IP地址。我们在P2P网络中使用了类似的概念,并把这个128位的结构称为XIP地址。正如IP地址允许将包路由到互联网内网中的任何设备一样,在P2P网络中,XIP地址允许任何TOP节点将包路由到驻留在P2P网络上的任何节点。

当一个节点第一次被选中并加入网络时,它会被分配一个唯一的XIP地址,该地址会映射到一个Kad节点ID。此映射存储在链上的一个选举块中。在上层,节想要搜索或连接网络中任意一个对等节点,节点只需使用XIP地址。在底层,会根据XRouting-Table将XIP地址进行转换,XRouting-Table是存储在每个节点本地,用于查找正确子网的表。在这个转换之后,请求被发送到目标子网中最接近目标节点的节点ID。此时,将开始常规的Kad查找,它将返回目标节点的IP或端口。

# zones 和地理集群

在传统的Kad网络中,每个节点都有一个随机的唯一NodeID,并且以XOR度量两个NodeID之间的距离。节点聚集在具有相似NodeID(较小的XOR距离)的周围。这个“距离”不是基于地理位置,因此两个“近”的NodeID实际上可能天各一端。

这带来了一个问题,彼此有交互的节点通常不会基于地理位置形成集群,因此会有很高的延迟,这在共识方面是一个特别大的问题。如果使用单个Kad网络作为分片系统的基础,则特定的共识委员会中的节点将随机分布在世界各地,这对确认时间有负面的影响。

为了解决这个问题,我们对NodeID进行了更改。当一个节点第一次加入网络时,诸如国家代码和网络位置等一般的地理信息即被确定。然后将这些信息编码植入NodeID中。因此,具有相同国家代码的节点通常会被放置得很近,在XOR距离和地理距离方面都是如此。zone表示这种地理分区的顶层,每个zone都是一个跨越特定地理区域的Kad网络。例如,一个zone可能覆盖北美,而另一个zone可能覆盖欧洲。特定zone中的集群和分片会因此位于相同的区域,这极大地降低了延迟。

# 优化的 Gossip 和数据传输协议

在区块链网络中,如比特币底层的P2P网络,通过Gossip协议传播区块和交易。一般来说,节点会存储大量节点的信息,并向可配置数量的对等节点发送区块或交易。然后,接收的对等节点通过相同的进程中继交易或区块,直到每个节点都接收到信息为止。这种简单的Gossip形式是稳健的,因为广播有很高的冗余度。但是,正是因为它的高冗余度,它对网络资源的占用也很大。

TOP Network也是使用Gossip协议来传播信息,但做了一些优化。在TOP Network中发送的数据包被分成头和正文两部分。头的大小只有几个字节,而正文通常要大得多。我们不是将整个包分发给特定子网络中的大量节点,而是使用最有效的层次化组合和多点广播的方法来发送正文。但是,数据头使用可靠的Gossip协议来发送,这大大减少了在Gossip过程中正文必须传输的次数,节省了网络带宽的消耗。

# 可靠的 UDP

包括Kademlia在内的大多数P2P网络都使用UDP作为底层传输协议。UDP速度快、开销低,对于在Kad网络中使用的快速迭代查找路由而言,是非常理想的方案。然而,UDP是无连接和不可靠的,对于大多数应用程序来说,UDP本身不能保证服务质量。

有一些基于UDP的协议,如谷歌的QUIC是可靠的。然而,对于我们的需求来说,QUIC过于庞大,带来了不必要的开销。所以,我们没有使用现有的UDP协议,而是开发了自己的X-UDP协议。由于这个协议是定制的,只包含了必需的东西,所以,保持了UDP的低开销和高速度。

# 智能路由

通过Kademlia建立的连接是端到端的,在延迟方面并不一定是最优的。为了提高QoS,我们引入了一种智能路由方案,该方案与Chord DHT中的路由机制有相似之处。当连接到另一个节点时,查找过程最终将提供建立直接连接所需的详细信息。此外,将通过类似于Chord的转发方案测试几个路径,比较每个路径之间的延迟,并使用延迟最低的路由。