P2P网络研究总结
东北大学 Zz
2018-04-01
版本:V1.0
前言
区块链是一个分布式的系统,特别对于公有链来说,其节点遍布世界各地。节点之间相互平等,构成一个大的对等网络(P2P网络)。因此,P2P技术作为区块链的底层技术应该受到关注。本文档是笔者在学习期间的总结,如有不当之处欢迎批评和指正。
目录
P2P网络基本概念5
1.1 P2P网络拓扑5
1.2 P2P网络基本内容5
1.3 集中式P2P网络5
1.4 纯分布式P2P网络6
1.4.1 洪范机制问题6
1.5 混合式P2P网络6
1.6 结构化P2P网络6
1.7 DHT算法7
核心技术:内容传送8
2.1 非实时内容传送8
2.1.1 基于编码的的传送模式8
2.2 实时内容传送8
2.3 NAT穿越9
P2P网络基本概念
1.1 P2P网络拓扑
P2P网络是一种在应用层上建立的逻辑拓扑,与物理连接无关的覆盖网络。在覆盖网络中,节点通过特定的P2P协议组成P2P网络。
1.2 P2P网络基本内容
在P2P网络中,节点是为了维护或者获取资源,与传统网络不同的是,在P2P网络中节点可以从多个其他节点获取同一个资源,资源可以被并行获取。这就加快了资源的获取速度。特别需要注意的是,并行获取的资源应该保持不同性,这样才能发挥P2P网络的优势。所以这里引出了P2P网络的两大基本内容:内容路由和内容传送。
内容路由指的是一个节点如何在P2P网络中定位到自己感兴趣的资源。
内容传送指的在定位到指定的资源后如何获取这些资源。
1.3 集中式P2P网络
集中式P2P网络是P2P网络中最简单的网络结构。集中式P2P网络通畅都有一个中心节点来负责网络资源的索引。其他节点都与其相连,一旦有资源请求就会去中心节点查询资源路由,再从其他节点获取资源。
优点:结构简单容易实现,能很方便地管理网络资源索引。
缺点:网络完全依赖中心节点,扩展性差,对中心节点性能要求高,网络与集中式网络并无太大差别。
1.4 纯分布式P2P网络
所谓的纯分布式P2P网络相比集中式网络而言没有中心节点的存在,所有节点完全对等。节点与节点之间构成随机拓扑。通常在村分布式P2P网络中,节点通过洪范机制来定位资源。所谓洪范就是节点向其邻居节点广播请求消息消息,其邻居节点再转发并广播消息,直到资源被定位到。
1.4.1 洪范机制问题
由于洪范机制是通过广播来查询资源的,因此随着网络规模的增大,网络中就会出现大量无用的广播信息,将会严重影响网络带宽,降低网络性能。此外,洪范机制很有可能造成环路,即消息将被在环路中无限转发。一旦环路出现,网络有可能发生瘫痪。
由此看来,尽管存分布式网络解决了中心节点的问题,但是却引发了难以解决的洪范问题,这种网络只适合小型P2P网络。
1.5 混合式P2P网络
鉴于以上两种网络拓扑的优点,混合式P2P网络为在局部为集中式网络,在全局呈现分布式网路。在混合式P2P网络中,有超级节点和普通节点。其中超级节点数量较少,负责维护一部分网络的资源索引并与普通节点相连。普通节点负责存储资源。所有的超级节点再相互连接构成一个整体式的分布式P2P网络。
混合式P2P网络综合了纯分布式网络和集中式P2P网络的优点,受到了很多关注,并且目前有很多P2P网络是基于混合式P2P网络实现的。
1.6 结构化P2P网络
考虑到纯分布式的P2P网络存在洪范问题的原因在于拓扑的随机性。结构化网络指的是讲所有节点按照某种结构进行有序地组织如形成树状网络,这样就会避免广播风暴。当然结构化网络不仅仅是结构化节点,其重要思想是将资源索引信息进行有序组织并按照某种规律保存到相应的节点上。
结构化网络需要解决的问题是如何在纯分布式的环境中快速定位资源。假设单位时间内网络中有M个资源请求,N个节点,那么对于P2P网络来说,最理想的情况是每个节点负责处理M/N次请求。而不是像纯分布式网络中那样几乎每个节点都需要处理M个请求。我们把请求当做网络负载,那么P2P要实现的就是网络的负载均衡。为了实现这一目标,资源索引和资源并不一定要存储在一个节点中。当一个资源请求被发送给节点A时,如果节点恰巧直到这个资源被存储在节点B中,那么就可以直接请求B节点了。这就减少了对其他节点的请求负载。
我们把问题抽象看,P2P网络其实是由资源空间和节点空间构成的。资源空间是整个网络中存储的资源集合,节点空间是整个网络中节点的集合。我们将资源按照某种次序编号,将节点也按照某种次序编号。如果(理想情况下)资源的编号恰与节点编号相同(资源与节点一一对应),我们就能快速定位资源。例如要查找资源编号为2的资源,那么一定在编号为2的节点中。这样就不需要广播查询每一个节点了。但是在网络中,往往资源的数量远远大于节点数量,所以如何让资源和节点近似地保持对应关系,那么资源定位就会大大加快。这就是结构化P2P网络最核心的问题。
1.7 DHT算法
DHT是分布式哈希表,即在分布式环境下的哈希存储。分布式哈希表由关键值空间、关键值空间分割和延展网络构成。DHT算法的核心思想是把网络中的资源编号,然后按照某种算法将资源分散到节点中,使得节点i存储的都是离其最近的关键值(资源编号)。然后通过延展网络将信传送到离资源最近的网络节点。
典型的DHT算法有Chord算法,Pastry算法和Can算法。Chord将资源索引放到离编号最近的节点,使用二分叉表来快速定位资源。而Pastry算法则是通过分层的方式将节点编号然后定位资源。Can则用空间向量表示法来定位资源。三种算法都是DHT思想的典型算法。
核心技术:内容传送
在P2P系统中,内容传送比传统C/S模式下内容传送复杂的多,因为可以从不同的节点获取资源并且需要保证节点传送资源的有序性和去重性。此外,在传输过程中,节点还有可能发生宕机、掉线等问题,必须考虑并能有效解决这种情况。对于非实时类应用,内容获取可以是不连续的,而对于实时类应用,就应该保证资源快速重组以保证持续稳定地获取资源。因此在P2P网络中,内容传送是一个复杂而关键的技术。
2.1 非实时内容传送
对于非实时类应用,只要保证资源片段的完整性即可。当一个资源片段全部*载下**完毕后就可以重组,因此对片段*载下**的有序性基本不做要求。通常一个资源的片段被保存在不同的节点上,想要*载下**一个完整的资源就需要从不同的节点上*载下**。需要解决的问题就是,如何使得提供*载下**的节点们拥有资源片段的并集是这个完整的资源。即假设一个资源R被分成5个片段保存在不同的节点上。节点1拥有片段{1,5},节点2拥有片段{1,2},节点3拥有片段{3},节点4拥有片段{4,5},因此节点2,3,4片段并集恰好满足资源。
2.1.1 基于编码的的传送模式
一个重要的思想就是,片段1和片段2是文件的两个不同的部分,他们毫不相关。所以当一个文件需要5个片段时就必须凑齐片段编号1~5的片段。如果片段的分割方式基于编码,那么就可以把片段分割成若干了部分相关的片段了,即片段1和片段2有交集,因此当所有片段完整包含了资源信息,就可以通过一定技术将片段还原回完整片段。
2.2 实时内容传送
实时内容要求每个节点必须*放播**靠近当前点的内容,通常节点使用内存循环队列控制*放播**进度,在这里不深入探讨了。
2.3 NAT穿越
NAT解决了IP地址短缺的问题,但是却给P2P网络连接带来了不便。一般的位于NAT地址后面的设备进行TCP连接是非常困难的。因此需要一定技术解决问题,目前常用的办法是打洞:即UDP Punch技术和UPnP技术。
打洞的基本思想是,先让节点A主动向打洞服务器发送UDP连接请求,这样服务器就可以知道A的IP地址和端口号,这时候节点B通过获取该信息就能和A建立UDP连接。
UPnP技术可以控制NAT设备,使得NAT能够主动建立内外网络映射,从而实现TCP连接。
上述两种技术最优解还是打洞技术,因为实现简答,并且成功率高。UPnP技术随着NAT设备的变化可能会发生改变。