P2P文件传输系统的实现毕业论文.docx
- 文档编号:10921721
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:29
- 大小:190.74KB
P2P文件传输系统的实现毕业论文.docx
《P2P文件传输系统的实现毕业论文.docx》由会员分享,可在线阅读,更多相关《P2P文件传输系统的实现毕业论文.docx(29页珍藏版)》请在冰豆网上搜索。
P2P文件传输系统的实现毕业论文
P2P文件传输系统的实现毕业论文
一、引言1
二、P2P分布式文件传输系统发展综述1
(一)什么是P2P1
(二)P2P的分类2
(三)P2P的技术特点4
(四)P2P的应用领域5
1、对等计算5
2、协同工作6
3、搜索引擎6
4、文件交换7
三、P2P传输系统中算法的研究与分析7
(一)资源的定位与搜索算法的分析7
1、Chord算法7
2、CAN算法9
3、Tapestry算法11
4、Pastry算法12
(二)几种算法的比较12
(三)基于超节点改进的Chord方法13
(四)洪泛与Chord的结合14
四、基于P2P的传输系统的设计与实现16
(一)P2P传输系统的框架设计16
(二)P2P传输系统的界面设计17
1、搜索模块17
2、文件下载控制模块19
3、文件下载显示模块20
(三)P2P传输系统的网络结构设计21
1、超节点的选取21
2、节点的管理22
五、P2P传输系统中关键技术的研究与实现23
(一)超节点的选择23
(二)节点间通信连接的建立25
(三)节点间文件传输的实现28
1、断点续传28
2、多线程下载29
六、总结29
参考文献31
致谢32
一、引言
P2P打破了C/S的僵局,将PC机的潜力充分挖掘出来了,给出了一种更灵活、更接近互联网本质的信息组织、共享方案。
P2P技术是充满活力的。
P2P技术创造了一种全新的商业模式,它打破了传统的C/S模式,对等网络中每个节点的地位都是平等的,每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务。
传统的C/S模式控制了信息流动,使服务器端充斥了过时信息,阻碍了真正的交流。
P2P技术把控制权重新归还到用户手中去。
人们通过P2P可以共享硬盘上的文件、目录甚至整个硬盘。
所有人都共享了他们认为最有价值的最新的东西,这将使互联网上信息的价值得到极大的提升。
二、P2P分布式文件传输系统发展综述
(一)什么是P2P
P2P[1]是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。
这样一来,P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。
目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。
简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互,如图1所示[6]。
P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。
P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。
P2P另一个重要特点是改变互
联网现在的以大为中心的状态、重返“非中心化”,并把权力交还给用户。
Peer
PeerPeer
Peer
图1P2P模型
(二)P2P的分类
P2P模式的变化经历了集中式、分布式和混合式3个阶段。
P2P技术起源于文件交换技术,在发展过程中,文件交换技术的演变最具代表性,下面介绍P2P模式的几种形式:
(1)集中式对等网络[1](如图2所示)。
集中式P2P模式由一个中心服务器来负责记录共享信息以及反馈对这些信息的查询。
每一个对等实体要对它所需共享的信息以及进行的通信负责,根据需要下载它所需要的其他对等实体上的信息。
这种形式具有中心化的特点,但是它不同于传统意义上的Client/Server模式。
因为传统意义上的Client/Server模式采用的是一种垄断的手段,所有资料都存放在服务器上,客户机只能被动的从服务器上读取信息,并且客户机之间不具有交互能力;而集中式P2P模式则是所有网上提供的资料都存放在提供资料的客户机上,服务器上只保留索引信息,此外服务器与对等实体以及对等实体之间都具有交互能力。
图2集中式对等网模型
(2)分布式对等网络[1](如图3所示)。
在分布式P2P中,对等机通过与相邻对等机之间的连接,遍历整个网络体系。
每个对等机在功能上都是相似的,并没有专门的服务器,而对等机必须依靠它们所在的分布网络来查找文件和定位其他对等机。
这种无中心、纯分布式系统不再是简单的点到点通信,而是更高效、更复杂的网络通信。
图3分布式对等网模型
(3)混合P2P网络[1]。
集中式P2P有利于网络资源的快速检索,并且只要服务器能力足够强大就可以无限扩展,但是其中心化的模式易遭到直接的攻击,分布式解决了抗攻击的问题,但是又缺乏快速搜索和可扩展性。
混合式P2P结合了集中式和分布式P2P优点,在设计思想和处理能力上都进一步的优化。
它在分布式模式的基础上,将用户节点能力进行分类,使某些节点担任特殊任务。
(三)P2P的技术特点
非中心化(Decentralization):
网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。
可扩展性:
在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能较容易地满足用户的需要。
整个体系是全分布的,不存在瓶颈。
理论上其可扩展性几乎可以认为是无限的。
健壮性:
P2P架构天生具有耐攻击、高容错的优点。
由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响很小。
P2P网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。
P2P网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。
P2P网络还能够根据网络带宽、结点数、负载等变化不断地做自适应式的调整。
高性价比:
性能优势是P2P被广泛关注的一个重要原因。
随着硬件技术的发展,个人计算机的计算和存储能力及网络带宽等性能依照摩尔定理高速增长。
采用P2P架构可以有效地利用互联网中散布的大量普通结点,将计算任务或存储资料分布到所有结点上,利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的,通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力。
隐私保护:
在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。
(四)P2P的应用领域
P2P引导网络计算模式从集中式向分布式偏移,也就是说网络应用的核心从中央服务器向网络边缘的终端设备扩散:
服务器到服务器、服务器到PC机、PC机到PC机,PC机到WAP手机,所有网络节点上的设备都可以建立P2P对话。
这使人们在Internet上的共享行为被提到了一个更高的层次,使人们以更主动深刻的方式参与到网络中去,P2P给互联网的分布、共享精神带来了无限的遐想,从目前的应用来看,P2P的威力还主要体现在大围的共享、搜索的优势上。
主要有四大类型的应用:
对等计算、协同工作、搜索引擎、文件交换。
1、对等计算
采用P2P技术的对等计算,正是把网络中的众多计算机暂时不用的计算能力连结起来,使用积累的能力执行超级计算机的任务。
任何需要大量数据处理的行业都可从对等计算中获利,如天气预报、动画制作、基因组的研究等,有了对等计算之后,就不再需要昂贵的超级计算机了。
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台PC,这样,搜索围将在几秒钟以几何级数增长,几分钟就可搜遍几百万台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构成了
如图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)数量级。
为了提高查询效率,可以增加每个节点的路由表信息,将环中的所有节点以路由表的形式存放在每个节点中,当收到查询命令时首先根据关键字标识符判断大致在哪个节点上,然后将查询命令转发到这个节点上,这样以较小的存储消耗为代价,提高了查询的效率。
另外,双向路由策略也能提高查询的效率。
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四个邻居节点。
图5 二维CAN结构图
在CAN方法中通过哈希函数将文件名映射为文件名关键字,在笛卡儿坐标空间中找到存放这个关键字的节点,找出对应的IP值的坐标空间,路由到该点中就能查到文件。
从图中可以看到,CAN中的路由实际上就是穿过笛卡儿空间从源坐标到目的坐标的一条直线段路径。
在CAN中,每个节点都维护一路由表,此表用来存放该节点所有邻居的IP地址和坐标空间。
在路由时节点将消息转发给坐标路由表中距目的坐标最近的节点,直到目的坐标。
对于划分成n个同等大小的d维坐标空问,平均路由长度为(d/4)(n1/d)跳。
从CAN的结构可以看到,因为坐标空间中两个节点之间有多条不同路径,如果某个邻居失效,节点可以其它路径路由。
若某个节点的2d个邻居都失效,它可以通过扩展搜索来找到下一个消息转发点。
当有新节点加入时,系统必须为它分配相应的坐标空间。
一般是将某个现有节点的坐标空间分为两部分,将其中一部分分配给新的节点。
当新节点获得坐标空间后,从被分割的节点那里获取邻居信息,略加调整(包括某个邻居的退出和被分割节点的加入),被分割的节点作出同样调整。
同时,两个节点都需通知它们的邻居修改邻居表。
同时,系统会定时作周期性更新,以使每个节点都保有最新信息。
当某个节点离开时,它需要将自己的坐标空间和文件名关键字存储信息转交给某个邻居节点,如果该邻居节点的坐标空间可以合并该区并产生单个有效的空间(如离开节点的空间是该节点分割的),那么任务就完成了。
如果不行,就将该空间移交给空间最小的邻居节点。
3、Tapestry算法
Tapestry算法[7]和上面提到的两种算法在资源定位上都一样,都是通过哈希函数将文件名哈希为关键字标识符,将节点的IP哈希后得到节点标识符,关键字标识符找到和自己匹配或最近的节点标识符后将文件名和拥有该文件的节点IP保存在此节点中。
但Tapestry在结构上和上述两种方法不同,它在运行时构造一棵分布式的n元搜索树,网络中的每个节点代表搜索树的一个叶子节点。
因为
Tapestry的前缀路由方法使得n元搜索树的构造和节点的标识符密切相关。
Tapestry在路由时,当一条查找消息到达传递过程中的第n个节点时,该节点和目的节点的共同前缀长度至少大于n。
为了进行转发,该节点将查找邻居表的第n+l级中和目的标识符下一数位相匹配的邻居节点。
转发过程将在每个节点中依次进行直到到达目的节点。
这种方法可以保证路由至多经过logbN个节点就可以到达目的节点,这里N是节点标识符名字空间的大小,而b是标识符使用的基数(一般为16)。
同样,由于每个节点的邻居映射表的每个级别只需要保存b个表项,因此,邻居映射表的空间为logbN。
当新节点加入时,首先从网络系统中选取一个节点,获取它的路由表,将标识符与路由表中记录的节点标识符做字尾比对,在此路由表中找到与其节点标识符最相近的节点,再利用这个节点的路由表信息做进一步字尾对比,如此下去,直到找到与标识符最近的节点,并从中获取关键字离自己更近一些的文件索引信息。
4、Pastry算法
Pastry[7]是微软研究院提出的可扩展的分布式对象定位和路由协议。
它同样是利用哈希函数将文件索引信息分散存放到系统中的各个节点中,在结构上,它同Chord算法一样,是环形结构。
它与Chord不同的地方在于它的路由表更复杂,除了存储一些节点的标识符和IP地址以外,为了达到快速搜寻的目的,Pastry中每个节点都会包含三个部分:
路由表、叶子节点集和邻居节点集。
其中路由表记录与本节点标识符前几个数字相同的节点,这和Tapestry算法的路由表类似,叶子节点集记录与本节点标识符相邻的节点,邻居节点集记录与本节点网络距离相近的节点。
Pastry在搜索资源时,当某一节点收到一条查询消息时,首先检查该消息的关键字是否落在叶子节点集围。
如果是,则直接把消息转发给对应的节点,也就是叶子节点集中NodeID和关键字最接近的节点。
如果关键字没有落在叶子节点集围,节点就会把消息转发给路由表中的一个节点,该节点的标识符和关键字的相同前缀至少要比当前节点的标识符和关键字的相同前缀多一位,依次搜索下去,直到找到符合要求的目的节点。
(二)几种算法的比较
前面列出了几种最常见的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方法。
它有以下几方面的好处:
(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是它的后续节点,从而产生断链。
需要一个稳定的机制来处理这种事情的发生。
超节点能很好的解决这一问题,在正常情况一下,每个节点都会定时的向超结点发送信息确认是否仍保持连接,当某个节点断开连接后,超节点先得到此消息,向聚簇的普通节点广播此信息,普通节点收到信息后修改路由表即可。
(四)洪泛与Chord的结合
在搜索过程中,搜索的资源可能是另一个区域的节点所拥有的,这个时候就需要超节点转发查询请求。
聚簇的节点分布是结构化的,可是超节点的分布是非结构化的,在每个超结点中都维护着一路由表,让载着邻居超节点的网络地址信息,例如,超节点A中记载着B的地址信息,B中记载着A和C的地址信息,C中记载着B的地址信息。
这种信息可以通过超节点入网时广播获得。
超节点在转发查询请求时查询自己的路由表,将信息转发到邻居超节点中,因为文件的查询可能获得多个查询结果,用户也希望获得多个查询结果,这样可以从中任选一个信誉度高的,所以查询信息的转发可以无休止的进行下去直到所有的超节点都收到为止。
这种方法被称为洪泛法。
但是这样做存在两个问题,第一,如果加入的节点很多,这种查询信息的无休止转发势必影响文件搜索的效率。
第二,当一个超节点收到查询请求并转发时,它可能还会将此信息转发给发送信息给它的那个节点,这样造成了大量的冗余,占用网络带宽,导致网络风暴。
针对第一个问题,可以对传统的洪泛做一些改进,加入TTL,限制消息存活的生命期,达到一定的值时该消息不再转发下去,这样做虽然有可能导致文件信息检索的不完整,但提高了检索的效率,在系统中可以根据查询结果自行修改TTL值,若用户在系统默认的TTL值情况下未能检索到满意的文件下载信息,可以增加此值,但TTL值不能超过255。
针对第二个问题,可以在超节点加一个标识,当超节点A第一次接收到查询请求时设该标识为l,将请求转发给超节点B后,B会将此消息再次返还给A(A是B的邻居节点),这时A对此请求的标识已设为1自动将数据包丢弃不再转发下去。
综上所述,本文中所提到的资源搜索算法使用了超节点间的洪泛和聚簇的基于Chord的分布式哈希表算法相结合的方法,大大提高了资源定位的效率。
四、基于P2P的传输系统的设计与实现
(一)P2P传输系统的框架设计[2]
P2P文件共享系统从宏观上来讲,可以大致分为4个层次:
应用层,通知层,网络传输层和物理层(如图6所示)。
应用层主要提供用户与系统交互的界面。
通过应用层提供的文件服务接口,用户享有一个虚拟的文件共享空间,用户可以输入想要搜索的文件名称,设置上传和下载的相关选项,用户可以输入想要搜索的文件名称,设置上传和下载的相关选项。
应用层屏蔽了下层路由、传输等技术细节,用户可以像使用本地存储系统一样,访问分布式存储空间。
通知层实现了节点的管理和目录管理等功能,在选项。
应用层屏蔽了下层路由、传输等技术细节,用户可以像使用本地存储系统一样这层中实现了整个P2P网络传输系统的结构。
首先是超节点的选取,其次,当普通节点登录时,会将个人信息(如IP地址等)注册到超节点上,超节点利用IP地址哈希后构成基于Chord环的簇网结构。
节点共享的文件会通过哈希函数计算出关键字后将索引信息存入相关节点。
网络传输层是整个文件共享系统的核心,在这一层里主要完成节点对资源的搜索定位以及文件的上传与下载功能。
另外,为了提高系统的效率和安全性,可将负载平衡,服务质量和网络安全模型等相关因素加入这一层。
物理层由分布各处的具有存储空间和计算能力的计算机——系统节点及连接它们之间的底层网络部件构成。
各个用户节点通过贡献自己的存储空间和计算资源构成P2P存储系统的基本元素,是文件存储的底层实体,物理层是整个系统的物理基础。
(二)P2P传输系统的界面设计
应用层主要涉及到整个P2P系统的界面设计,它只是P2P技术应用的一个实例,提供方便的人机交互,真正一系列功能的实现在后面的通知层和网络传输层实现,本系统旨在掌握P2P技术的应用,为今后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- P2P 文件传输 系统 实现 毕业论文