现有的P2P实现可以分为三种类型。它们分别是:基于目录服务器P2P,非结构化P2P和结构化P2P。基于目录服务器这一类系统中设置目录服务器,用于保存用户节点的地址信息和该节点上共享文件的描述信息,文件本身是分散存贮在各个节点上的,实际的文件传输也是在对等节点之间进行,目录服务器仅仅起到中介作用,为节点提供发布和查询文件索引服务。鉴于集中式目录服务器不仅可能成为系统的瓶颈,而且还可能引发法律纠纷,因此出现了以Gnutella为代表的非结构化P2P系统,在这种P2P结构中,文件索引信息不再由集中式的目录服务器存储和管理,而是分散到网络中,由节点自己保存,该类系统采用分布式的索引查找策略,为了查找网络中的文件,节点要随机地维护网络中的其他一些节点作为邻居,以便通过邻居节点广播查询报文。非结构化P2P系统中由于不存在目录服务器,所以没有单点瓶颈问题,不存在单一故障点。然而其缺点也是明显的:在网络中广播查询报文加重了网络通信负担,其查询机制在系统规模扩大时不具有可扩展性。另外,由于查询报文被限制在特定的范围内,所以并不能保证一定可以找到网络中存在的目的数据。上面介绍的两类P2P系统都缺乏有效的、可扩展的索引查找机制。为此,近年来许多研究小组在设计可扩展的查找机制方面做了大量的研究工作,提出了Chord、Pastry、CAN和Tapestry等用于构建结构化P2P的分布式哈希表系统(Distributed Hash Table,DHT)。DHT的主要思想是:首先,每条文件索引被表示成一个(K, V)对,K称为关键字,可以是文件名(或文件的其他描述信息)的哈希值,V是实际存储文件的节点的IP地址(或节点的其他描述信息)。所有的文件索引条目(即所有的(K, V)对)组成一张大的文件索引哈希表,只要输入目标文件的K值,就可以从这张表中查出所有存储该文件的节点地址。然后,再将上面的大文件哈希表分割成很多局部小块,按照特定的规则把这些小块的局部哈希表分布到系统中的所有参与节点上,使得每个节点负责维护其中的一块。这样,节点查询文件时,只要把查询报文路由到相应的节点即可(该节点维护的哈希表分块中含有要查找的(K,V)对)。这里面有个很重要的问题,就是节点要按照一定的规则来分割整体的哈希表,进而也就决定了节点要维护特定的邻居节点,以便路由能顺利进行。这个规则因具体系统的不同而不同,CAN,Chord,Pastry和Tapestry都有自己的规则,也就呈现出不同的特性。基于分布式哈希表(DHT)的分布式检索和路由算法因为具有查找可确定性、简单性和分布性等优点,正成为国际上结构化P2P网络研究和应用的热点。自2002年起,美国国家科学基金会(NSF)提供了1200万美元的资金启动了一个为期5年的研究项目IRIS,该项目集中了MIT和UC Berkeley等5所著名高等院校的强大科研力量,为下一代大规模分布式应用研制基于DHT的新型基础设施。 现有的P2P实现可以分为三种类型。它们分别是:基于目录服务器P2P,非结构化P2P和结构化P2