基于P2P技术BitTorrent客户端软件的实现

上传人:仙*** 文档编号:29916119 上传时间:2021-10-08 格式:DOC 页数:94 大小:1.83MB
收藏 版权申诉 举报 下载
基于P2P技术BitTorrent客户端软件的实现_第1页
第1页 / 共94页
基于P2P技术BitTorrent客户端软件的实现_第2页
第2页 / 共94页
基于P2P技术BitTorrent客户端软件的实现_第3页
第3页 / 共94页
资源描述:

《基于P2P技术BitTorrent客户端软件的实现》由会员分享,可在线阅读,更多相关《基于P2P技术BitTorrent客户端软件的实现(94页珍藏版)》请在装配图网上搜索。

1、 摘 要P2P技术存在已久,其第一次实际使用可以追溯到1979年的Usenet新闻服务系统。随着1998年出现的音乐共享软件Napster的流行,着眼于分布式数据共享的P2P技术得到了迅猛的发展,并日益呈现出取代传统的C/S文件共享模式的趋势。BitTorrent是P2P技术在文件共享领域最成功的代表之一。BitTorrent是一个开放的文件分发系统,它基于两个通信协议并由几种分工不同的网络节点组成。不同于普通的http或者ftp文件共享方式,BitTorrent采用一种全新的模式:资源的发布者最少只需要上传一份完整资源的数据量,之后的数据交换完全可以在BitTorrent下载者之间进行。本文

2、将详细分析BitTorrent文件分发系统的关键部分123456BitTorrent协议客户端的实现。本文从P2P的基本概念开始,首先介绍BitTorrent文件分发系统的组成,之后在此基础上解析BitTorrent的两个重要协议,最后重点分析一个轻量型BitTorrent协议客户端的实现。分析依照软件工程的思想,首先描述客户端的总体框架,包括功能模块、数据流和主程序的执行流程。在总体框架的基础上,具体分析客户端的各个功能模块的实现,其中将会重点讨论两个算法:piece选择算法和peer选择算法,这两个算法是BitTorrent的核心,分别在piece维护模块和peer维护模块里实现。【关键词

3、】P2P BitTorrent 文件分发系统 文件分发协议 客户端 GTK ABSTRACTP2P technology has existed for a long time, its first actual use can be traced back to 1979, the Usenet news service system. Since the music-sharing application Napster designed in 1998 became popular, P2P technology focusing on distributed data-sharing

4、has been in rapid development and with a tendency to replace the traditional C / S file-sharing model gradually.BitTorrent is one of the most successful classifications of P2P technology in file-sharing field. It is an open file distribution system, which is based on two communication protocol and c

5、onsists of several network nodes in different roles. Unlike ordinary http or ftp file-sharing manner, BitTorrent uses a new model: the publisher of a resource only needs to upload at least a whole resource. After that, the exchange of data can be just done between the BitTorrent downloaders. This ar

6、ticle will detailedly analyse the implementation of the pivotal part of BitTorrent file distribution system, a BitTorrent client. This article will begin with the P2P basic concept, and then introduce the constitutes of the BitTorrent file distribution system. On the basis of that, it will analyse t

7、he two important Algorithms of BitTorrent. And finally it will come with focus on the implementation of a lightweight BitTorrent client. In accordance with the idea of software engineering, the framework of the client will be described first, including functional modules, data flow and the process o

8、f the main thread. Basing on the framework, this article will analyse the implementation of the functional modules individually. This part will focus on two algorithms: piece selection algorithm and peer selection algorithm. These algorithms are the core of BitTorrent which are implemented in the pi

9、ece-maintaining modules and the peer- maintaining module respectively.【Key words】 P2P BitTorrent file distribution system file distribution protocol client GTK目 录绪 论1第一节发展现状1第二节论文组织与结构2第一章P2P概述4第一节P2P定义4第二节从C/S到P2P5第三节P2P技术特点6第四节P2P的应用7第五节本章小结8第二章BitTorrent文件分发系统9第一节BitTorrent概述9第二节基本原理10一、P2P的关键技术1

10、0二、BitTorrent对关键技术的实现12第三节文件分发系统的组成13第四节一个完整的文件分发过程14第五节本章总结15第三章BitTorrent文件分发协议16第一节术语解释16第二节Tracker HTTP/HTTPS Protocol17一、请求报文17二、响应报文19第三节Peer wire protocol20一、peer的状态20二、peer通信21三、重要算法23第四节本章总结25第四章系统总体设计26第一节程序简介26一、开发环境271、操作系统272、开发工具273、实现语言和库27二、功能简介28三、不足与改进28第二节功能模块29一、功能模块图29二、图表说明30第三

