[转] P2P网络文件共享系统及开发平台调研报告
P2P网络文件共享系统及开发平台调研报告
1.P2P 网络的定义
P2P(Peer to Peer)即对等计算或对等网络,通常简称P2P,可以简单的定义成通过直接交换,共享计算机资源和服务。在P2P网络环境中,成千上万台彼此连接的计算机处于对等地位,整个网络一般来讲不依赖于专用集中服务器。网络中的每一台计算机既能充当网络服务的请求者,又能对其他计算机的请求做出响应,提供资源与服务。
2.P2P 网络结构
①集中式P2P网络
集中式P2P网络形式上由一个中心服务器来负责记录共享信息及回答对这些信息的查询。每一个对等实体对它将要共享的信息以及进行的通信负责,根据需要下载它所需要的其他对等实体上的信息。它不同于传统的C/S模式,集中式P2P网络将所有网上提供的资料都分别存放在提供该资料的客户端上,服务器上只保留索引信息。代表软件为Napaster。
②完全分布式非结构化P2P网络
完全分布式非结构化拓扑的P2P网络采用了随机图的组织方式来形成一个松散的网络。这种网络结构的动态变化有较好的容错能力,因此具有较好的可用性。同时,这种结构支持复杂的查询,比如带有规则表达式的多关键字查询,模糊查询等。完全分布式非结构化P2P网络典型代表是Gnutella。
③完全分布式结构化P2P网络
由于完全分布式非结构化P2P网络中随机搜索造成的不可扩展性,人们开始研究如何构造一个高度结构化的系统。目前,研究的重点在于如何有效地查找信息,最新的成果就是基于DHT(分布式散列表)的分布式发现和路由算法。这种算法避免了类似Napaster的中心服务器,也不像Gnutella那样基于广播进行查找,而是通过分布式散列函数将输入的关键字唯一的映射到某个节点上,然后通过一定的路由算法和该节点建立连接。目前已有的完全分布式结构化拓扑P2P网络有Pastry,Tapestry,Chord和CAN。
④混合式P2P网络
集中式P2P形式有利于网络资源的快速检索,以及只要服务器能力足够强大就可以无限扩展,但是其中心化得模式容易受到直接的攻击,分布式P2P形式解决了抗攻问题,但是又缺乏快速搜索和可扩展性。混合式P2P结合了集中式和分布式P2P形式的优点,在设计细想和处理能力上都得到进一步的优化。它在分布式模式的基础上,将用户节点按能力进行分类,使某些节点担任特殊的任务。混合式P2P网络总共包含3种节点,分别为用户节点,搜索节点和索引节点。Skype即时通信软件就使用了该模式。
3. 主流P2P文件共享系统
①Napster
在1998年,美国东北波士顿大学的一年级新生肖恩·范宁为了能够解决他的室友的一个问题——如何在网上找到音乐而编写的一个简单的程序,这个程序能够搜索音乐文件并提供检索,把所有的音乐文件地址存放在一个集中的服务器中,这样使用者就能够方便地过滤上百的地址而找到自己需要的MP3文件。这个共享系统就是Naspter。
目录服务器维护每首歌及共享者的列表,并针对用户的查询返回匹配的用户列表。比如,用户F想要下载《那些花儿》这首歌,他首先到目录服务器上进行查询,得到的回复是用户D那里可以提供下载,紧接着用户E就可以直接和用户D通信,把歌曲下载回来。
Naspter的运行模式更像是一个搜索引擎,服务器负责对用户共享的文件建立索引并提供查询服务。
从结构上看,Naspter属于中心化拓扑的P2P网络,整个系统由目录服务器和各个客户端组成。目录服务器有一个或一组高性能的服务器承担,主要负责所有活动客户端资源的管理,并提供咨询服务;客户端安装在个人计算机上,可以动态地加入和离开网络。这种中心化拓扑使得Naspter容易部署,而且客户端容易开发。但是中心化拓扑不可避免的两个问题就是可扩展性和单点失效。当用户的数量迅速增大时,由于目录服务器不能很快处理用户查询请求,Naspter的性能就会大大下降,而且目录服务器的瘫痪会造成整个系统的瘫痪。安全问题也是Naspter的一个重大问题,目录服务器不能对用户身份的合法性进行验证,有很大安全隐患,而且中心化拓扑也不能很好的抵抗拒绝服务攻击(DOS)攻击。
②Gnutella
Gnutella是Naspter的一个变种,它改变了Naspter的拓扑结构,并且在很短时间就变得非常流行。严格来说,Gnutella是一种能够只能发现节点,完全分布式的P2P通信协议。运行任何一个基于Gnutella协议开发的客户端软件都能加入Gnutella网络
Gnutella的协议非常简单,可以分为消息协议和下载协议。消息协议是Gnutella网络节点中间用来相互发现和搜索的,下载协议是两个节点之间用来传送文件的。
在Gnutella网络中,每个节点既是服务器又是客户端。当一个节点需要查询消息时,会采用洪泛式的查询方式,即先把查询消息(Query)发送到自己的直接的邻居节点。邻居节点首先查询自己的数据列表,如果发现要查询的数据,就回送一条确认信息(QueryHit),否则就把这条信息发送到自己的直接邻居。在转发过程中,节点会检查并修改消息头的TTL字段和Hops字段,如果发现小心的TTL为0,直接丢弃该信息。
当进行查询的节点收到QueryHit的消息后,就可以直接发送到QueryHit的主机上去下载文件。下载的协议使用标准HTTP协议,下载方发送一个GET消息给服务器(提供该文件的主机),服务器回送一个HTTP 200 OK消息,然后双方就可以传送文件了。对于服务器在NAT或者防火墙后的主机,可以用Push消息来协商下载。具体参照Gnutella的协议规范。
③BitTorrent
BitTorrent的第一个可用版本是由Cohen于2002年10月推出的,简称BT,是一个可以实现多点下载的文件分发协议。它的基本原理是每个人在下载的同时也为其他下载用户提供上传,所以,参与的人越多,“文件源”越多,下载速度越快。
当某个用户想要共享文件或目录时,首先要为该文件或者目录生成一个“种子”文件,或者叫“元信息”文件(该文件包含共享文件或目录的URL信息),然后把这个“种子”文件上传到BT服务器上,等待别的用户来下载。需要下载某个文件的用户首先要到BT服务器上找到该文件的一个“种子”文件,然后根据“种子”文件提供的信息进行下载。BitTorrent系统中把文件分割相同大小的块,每个块可能会从不同的节点同时下载。BT服务器及时收集每个下载者的信息,包括地址以及目前拥有的文件块信息等,然后从下载者的列表中随机选取一组告诉正在下载的节点。各个节点和BT服务器要及时进行消息交换,以确保下载顺利完成。
在BitTorrent系统中,“种子”文件的上传和下载以及各个节点和BT服务器之间的其他通信都是基于HTTP协议的,而各个节点之间的通信协议是由Bittorrent规范规定的,叫做Bittorrent peer协议。
各个文件之间的交换文件时是把文件分割成固定大小的块来进行。为了保证最后所有的块可以顺利重组,BitTorrent系统采用了Hash(SHA1)机制,首先为整个生成一个校验值,然后也为每个块生成一个校验值。校验值可以保证文件块的唯一性,也可以作为文件块的标识。
从结构上看,BitTorrent系统属于中心拓扑的P2P网络,因此BT服务器同样存在着性能和单点失效问题,而且BT服务器没有针对用户的身份认证,在安全方面也存在着漏洞。
④eMule
eMule俗称“电驴”,是一个和BT非常类似的P2P下载工具,它源自于eDonkey。eDonkey有Jed McCalbe在2000年创立。该工具最大的优点是可以同时从多人哪里下载同一个文件,并采用了“多源文件传输协议”。eDonkey的索引服务器并不是集中式的,而是由个人来运行,每个人都可以运行电驴服务器。在eDonkey协议中,定义了一系列的文件传输,压缩和打包标准,还有一套积分标准,可以根据用户上传的数据量来分配相应的带宽。积分越高,下载速度越快,这也解决了其他P2P系统中很多人只下载不上传的问题。在文件标识问题上,eDonkey采用了和BT一样的机制,用Hash(MD5)函数对文件的计算结果作为该文件的唯一标识。文件的下载页通过分片来同时从多个地方下载。
eMule是eDonkey的改良版,而且是开源软件。eMule采用了和eDonkey相同的网络协议,能直接登陆eDonkey服务器,加入eDonkey网络。eMule同时也提供了eDonkey不具有的功能,比如自动搜索网络中的服务器,缓存搜索结果,和其他节点交换服务器地址,首先下载文件头尾供用户预览等。
eMule系统中的服务器分布在因特网的各个地方,而且客户端和服务器之间是多对多的关系。eMule系统中的各个服务器之间是不进行相互通信的。
在客户端的服务器列表中,有一个是该服务器的主服务器。当客户端接入网络之后,先用TCP通信的方式把自己的共享文件信息及地址信息发送到主服务器,随后用UDP通信方式把相同的信息发送给其他服务器,每个服务器会记录登录到自己的所有客户端信息。当服务器收到查询消息后,会通过匹配记录把查询结果反馈给客户端;而客户端在搜索时,可以向多个服务器发出请求,这样大大提高了搜索的效率。当客户端搜索到自己要的文件时,就可以进行下载了。下载前,客户端首先要从服务器上查询这个文件的客户端列表,然后从不同的地方选择不同的块同时进行下载。下载到某个文件的片断后,该片断可以同时被其他客户端下载,所以eMule也具有“下载人越多,下载速度越快”的优点。
从结构上看,eMule属于半中心化拓扑的。由于服务器分布在整个网络,从一定程度上减少了单点失效的概率。而且由于eMule引入了强共享机制,避免了其他P2P软件的低效率缺陷。不过这种拓扑结构也带来了安全隐患,由于每个人都可以成为服务器,而且客户端缺乏最服务器的身份认证,使得恶意用户可以冒充服务器来控制eMule网络。
4.P2P 应用开发平台
Windows Peer-to-Peer NetWorking 是微软公司推出的一套C/C++语言P2P应用开发平台,而JXTA是SUN公司推出的基于Java的P2P开发平台。
①WPPN平台
⑴WPPN平台简介
WPPN平台是可以在众多视窗平台下使用的一组点对点开发平台,它支持Windows XP with Service Pack 2,Windows XP Professional x64 Edition,Windows XP with Service Pack 1 and the Advanced Networking Pack for Windows XP,or Windows Vista。
微软公司对WPPN的目标定义为:使得人们可以在不依靠于一个中心服务器的情况下安全地通信或者共享信息,但是如果网络中存在一个中心服务器则通信或者信息共享会更加的顺畅的一套开发库。Windows 点对点网络平台本质上提供了一系列的API函数,这些函数不仅功能强大而且相当的灵活,这其中的主要模块包括:点对点名字解析模块,点对点图模块,点对点组模块,点对点身份管理模块。
WPPN具有以下几个特色使其成为开发者的选择。
⒈安全性:即使在有网络错误或者网络攻击的情况下,WPPN平台也保证了点对点网络的顽健性。
⒉可扩展性:WPPN平台适用于从小型的Ad hoc网络到整个Internet网络等各种网络规模环境
⒊无服务器结构:WPPN平台结构中没有中心服务器,所以不会存在对中心服务器的依赖。
⒋自适应性:WPPN程序自己能够根据不同的网络情况调整。
⒌自修复性:当网络存在错误时,WPPN程序能够自己修复和修正错误。
⒍共享性:WPPN实现了各个节点的资源共享。
采用WPPN平台可以方便的实现实时网络通信与聊天工具,需要网络协作的程序,资源共享程序,分布式处理程序。
⑵平台结构
WPPN是构建在Windows网络协议栈上的开发平台,WPPN平台的各个模块都需要下层的WinSock API,Crypto API以及TCP/IP协议栈提供支持。WPPN平台通过Win 32 API的方式向上层提供开发接口。
WPPN平台包括以下一些模块。
图(Graphing): 图在WPPN平台中是负责维护对等点的集合。图包含洪泛与同步、存储、图维护3个模块。
组(Grouping):组模块是构建在图之上的一个安全层,这个安全层定义了一个组在建立、邀请以及连接时的安全模型。另外,组模块使用PNRP作为命名解析,这样多个P2P应用程序可以分享同一个图。组模块包括安全、组安全服务器等两个子模块。
NSP:名字服务器,此模块提供了访问人意的名字的服务器的机制。
PNRP:PNRP模块提供点对点名字解析。
身份管理器:身份管理器管理着点对点网络中的身份创建、管理。
⑶基本概念
⒈点对点名称(Peer Names)
一个点对点名称用于标识一个资源,例如一台计算机,一个用户,一个组或一项服务。PNRP使用对等点名称在P2P网络中寻找一个确定的节点。一个对等点的名称长度为128bit。
⒉域(Clouds)
域是点对点图模块与组模块中使用到的一个概念。PNRP中定义域可以为在同一个IPv6环境下通信的对等点的集合。
⒊消息(Records)
消息是图中各个节点或者组中各个成员相互通信的单位。一个消息包括两个部分:消息头、消息体。消息头记录了消息的各种信息,包括版本号、创建人、消息体的类型。消息头还包含了一个XML属性域。消息体是应用程序定义数据,对于P2P网络平台来说是不透明的。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