摘 要:本文分析了混合式、无结构、结构化的三种不同体系结构的P2P网络,主要针对几种典型网络中的关键技术,如查询方式、路由算法、主要性能,进行了比较分析,总结了各自的优点和缺陷并指出以后的研究方向。
关键词:P2P网络;混合式;无结构;结构化;比较分析
引言
在网络技术快速发展的今天,传统的C/S网络模式已经不能满足网络需求,服务器已难以承担繁重而复杂的客户请求。P2P技术的出现解决了这一问题,P2P网络即对等网络,所有计算机都处于对等地位,不依赖于集中的服务器。但是P2P同样也面临一些技术问题,P2P网络是一个动态构建的网络,节点会随时加入或离开,节点间的处理能力、存储能力和带宽存在异构性。P2P网络系统模型成为了研究的基本问题,它决定了节点之间的关系和数据传输方式,也直接影响着P2P系统的性能。
根据P2P系统的拓扑结构的设计思想,可将P2P网络分为三大类:第一代,混合式P2P网络;第二代,无结构P2P网络;第三代,结构化的P2P网络。本文针对三种P2P网络结构进行了分析和研究,尤其是对各个典型网络中的关键技术进行了深入分析,总结出各个网络结构存在的优缺点,并对其性能进行了比较分析。
1 混合式P2P网络
Napster网络由两部分组成:网站和用户。如图1,网站是一个服务器群,每个服务器保存一部分用户的共享文件索引信息。每个用户连接到其中的一台服务器,服务器记录下与其他用户共享的文件信息和用户的位置,并将他们做成索引添加到索引表中。当一个用户想查询一个文件时,首先将“查询”消息发送给与其相连的服务器上(图中Q),该服务器收到Q以后与其他的服务器协作处理查询消息Q,处理完成后将“回复”消息(图中R)返回给用户,这条消息包含一个表单,列有所查到的有匹配的文件索引。收到R后,用户在表单中选择他想要的文件,根据文件索引中对应的位置与其他用户直接建立连接下载文件(图中D)。
Fig 1 working principle Napster
2 无结构的P2P网络
无结构的P2P网络这一名称的由来是因为它的覆盖网“无结构”。这里的“无结构”指的是覆盖网没有固定、严格的拓扑结构,而是一个随机生成的普通图,理论上这张图可以是任何形状的。Gnutella网络与KaZaA网络是无结构对等网络的代表。
Gnutella网络是完全分布式的非结构化P2P网络,只有一种节点——对等实体peer,不再有服务器的存在。每个Peer既是客户端又是服务器,既能向其他Peer发送查询请求又能接收其他peer发来的查询请求,实现了真正意义的P2P。泛洪请求搜索算法是Gnutella的核心算法。在这种路由技术中,消息像洪水一样在网络中向各个节点间流动。节点想查找某个文件时,首先Peer给它所有的邻居节点发送query消息,如果有就沿着query消息传过来的路径回播query response消息。否则,相邻节点就把消息转发给自己相邻的节点,只要query消息的TTL没有减到0,Peer就会继续传播给邻居节点。在整个路由过程中,节点通过消息的TTL值来判断消息是否过期。
KaZaA网络是最先针对网络异构性开发的P2P网络。用户之间在带宽、处理能力、存储容量等方面存在很大的差异性,导致网络中存在着极大的节点异构性问题。KaZaA就将网络节点分成不同层次的两类:超节点、普通节点。超节点通常有高带宽、高处理能力、大存储容量,相比之下,普通节点通常有低带宽、低处理能力、小存储容量的劣势。当普通节点加入KaZaA网络时,它会选择一个超节点作为其“父超节点”,将它所共享的文件元数据信息上传给这个超节点。每个超节点为其所有“子普通节点”共享的文件保存一个本地索引,并将文件标识符映射到它所在的IP地址。KaZaA的超节点不是固定的,它只是一个普通的拥有较高能力的网络节点。
每个普通节点向其父超节点上传自己所共享的文件元数据,元数据包括:文件名、文件大小、文件内容Hash值、文件描述符等。当用户想要查询一个文件时,它向父超节点发送带有文件关键词的查询消息,超节点在自己的数据库里寻找匹配的文件索引,返回给用户这些文件所在节点的IP地址、服务端口号、文件元数据等。每个超节点和其他的一些超节点间也保持着长期的TCP连接,当一个超节点收到查询消息时,它还会把这个消息发给与它连接的一些超节点,但查询只能发生在很小的一个超节点集里,因此,只能返回与这个超节点集相连的所有普通节点共享的文件信息。
3 结构化的P2P网络
结构化P2P网络最大的特点即在于它们都有一个严格的覆盖网络拓扑结构,每个节点都有固定的地址,具有相对稳定而规则的拓扑结构。结构化P2P网络都使用分布式散列表(DHT)来将节点、数据对象映射到覆盖网中。
Fig 2 a simple ring of chord(m=3)
DHT算法使用分布式哈希函数来解决结构化的分布式存储问题。分布式哈希表实际上是一张很大的散列表,每个节点被分配给一个属于自己的散列块,并成为这个散列块的管理者。该方法的原理是:每一份资源都由一组关键字进行标记,系统对其中的每个关键字进行哈希运算,得到关键字标志符key;网络中的每个节点也通过哈希节点IP得到节点标志符ID;关键字标志符和节点标志符都是唯一的;按照某种映射关系,将关键字标志符映射到节点标志符上,该节点标志符对应的节点就存储此关键字标志符的对应信息。所有的〈key,value〉对构成一张很大的文件索引散列表。
4 网络结构的比较分析
Napster网络存在很多问题。(1)每个用户功能上平等,但在连接带宽、时延、共享文件数等方面存在很大差异。(2)许多用户不报告或者错误报告它的信息。 (3)网络中存在许多只下载文件、不共享信息的自私节点。另外Napster网络存在重大的安全隐患,不能对用户的合法身份进行验证。现在新的结构模型在此基础上进行了改进,主要用于文件下载和共享。
Gnutella网络结构的优点是网络配置简单,不需要服务器的支持。在小规模网络中有很高的查询率,但这种网络采用泛洪方式查询和定位资源,如果网络规模增大,就会带来沉重的网络负载,不适用于大规模的网络。另外,没有确定的结构,无法保证查找资源的正确性,可扩展性也比较差。
KaZaA网络结构是当今使用比较多的体系,它充分考虑了网络中节点异构的问题,将节点按能力分为超级节点和普通节点。他们之间频繁交换信息更新列表,大大提高了网络性能。
C
hord网络最大的特点是简单、精确,有很高的定位效率和良好的容错性,扩展性也比较好,是一种比较实用的网络模型。
对比分析上述三种网络体系可知,结构化与无结构化模型的根本区别在于每个节点所维护的邻居节点是否按照某种全局的方式组织起来。结构化网络采用DHT技术比无结构化采用的泛洪技术的扩展性好,但是基于DHT的拓扑维护和修复算法比无结构的复杂的多,甚至在Chord网络中产生绕路问题。混合式结构是C/S结构和P2P的结合,但是文件查询和系统维护都是依靠服务器,会带来单点失效和可扩展性低的问题,而且故障率高。从使用范围来说,Chord和KaZaA比较适合于大规模的网络,混合式的大多在文件共享上应用,无结构的适合在多媒体方面,而结构化的适用于提供高效、容错的应用层多播。
表1 三种网络结构的性能比较表
Table 1 the performance table about three kinds of P2P network
分类 | P2P结构 | 拓扑结构 | 路由算法 | 容错性 | 扩展性 | 可维护性 | 安全性 |
混合式P2P网络 | Napster | 星形 | 服务器 | 服务器单点 | 差 | 好 | 无 |
无结构P2P网络 | Gnutella | 随机 | 泛洪法 | 很好 | 差 | 好 | 低 |
KaZaA | 双层结构 | 超节点泛洪法 | 良好 | 一般 | 中 | 低 | |
结构化P2P网络 | Chord | 带弦环 | 数值临近路由 | 一般 | 好 | 良 | 低 |