11、节数据流31一、数据流图31二、图表说明33第四节主线程流程34一、主线程流程图34二、图表说明36第五节本章小结37第五章系统详细设计38第一节任务管理模块38一、bencoding 编码38二、metainfo文件38三、任务信息文件40第二节网络I/O模块42一、功能42二、数据结构42三、函数接口43第三节文件缓存模块43一、功能44二、接收缓存列表44三、数据缓存链表46第四节文件I/O模块48一、功能48二、数据结构49三、函数接口49第五节piece维护模块52一、功能52二、数据结构53三、函数接口54四、Piece选择算法55第六节tracker通信模块56一、功能57二、数

12、据结构57三、函数接口57第七节UI模块58一、功能58二、数据结构58三、函数接口58四、界面效果58第八节本章总结60结 论61致 谢63参考文献64附 录66一、英文原文66二、英文翻译76三、源代码树86- 89 -绪 论第一节 发展现状互联网能够发展至今,根本原因在于其构建的每一个细节都是为人与人之间的交流而设置的。而现在能够引起互联网震动的,无非也只有交流方式的变革本身。如今,在基于网络的各种技术充斥于我们周围之时,恐怕只有很少人不知道P2P的概念了,即便您没有深入探究,但是当你进入互联网时P2P可能就已经在你身边,一个简单的例子,在你使用即时聊天工具尽情聊天或者打开一个包含视频的

13、网页的时候,实际上就享受着P2P技术给你带来的便利。P2P技术究竟意味着什么?P2P是一种思想,有着改变整个互联网基础的潜能的思想。客观讲,单从技术角度而言,P2P并未激发出任何重大的创新,而更多的是改变了人们对因特网的理解与认识。正是由于这个原因,IBM早就宣称P2P不是一个技术概念,而是一个社会和经济现象。不管是技术还是思想,P2P直接将人们联系起来,让人们通过互联网直接交流。它使得网络上的沟通变得更容易、更直接,真正地消除中间环节。这听起来仿佛全新的概念,但其实并不是什么新鲜事。我们每天见面,或者通过电话交流都是P2P最直接的例子。而这个时候你有没有从电话的发展的历史中隐约感觉到,P2P

14、必将在互联网时代有着突飞猛进的发展,因为它可以改变Internet以大网站为中心的现状、重返“非中心化”,并把权力交还给用户,让我们的语言影像以最直接的方式传递到对方身边。它最符合互联网络设计者的初衷,给了人们一个完全自主的超级网络资源库。提到P2P就不能不提BitTorrent,作为P2P在文件共享领域的杰出代表,BitTorrent是使P2P技术迅速普及并深入人心的最大功臣之一。BitTorrent并不是最早的P2P技术,可能也不是最先进的,但无疑它是最流行的。你可能没听说过P2P,但你不会连BT都不认识,因为很有可能你的硬盘上百分之七十的容量都是由它来填满的。BitTorrent带来了全

15、新的资源共享方式,在有些网络里它已经取代了传统的http和ftp共享方式,至少在我所处的网络环境里是这样的。毫无疑问,BitTorrent给我们带来了新的共享体验,这里要感谢BitTorrent的开发者们,他们一开始就把它定义为一个开放的协议,BitTorrent的爱好者因此可以参与到BitTorrent的开发和推广中而成为传播自由和快乐的一员,这也是我以此作为毕业设计题目的原因之一。第二节 论文组织与结构本文主要介绍一个BitTorrent客户端的实现。在讨论具体实现之前,需要先介绍一些必要的知识,以便更好的支撑和理解后面的章节。第一章对P2P技术从定义到应用作一个大概的了解,因为BitTo

16、rrent本身就是P2P技术的典型代表。按照一般到特殊的思路,第二章介绍BitTorrent文件分发系统,一次完整的BitTorrent文件分发过程需要tracker服务器、web服务器、客户端等之间相互协作才能完成,这几个部分组成一个完整的BitTorrent文件分发系统。这一章从基本原理到实际的系统构成再到文件分发过程,详细的介绍了BitTorrent文件分发系统的各个方面。第三章介绍BitTorrent的两个协议,其中Peer wire protocol 是最能体现P2P思想的协议。该协议涉及到了两个关键的算法:piece选择算法、peer选择算法。这两个算法是BitTorrent的核心

17、,算法实现的好坏直接决定一个BitTorrent客户端的性能表现。从第四章开始,将具体阐述一个BitTorrent客户端的实现。章节尽量按照软件工程的流程来安排。本章第一节的简介以及后面的几张图表和附加说明将勾勒出客户端的整体结构。第四章建立了一个比较清晰的框架,第五章开始往这个框架里添加细节。本章详细介绍客户端的各个功能模块,并在必要时引用代码来说明。具体的实现代码可以参考附录的源代码部分,一般来说每一功能模块都对应一个源代码文件。第一章 P2P概述随着互联网接入速度的提高,网上相关服务的需求也在不断增加。网络革命后,P2P技术历经进化并发展形成一批针对各种领域的应用即时通讯,文件共享等。其

