P2P(Peer-to-Peer)计算是指不同系统之间通过直接交换,实现计算机资源和服务共享、进行信息处理的过程,这里,资源可以是处理器、缓存和磁盘空间等,服务包括信息交换、数据计算等。P2P模式与传统客户/服务器模式的关键区别在于Peer与Peer在通信过程中,可以完全摒弃服务器的角色,完成一种直接通信,来获得共享资源或服务。
从P2P的发展史来看,Internet的快速发展是P2P系统崛起的催化剂,在Internet上进行客户/服务器模式的访问,使得信息源分布过于集中,边缘网络的资源被闲置和浪费,而P2P技术的引入,使得网络中任何一个与网络相关的设备都可能为网络中的其他设备提供有效的内容服务。
一般的P2P系统都有强烈的应用背景,系统实现也与应用类型紧密相关。为了深入分析P2P系统的关键技术,我们将P2P系统划分为P2P平台层和应用层,P2P平台包含支撑P2P应用所需的基础组件,例如,发现机制、通信、安全、资源集成等组件。P2P应用层利用P2P平台提供的功能,向用户提供专门的服务。这种区分可界定P2P的关键技术,帮助我们设计和实现更多种类的P2P应用.
本文主要讨论P2P平台的关键技术,全文按如下方式组织:第1节描述了P2P系统的特点,第2节概括了Peer通信的各种技术,第3节叙述了P2P平台的安全措施,第4节讨论了P2P平台的性能问题,最后是全文小结。
1.P2P系统特点
在P2P系统中,每一个Peer都是平等的参与者,承担服务
使用者和
服务提供者两个角色。资源的所有权和控制权被分散到网络的每一个节点中。服务使用者和服务提供者之间进行直接通信,可充分利用网络带宽,减少网络的拥塞状况,使得资源的有效利用率大大提高(包括各种计算资源和存储资源)。同时由于没有中央节点的集中控制,系统的伸缩性较强,也能避免单点故障,提高系统的容错性能。
但由于P2P网络的分散性、自治性、动态性等特点,造成了某些情况下Peer的访问结果是不可预见的。例如,一个请求可能得不到任何应答消息的反馈。P2P系统的匿名性等特点可能会带来系统的安全漏洞。
P2P系统的这些特点也决定了P2P 应用主要包括资源共享和协作。资源共享主要是文件共享系统、文件分发系统(File Distribution System)。通过P2P网络实现文件共享和文件分发,能够应付爆发式访问,系统的可伸缩性好,可靠性好。
此类典型系统有Napster[1],Gnutella[2],FreeNet[3],Chord-based System,BitTorrent[4]。
P2P协作应用的种类很多,包括即时消息系统、在线游戏、共享企业应用(在提供即时消息之外,还可共享内容和进行共同的活动如组内共同开发和编辑)、文件搜索、pub/sub系统等。
其中,
即时消息系统[5]有AOL AIM、Yahoo Messenger、MSN Messenger、Jabber[6,7]等;
在线游戏有星际争霸、Net-Z和DOOM;
共享企业应用有Groove[8]、Magi[9];
文件搜索有YouSearch[10], OpenCola等;
pub/sub系统有Scribe、Herms等;
还有基于P2P网络构造的
email系统。
而从P2P系统的典型特点来分析,常常被引证为P2P应用的科学计算系统
Seti@Home[11]应该属于P2P的非典型应用。各种P2P系统由于应用背景的差异,彼此互不兼容,导致不同的P2P网络无法通信,难以有效地利用网络资源提供服务。Sun公司组织开发的JXTA[12]项目,希望通过提供一个简单通用的P2P平台来解决这个问题。从上述应用可以看出,P2P系统并不能替代客户/服务器系统,它们两者是相辅相成的关系。
从P2P系统的基本特点和应用情况分析,我们认为P2P平台中的Peer的通信、平台的安全和平台的性能优化这三项技术是P2P系统的成功与否的关键所在。
2 P2P通信
P2P通信时需要解决的最基本的问题即是
如何连接其它的终端获得信息、资源和服务。该问题可细分为以下一些问题:
1、P2P网络的拓扑结构和Peer节点的功能角色划分;
2、资源和服务如何标识;
3、进行资源查找时如何进行Peer定位;
4、P2P网络中Peer节点的动态变化的处理;
5、如何穿越NAT(Network Address Translation)和防火墙进行Peer节点之间的直接通信。
P2P网络的拓扑结构和Peer节点的角色划分
在P2P网络中,有两种典型的拓扑结构,即纯P2P网络和混杂的P2P网络[13]。
在纯P2P网络中,每个Peer都具有同等的责任和地位,不存在中间节点的协调。FreeNet、Gnutella都属于纯P2P网络。而在混杂的P2P网络中,存在着充当服务器角色的Peer节点或提供特殊功能的Super-Peer节点,这些节点保存其它Peer节点的基本状态和存储内容源信息,协助完成对其它节点的记录、查询等工作。Napster, Groove, Magi等系统均是典型的混杂型P2P系统。
每一个Peer根据其提供的角色功能可以划分为三种类型,即简单类型Peer节点,super-peer节点和服务器型的peer节点。简单类型Peer节点仅仅是一个简单的终端用户,它可以请求获得服务并为网络中的其它Peer提供服务。Super-peer节点除了具有和简单Peer节点类似的功能外,还提供某些特殊功能。如JXTA系统中就存在路由器Peer节点和会聚点Peer节点[12],前者作为一个桥梁,使得被防火墙或NAT隔离的Peer可以相互通信;后者为简单节点提供查询定位信息的功能。服务器型的Peer节点主要提供类似与客户/服务器模型下的服务器功能,如提供一个全局统一的目录查询。在Napster这种混杂型的P2P系统中,有若干个简单Peer节点相互提供文件下载功能的服务,还有一个目录服务器节点提供文件条目的注册管理。Groove和Magi系统中也均存在这样的服务器型节点。而在纯P2P网络中,每一个Peer节点均充当了上述的三种角色。
资源的标识
为了在P2P网络中准确地查找资源进行Peer定位,还需要确定Peer中存贮资源的标识(这里我们将在P2P网络中需要进行查找的对象统称为资源)。不同的应用场景均有适合自身特点的资源标识方式。
在以文件共享为主的应用中,资源主要以文件的名称、关键字、源数据等进行标识。而即时消息通讯系统往往采用类似于电子邮件的命名方式,如在Jabber系统中,Jabber的用户ID以[node@]domain/[resource]的形式进行地址标识[7],提供一个全局统一的地址空间。其中,Domain是主要的ID标识,是与多个用户连接进行消息转发的Jabber Server;Node为用户姓名或昵称,Resource属于一个Node,标识属于一个用户的多个资源。一个用户可以同时与同一服务器建立多次连接。
以用户之间协作为主的P2P应用如Groove系统和Magi系统,由于在协作中对即时消息通讯和文件共享的要求兼而有之,用户一般以用户名进行标识,而文件则以源数据标识[14]。
JXTA作为一个解决不同P2P应用彼此不兼容的底层平台,提出了一个统一的资源标识定义,即广告[12]
(advertisement)。广告是一个XML结构的文档,由Peer或相互协作共同完成一种应用Peer 组进行发布,用来描述现有的资源、服务或实体Peer。Peer节点通过查询广告以获得各种资源的消息,进行Peer定位。
Peer的定位方式在查找资源的过程中,可采用直接或间接方式定位Peer。直接定位Peer的方式比较简单,即利用广播或多播的形式发出查询请求,符合查询要求的Peer节点进行应答,然后建立直接的通信连接。由于这种方式只能在局域网中使用,所以应用范围有限。当然这种方式可以和其它的定位方式结合使用以获得良好的查询效率。
间接方式包括三种模型:服务器模型、洪流模型、和路由模型。
服务器模型:该模型是基于混杂型的P2P拓扑结构。充当服务器的peer节点提供资源查询。peer将请求发送至服务器获得查询结果,随后,直接与目标节点通信获取所需服务。但这种方式存在单点失败问题,同时,也存在伸缩性问题。但因为peer节点仅在启动、停止及查询的时候才与服务器交互,所以此时的伸缩性还是强于客户/服务器模式。典型系统有Napster,Magi,Groove和Jabber。Napster系统采用一个目录服务器记录资源索引,Groove系统和Magi系统均是采用动态DNS查找用户的IP地址[14]。Jabber系统由于其资源标识类似于Email地址,所以,利用DNS的MX记录进行IP地址的查询[7]。
洪流模型:该模型基于纯P2P拓扑结构。Peer节点采用洪流法将查询请求不断地转发至邻居节点,直到到达目标节点,获得查询结果。同时为了避免消息无限制的转发,查询请求中设定有TTL(Time to Live)或HTL(Hops to Live)进行转发控制。Gnutella是采用此类模型的典型系统。
路由模型:该模型也是基于纯P2P网络结构。首先为网络中的每一个peer赋予一个ID,同时,每个Peer存储的资源和服务也有类似的ID。Peer节点的路由表中登记一定数量的邻居节点。Peer的请求被转发至与所请求的资源或服务的ID 最接近的Peer,直到发现这个资源或服务[15]。插入一个新资源/服务的过程与查询过程类似,也是通过查找该资源/服务ID来确定存储的正确位置。此类模型主要用在文件共享系统中,如FreeNet,Chord[16],CAN[17],Tapestry,Pastry等。
路由模型又可细分为非结构化路由模型和结构化路由模型。FreeNet系统属于典型的非结构化路由模型。在查找到所需资源后,为了提高搜索性能,系统沿搜索路径复制资源。这样,由于资源的存储位置不固定,其行为不易观察,不确定因素较大。所以相对于结构化路由模型来说,其资源分布的规律性不强,难以从全局上把握整个系统的资源分布状况。而结构化路由模型如Chord, CAN, Tapestry, Pastry均采用了DHT(Distributed Hash Table)作为主要的存储算法。DHT的主要思想是将资源定位用的索引(索引结构通常是两元组(文件名,实际的存储位置))分散存储到整个P2P网络上,这样,哈希表的存储和查询操作就会涉及到P2P网络中的多个节点。
以DHT思想进行路由模型的设计时,首先需要确定通过Hash函数进行虚拟地址空间映射的规则。虚拟地址空间的设计有多种方式, Chord采用的虚拟地址空间为m-位的循环地址空间[16],CAN系统采用的是多维的地址空间[17]。Peer节点的IP地址和端口号经过哈希函数映射到地址空间,再将映射空间进行划分,每个节点负责存储属于自己空间的值对(key,value)。其次需要确定路由表项的存储内容,即邻居节点的规模,以适应于不同的网络需求。这里需要对路由表项的规模与网络搜索跳转数进行综合考虑。在动态性较强的网络中,节点频繁加入和退出网络会使得规模较大的路由表更新频率过高,操作费时。但规模较小的路由表在进行资源定位时,又使得查找时间过长。再次是确定在接收到一个资源的查询请求时,从路由表中选择转发的邻居节点的规则。最后要确定新节点的插入和删除操作后,虚拟的地址空间如何进行分裂和合并。
P2P网络中节点的登录和退出在服务器模型的P2P网络中,由于Peer节点的状态信息和管理的资源信息直接记录在服务器中,Peer节点的登录和退出仅需和服务器进行交互,由服务器进行协调处理。如在Napster系统中,Peer节点登录系统后,向服务器发送当前的网络状态和所有的文件列表信息,由服务器更新目录索引。在Jabber等即时消息通讯系统中,Peer节点往往是与用户绑定的。服务器接收到用户的登录消息或退出消息后,通知订阅
该用户在线状态的所有在线用户。
非结构化路由模型FreeNet中,新节点首先需要获知网络中的若干可连接节点的信息,通过执行搜索操作向整个网络宣布自己的存在。在结构化路由模型的P2P网络中,节点的登录和退出,将导致虚拟地址空间的分裂和合并。Peer节点登录网络的操作,类似于一个资源的查找过程。Peer节点定位到所属的地址空间后,将地址空间以一定规则进行分裂。负责管理该地址空间资源的原节点将所属资源按分裂的规则,部分转移到新节点。同时两个节点的路由表项和其它相关节点的路由表项均要进行修改。而Peer节点退出网络的过程,则是登录网络的逆过程,资源需要转移合并,相关节点的路由表项同样需要更新。
防火墙和NAT的穿越在实际的网络通信中,Peer节点往往是一个私有网络中的节点,位于防火墙之后。这样,Peer与Peer之间直接通信需要解决的一个关键问题是穿越防火墙和NAT。由于防火墙会对IP进行过滤,限制了墙内外的连接,而NAT技术虽然可以使得内部网络地址映射到外部网络地址,但要求内部网络首先发起对外连接,否则外部网络机器无法达到内部网络[12]。穿越防火墙和NAT的策略有两个基本点:
(1) 需要使用在一般情况下可以通过防火墙的协议,如基于请求/应答方式的HTTP协议。
(2) Peer之间进行通信时,必须由内部网络的机器首先发起连接请求,如果通信双方均处于防火墙之后,则需要有防火墙外的转发节点进行消息转发。
在Napster系统中当Peer节点请求下载的资源位于一个防火墙之后的节点上,请求节点向服务器端发送需要进行转换下载的请求 (Alternate download request),由服务器通知被请求节点首先发起文件下载的连接请求。而Gnutella是在将查询的详细信息返回给请求者的同时发送资源文件,以此方式解决文件提供者位于防火墙之后的情况。
JXTA平台中,其super-peer节点中的路由节点是提供防火墙和NAT穿越功能的特殊节点。若通信一方在防火墙之后,那么单向穿越的过程由试图与防火墙后的peer A连接的peer节点B发起,节点B首先与路由Peer连接,同时peer A周期性地连接路由 Peer,由于路由 Peer对Peer A是可见的,且不在防火墙后,连接请求消息可作为http的应答内容返回至peer A。若通信的双方都在防火墙之后,那么需要两个路由 peer。Peer1 通过路由节点1 转发消息,路由节点1将消息转发至路由节点 2,Peer2周期性地向路由节点2发送http请求,获得消息后断开连接。JXTA平台中路由节点的使用不仅可以穿越防火墙,还可以解决瓶颈问题,解决网络传输的不兼容性[12]。
3.P2P平台的安全机制与安全有紧密关系的是P2P平台提供的匿名性。
为了进行自由的交互,避免引起不必要的法律纠纷,所以,P2P系统允许匿名方式的信息交换[15]。匿名性可分为以下三种类型:
发布者匿名:发布者匿名地发布服务或资源
请求者匿名:请求方匿名地请求服务或资源
服务提供者匿名:P2P网络中的资源拥有者匿名地提供资源或服务
提供匿名性的基本方法有六种:
组播:采用IP组播方法进行资源发送可以达到请求者匿名的目的。但是这种方法需要底层网络如以太网的支持。
地址欺骗:使用面向无连接协议如UDP,可以更改地址,达到地址欺骗的目的。
身份欺骗:网络中的文件可能拥有多个备份,所以应答者往往并不是文件的提供者,如FreeNet就使用了这种方法提供匿名性。
隐藏路径:Peer之间并不是进行直接的消息通信,而是通过若干的中间节点,这样可以达到发送者匿名的要求。
别名:每一个Peer在网络中均有一个别名,Peer之间通过别名进行消息传递,这种方法需要一
个Proxy Server保存所有的Peer实体与别名的对应关系。
强制存放:一个文件存放的位置是由文件本身确定的,发布者无法选择,从而实现发布者匿名,如基于Chord的系统。
上述方法可以组合应用,例如,FreeNet采用纯P2P网络中的非结构化文档路由模型,同时在发布文件和查找文件的过程中,沿搜索路径复制文件。通过隐藏路径和身份欺骗的方法达到服务提供者匿名的目的,通过隐藏路径的方法形成请求者匿名,同时由于文件的发布是一个根据文件名强制存放的过程,所以也完成了发布者匿名的功能。
P2P平台所具有的上述特性可能会带来下列安全隐患: 拒绝服务攻击:P2P应用会消耗网络带宽,占用磁盘空间,使得系统性能降低甚至完全瘫痪。如果被大量恶意地使用,就会出现正常服务请求得不到服务的现象。处理这种攻击的难点在于如何将恶意节点和真正负载过重的节点区分开。从根本上说,限制网络服务请求的数量是解决拒绝服务攻击的根本方法。合理选择网络底层的拓扑结构,均衡系统中的负载和资源,加入流量控制策略,这三种措施综合使用可使恶意节点根本无法占用过多的资源,降低其对系统的影响。
恶意软件分发:P2P无中央服务器控制,允许匿名分发资源,对软件的分发缺乏控制,如果P2P系统被恶意使用,会给系统用户带来安全隐患。通常的名誉评估系统可以用来跟踪和处理Peer的状态,并根据得到的信息选择资源的提供者。但是这种方法比较消耗网络资源。
信息泄露和篡改:例如,有些P2P系统在路由表中保存了一批网络地址,这些信息可能会被泄露和篡改;有些P2P系统例如Napster、Gnutella允许直接访问用户硬盘,恶意用户可利用这个特性察看和篡改磁盘信息。这些都需要有相应的策略加以解决,例如,设计安全路由策略,可解决路由表信息泄露问题。
4.P2P平台的性能改善技术P2P平台的性能指标包括请求响应时间、公平性等。
请求响应时间与P2P平台的拓扑结构有很大关系。对于有中央服务器的P2P系统如Napster系统和
Seti@Home系统,Peer之间由服务器进行协调,服务器变成了系统的瓶颈,影响系统性能。为了改善性能,可采用层次性的混杂式结构,由每一个协调者负责一个Peer组,形成一个层次的管理结构。在非集中式的P2P网络中,主要通过消息转发来获取和查询数据,消息转发的次数影响带宽的消耗,因此要尽量减少消息的转发次数[15]。采用复制的方法可提供多个资源备份,提高容错性,也减少了请求节点到服务节点的距离,减少了请求响应时间。但复制会带来数据一致性的问题;另一种减少消息转发次数的方法是建立智能路由和网络组织,寻找目标文件到请求节点的最小路径。该类方法包括:在基于DHT的结构化路由模型中设计合乎应用背景要求的路由表存储结构,以减少网络中的消息跳转数;采用一些反馈机制,智能地选择曾经命中过的Peer节点进行消息转发;监测网络中的运行状态,绕过一些负载较重的Peer节点。这些方法都可以根据不同的使用背景获得较好的性能提升。
除了通过复制改善系统的响应时间之外,缓存的替换策略对响应时间改善也有很大影响。SmallWorld模型刻画了网络通信中的一个有趣的特征:在规则网络中随机地添加少量通路,能很好减短通信距离,减少请求的响应时间,它被用来改进FreeNet中的缓存替换策略,也获得了较好的性能改善[18]。
P2P体系结构使得P2P系统中会出现“无政府主义”行为,例如,过量下载或有意让下载的文件中包含广告等,这些行为导致P2P信息交换的不公平性。在P2P网络中,为避免每一个Peer享受服务而不提供服务的现象,需要实行一定的管理机制。在P2P网络中引入经济学中买卖交易的原理,可以促进资源的共享和交互。Stanford大学的P2P研究小组提出了RTR(right-to-respond)协议[19],用以解决在洪流模型中,中间节点不愿消耗资源转发请求的问题。RTR是指对查询请求的响应权,Peer节点可以购买和出售系统中每个查询请求的RTR。当某一Peer节点转发请求时,其它Peer节点可以向其购买RTR。购买了RTR的Peer节点可以执行两个操作,一是响应该请求,如果被请求的发出者选中,就可以为其提供服务并收取费用;二是再将RTR售出给其它节点。通过这种方法,Peer节点在经济利益的驱使下会不断转发请求,扩大搜索范围。同时可
以促进拥有类似资源或服务的Peer节点频繁联系,形成Peer Group,提高搜索效率。
另一个利用经济学原理的实例是数据交易(data trading)方法的引入[20]。P2P系统经常采用数据备份的机制来增强资源可用性,提高系统性能。而用户往往不愿无偿提供存储资源备份其它数据。这时利用数据交易的方法提供相互备份,即获得对方存储空间或数据资源是以向对方提供存储空间为前提的。系统中Peer节点之间建立了良好的相互备份关系,将会减少搜索和访问的开销。以上这些实例均表明,采用经济学中以交易为基础的资源管理机制,可以提高P2P系统的资源使用率。
5.小结
P2P计算,作为分布式计算的一个分支,目前不论是从技术研究还是产品开发来看,都已成为了一个重要的领域。P2P的算法、平台和应用都将有进一步的发展空间。P2P的思想也被广泛地应用在很多其他的研究领域。本文着重介绍了P2P的发展背景、P2P系统的特点,在P2P平台层识别出若干P2P平台的关键技术,包括Peer的通信技术、P2P平台的安全机制和P2P平台的性能改善技术,这些技术的总结和分析能对设计和实现P2P平台和应用起到一定的借鉴和指导作用。
参考文献:
[1] Napster Inc.http://www.naspter.com
[2] Gnutella,http://www.gnutelliums.com
[3] Freenet,http://freenetproject.org/lang/en
[4] BitTorrent,
http://bitconjurer.org/BitTorrent/[5] Sixto Ortiz Jr., "Instant Messaging: No Longer Just Chat", IEEE Computer,March 2001
[6] Jeremie Miller, "Jabber, Peer-to-Peer:Harnessing the Power Of Disruptive Technologies,” O'Reilly, March 2001
[7] Peter Saint-Andre, “Jabber Technology Overview”
[8] Preeti Mehra,Groove,16th November,2001,ECE-579
[9] Gregory Alan Bolcer,Michael Gorlick,”Peer-to-Peer Architectures and the Magi Open-Source Infrastructure”, Endeavors Technology ,2000
[10] Mayank Bawa,Roberto J.Bayardo Jr.,Sridhar Rajagopalan,Eugene J.Shekita, “Make it Fresh,Make it Quick-Searching a Network of Personal Webservers”
[11]
Seti@Home,
http://setiathome.ssl.berkeley.edu/[12] Jxta Book,http://www.brendonwilson.com/projects/jxta
[13] Siu Man Lui, Sai Ho Kwok, “Interoperablility of Peer-To-Peer File Sharing Protocols”,ACM SIGecom Exchanges,Vol.2,No.2,August 2002
[14] Dana Moore,John Hebeler, 苏忠,战晓雷等译, 《对等网》,清华大学出版社,2003.2
[15] Dejan S.Milojicic,Vana Kalogeraki Rajan Lukose,Kiran Nagaraja,Jim Pruyne,Bruno Richard,Sami Rollins,Zhichen Xu,HP Laboratories Palo Alto,” Peer-to-Peer Computing”,University of California
[16] Ion Stoica,Robert Morris,Divid Liben-Nowell,David R.Karger,M.Grans Kaashoek,Frank Dabek,Hari Balakrishnan. ”Chord: A scalable Peer-to-peer Lookup Protocol for Internet Applications”
[17] S.Ratnasamy,P,Francis, M. Handley, R.Karp,and S.Shenker,”A Scalable Content-Addressable Network”,ACM SIGCOMM ’01,San Diego,CA,USA,2001
[18] Hui Zhang, Ashish Goel and Ramesh Govindan. Using the Small-World Model to Improve Freenet Performance. IEEE Infocom, 2002.
[19] B.Yang,S.Kamvar,and H.Garcia-Molina Addressing the non-cooperation problem in competitive P2P systems.Stanford University Database Group Technical Report,2003
[20] Mayank Bawa,Brian F.Cooper,Arturo Crespo. Peer-to-Peer Research at Stanford,Stanford