BitTorrent 协议规范_第1页
BitTorrent 协议规范_第2页
BitTorrent 协议规范_第3页
BitTorrent 协议规范_第4页
BitTorrent 协议规范_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、BitTorrent 协议规范BitTorrent 是一种分发文件的协议。它通过URL来识别内容,并且可以无缝的和web进行交互。它基于H TTP协议,它的优势是:如果有多个下载者并发的下载同一个文件,那么,每个下载者也同时为其它下载者上传文件,这样,文件源可以支持大量的用户进行下载,而只带来适当的负载的增长。(译注:因为大量的负载被均衡到整个系统中,所以提供源文件的机器的负载只有少量增长一个BT文件分布系统由下列实体组成:一个普通的web服务器一个静态的“元信息”文件一个跟踪(tracker服务器终端用户的web浏览器终端下载者理想的情况是多个终端用户在下载同一个文件。要提供文件共享,那么一

2、台主机需要执行以下步骤:Ø运行一个tracker服务器(或者,已经有一个tracker服务器在运行了也可以Ø运行一个web服务器,例如apache,或者已经有一个web服务器在运行了。Ø在web服务器上,将文件扩展名.torrent 和MIME类型application/x-bittorrent关联起来(或者已经关联了Ø根据tracker服务器的URL 和要共享的文件来创建一个“元信息”文件(.torrent。Ø将“元信息”文件发布到web服务器上Ø在某个web页面上,添加一个到“元信息”文件的链接。Ø运行一个已经拥有完整文

3、件的下载者(被成为origin,或者seed,种子要开始下载文件,那么终端用户执行以下步骤:Ø安装BT(或者已经安装Ø访问提供 .torrent 文件的web服务器Ø点击到 .torrent 文件的链接(译注:这时候,bt会弹出一个对话框Ø选择要把下载的文件保存到哪里?或者是一次断点续传Ø等待下载的完成。Ø结束bt程序的运行(如果不主动结束,那么bt会一直为其它人提供文件上传各个部分之间的连通性如下:网站负责提供一个静态的文件,而把BT辅助程序(客户端放在客户端机器上。Trackers从所有下载者处接收信息,并返回给它们一个随机的pe

4、ers的列表。这种交互是通过HTTP或HT TPS协议来完成的。下载者周期性的向tracker登记,使得tracker能了解它们的进度;下载者之间通过直接连接进行数据的上传和下载。这种连接使用的是BitTorrent 对等协议,它基于TCP。Origin只负责上传,从不下载,因为它已经拥有了完整的文件。Origin是必须的。元文件和tracker的响应都采用的是一种简单、有效、可扩展的格式,被称为bencoding,它可以包含字符串和整数。由于对不需要的字典关键字可以忽略,所以这种格式具有可扩展性,其它选项以后可以方便的加进来。Bencoding格式如下:对于字符串,首先是一个字符串的长度,然

5、后是冒号,后面跟着实际的字符串,例如:4:spam,就是“ sp am”整数编码如下,以i 开始,然后10进制的整数值,最后以e结尾。例如,i3e表示3,I-3e表示-3。整数没有大小限制。I-0e是无效的。除了i0e外,所以以0起始的整数都无效。I0e当然表示0。列表编码如下,以l开始,接下来是列表值的编码(也采用bencoded编码,最后以e结束。例如:l4:s pam4:eggse 表示spam, eggs。字典编码如下,以d开始,接下来是可选的keys和它对应的值,最户以e结束。例如:d3:cow3:moo4:sp am4:eggse,表示cow:moo,spam:eggs,而d4:s

6、paml1:al:bee 表示spam:a,b。键值必须是字符串,而且已经排序(并非是按照字母顺序排序,而是根据原始的字符串进行排序。元文件是采用bencoded编码的字典,包括以下关键字:announce tracker的服务器info 它实际上是一个字典,包括以下关键字:Name:一个字符串,在保存文件的时候,作为一个建议值。仅仅是个建议而已,你可以用别的名字保存文件。Piece length:为了更好的传输,文件被分隔成等长的片断,除了最后一个片断以外,这个值就是片断的大小。片断大小几乎一直都是2的幂,最常用的是256k(BT的前一个版本3.2,用的是1M作为默认大小Pieces:一个长

7、度为20的整数倍的字符串。它将再被分隔为20字节长的字符串,每个子串都是相应片断的hash 值。此外,还有一个length或files的关键字,这两个关键字只能出现一个。如果是length,那么表示要下载的仅仅是单个文件,如果是files那么要下载的是一个目录中的多个文件。如果是单个文件,那么length是该文件的长度。为了能支持其它关键字,对于多个文件的情况,也把它当作一个文件来看,也就是按照文件出现的顺序,把每个文件的信息连接起来,形成一个字符串。每个文件的信息实际上也是一个字典,包括以下关键字: Length:文件长度Path:子目录名称的列表,列表最后一项是文件的实际名称。(不允许出现

8、列表为空的情况。Name:在单文件情况下,name是文件的名称,而在多文件情况下,name是目录的名称。Tracker查询。Trakcer通过HTTP的GET命令的参数来接收信息,而响应给对方(也就是下载者的是经过bencoded编码的消息。注意,尽管当前的tracker的实现需要一个web服务器,它实际上可以运行的更轻便一些,例如,作为apache的一个模块。Tracker GET requests have the following keys:发送给Tracker的GET请求,包含以下关键字:Info_hash:元文件中info部分的sha hash,20字节长。这个字符创几乎肯定需要被

9、转义(译注:在URL中,有些字符不能出现,必须通过unicode进行编码Peer_id:下载者的id,一个20字节长的字符串。每个下载者在开始一次新的下载之前,需要随机创建这个id。这个字符串通常也需要被转义。Ip:一个可选的参数,给出了peer的ip地址(或者dns名称?。通常用在origin身上,如果它和tracker在同一个机器上。Port:peer所监听的端口。下载者通常在在6881 端口上监听,如果该端口被占用,那么会一直尝试到6889,如果都被占用,那么就放弃监听。Uploaded:已经上载的数据大小,十进制表示。Downloaded:已经下载的数据大小,十进制表示Left:该pe

10、er还有多少数据没有下载完,十进制表示。注意,这个值不能根据文件长度和已下载数据大小计算出来,因为很可能是断点续传,如果因为检查文件完整性失败而必须重新下载的时候,这也提供了一个机会。Event:一个可选的关键字,值是started、compted或者stopped之一(也可以为空,不做处理。如果不出现该关键字,。在一次下载刚开始的时候,该值被设置为started,在下载完成之后,设置为completed。如果下载者停止了下载,那么该值设置为stopped。Tracker的响应是用bencoded编码的字典。如果tracker的响应中有一个关键字failure reason,那么它对应的是一个

11、字符串,用来解释查询失败的原因,其它关键字都不再需要了。否则,它必须有两个关键字:I nterval:下载者在两次发送请求之间的时间间隔。Peers:一个字典的列表,每个字典包括以下关键字:Pee r id,Ip,Port,分别对应peer所选择的id、ip地址或者dns名称、端口号。注意,如果某些事件发生,或者需要更多的peers,那么下载者可能不定期的发送请求,(downloader 通过HTTP 的GET 命令来向tracker 发送查询请求,tracker 响应一个peers 的列表如果你想对元信息文件或者tracker查询进行扩展,那么需要同Bram Cohen协调,以确保所有的扩展

12、都是兼容的。BT对等协议基于TCP,它很有效率,并不需要设置任何socket选项。(译注:BT对等协议指的是peer与peer之间交换信息的协议对等的两个连接是对称的,消息在两个方向上同样的传递,数据也可以在任何一个方向上流动。一旦某个peer下载完了一个片断,并且也检查了它的完整性,那么它就向它所有的peers宣布它拥有了这个片断。连接的任何一端都包含两比特的状态信息:是否choked,是否感兴趣。Choking是通知对方,没有数据可以发送,除非unchoking发生。Choking的原因以及技术后文解释。一旦一端状态变为interested,而另一端变为非choking,那么数据传输就开始

13、了。(也就是说,一个pee r,如果想从它的某个peer那里得到数据,那么,它首先必须将它两之间的连接设置为interested,其实就是发一个消息过去,而另一个peer,要检查它是否应该给这个家伙发送数据,如果它对这个家伙是unc hoke,那么就可以给它发数据,否则还是不能给它数据Interested状态必须一直被设置任何时候。要用点技巧才能比较好的实现这个目的,但它使得下载者能够立刻知道哪些peers将开始下载。对等协议由一个握手开始,后面是循环的消息流,每个消息的前面,都有一个数字来表示消息的长度。握手的过程首先是先发送19,然后发送“BitTorrent protocol”。19就是

14、“BitTorrent protocol”的长度。后续的所有的整数,都采用big-endian 来编码为4个字节在协议名称之后,是8个保留的字节,这些字节当前都设置为0。接下来对元文件中的info 信息,通过sha1 计算后得到的hash值,20个字节长。接收消息方,也会对info 进行一个hash 运算,如果这两个结果不一样,那么说明对方要的文件,并不是自己所要提供的,所以切断连接。接下来是20个字节的peer id。这就是握手过程接下来就是以消息长度开始的消息流,这是可选的。长度为0 的消息,用于保持连接的活动状态,被忽略。通常每隔2分钟发送一个这样的消息。其它类型的消息,都有一个字节长的

15、消息类型,可能的值如下:choke, unchoe, interested, not interested类型的消息不再含有其它数据了。bitfield永远也仅仅是第一个被发送的消息。它的数据实际是一个位图,如果downloader已经发送了某个片断,那么对应的位置1,否则置0。Downloaders如果一个片断也没有,可以忽略这个消息。(通过这个消息,能知道什么了?have类型的消息,后面的数据是一个简单的数字,它是下载者刚刚下载完并检查过完整性的片断的索引。(由此,可以看到,peer通过这种消息,很快就相互了解了谁都有什么片断request类型的消息,后面包含索引、开始位置和长度长度是2的幂。当前的实现都用的是215 ,而关闭连接的时候,请求一个超过2 17的长度。(这种类型的消息,就是当一个peer希望另一个peer给它提供片断的时候,发出的请求cancel类型的消息,它的数据和request消息一样。它们通常只在下载趋向完成的时候发送,也就是在结束模式“阶段发送。在一次下载接近完成的时候,最后的几个片断需要很长时间才能下载完。为了确保最后几个片断尽快下载完,它向所有的peers发送下载请求。为了保证这不带来可怕的低效,一旦某个片断下载完成,它就其它peers发送cancel

温馨提示

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

评论

0/150

提交评论