18、它的一些革命性的想法还在研究发展中之中。人们试图在各种不同的应用中使用P2P,包括电子商务,教育,协同工作,搜索,文件存储,高性能计算等等。德国互联网调研机构ipoque称,P2P已经彻底统治了当今的互联网,其中50-90的网络流量都来自P2P程序。P2P是什么?P2P是peer-to-peer的缩写,peer在英语里有(地位、能力等)同等者、同事和伙伴等意义。因此P2P也就可以理解为两个对等点之间的交互。拿P2P最流行的应用123456文件下载来说,其特点就是任何一台主机在下载数据的同时,也在给其它主机上传数据,主机与主机之间的关系是平等的,没有纯粹的接受者,也没有纯粹的给予者。第一节 P2

19、P定义目前,在学术界、工业界对于P2P没有一个统一的定义,下面列举几个常用的定义供参考: Peer-to-peer is a type of Internet network allowing a group of computer users with the same networking program to connect with each other for the purposes of directly accessing files from one anothers hard drives. Peer-to-peer networking (P2P) is an appli

20、cation that runs on a personal computer and shares files with other users across the Internet. P2P networks work by connecting individual computers together to share files instead of having to go through a central server. P2P是一种分布式网络,网络的参与者共享它们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要由网络提供服务和内容,能被

21、其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源(服务和内容)获取者(Client)。虽然上述定义稍有不同,但共同点都是P2P打破了传统的Client/Server (C/S)模式,在网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其它节点提供服务,同时也享用其它节点提供的服务。第二节 从C/S到P2P从网络的角度看,P2P是一种网络模型,它的基本概念就是任何的节点都可以作为服务器或者客户端。传统的客户/服务器(/)网络,都有预定义的客户端和服务器节点,而P2P则不同,P2P可提供一些额外的特性,而这些特性是

22、传统的客户/服务器模型无法实现的。首先,基于P2P的模型与客户/服务器(/)模型相比,其优势在于降低了对服务器的依赖和它的分散控制能力(相对于服务器的集中控制)。一些 P2P模型甚至不需要服务器,用户可以不经过服务器和其它用户进行连接。在传统的结构下必须受限于传统的规则,相比而言用户在P2P模型下比使用传统的客户/服务器结构有着更多的自由。其次就系统的鲁棒性而言,P2P系统没有单一的失败点。最后从性能上比较,P2P是基于互联网的对等架构,它会大大改善内容的流量分布,解决网络带宽的瓶颈问题,并且极大程度缓解了内容存储服务器的压力,相比C/S模式,它具有无可比拟的优势。图1.1和图1.2显示了这两

23、种模型在拓扑结构上的不同:图 图1.1 C/S模型拓扑 图1.2 P2P模型拓扑任何事情都具有两面性,比如这两种模型的安全性。从资源获取者的角度看,它们希望资源的提供者能保证资源的安全性,对C/S模型来说不难做到,集中控制的特性让服务器可以约束资源提供者的行为并检查资源的可靠性。然而P2P模型要做到这点并不容易,资源的安全性很大程度上依赖于资源提供的自律,这是自由的代价。但是,从另外一个角度,即资源提供者的角度来看,将会得到一个相反的结果,因为就保护资源提供者的隐私而言,P2P无疑具有得天独厚的优势,这是在P2P模式下资源会如此丰富的原因之一,这也是自由的力量。第三节 P2P技术特点P2P技术

24、的特点体现在以下几个方面: 非中心化(Decentralization):网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。P2P的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势。 可扩展性:在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能较容易地满足用户的需要。整个体系是全分布的,不存在瓶颈。理论上其可扩展性几乎可以认为是无限的。 健壮性:P2P架构天生具有耐攻击、高容错的优点。由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响

25、很小。P2P网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。P2P网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。P2P网络还能够根据网络带宽、结点数、负载等变化不断地做自适应式的调整。 高性能/价格比:性能优势是P2P被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。采用P2P架构可以有效地利用互联网中散布的大量普通结点,将计算任务或存储资料分布到所有结点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力

26、。 隐私保护: 在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。此外,目前解决 Internet隐私问题主要采用中继转发的技术方法,从而将通信的参与者隐藏在众多的网络实体之中。在传统的一些匿名通信系统中,实现这一机制依赖于某 些中继服务器节点。而在P2P中,所有参与者都可以提供中继转发的功能,因而大大提高了匿名通讯的灵活性和可靠性,能够为用户提供更好的隐私保护。 负载均衡: P2P 网络环境下由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求,同时因为资源分布在多个节点,更好的实现了整个网

