P2P的发展历程
P2P看起来是一个崭新的概念,实际不然。从应用角度看,在现实生活中,我们每天都在按照P2P的模式面对面地或者通过电话进行交流与沟通;即便从网络角度看,P2P也不是新概念,P2P技术起源于20世纪70年代中期,是源于局域网中的一种文件共享技术。作为目前互联网构架基础的TCP/IP协议栈本身并没有规定客户机和服务器的概念,所有的设备在通信中都是平等的。但由于当时网络带宽、主机处理能力以及成本控制的限制,导致了P2P技术并没有得到广泛的应用,而是C/S模式的网络结构成为互联网技术的主流。从局部C/S应用看,架构在TCP/IP之上的软件的确采用了客户机/服务器的结构:浏览器和Web服务器,邮件客户端和邮件服务器。但对于服务器而言,它们之间仍然是对等联网的。以E-mail为例,互联网不存在惟一的、巨大的邮件服务器来处理所有邮件,而是对等联网的邮件服务器相互协作把E-mail传送到对端的服务器上去。因此,当前所流行的P2P应用并不是一种新出现的技术,而是原有技术应用的发展。
首先,是Napster音乐共享工具使P2P又回到了人们的视野之中,并成为互联网舞台的主角。Napster由仍在美国东北大学就读的Shawn Fanning用P2P技术开发成功,并迅速在众多MP3数字音乐爱好者中传播开来,人们通过Napster在网络上搜索自己需要的MP3音乐文件,并从任何一网且使用Napster的计算机中***。由于这种方式免费且方便,在一年时间内就聚集了5000万用户,并最终接到了来自美国唱片艺术家工业协会的一纸诉状。
Napster可以称为P2P的第一代应用:有服务器的混合式P2P应用。在随后不长的时间里出现了以Gnutella为代表的完全分散式P2P应用,这是第二代协议。以Gnutella为代表的完全“对等”的网络结构,即网络中的所有对等点地位完全平等,对等点要找到其他对等点上面的资源需要直接找到该对等点,一般这种查找是通过消息洪泛(Flooding)的方式进行的。第三代协议为了解决“完全对等”的查找机制造成的网络压力和效率低的问题,在网络中引入了超级节点(SuperNode)的概念,选取网络中性能比较好的直接连接上网的用户作为超级节点,由超级节点来处理普通节点的查询。不仅缓解了性能较低对等点的压力,同时还能够解决FW/NAT等原因未能直接连接到网络上的主机的P2P共享和资源查找问题。Gnutella2和KaZaa等都是第三代P2P协议的代表。
P2P的协议变迁
如果说对等系统之间的信息流交互是P2P应用的根本,那么所有P2P协议的媒体流传送协议本质上都是相同的。而不断发生演进变化的是P2P的控制信令协议,主要的发展体现在检索查询技术之上,包括集中式、分布式和混合式三个阶段。
集中式P2P模式由一个中心服务器来负责记录共享信息以及反馈对这些信息的查询,每个对等实体要对它所需共享的信息以及进行的通信负责,根据需要***它所需要的其他对等实体上的信息。这种形式具有中心化的特点,但是它不同于传统意义上的C/S模式。因为传统C/S架构是一种纯粹的集中式信息管理方式,所有的资料都存放在服务器上,客户机只能从服务器上读取信息,客户机之间不具备交互能力;而集中式P2P模式下,所有信息资料存储在提供该资料的客户机上,服务器上只保留信息的索引,此外服务器与对等实体以及对等实体之间都具有交互能力。
与集中式P2P网络不同,分布式P2P网络不存在任何集中的索引服务器,或者说所有的节点都是服务器。在分布式P2P中,对等机通过与相邻对等机之间的连接遍历整个网络。每个对等机在功能上都是相似的,没有专门的服务器,而对等机必须依靠它们所在的分布网络来查找文件和定位其他对等机上的资源。通常,初次进入分布式P2P网络的对等点一般采用广播或者组播的方式,在临近的对等点中查找节点建立连接,并在本地缓存中保存曾经连接地节点的信息(在以后的登录过程中,对等点可以直接到本地缓存中查找可连接的对等点IP进行连接,直接进入P2P网络)。进入P2P网络的节点可能还需要通过交互消息增加对等连接数目,保持网络的可靠性。在查询过程中,节点向直连对等节点发送查询消息;接收到消息的节点查询本地共享文件是否匹配,若匹配则向查询节点发送命中消息,同时还向其他相邻节点转发查询消息,由此遍历指定范围的网络。
集中式P2P有利于网络资源的快速检索,并且只要服务器能力足够强大就可以无限扩展,但是其中心化的模式容易遭到直接的攻击;分布式P2P解决了抗攻击问题,但是又缺乏高效性。混合式P2P结合了二者的优点,在设计思想和处理能力上得到了优化。它在分布式模式的基础上,将用户节点按能力进行分类,使某些节点担任特殊的任务,这些节点共分为用户节点、搜索节点和索引节点。
工作流程中,用户节点可以选择多个搜索节点作为它的“父”节点,如果“父”节点接受该用户节点作为“子”节点,那么该用户节点就可以提交其所要共享的列表给“父”节点(缺省情况下,搜索节点可以维护多达数百个“子”节点)。这种模式的关键之一是引入了索引节点,索引节点不会直接连接到有版权的资料上,它就像搜索引擎一样,只是搜索和所需资料相关的地址,至于用户到底连接***了什么内容则和它无关。这种模式的关键之二是引入搜索节点,搜索节点管理着所属用户的文件列表,用户节点通过索引节点获得搜索节点信息,之后用户节点就与获得的搜索节点相连,每一次查询都通过该搜索节点进行。当用户发出搜索请求后,如果和用户节点直接相连的搜索节点查询结果达到用户指定数目的搜索结果就停止;如果不足,就向相邻的搜索节点继续发出请求。
专家简介
田辉,信息产业部电信传输研究所IP与多媒体研究室工程师,CCSA IP与多媒体工作委员会成员。主要从事IP网络及业务标准的制定工作。
链接:P2P标准之争
目前P2P开发者使用不同的方法开发P2P应用程序,缺乏统一的标准,导致大量的重复劳动,且产品互用性差、可扩展性差、平立性差。
走在前面的Sun公司提出了开放源码的JXTA技术,该项目提供了建立P2P网络应用的核心技术,旨在为P2P应用建立一个通用的开发平台。该项目计划将Laptop、Server、Desktop、Mobile等设备包容在统一的P2P网络应用平台JXTA下,使得所有终端成为网络环境的对等实体,从而进一步拓展P2P互联网的空间。
JXTA主要包括一个***于编程语言、系统平台和网络平台的协议集,并提供支持在任何平台、任何地方以及任何时间实现P2P操作(包括相互发现、搜索信息、交换数据、执行计算等)的一整套简单、小巧和灵活的机制。
IBM、Intel、Microsoft等业界巨头也希望成为P2P标准的领导者,并相互明争暗斗。就像出版商O’Reilly组织的“P2P网络应用会议”上的一个观点,目前P2P的状态类似于盲人摸象,业界领导者们都看到了“巨象”的部分特征。因此,大家只有把这些提供软硬件产品及服务的局部利益放在一旁,才能够有机会加深交流,使P2P技术实现飞跃发展。