5. 超级链p2p网络
- 非结构化p2p网络:这种p2p网络是最普通的,没有对结构做特别的设计。优点在于结构简单易于组件,网络局部区域内个体可以任意分布。对于节点的加入和离开网络也表现地非常稳定,比特币网络使用的就是无结构化的网络。但是这种网络主要有3个缺点,一是公网网络拥塞时传输效率低,二是存在泛洪循环,三是消息风暴问题。
- 结构化p2p网络:这种p2p网络的结构经过精心设计,目的是为了增加路由效率,提高查询数据的效率,结构化p2p最普遍的实现方案是使用分布式哈希表(DHT),以太坊网络中使用的就是结构化的网络。
互联网的发展速度远远超过人们的预期,人们在制定网络协议之初没有考虑过网络规模会获得如此迅速的增长,导致ip地址的短缺。NAT技术通过将局域网内的主机地址映射为互联网上的有效ip地址,实现了网络地址的复用,从而部分解决了ip地址短缺的问题。网络中大部分用户处于各类NAT设备之后,导致在p2p网络中两个节点之间直接建立udp或者tcp链接难度比较大,应运而生的是NAT穿透技术。目前主要有两种途径,一种称为打洞,即UDP Punch技术;另一种是利用NAT设备的管理接口,称为UPnP技术。
5.2. 超级链p2p网络
超级链消息采用Protobuf定义,整个消息包括2部分,分别是消息头 和消息体 MessageData
,具体如下所示:
其proto消息定义如下:
- SetXuperStreamHandler:初始化p2p通信消息protocols,XuperProtocol为Xuper节点之间进行消息通信和消息处理的核心逻辑。
- InitKadDht: 初始化libp2p KadDht,通过设置的bootstrap节点,建立自己的kad dht。
- InitStreams: 前一步已经建立了自己的kad dht,下一步就是与这些邻近的节点之间建立通信流,通过libp2p的NewStream接口实现通信流建立。
至此,Xuper的p2p连接建立完毕。