27、络的负载均衡。 第四节 P2P的应用根据具体应用不同,可以把P2P的应用领域分为以下这些类型并列举其中一些典型代表: 提供文件和其它内容共享的P2P网络,例如Napster、Gnutella、eDonkey、emule、BitTorrent等; 挖掘P2P对等计算能力和存储共享能力,例如SETIhome、Avaki、Popular Power等; 基于P2P方式的协同处理与服务共享平台,例如JXTA、Magi、Groove、.NET My Service等; 即时通讯交流,包括ICQ、OICQ、Yahoo Messenger等; 安全的P2P通讯与信息共享,例如Skype、Crowds、Oni

28、on Routing等。第五节 本章小结P2P的本质思想是,整个网络中不存在中心节点(或中心服务器)。在P2P结构中,每一个节点(Peer)大都同时具有信息消费者、信息提供者和信息通讯者等三方面的功能,在P2P网络中每一个节点所拥有的权利和义务都是对等的。在P2P工作方式中,每一个客户终端既是客户机,又是服务器。它弱化了服务器的作用,将信息数量、成本资源都向互联网各点均匀分布。相比与传统的C/S模型,P2P具有更多的自由、更高的鲁棒性以及更强的性能,并且在保护资源提供者隐私方面更有优势。这些优势得益于P2P与众不同的技术特点,也正是由于这些优势,P2P获得了广泛的应用,从即时通讯到协同处理等,

29、特别是在文件共享领域,比如本文的主题123456BitTorrent文件分发系统。第二章 BitTorrent文件分发系统第一节 BitTorrent概述P2P的理论基础是分布计算,架构提出很早,但却长期不为大众所知。年,P2P在文件分享领域的先行者123456音乐共享软件Napster一炮而红,从此P2P终于走向大众并成为高扬共享精神的一面旗帜。但是Naspter的巨大影响力直接触动了唱片公司的权益,因此很快五大唱片公司就联合将Naspter推上了被告席。2002年Napster在版权纠纷问题上败诉,P2P技术的发展仿佛一下陷入了举步维艰的阶段。 即便如此,P2P的技术优势和所倡导的分享精神

30、已经深入人心。作为一种极具生命力的技术,P2P没有停止进化的脚步,借助宽带的力量,BitTorrent等新生代P2P软件使P2P技术迎来一个全新的春天。 Napster所使用的P2P技术,必须以P2P服务器为中心,所有用户通过服务器提供的目录服务来搜索和定位资源。虽然服务器上没有任何资源, 但所有下载请求都要经由服务器处理 ,因此带宽问题在Napster代表的P2P模式中凸显出来,直接反映为用户的下载速度过慢。而新的P2P模式,服务器只用于发布资源,用户之间可以最大限度地交换文件,从而大大提高了传输速度。新的P2P模式以BitTorrent为代表,在BitTorrent的P2P模式中,每个下载

31、者同时也是上传者。对于上传者,无论其是否具有完整的文件,其它对等点都可以下载它们所需要的部分;对于下载者,可以从多个目标同时下载自己所需要的内容。 BitTorrent的优势不仅在于它技术的创新,也体现于它的自由和开放。自BitTorrent诞生的那一天起,它就是真正的自由协议,完全遵从公开源代码规则,协议和源码在网上完全公开并可自由下载。同很多自由软件一样,BitTorrent也以其优异的性能、独特的个性招来大批爱好者,许多网络编程高手都在它上面做了许多工作,开发出大量各具特色的客户端程序和服务程序,以及各种辅助工具,如Torrent制作程序、BitTorrent下载监测软件等。由于BitT

32、orrent的原创者Bram Cohen未保留BitTorrent的权利,包括BitTorrent服务的权利,因此使用BitTorrent或架设BitTorrent服务器以提供BitTorrent服务不需要获得特别授权,而且各种BitTorrent 协议的实现者可以很方便的对协议进行扩展。无限制的广泛授权带来了责任的分散和分担,使BitTorrent在遇到因文件自由交换产生版权纠纷而受到法律追究时不殃及自身,而只加罪于BitTorrent的滥用者,从而避免Napster那样的因提供共享服务而遭致的灭顶之灾。可以说,正是BitTorrent的开放性使它具有比Napster更强的生命力。第二节 基

33、本原理一、 P2P的关键技术要实现一个典型的P2P资源共享系统需要解决两个关键技术,即对等端发现技术和资源搜索技术。这两个关键技术的实现依赖于具体的P2P网络模型。1、 对等端发现技术 对等端是P2P的基本特征,如何定位并发现对等端是实现一个P2P系统的前提。这里涉及到两方面的问题:1.对等端的定位信息 2.如何获得这些定位信息。第一个问题要求每个对等端在整个系统中具有一个唯一的标识,在基于TCP/IP的Internet网络环境中,IP加上端口就可以定位网络中的一个对等端。具体实现时还有考虑公有IP、私有IP、NAT等问题。第二个是关于如何获得定位信息的问题,不同的P2P网络模型有不同的实现特

