• 241.21 KB
  • 2022-04-22 13:31:56 发布

P2P文件传输系统的实现毕业论文.doc

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'P2P文件传输系统的实现毕业论文目录一、引言1二、P2P分布式文件传输系统发展综述1(一)什么是P2P1(二)P2P的分类2(三)P2P的技术特点4(四)P2P的应用领域51、对等计算52、协同工作63、搜索引擎64、文件交换7三、P2P传输系统中算法的研究与分析7(一)资源的定位与搜索算法的分析71、Chord算法72、CAN算法93、Tapestry算法114、Pastry算法12(二)几种算法的比较12(三)基于超节点改进的Chord方法13(四)洪泛与Chord的结合14四、基于P2P的传输系统的设计与实现16(一)P2P传输系统的框架设计16(二)P2P传输系统的界面设计171、搜索模块172、文件下载控制模块193、文件下载显示模块20(三)P2P传输系统的网络结构设计211、超节点的选取212、节点的管理22五、P2P传输系统中关键技术的研究与实现23(一)超节点的选择23(二)节点间通信连接的建立25(三)节点间文件传输的实现281、断点续传282、多线程下载29六、总结2932 参考文献31致谢32一、引言P2P打破了C/S的僵局,将PC机的潜力充分挖掘出来了,给出了一种更灵活、更接近互联网本质的信息组织、共享方案。P2P技术是充满活力的。P2P技术创造了一种全新的商业模式,它打破了传统的C/S模式,对等网络中每个节点的地位都是平等的,每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务。传统的C/S模式控制了信息流动,使服务器端充斥了过时信息,阻碍了真正的交流。P2P技术把控制权重新归还到用户手中去。人们通过P2P可以共享硬盘上的文件、目录甚至整个硬盘。所有人都共享了他们认为最有价值的最新的东西,这将使互联网上信息的价值得到极大的提升。二、P2P分布式文件传输系统发展综述(一)什么是P2PP2P[1]是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。这样一来,P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互,如图1所示[6]。P2P32 使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。PeerPeerPeerPeer          图1P2P模型(二)P2P的分类P2P模式的变化经历了集中式、分布式和混合式3个阶段。P2P技术起源于文件交换技术,在发展过程中,文件交换技术的演变最具代表性,下面介绍P2P模式的几种形式:(1)集中式对等网络[1]32 (如图2所示)。集中式P2P模式由一个中心服务器来负责记录共享信息以及反馈对这些信息的查询。每一个对等实体要对它所需共享的信息以及进行的通信负责,根据需要下载它所需要的其他对等实体上的信息。这种形式具有中心化的特点,但是它不同于传统意义上的Client/Server模式。因为传统意义上的Client/Server模式采用的是一种垄断的手段,所有资料都存放在服务器上,客户机只能被动的从服务器上读取信息,并且客户机之间不具有交互能力;而集中式P2P模式则是所有网上提供的资料都存放在提供资料的客户机上,服务器上只保留索引信息,此外服务器与对等实体以及对等实体之间都具有交互能力。图2集中式对等网模型(2)分布式对等网络[1](如图3所示)。在分布式P2P中,对等机通过与相邻对等机之间的连接,遍历整个网络体系。每个对等机在功能上都是相似的,并没有专门的服务器,而对等机必须依靠它们所在的分布网络来查找文件和定位其他对等机。这种无中心、纯分布式系统不再是简单的点到点通信,而是更高效、更复杂的网络通信。32 图3分布式对等网模型(3)混合P2P网络[1]。集中式P2P有利于网络资源的快速检索,并且只要服务器能力足够强大就可以无限扩展,但是其中心化的模式易遭到直接的攻击,分布式解决了抗攻击的问题,但是又缺乏快速搜索和可扩展性。混合式P2P结合了集中式和分布式P2P优点,在设计思想和处理能力上都进一步的优化。它在分布式模式的基础上,将用户节点能力进行分类,使某些节点担任特殊任务。(三)P2P的技术特点非中心化(Decentralization):网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。可扩展性:在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能较容易地满足用户的需要。整个体系是全分布的,不存在瓶颈。理论上其可扩展性几乎可以认为是无限的。健壮性:P2P架构天生具有耐攻击、高容错的优点。由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响很小。P2P网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。P2P网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。P2P网络还能够根据网络带宽、结点数、负载等变化不断地做自适应式的调整。32 高性价比:性能优势是P2P被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力及网络带宽等性能依照摩尔定理高速增长。采用P2P架构可以有效地利用互联网中散布的大量普通结点,将计算任务或存储资料分布到所有结点上,利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的,通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力。隐私保护:在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。(四)P2P的应用领域P2P引导网络计算模式从集中式向分布式偏移,也就是说网络应用的核心从中央服务器向网络边缘的终端设备扩散:服务器到服务器、服务器到PC机、PC机到PC机,PC机到WAP手机,所有网络节点上的设备都可以建立P2P对话。这使人们在Internet上的共享行为被提到了一个更高的层次,使人们以更主动深刻的方式参与到网络中去,P2P给互联网的分布、共享精神带来了无限的遐想,从目前的应用来看,P2P的威力还主要体现在大范围的共享、搜索的优势上。主要有四大类型的应用:对等计算、协同工作、搜索引擎、文件交换。1、对等计算采用P2P32 技术的对等计算,正是把网络中的众多计算机暂时不用的计算能力连结起来,使用积累的能力执行超级计算机的任务。任何需要大量数据处理的行业都可从对等计算中获利,如天气预报、动画制作、基因组的研究等,有了对等计算之后,就不再需要昂贵的超级计算机了。Intel也剥用对等计算技术来设计其CPU,并为其节省极大的费用,同时对等计算的发展是以PC机资源的有效利用为根本出发点的,自然也极力受到Intel的极力推崇。从本质而言,对等计算就是网络上CPU资源的共享。2、协同工作公司机构的日益分散,给员工和客户提供轻松、方便的消息和协作的工具,变得日益重要。网络的出现,使协同工作成为可能。但传统的WEB方式实现,给服务器带来了极大的负担,造成了昂贵的成本支出,P2P技术的出现,使得互联网上任意两台PC机都可建立实时的联系,建立了这样一个安全、共享的虚拟空间,人们可以进行各种各样的活动,这些活动可以是同时进行,也可以交互进行,P2P技术可以帮助企业和关键客户,以及合作伙伴之间建立起一种安全的网上工作联系方式。3、搜索引擎P2P技术的另一个优势是开发出强大的搜索工具。P2P技术使用户能够深度搜索文档,而且这种搜索无需通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎(只能搜索到20%--30%的网络资源)无可比拟的深度(理论上将包括网络上的所有开放的信息资源)。以P2P技术发展的另一先锋Gnutella进行的搜索为例:一台Pc上的Gnutella软件可将用户的搜索请求同时发给网络上另外10台PC,如果搜索请求未得到满足,这lO台PC中的每一台都会把该搜索请求转发给另外10台P32 C,这样,搜索范围将在几秒钟内以几何级数增长,几分钟内就可搜遍几百万台PC上的信息资源。可以说,P2P为互联网的信息搜索提供了全新的解决之道。4、文件交换可以说文件交换的需求直接引发了P2P技术热潮。在传统的WEB方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。电子邮件是方便了个人间文件传递问题,却没法解决大范围的交换。这也是WEB的重要缺陷,Napster就是在这种情况下横空出世,抓住人们对MP3喜欢的需求,Napster的MP3交换直接引发了网络的P2P技术革命。三、P2P传输系统中算法的研究与分析(一)资源的定位与搜索算法的分析1、Chord算法Chord[7][16]是一个环形结构化P2P模型,给定一个关键字,Chord可以有效地把该关键字映射到网络中某个节点上,关键字和节点都分别拥有一个n比特的标识符(K和N)。Chord方法使用了一致性散列函数(SHA.1),通过哈希关键字和节点IP地址分别得到K和N。这样,网络中的节点和数据就被映射到一个空间为2n的圆环上,该环被称为Chord环。关键字为K的文件连同拥有它的节点IP构成了结构,存储在节点标识等于K的节点上,若等于K的节点不存在,则在Chord环的顺时针方向上选择紧跟着K的节点存放,该节点称为K的后继节点,记为successer(K)32 。如图4所示:       图4Chord环映射机制在图中,n=4(因为11要4位二进制来表示),K为1的关键字存储在标识N为l的节点中,K=3的关键字,因为标识为3的节点不存在,所以放在节点4上,记为successor(3)=4,同理,K=10的关键字放在标识为11的节点上。当有新的节点进入或退出时,仍遵循上面的策略,比如,当节点标识为3的节点加入时,存放在节点4上的关键字(K=3)就会转移到节点3中。当节点4退出时,存放在节点4上的关键字(K=3)就会转移到节点6中。在路由过程中Chord环上的每个节点只需要维护它在环上的后继节点的标识和IP地址就可以完成简单的查询过程,但这种查询方式在网络规模很大时会很慢,比如网络中有n个节点,查询的复杂度就为o(n)32 数量级。为了提高查询效率,可以增加每个节点的路由表信息,将环中的所有节点以路由表的形式存放在每个节点中,当收到查询命令时首先根据关键字标识符判断大致在哪个节点上,然后将查询命令转发到这个节点上,这样以较小的存储消耗为代价,提高了查询的效率。另外,双向路由策略也能提高查询的效率。2、CAN算法CAN是一种用于结构化对等网络P2P的分布式哈希[9]查找系统,可以在Internet规模的大型对等网络上提供类似哈希表的功能,具有可扩展、容错和完全自组织等特点。和Chord一样,CAN可以将整个系统看成一张保存(K,V)对的大哈希表。其中K为文件名通过哈希函数(SHA-1)计算后所得到的关键字,V为该文件所存在节点的IP地址。CAN将整个大的哈希表划分后存放到各个节点中,每个节点都保存邻居节点的信息,具有较好的容错性,当某个邻居节点发生连接错误时,路由信息可以绕过此节点。CAN是基于虚拟的d维笛卡儿坐标空间实现其数据的组织和查找功能的,它将整个坐标空间动态地分配给系统中的所有节点,每个节点都拥有独立的互不相交的一块区域。如图5所示,在一个二维笛卡儿坐标空间上存在9个节点,分别存放在不同的区域。CAN中这样定义邻居节点:在d维坐标空间中,如果两个节点的坐标在d-1维上重叠而在另一维上相邻接,则称这两个节点是邻居关系。在图中可以看到节点A和B在Y维上重叠,但在x维上相邻,因此A和B是邻居节点。A和E在X和Y维上都相邻,但没有在某一维上重叠,所以它们不是邻居节点。不难看出,对于d维的坐标空间,每个节点有2d个邻居节点,如节点E有B、D、F、H四个邻居节点。32 图5 二维CAN结构图在CAN方法中通过哈希函数将文件名映射为文件名关键字,在笛卡儿坐标空间中找到存放这个关键字的节点,找出对应的IP值的坐标空间,路由到该点中就能查到文件。从图中可以看到,CAN中的路由实际上就是穿过笛卡儿空间从源坐标到目的坐标的一条直线段路径。在CAN中,每个节点都维护一张路由表,此表用来存放该节点所有邻居的IP地址和坐标空间。在路由时节点将消息转发给坐标路由表中距目的坐标最近的节点,直到目的坐标。对于划分成n个同等大小的d维坐标空问,平均路由长度为(d/4)(n1/d)跳。从CAN的结构可以看到,因为坐标空间中两个节点之间有多条不同路径,如果某个邻居失效,节点可以其它路径路由。若某个节点的2d个邻居都失效,它可以通过扩展搜索来找到下一个消息转发点。当有新节点加入时,系统必须为它分配相应的坐标空间。一般是将某个现有节点的坐标空间分为两部分,将其中一部分分配给新的节点。当新节点获得坐标空间后,从被分割的节点那里获取邻居信息,略加调整(32 包括某个邻居的退出和被分割节点的加入),被分割的节点作出同样调整。同时,两个节点都需通知它们的邻居修改邻居表。同时,系统会定时作周期性更新,以使每个节点都保有最新信息。当某个节点离开时,它需要将自己的坐标空间和文件名关键字存储信息转交给某个邻居节点,如果该邻居节点的坐标空间可以合并该区并产生单个有效的空间(如离开节点的空间是该节点分割的),那么任务就完成了。如果不行,就将该空间移交给空间最小的邻居节点。3、Tapestry算法Tapestry算法[7]和上面提到的两种算法在资源定位上都一样,都是通过哈希函数将文件名哈希为关键字标识符,将节点的IP哈希后得到节点标识符,关键字标识符找到和自己匹配或最近的节点标识符后将文件名和拥有该文件的节点IP保存在此节点中。但Tapestry在结构上和上述两种方法不同,它在运行时构造一棵分布式的n元搜索树,网络中的每个节点代表搜索树的一个叶子节点。因为Tapestry的前缀路由方法使得n元搜索树的构造和节点的标识符密切相关。Tapestry在路由时,当一条查找消息到达传递过程中的第n个节点时,该节点和目的节点的共同前缀长度至少大于n。为了进行转发,该节点将查找邻居表的第n+l级中和目的标识符下一数位相匹配的邻居节点。转发过程将在每个节点中依次进行直到到达目的节点。这种方法可以保证路由至多经过logbN个节点就可以到达目的节点,这里N是节点标识符名字空间的大小,而b是标识符使用的基数(一般为16)。同样,由于每个节点的邻居映射表的每个级别只需要保存b个表项,因此,邻居映射表的空间为logbN。32 当新节点加入时,首先从网络系统中选取一个节点,获取它的路由表,将标识符与路由表中记录的节点标识符做字尾比对,在此路由表中找到与其节点标识符最相近的节点,再利用这个节点的路由表信息做进一步字尾对比,如此下去,直到找到与标识符最近的节点,并从中获取关键字离自己更近一些的文件索引信息。4、Pastry算法Pastry[7]是微软研究院提出的可扩展的分布式对象定位和路由协议。它同样是利用哈希函数将文件索引信息分散存放到系统中的各个节点中,在结构上,它同Chord算法一样,是环形结构。它与Chord不同的地方在于它的路由表更复杂,除了存储一些节点的标识符和IP地址以外,为了达到快速搜寻的目的,Pastry中每个节点都会包含三个部分:路由表、叶子节点集和邻居节点集。其中路由表记录与本节点标识符前几个数字相同的节点,这和Tapestry算法的路由表类似,叶子节点集记录与本节点标识符相邻的节点,邻居节点集记录与本节点网络距离相近的节点。Pastry在搜索资源时,当某一节点收到一条查询消息时,首先检查该消息的关键字是否落在叶子节点集范围内。如果是,则直接把消息转发给对应的节点,也就是叶子节点集中NodeID和关键字最接近的节点。如果关键字没有落在叶子节点集范围内,节点就会把消息转发给路由表中的一个节点,该节点的标识符和关键字的相同前缀至少要比当前节点的标识符和关键字的相同前缀多一位,依次搜索下去,直到找到符合要求的目的节点。32 (二)几种算法的比较前面列出了几种最常见的DHT算法[9],这四种方法系统开销小,路由效率高,易于维护,拥有较好的扩展性,他们之间也存在着异同点。从资源定位上来讲,几种算法都是一样,通过哈希函数算出文件的关键字和节点的标识符,若关键字和某节点的标识符匹配或相近,则将文件名关键和存放文件的节点IP存放在该节点中。系统所有文件的索引都分散存放在各个节点中。几种算法的不同主要体现在路由策略上,Chord的路由表记录环上的节点指针,鉴于已经有一些对它改进的方法,在路由选择上有较强的灵活。CAN将一个d维空间分块,每个节点占据其中一块。Tapestry和Pastry都是基于树状结构的,Pastry的路由表中第n行记录的节点标识符和本节点标识符的前n-1位相同,Tapestry与之相反,是做字尾的比对。Tapestry和Pastry的性能要优于前两者,从算法原理上来讲Pastry又略优于Tapestry,但是从结构实现上来讲Chord是最简单的,它也不需要像Tapestry和Pastry花费那么多代价去建立路由表、维护路由表,正因为它的简单,使得它使用起来也是最灵活的,可以根据需要优化路由策略。本系统就以Chord方法为基础实现资源的定位和搜索。(三)基于超节点改进的Chord方法[10]前面提到将文件关键字和节点m地址以分布式哈希表的方法分散在各个节点上,这样做确实提高了资源的搜索效率,但在实际的共享网络中,由于节点众多,所有节点都位于同一个Chord环中是不现实的,在此提出了基于超节点的改进的chord方法。它有以下几方面的好处:32 (1)超节点的引进大大降低了Chord环的复杂度,网络中的所有节点不必再位于同一个Chord环中,可以根据区域将Chord环划分,每个区域中选出超节点,管理着这个区域节点构成的Chord环。(2)降低了节点内路由表的大小,在Chord结构中每个节点都维护一部分路由表,共有log2N个项(N为命名空间的大小),其中第i项存放着距离该节点长度为2i+l的节点的后继信息。当超节点引进划分了Chord环后,实际上N变小了,每个节点维护的路由信息数也随之减少。在原Chord环结构中为了维护每个节点内的路由表信息,每个节点(如A)周期性向它的后续节点(如B)发送消息,后续节点也向它的前驱节点发送回送消息。如果此时一个新的节点C加入到它们之间,节点C会通知节点B它现在加入网络中。但节点A还不知道节点C的存在。下次节点A发送消息给节点B时,节点B将返回它的前驱节点C的信息。节点A存储节点C的信息,并把节点C做为自己后续节点,同时通知节点C自己是节点C的前驱节点。如果节点退出Chord环,它必须分别向它的前后续节点发送通知,以便更新路由表。但由于某种原因,节点还没有来及向前后续节点通告就退出Chord环,是环发生断链。例如:结点C在节点A和节点B之间。节点A下次发送询问消息时,没有收到节点C的回复,节点可能尝试几次,如果到一定的时间还是没有收到节点C的回复,节点A就判断节点C退出chord环,但节点A不知道节点B是它的后续节点,从而产生断链。需要一个稳定的机制来处理这种事情的发生。32 超节点能很好的解决这一问题,在正常情况一下,每个节点都会定时的向超结点发送信息确认是否仍保持连接,当某个节点断开连接后,超节点先得到此消息,向聚簇内的普通节点广播此信息,普通节点收到信息后修改路由表即可。(四)洪泛与Chord的结合在搜索过程中,搜索的资源可能是另一个区域的节点所拥有的,这个时候就需要超节点转发查询请求。聚簇内的节点分布是结构化的,可是超节点的分布是非结构化的,在每个超结点中都维护着一张路由表,让载着邻居超节点的网络地址信息,例如,超节点A中记载着B的地址信息,B中记载着A和C的地址信息,C中记载着B的地址信息。这种信息可以通过超节点入网时广播获得。超节点在转发查询请求时查询自己的路由表,将信息转发到邻居超节点中,因为文件的查询可能获得多个查询结果,用户也希望获得多个查询结果,这样可以从中任选一个信誉度高的,所以查询信息的转发可以无休止的进行下去直到所有的超节点都收到为止。这种方法被称为洪泛法。但是这样做存在两个问题,第一,如果加入的节点很多,这种查询信息的无休止转发势必影响文件搜索的效率。第二,当一个超节点收到查询请求并转发时,它可能还会将此信息转发给发送信息给它的那个节点,这样造成了大量的冗余,占用网络带宽,导致网络风暴。针对第一个问题,可以对传统的洪泛做一些改进,加入TTL,限制消息存活的生命期,达到一定的值时该消息不再转发下去,这样做虽然有可能导致文件信息检索的不完整,但提高了检索的效率,在系统中可以根据查询结果自行修改TTL值,若用户在系统默认的TTL值情况下未能检索到满意的文件下载信息,可以增加此值,但TTL值不能超过255。32 针对第二个问题,可以在超节点加一个标识,当超节点A第一次接收到查询请求时设该标识为l,将请求转发给超节点B后,B会将此消息再次返还给A(A是B的邻居节点),这时A对此请求的标识已设为1自动将数据包丢弃不再转发下去。综上所述,本文中所提到的资源搜索算法使用了超节点间的洪泛和聚簇内的基于Chord的分布式哈希表算法相结合的方法,大大提高了资源定位的效率。四、基于P2P的传输系统的设计与实现(一)P2P传输系统的框架设计[2]P2P文件共享系统从宏观上来讲,可以大致分为4个层次:应用层,通知层,网络传输层和物理层(如图6所示)。P2P文件传输系统应用层通知层网络传输层物理层图6P2P文件系统框架应用层主要提供用户与系统交互的界面。通过应用层提供的文件服务接口,用户享有一个虚拟的文件共享空间,用户可以输入想要搜索的文件名称,设置上传和下载的相关选项,32 用户可以输入想要搜索的文件名称,设置上传和下载的相关选项。应用层屏蔽了下层路由、传输等技术细节,用户可以像使用本地存储系统一样,访问分布式存储空间。通知层实现了节点的管理和目录管理等功能,在选项。应用层屏蔽了下层路由、传输等技术细节,用户可以像使用本地存储系统一样这层中实现了整个P2P网络传输系统的结构。首先是超节点的选取,其次,当普通节点登录时,会将个人信息(如IP地址等)注册到超节点上,超节点利用IP地址哈希后构成基于Chord环的簇内网内结构。节点共享的文件会通过哈希函数计算出关键字后将索引信息存入相关节点。网络传输层是整个文件共享系统的核心,在这一层里主要完成节点对资源的搜索定位以及文件的上传与下载功能。另外,为了提高系统的效率和安全性,可将负载平衡,服务质量和网络安全模型等相关因素加入这一层。物理层由分布各处的具有存储空间和计算能力的计算机——系统节点及连接它们之间的底层网络部件构成。各个用户节点通过贡献自己的存储空间和计算资源构成P2P存储系统的基本元素,是文件存储的底层实体,物理层是整个系统的物理基础。(二)P2P传输系统的界面设计应用层主要涉及到整个P2P系统的界面设计,它只是P2P技术应用的一个实例,提供方便的人机交互,真正一系列功能的实现在后面的通知层和网络传输层实现,本系统旨在掌握P2P技术的应用,为今后的网络教学平台提供技术支持,重点放在网络传输层,应用层只涉及到对P2P传输过程中的一些设置和下载的显示。按功能,可将应用层分为下面几个模块:32 1、搜索模块任务搜索模块主要是为用户提供搜索内容的输入,将搜索的内容提交给网络传输层,该模块有两种搜索模式:文件名搜索和用户名搜索。(1)文件名搜索在本P2P系统中,文件共有三种属性:文件名、扩展名和文件大小。搜索时,用户输入文件名关键字,然后通过网络层在簇内检索并将查询信息交给超节点转发,搜索后将文件信息回传给该节点。(2)用户名搜索每个系统中的节点入网时都会提供自己的用户名,为了提高系统的网络安全性,为每个节点设置一个信誉度,信誉度随着上传文件数目的增加而提升。在系统使用过程中,也许某个节点A对另外一个节点B提供的资源感兴趣,下次还想查看B节点提供的文件下载列表,这时就可以在界面中输入B节点的用户名,搜索到该用户后两者建立连接由B将文件列表反馈给节点A。节点A也可以将节点B添加为好友,这一功能通过本地数据库中的一个表来记录,但由于没有中心服务器,并不提供显示好友是否在线功能,只有当搜索好友的文件列表时才会将好友是否在线的信息反馈给搜索节点(搜索不到文件列表表示不在线,即使在线但没共享文件也视为不在线)。另外,同一聚簇内节点间的传输平均速率是大于聚簇间节点的传输速率的,所以为了提高效率,本系统还提供了“我的网上邻居”这一功能,点击网上邻居搜索按钮后,超节点会将在线节点的信息(包括用户名和信誉等级)32 下发给搜索节点,搜索节点可以通过点击某一节点查看它的共享文件列表。在搜索模块中,只是提供了文件名和用户搜索,并没有提供基于内容的搜索。2、文件下载控制模块[17]如大多数P2P应用软件一样,本系统提供了文件下载控制模块,主要包括以下几种功能:(1)连接控制在下载过程中,由于种种原因(如网络上传节点网络中断)下载可能终止,系统提供自动重连机制,从两方面进行设置:重试时间和重试次数。重试时间是设置连接超时值,重试次数是在未连上之前重新连接的次数。若经过设定的重连次数仍没有连上,该文件下载任务自动转为停止,放到文件下载队列的队尾,需要手动才能重新回到下载文件的队列。(2)存储和共享目录设置一般情况下系统都会提供默认的存储和共享目录,用户将下载的文件和想要共享的文件分别放入这两个目录中,也可根据情况自己修改。(3)缓存设置早期有的P2P下载工具(如BT)没有提供缓冲存储机制,这对硬盘具有很大损耗,本系统中提供缓冲存储功能,先将下载的内容放入自行设定的缓存中,然后再写到硬盘上。(4)下载任务队列控制32 该控制功能主要完成两方面的任务。首先是设置可同时下载的任务数,其他任务处于等待状态。其次,是设置下载任务的优先权,可将等待队列中的某个任务置为优先下载或优先等待两种模式。优先下载时,将正在下载中的最后一个任务置为等待状态,优先下载的任务立即执行;优先等待时,当正在下载的某一任务下载完成时该任务立即执行。(5)下载进度控制下载进度控制模块主要是通过界面上按钮的单击事件触发响应函数对某个选中的下载任务进行操作。主要包括“开始”、“暂停”、“停止”三个功能。当选中某个任务点击“开始”时,若正在下载的任务数已经达到预先设定的最大值,则该任务进入任务等待队列,若未达到,就立即连接源节点下载。“暂停”只是停止本节点与数据源节点之间的数据传输,但彼此之间的连接并未断开,当重新开始下载时仍使用原来的路由路线恢复数据的传输。“停止”是彻底将下载节点和源节点的连接断开,文件下载任务从下载队列中撤除。3、文件下载显示模块该模块主要起到下载文件信息的显示作用,包括两个部分:已下载和下载文件显示。它们在显示时使用相同的方式,包括文件下载状态、文件名及其扩展名、文件大小、已下载百分比和已用时等。但两者在本质上却有很大的不同,在后台的数据库这两部分使用不同的表进行信息的记录。(1)已下载任务显示已下载任务的表结构相对简单,主要包括文件名和扩展名、文件大小、文件下载完成时间、文件下载用时和文件保存路径这几个字段。在系统运行过程中程序从表中读取数据,按项分别显示在界面上,已下载百分比直接填入100%,下载状态皆为完成。(2)下载任务显示32 下载任务包括正在下载的、暂停的、停止的和等待状态的任务。它有两种显示模式:概要显示和详细信息显示。概要显示和已下载任务的显示模式相同,在主界面的列表控件里显示文件的状态信息、文件名及其扩展名、文件大小、文件下载的百分比和已用时等,除此之外,通过双击某个下载任务还能看到更为详细的下载信息,这些信息包括文件的分块情况以及各个块已经下载的百分比。在文件显示模块中还提供了“删除”操作,无论是已下载的文件还是正在下载中的文件通过点击“删除”都能将其从显示列表中剔除,同时也在数据库中删除相应的表项,此外,用户可根据需要选择是否删除已经下载了的文件。(三)P2P传输系统的网络结构设计[14]通知层实现了节点和目录管理等功能。该层主要完成两个功能,超节点选取和普通节点的管理。1、超节点的选取[17]前面已经提到过本节点是基于超节点的分布式结构化P2P网络结构,因此,超节点的选取也不是一件随随便便的事,超节点具有带宽大,内存大,处理能力强的特点。本系统中,超级节点的选取大体上是按区域来划分的。有两种超级节点的选择方法:第一是系统设定,比如让小型局域网内的服务器作为这个局域网的超级节点,这种超级节点具有处理能力强,功能稳定的特点,它们是静态的。32 第二种是动态产生,在软件中根据特定的算法,对节点的负载情况做出评估,计算出节点的资源消耗因子,让负载轻的节点担任本区域内的超级节点。2、节点的管理节点的管理实际上是节点之间互通信息的过程。主要包括下面几个步骤:(1)节点的登录当一个节点连入P2P系统时它需要登录到超级节点上,这里所说的登录就是与超级节点建立起连接,将自己的IP地址和用户名等网络信息注册到超级节点上便于以后的服务和管理。当然,也有可能此节点自己动态的变成超级节点接受其他普通节点的连接。超级节点本地维护着一张表,这张表记录着所有和它连接过的节点的信息,这些信息包括节点的端口地址、用户名、连接状态、节点的信誉度和节点的资源消耗因子等。(2)簇内文件共享结构的建立一旦节点连入系统,它将立即使用哈希函数计算出共享目录下的文件的关键字,通过Chord方法将文件索引信息存放到匹配的节点上。因为这些信息是动态的,节点随时可能修改共享的内容,再加上这些信息有多有少,所以在节点中索引信息并不存储在数据库中,而是开辟一块内存空间,以表的格式记录存放的关键字信息,这种方法减少了因读写数据库所消耗的时间,又从内存中搜索,提高了搜索效率。在实现上这里使用容器类。(3)节点下载时连接的建立32 节点登录注册以后,就可以系统提供的下载功能,用户输入想要查询的文件名或想要查询的用户名,若是文件名,则计算出关键字,在簇内利用节点的路由表进行查询,同时提交给超级节点,超级节点转发查询请求到别的超级节点上。若是用户名,则直接将用户名发送给超级节点,超级节点根据查询内容首先搜索本地数据库,看是否有匹配的,若没有匹配的,则通过相应的路由算法将查询请求包发送到系统中的其他超级节点上。无论是文件搜索还是用户名搜索,最终都会向查询节点返回拥有该资源的源节点地址或者超时信息通知查询节点搜索无效。(4)节点的退出节点的退出分超级节点的退出和普通节点的退出。超级节点退出时,会查询数据库表中的资源消耗因子字段,看聚簇内的哪个节点拥有顶替它成为超级节点的能力,将内存数据库中的信息和其他超级节点的路由信息通过网络发送给该节点并通知其它节点它的退出和超级节点的变更。普通节点的退出时,它首先将存储的关键字信息表传送给邻居节点,同时向超级节点发送一个消息,与超级节点断开连接,超级节点将内存数据表中与该节点相关的项删除,并将该节点退出的消息发送到其他节点上以更新其他节点的路由表。以上是节点正常退出下的情况,但是由于网络本身的不稳定性,再加上硬件故障,软件异常等情况,不管是超级节点还是普通节点都有可能异常退出。五、P2P传输系统中关键技术的研究与实现(一)超节点的选择[15][17]32 超节点的选择有两种情况:一种是直接指定可作为超级节点的计算机,这种是静态的,具有较高的稳定性和安全性,但由于缺乏灵活性,在大型文件共享系统中用的不多。另外一种是节点加入网络后根据其信誉度和负载率两个指标动态地选择超级节点,在这里将要讨论的是第二种。超节点的选择有一个原则,内网内使用服务器作为代理上网的计算机不能作为超级节点,即使这样的计算机有较高的信誉度和极低的负载率,因为在网络传输过程中通过代理连接是件相对比较麻烦的事,能作为超级节点的计算机必须是能直接与因特网相连的。超节点的选择流程如图7所示:              广播登录消息超节点回应选择超节点注册信息有   节点是否能成为超节点成为超节点无是32 图7超节点的选择流程成为普通节点成为备份超节点否首先当一个节点启动P2P应用程序接入文件系统时会广播一个消息,告诉一定范围内的节点自己登录了。因为物理位置相近的节点之间在信息检索时时延会相对短一些,传输数据的平均速率也会高一些,为了提高网络传输效率,尽可能的要将众多节点按逻辑区域划分,使得在一定范围内的节点聚集在一个簇中,这就要求节点登录时的广播不是无限制的广播,在这个广播消息上要加上一个限制—TTL(生存时间),每通过一个路由器TTL的值就减1,当它的值为0时,该包就丢弃,广播的范围也到此为止,通过这种机制可以较为有效地将节点划分。接下来,当某个超节点收到了这个广播,它会沿原路径逆向发送自己的地址,信誉度、负载率以及消息到达那里所经过的跳数(TTL减少的值),该节点收到了此信息,说明在预定的区域内存在超节点,如果没有收到,则担当起该区域内超节点的角色,为其他节点服务。一个节点发出广播以后可能收到多个超节点的回应,它需要根据返回的超节点的信息(包括信誉度,负载率,时延)选择一个合适的超节点,与该超节点连接后即上传自己的节点信息。超节点接收到节点的信息后会将该节点的信誉度和负载率与备份超节点比较,若优于备份超节点,则该节点取代原备份超节点,否则成为普通节点。32 (二)节点间通信连接的建立在P2P应用系统中,节点间的连接分两种情况:直接连接与间接连接。直接连接是指有公网地址的节点能直接与对方连接。在系统中,当超节点将下载源地址返回给查询节点时,若二者都拥有公网地址就能直接建立起连接,间接连接则要复杂一些。随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加匮乏,很多计算机并不具有外部公网地址,它被分配到的往往是局域网内部网络中使用的内部地址,它需要与外部进行直接的连接就要使用一种技术——-NAPT(NetworkAddressPortTranslation)[18]。NAPT的作用就是在NAT网关处,将内部地址替换成公用地址,从而在外部公网上正常使用,根据NAPT设备对传入数据分组进行地址端口映射方式的不同,一般被分成两类:对称型NAPT和锥型NAPT。对称型NAPT:对于一个给定的本地UDP端口,如果与其连接的目的端口IP地址相同(端口不同)NAPT使用同一个会话,如果目的IP地址不同(无论任何端口)NAPT使用不同的会话,也就是说由目的IP地址是否相同来决定NAPT是否用同一个会话。锥型NAPT:对于一个给定的本地UDP端口,如果与其连接的目的端口IP地址相同(端口不同)NAPT使用同一个会话,如果目的IP地址不同(无论任何端口)NAPT也使用相同的会话。也就是说只要本地绑定的UDP端口相同,而不管发出的目的地址是否相同,都使用同一个会话。这种类型NAPT也是目前大多数所使用的。本系统也是针对这种类型的NAPT设计出网络连接的方法。32 在锥型NAPT模式下,节点间的连接又分多种情况,对等方分别处于外网和内网、对等方处在同一NAT后、通信的对等方位于不同内网。前两种情况相对简单,这里对第三种情况展开描述,如图8所示:图8位于不同内网的节点SuperNodeS202.116.178.166NAPTA外网IP:219.214.35.24内网IP:192.168.0.1NAPTB外网IP:202.114.175.85内网IP:192.168.0.1NodeA192.168.0.2:4000NodeB192.168.0.3:5000首先,节点A登录P2P网络,它的内网地址是192.168.0.2,使用端口4000与NAPT A建立会话,NAPT的外网IP地址是219.144.35.24,当节点A想与超节点S进行通信时,NAPTA为它们的会话分配端口40000,那么超节点S收到的节点A的地址是219.144.35.24:40000,这个地址就是节点A的外网地址。相同的,节点B通过NAPTB与超节点S连接,它的外网地址是202.114.175.85:50000。当节点A和节点B的外部网络地址确定后,它们就可以从超节点那里获得对方的网络地址,建立起连接。但连接的建立并不那么顺利,当节点A试图给节点B发送消息或数据时,首先要通过NAPTB,由于防火墙或其他安全设置的存在,NAPT B32 会认为这是一个不合法的数据,将其丢弃。那么如何才能建立起连接呢,这需要超节点S再做一次服务,超节点收到了A想向B连接的消息,它会向节点B发送一个命令,告诉B节点A将与它连接,这一过程称之为打洞,这样NAPTB就会认为从节点A传过来的消息是合法的,节点A发送到节点B的信息就会收到了。这里举的一个例子是两个内网节点在同一超节点管理的聚簇中,若两个节点处于不同的超节点管辖范围内时原理是一样的,只不过中间多了个超节点的消息转发过程。在程序的实现上将“打洞”过程分为客户端和服务器端。客户端口运行在内网节点上,服务器端运行在超节点上。服务器端主要是通过开辟一个线程接收节点的入网和退网消息,转发节点的连接请求。客户端主要是在用户选择资源下载源后向此节点发送打洞请求消息和开启线程监听是否有打洞消息或发送了打洞请求消息后是否成功。(三)节点间文件传输的实现1、断点续传[4][11]在实际网络的传输过程中,总会因为各种原因让文件的下载被终止,如果因为终止而使已经下载的资源被废弃,会造成大量的浪费,使用断点续传技术能很好地解决这一问题。断点续传的思想其实比较简单,在下载文件的同时生成一个临时文件,文件中记载如下几个信息:(1)文件名,包括扩展名;(2)文件的大小;(3)文件保存的地址;(4)32 文件的分块情况,包括块的大小,每一块已经下载的百分比,每一块下载的源节点地址(为了方便下次继续下载,节省了搜索时间,若连接不上则重新搜索);(5)总的下载的百分比;(6)文件下载已用时等。一旦文件停止下载,临时文件保存上述信息,下次重新下载时先读取文件的相关信息,获取文件块的偏移量,从偏移量处继续下载。当文件总的下载百分比为100%时,文件自行删除。2、多线程下载[4]在平时下载过程中我们常会有多线程的设罱,如果要使用多线程下载,比如要分5个线程同时下载,我们可以把需下载的文件分成5个文件块。分成5个文件块,并不是把文件的内容分别存放到5个不同的缓冲区里。而是生成5个不同的文件偏移量。在系统中,文件大小的划分除了最后一块,前面的均是相同大小的,程序根据文件划分的情况分别建立线程连接下载源,每个线程为下载的数据建立缓冲区,当缓冲区满时将所收到的数据写入文件相应的偏移位置。使用多线程进行下载还要注意网络并发控制的问题。网络并发是指在网络通信过程中服务器或者客户端同时出现多个网络事件或者请求等待响应和处理的过程。网络并发控制则是对该现象所采取的对应的措施,避免网络事件无法及时响应和处理,同时保证网络数据的安全性和一致性。六、总结通过对P2P应用技术的深入研究,阐述了P2P32 技术的基本概念、特点以及发展现状;根据P2P技术的应用现状,并结合所读文献,剖析了P2P文件共享系统涉及到的相关理论知识,包括网络模型、资源的共享和搜索、文件下载等。列出目前比较常用的4种资源定位与搜索方法:Chord、CAN、Tapestry和Pastry,剖析并比较了几种方法的网络结构和路由策略;完成了P2P文件共享系统的详细设计,包括网络结构的组织、文件定位与搜索、节点间连接的建立和系统内数据的传输。网络结构的组织包括区域的划分和超节点的选择。文件定位与搜索采用改进的Chord和洪泛相结合的方法,在聚簇内使用Chord算法,超节点之间采用改进的洪泛方法。节点间连接的建立主要涉及到了处于内网的节点间信息的交互,主要使用UDP打洞的方式。数据传输部分包括文件的断点续传、文件的分块和多线程下载。总的来说,本文基本描述了P2P技术在文件共享系统中的应用,为今后网络教学平台的设计提供了有效的技术支持。32 参考文献[1]罗杰文.Peer-to-Peer(P2P)综述[Z].中科院计算机研究所.2005(11):65-66[2]KKant,Rlyer,VTewari.AFrameworkforClassifyingPeer-to-PeerTechnologies.Proc.of2ndIEEE/ACMInternationalSymposiumonClusterComputingandtheGrid(CCGRID.02),IEEESooetyPress,May2002,368-376[3]MorHarchol-alter,TOMLeighton,DanielLwdn.Resourcediscoveryindistributednetorks[C].18AnnualACMSIGACT/SIGOPSSymposiumonPrinciplesofDistributedComputingAtlanta.May1999,229-238[4]KDT.点对点文件传输软件横向比较[J].计算机与网络,2003(21)[5]互联网实验室.P2P的现状及发展趋势[Z].2004.8[6]程黎艳.P2P网络模型研究[J].软件导刊,2008,7(3):39-41[7]赖坤锋.基于DHT的P2P复杂搜索机制的设计与实现[D]:[硕士学位论文].成都:电子科技大学计算机学院.2008[8]B.YangandH.Garcia-Molina.DesigningaSuper-peerNetwork[R].Technicalreport,stanforduniversity,2002.[9]万仲保,王宝荣,蔡俊.典型DHT拓扑结构的研究[J].华东交通大学学报,2008,25(1):57—60[10]StoicaI,MorrisR,KargerD,eta1.Chord:AscalablePeer-to--PeerlookupserviceforInternetapplications[A].Proceedingsof ACMSIGCOMM’01[C].SanDiego,CA,USA,2001[11]MaymounkovP,MazieresD.Apeer-to-peerinformationsystembasedontheXORmetric[C].NewYork:ACMpress,2002:53—65[12]RainasamyS,FrancisP,HandleyM,eta1.Ascalablecontent-addressablenetwork[A].ProceedingsofACMSIGCOMM’01[C].USA,2001[13]庄雷,潘春建,邦永强等.Gnutella网络的连接管理[J].软件学报,2005,16(1):158-164[14]JamesF.KuroseKeithW.RossComputerNetworkingATOP-DOWNAPPROACHFEATURINGTHEINTERNET[C].PearsonEducation,2005.[15]李敏,徐林.BT通信中数据下载的分析和实现[J].计算机与信息技术,2008(12):81—83[16]刘云,马义忠.Chord算法性能及优化策略分析[J].计算机工程与设计,2008,29(21):5454-5456[17]郭良敏,杨寿保,郭磊涛.P2P网络中基于区域划分的超节点选取机制[J]小型微型计算机系统,2008,29(2):208-231[18]庞傲枫,李克清.P2P通信之NAT穿透方法研究[J].网络通讯与安全,2007(8):389-42032 致谢论文能够顺利完成,需要感谢曹晓军老师,在他的细心指导和引领下,我深刻的了解了有关论文方面的知识,才得以将此篇论文完成。同时也感谢我的同学和家人,在我遇到困难时,对我的大力支持和鼓励,感谢这几年来传授我们知识和培养我们能力的老师们,感谢兰州商学院信息工程学院的各位老师对我的学习、生活上的指导和帮助。32'