34、点:(1)、 纯P2P模型因为这个模型没有服务器,对等端动态发现其它端并在它们之间直接通信。因此,这种通信不受传统模型中的条款和规则限制。虽然本地配置方案和网络信息服务是可用的。但是登陆到模型上的用户不可能一直拥有可以发送请求的真实端数目;另外,对等端之间的直接通信会影响系统的安全性。(2)、 带一个简单发现服务器的P2P模型这种模型带有一个中心服务器,这个服务器在数据库中存储了所有注册用户的位置。任何搜索一个端的请求都由服务器来处理,它会返回一个数据库中端的清单。这种模型的主要好处是增强了安全性并对于请求端来说有大量的对等端可以用,但是如果服务器速度减慢或者崩溃,定位对等端就会很困难,其它的

35、对等端也会受到影响。(3)、 带有发现和查找服务器的P2P模型在这种模型中,服务器提供了服务的清单和对等端的清单,所有的用户在登陆时都要通知服务器。这种服务器不仅发现其它对等端而且返回所有登陆的重要信息。以此,这种模型相比其它的模型减少了时间耗费。(4)、 带有发现,查找和内容服务器的P2P模型这种模型为响应请求而发现对等端,在这种情况下中心服务器保留所有重要信息和请求端具有的内容。每个对等端都在服务器注册信息,服务器通过对等端和服务器响应来处理所有请求,因此这种模型对服务器的要求比较高。2、 资源搜索技术资源搜索技术涉及的问题和对等端发现技术很类似:1.资源的标识信息 2.如何获得这些标识信

36、息(1)、 纯P2P模型因为这种模型没有服务器协助通讯,它使用客户端的搜索模型。如果请求端有关于另外端定位的信息,处理会非常的快速。但是由于没有服务器可能会导致缺少可以连接的端,导致搜索的端的范围较小。(2)、 带有一个简单发现服务器的P2P模型这种模型有一个服务器,但是它同样使用客户端的搜索技术。服务器提出请求端连接用户的一个清单,请求端查找拥有所需内容的端,连接它并获取内容。这种模型的好处在于它提供了可以连接获取所需内容的大量端。(3)、 带有发现和查找服务器的P2P模型这种模型遵循客户端的搜索和服务器端的搜索。在所有的P2P模型中,这种模型是最有效和最灵活的。一个端无论何时要搜索一些特殊

37、的内容,它都可以直接在服务器是对已经相连的端进行搜索,或者简单的请求服务器对所需信息的结果进行回答。这种模型除了网络上相连的端外,还有可服务于请求端,服务器上 搜索工具可用是因为无论何时一个注册端登陆后,除了验证外,还将发送它的名字和共享的资源清单。(4)、 带有发现、查找和内容服务器的P2P模型这种模型不能使用客户端的搜索技术,因为位于中心的服务器管理整个网络,服务器处理所有的操作。这种模型完全基于服务器的搜索技术,一个端无论 何时需要信息,它只需连接服务器,因为服务器数据库中有完整的信息:从注册用户到所有可能的内容。但是如果太多的端访问服务器,服务器的处理速度就会下 降,也会影响到其它相关

38、服务器。二、 BitTorrent对关键技术的实现BitTorrent在某种程度上可以归为以上提到的带有一个简单发现服务器的P2P模型,但其具体实现并没有被限制于某一个模型,而且也不是一成不变。由于BitTorrent的开放性,从诞生到至今,BitTorrent协议的各种实现对协议本身进行了扩展,但大部分扩展并没有进入官方协议。这里的分析将只依据BitTorrent的官方协议。1、 资源标识信息BitTorrent的资源的标识信息隐含在metainfo文件中,通过计算metainfo文件中的某个节的hash值,将会得到一个20个字节的唯一标识。由于metainfo文件里还包含tracker服务

39、器和其它一些可变的信息,所以不能以整个文件的hash值作为资源的唯一标识。显然,获得了metainfo文件就得到了相应的资源信息。2、 对等端标识BitTorrent的对等端标识为对等端的IP和端口值。对等端的标识信息由tracker服务器维护,同一个资源的对等端拥有一个IP端口列表。3、 获取对等端标识对等端首先获取metainfo文件,然后计算出资源标识,并将资源标识作为消息的一部分向tracker服务器发出请求,服务器根据资源标识将相应的IP地址端口列表作为应答发送给对等端。同时tracker服务器会记录该对等端的IP端口值。第三节 文件分发系统的组成一个典型的BitTorrent文件分

40、发系统由如下几部分组成:metainfo文件、提供种子文件的web服务器、tracker服务器、资源发布者、下载者。 metainfo文件: 也称为种子文件,后缀为.torrent。文件包含了tracker服务器和资源文件的信息。比如tracker服务器的地址和通信协议、资源文件的hash值、文件路径、文件大小等信息。 web服务器:web服务器仅仅作为metainfo文件的发布点,并提供该metainfo文件对应资源的相关信息。如果下载者可以通过其它途径获得metainfo文件,那么web服务器并不是必要的,因为在下载者获得metainfo文件后,整个文件分发系统的运行将不再依赖web服务器

41、。 tracker服务器:tracker服务器负责向下载者提供拥有同一资源的其它下载者的定位和状态信息。tracker服务器和下载者之间通过HTTP协议通信,因此tracker服务器可以和web服务器集成在一起。 资源发布者:资源的原始拥有者,负责制作metainfo文件并将其发布(通过web服务器)。 下载者:文件发布系统中除资源发布者之外的对等端。在下载和上传的同时,还负责和tracker服务器保持联系,提供自己的下载状态。图2.1 BitTorrent文件分发系统组成第四节 一个完整的文件分发过程下面是一个完整的文件分发过程,从中可以看到BitTorrent文件分发系统的各个成员在此过程

42、中的作用: 根据BitTorrent协议,资源发布者会根据要发布的资源生成一个种子文件。 资源发布者将种子文件提交给web服务器,并提供资源内容的描述以便于资源的检索。当然资源发布者也可以通过其它方式来发布种子文件。 下载者访问web服务器,根据资源描述选择需要的资源并下载对应的种子文件。 下载时,BitTorrent客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器记录下载者的信息然后回应下载者的请求,并提供其它下载者(包括发布者)的IP和端口信息。此后,客户端会定时连接tracker服务器报告自己的状态,或者根据需要请求更多其它下载者的IP和端

43、口信息。 根据tracker服务器返回的信息,下载者再连接其它下载者。根据种子文件,连接的双方分别向对方告知自己已经拥有的数据,然后交换对方没有的数据。 下载者每得到一个数据块,需要算出数据块的hash值与种子文件中保存的原始值对比,如果相同则说明数据块正确,不同则需要重新下载这个块,以此保证数据的准确性。 当下载者获得资源的完整拷贝时,下载完成。这时下载者可以选择退出,或者转变为和资源的发布者一样只上传数据的上传者,即种子。第五节 本章总结BitTorrent等新一代的P2P软件使P2P技术迎来了春天。相比Napster,BitTorrent更开放和自由,并且进一步削弱了目录服务器的作用,从

44、而获得了更强的性能,同时也分散了资源发布的责任,避免了一些法规上的纠纷。通过metainfo文件和tracker服务器,BitTorrent巧妙的解决了P2P模型的两个关键技术。BitTorrent是由web服务器、tracker服务器、资源发布者、下载者等实体组成的一个文件分发系统,一个完整的文件分发过程需要各个实体有序高效的协作才能完成。第三章 BitTorrent文件分发协议BitTorrent文件分发协议的网络接口部分涉及到两个通信协议:1. Tracker HTTP/HTTPS Protocol 2. Peer wire protocol,分别用于对等端与tracker服务器通信以及

45、对等端与对等端之间的点对点通信。其中Tracker HTTP/HTTPS Protocol明显是传统C/S模式的通信协议,从这点上看BitTorrent并不是一个纯P2P网络模型。相比而言,Peer wire protocol则是一个典型的P2P通信协议,也是BitTorrent的核心。第一节 术语解释BitTorrent的官方协议里包含了一些术语,它们都对应着文件分发系统中的某个实体。为了尽量保持术语原来的意思,通常不使用它们的中文名称。如下是相应的解释: tracker:对应于tracker服务器; peer:对应于文件分发系统的对等端; seeder:特指已经拥有完整资源的peer,包括

46、资源的发布者。它们只上传不下载。 client:从某一个对等端角度,把自身称为client,其它和它交互的对等端称为peer。 piece:在BitTorrent中,把某一个资源里的所有文件抽象成一个大的文件块,然后将文件块按一定的长度(2的n次幂字节)等分,每一等份就为一个piece。如果整个文件块的长度不是piece长度的整数倍,则最后一个piece的剩余部分将被填充为零。 slice:每个piece会再被划分为slice。对等端以一个slice为单位请求和接收数据。 torrent:一个资源以及相应的种子文件、对等端组成一个下载群。torrent是这个下载群里所有实体的抽象。第二节 Tr

47、acker HTTP/HTTPS Protocol从字面上就很容易理解, Tracker HTTP/HTTPS Protocol是一个构建在HTTP/HTTPS之上的协议,用于peer和tracker之间的通信。Peer给tracker发送的HTTP GET请求中包含了peer的一些信息,tracker通过这些信息维护相关torrent的全局统计信息。Tracker给peer的响应消息里包含一个IP端口列表,这样peer就可以通过这个列表加入到相应的torrent下载群里。下面详细说明该协议请求报文和响应报文的格式。一、 请求报文GET/announce?info_hash=%0Bp%A3%4

48、0%EB%A9%27%21%F4%19%B7%E5NLu%DAn4XI&peer_id=%2DCD0102%2D%F4%17%F4%03%82%26%F8%CCQ%5F%E0%C3&port=2706&uploaded=0&downloaded=0&left=0&compact=1&event=stopped&numwant=100 HTTP/1.0以上是一个 Tracker HTTP/HTTPS Protocol GET请求的格式,请求的announce URL是metainfo文件中announce关键字对应的值。URL头后面的参数采用的是标准CGI格式(announce URL 之后是一

49、个?字符,然后就是一连串的参数=值参数序列)。由于有些字符不能在URL中出现,所以URL中的二进制数据(比如info_hash、peer_id)必须根据RFC1738规范进行转义。任何不在1-9,a-z,A-Z,.,-,_,字符集中的字符都要转换为“%nn”的格式,“nn”是对应字节的十六进制形式,如下面的例子:转换前:x12x34x56x78x9axbcxdexf1x23x45x67x89xabxcdxefx12x34x56x78x9a转换后:%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A 下面解释GET请求中的一些关键字: info_hash: 元

50、文件中info部分的hash 值,也就是之前提到的资源的标识信息。这个字符串需要转义。 peer_id: peer的id,一个20字节长的字符串。每个peer在开始一次新的下载之前,需要随机创建这个id。这个字符串通常也需要被转义。 ip: 一个可选参数,peer的真实IP地址,可以是点分十进制的IPv4地址或RFC3513定义的十六进制格式的IPv6地址。这个参数之所以是可选的,是因为tracker服务器通常会通过连接的socket直接获得peer的IP地址。但是在某些情况下需要这个参数,比如当peer通过代理连接tracker时,或者当tracker和peer都在某一个NAT网关的本地端时

51、,因为(RFC1918中定义的)私有IP地址对外部(NAT的另一端)来说是不可访问的,tracker会忽略私有IP地址,所以peer有必要通过此参数给tracker提供一个有效的公有IP地址,以便外部的peer能够主动连接到本地的peer。另外,不同的tracker对该参数的处理方式不一样,有些tracker只有当IP为公有IP时才会采用此参数。有些tracker会无条件的采用此参数,不管是私有IP还是公有IP,比如在校园网环境内。而有些tracker干脆直接忽略此参数。 port: peer所监听的端口,用于其它的peer主动连接本peer。peer通常在在 6881 端口上监听,如果该端口

52、被占用,那么会一直尝试到 6889,如果都被占用,那么就放弃监听。 uploaded: peer已经上载的数据大小,十进制表示,单位为字节。 downloaded: 已经下载的数据大小,十进制表示,单位为字节。 left: 该peer还有多少数据没有下载完,十进制表示,单位为字节。注意,这个值不能根据文件长度和已下载数据大小计算出来,因为很可能是断点续传,或者因为检查文件完整性失败而必须重新下载。 event: 一个可选参数,值是started、compted或者stopped之一(也可以为空,不做处理)。在一次下载刚开始的时候,该值被设置为started,在下载完成之后,设置为complet

53、ed。如果下载者停止了下载,那么该值设置为stopped。如果只是一般的保持连接的请求,则不出现该参数或者该参数为空。started: 给tracker的第一个请求里必须包含此参数值,包括断点续传和新的下载。stopped: 如果下载被正常的暂停,则使用此参数值. completed: 下载完成时使用此参数值。但如果下载开始前已下载完所有数据,只是单纯做种,则不必设定此参数值。二、 响应报文tracker的响应消息是一个”text/plain“类型的文档,该文档包含一个采用bencoding编码的字典。字典中包含如下关键字: failure reason: 一个字符串,用来解释查询失败的原因。

54、如果该关键字存在,则其它关键字都不再需要。 warning message: 与failure reason类似的字符串,新添加的可选关键字。不同的是它不影响后面的关键字。 interval: 一个整数。peer在两次发送请求之间的时间间隔 ,以秒为单位。 min interval: 一个整数,为可选关键字。 peer连接tracker失败到尝试再次连接之间的最小时间间隔。这是为了防止peer的频繁连接使tracker性能下降。 tracker id: 一个当peer再次连接tracker时需要返回给tracker的字符串。 complete: 一个整数。拥有完整文件的peer的数量。即see

55、der的数量。 incomplete: 一个整数。除seeder之外的peer的数量。 peers: 一个字典列表。每个字典包含两关键字:1、peer id: 一个字符串。代表peer的一个ID,由peer自己定义并在上面的请求中提交给tracker;、ip: peer的IP地址,可以是IPv6(十六进制表示)、IPv4(点分十进制表示)或者DNS域名(字符串表示);、port: 一个整数。peer的端口号。 peers: 一个字符串。作用和上面的peers字典列表一样,保存peer的定位信息,只是采用的格式不一样。这是一个每6个字节为一组的字符串,每个组的前四个字节保存IPv4地址,后两个字

56、节保存端口号,而且要按网络字节顺序保存。上面提到的peer字典列表默认为50个项。如果torrent对应的下载群里的peer数小于50,则返回实际数目的peer。如果大于50,则tracker一般会随机选择50个peer返回,或者采用更智能的选择机制以使整个下载群更有效,比如在一个返回给seeder的peer列表中包含其它seeder就不是一个明智的做法。第三节 Peer wire protocolPeer wire protocol是用于peer与peer之间互相交换piece的协议。该协议基于TCP/IP,TCP提供的可靠数据流服务和协议本身的数据完整性检查可以保证数据传输的可靠性和正确性

57、。根据“一报还一报”的原则,通过优化的piece以及peer选择算法可以保证整个下载群的健康性,使单个peer获得极快的下载速度。一、 peer的状态peer的状态是指一个连接中两个交互的peer的状态,包括choked和interested。 choked: 中文为阻塞,当一个peer阻塞另外一个peer时,意味着该peer将忽略另一个peer的任何请求消息,所以另外一个peer不会从该peer处得到任何资源数据,同时之前未答复的请求也将会被丢弃。 interested: 即一个peer对另外一个peer感兴趣,意味着另一peer有该peer需要的资源数据,而且该peer没有被对方阻塞(ch

58、oke);对于连接中的任一peer必须维护两对状态,包括本地状态和远端状态: 本地状态:am_choking: 该peer阻塞了对方;am_interested: 该peer对对方感兴趣; 远端状态:peer_choking: 对方阻塞了该peer;peer_interested: 对方对该peer感兴趣;二、 peer通信两个peer的通信流程为:建立TCP连接握手消息交换断开连接。1、 握手过程握手消息的格式为: 表3.1为各个段的说明:表3.1 握手消息格式位数01192027284748555667填充19BitTorrent protocol0Hash值Peer id 前缀随机数说明

59、握手信息使用的协议,为“BitTorrent protocol”,不算引号,共19位协议保留位,全部填充为0。Metainfo文件的info段的 HASH值,共20位最后20位为Peer ID。前缀由各个客户端实现自己定义,一般有程序名称和版本号构成,并以”-“开头和结尾,后面是随机数,一般为程序启动时产生的随机数。这20位唯一确定一个BitTorrent客户端。连接建立之后,主动连接的一方应该就立即给对方发送握手信息。连接的另一方在收到正确的握手信息后要马上回复握手信息,如果info hash段的值和自己计算的值不一致,或者peer id段不匹配,则关闭该连接。Peer id和发送给trac

60、ker的请求报文中提交的peer id必须一致。2、 消息格式Peer在握手成功后就是一系列的消息交换。Peer wire protocol协议中的所有消息都遵循如下格式:四字节的网络字节顺序表示的整数值,表示整个消息的长度(不包括自身)。:一字节的字符,表示消息的类型。:即消息的有效数据,具体含义依赖与不同的消息类型。3、 消息类型由定义的消息类型有如下八种: choke:ID为0,该消息没有负载。表示消息发送方不会给接收方提供任何资源数据。 unchoke:ID为1,该消息没有负载。含义与choke相反,表示如果有需要消息的接收方可以向发送方请求资源数据。 interested:ID为2,

61、该消息没有负载。表示消息发送方对接收方的资源数据感兴趣,即接收方拥有发送方没有的数据。 not interested:ID为3,该消息没有负载。含义与interested相反。 have:ID为4,负载为一个整数。表示发送方最近获得的完整piece分片的索引值。 bitfield:ID为5,负载为一个位图。该消息为握手后第一个发送的消息,而且只发送一次。表示发送方拥有那些piece。 request:ID为6,负载为三个参数:index,begin,length。该消息用于请求资源数据,其中参数index表示请求的数据所在的piece的索引值,begin表示请求的数据块在piece中的偏移值,

62、length表示请求的数据块的字节长度。 piece:ID为7,负载为三个参数:index,begin,piece。该消息和request消息对应,用于发送对方请求的资源数据。其中其中参数index表示发送的数据所在的piece的索引值,begin表示发送的数据块在piece中的偏移值,piece就表示资源数据块。 cancel:ID为8,负载为三个参数,参数含义和request消息相同。只是消息的含义不一样,request用于请求数据,cancel则用于取消该请求。该消息一般在下载结束的时候发送。当一个下载任务快完成时,下载完最后剩余的几个piece分片总是需要很长时间。为了让最后几个piece分片尽快的完成,下载客户端会一次向每个peer请求所有剩余的分片。为了保证效率,一旦某个piece分片下载完成,它就其它peers发送can

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!