热门标签
友情链接
版权信息
  • 本站文章由爬虫根据指令自动抓取互联网上的文章,请点击文后的“原文链接”查看原文。如果文章内容侵犯了您的版权,请联系我们,我们会立即处理;文章内容不代表本站观点,内容与本站无关。M
    PowerBy 鹏程娱乐网
正文内容

BT原理

发布时间:2008-01-14 00:15:37 作者: birdhsy

1. BT工作原理

1.1 BT的主体设计思想

BT是为多个用户传输大型文件而设计的文件传输协议,主体设计思想是将文件分散为多个块,然后将分散的文件块分发给不同的用户,用户之间再互相交换文件块。改变过去多个用户从一台服务器读取文件的思想,直接在用户之间进行文件交换,大大提高了下载传输的速度。

可以这样理解:首先在客户端把一个完整的文件分成了Z个部分,用户A在服务器随机下载了第N各部分,用户B在服务器随机下载了第M个部分,这样用户A的BT就会根据情况到用户B的电脑上去拿已经下载好的第M部分,用户B的BT也会根据情况到甲的电脑上去拿已经下载好的第N部分,这样不但减轻了服务器端的负荷,也加快了用户方(A、B)的下载速度,效率也提高了。而且用户在下载的同时,也在上传。

BT这种下载方式实际上是下载者之间“互助协助”,一个下载者不再是简单的“下载”者,他既要下载,又要充当服务器把自己已经下载的文件或者某些已经下载的部分提供给其他用户使用。BT下载把过去那种“peer-to-peer”的下载方式进化成为“peers-to-peers”,大大提高了下载速度。具体地讲,过去的“点对点”,是指一个具有完整文件的点对应多个下载该文件的点,而BT的“点对点”则是真正意义上的“多点对多点”。

1.2 BT系统的组成

一个完整的BT系统主要由以下几个要素构成:

l Web服务器(Web Server)

l 跟踪器(Tracker)

l 静态的“meta-info”文件(.torrent)

l 具有完整文件的客户端(seeds)

l 具有WEB浏览器和BT下载软件的客户端(leechers)

(1) Web服务器

该服务器提供了BT发布的统一管理,用来进行BT发布,并提供.torrent文件的下载

它跟网上通用的Web服务器相似,通常是在WINDOWS的操作系统下架构的。一般情况,现在大多用户使用的操作系统都是WIN2000以上的版本。对于98系统由于其网络支持较差,通常不在该系统下架设BitTorrent服务器。WIN2000以上系统基本上都带有IIS,IIS是发布Web页的重要组件。也可以使用apache来架设Web,不过这个还要取决于的BitTorrent发布页是用什么脚本编写的,因为apache不能支持ASP。现在已经编写出来的BitTorrent发布页脚本有PHP、CGI和ASP几种。现在大部分使用的是PHP的,少部分使用CGI的,因ASP有版权,所以目前只有中国比特互联(http://www.chinabt.cn)在使用ASP编写的BitTorrent发布页脚本。

(2) 跟踪器(Tracker)

Tracker 是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。搜索网络上所有的点(peers),其中包括种子(seeds)和下载者(leechers)。并建立动态的用户列表(list),列表中包括其他在线用户的IP,info_hash等信息。用户会定时的发送Keep-alive包,并告诉Tracker它的下载、上传等状态。客户端连上 tracker服务器,就会获得下载人员的名单,根据这个,BT会自动连上别人的机器进行下载。它应该与Web服务器分离独立安装在别的机子上,但现在普遍的作法是将Tracker与Web服务器同时安装在一台微机上。

种子(seeds)简单的说,就是在BT下载链中的发布者或下载完成者并保持文件链接不关闭提供数据的用户。而下载者(leechers)是指下载未完成的用户。

Tracker是BitTorrent服务器最关键的一部分,如果Tracker关闭了,发布页上的所有种子都将失效。Tracker程序可以到http://ei.kefro.st/projects/btrackalyzer/trackerlyze.pl这个地址去下载

(3) 静态的“meta-info”文件(.torrent文件)

.torrent file 命名为:BT下载链表文件,链表记录下载链的相关数据。如果你要发布一个BT下载,就要首先编译你要发布的文件,生成torrent文件,然后启动下载链种子。torrent文件并不等于要下载的文件,它只是提供一些初始化信息,使你能连接到需要下载的数据,发布 torrent的用户,需要启动第一次下载,并把保存目录指向你要发布的文件,这样BT软件就会扫描以后提供给其他人下载。它也是很重要的,如果没有.torrent文件,你就无法知道下载的位置。

.torrent文件的作用:纪录了发布服务器的位置(announce后跟的就是Tracker的位置),让BT知道是哪个Tracker服务器发布的,然后是一些文件信息:文件名,目录名,长度等等,最后是片段长度,和片段的 Sha1 校验码(BT为了实现续传和文件校验,就把文件分成若干个片段)。

下图是用UltraEdit打看的一个torrent文件,从这个文件中可以看到相关信息。announce 记录了Tracker服务器的位置是http://www.manfen.net:7802/announce,文件名为“绝对经典的黑客入门教程,适合新手”,后面的乱码为片段 Sha1校验码等。

(4)具有完整文件的客户端(seeds)

这个客户端具有完整的下载文件,也就是通常所说的种子(seeds)。种子的在线才能保证其他的客户端不断的进行下载,直到完成整个文件的下载下载过程中,用户通常会发现若是种子(seeds)没有了,也就是种子数为0时,他们的文件传输会停止在50%,60%,甚至达到99%的情况不动了。所以说种子是很重要的,而且它的数目越多,下载的速度也会越快。

(5)具有Web浏览器和BT下载软件的客户端(leechers)

BT客户端一般装有Web浏览器和BT下载的源程序,通过Web浏览器连接到服务器,然后下载得到torrent文件,再通过HTTP协议和Trackers服务器取得联系。Tracker服务器可以提供给BT客户端其他在线的用户,并与这些用户连接起来,从他们那里取得需要下载的文件。客户端还要向Tracker实时的报告下载的状态,其中包括在线的种子数目,下载人数,文件下载量,下载速度,文件上传量,上传速度,出错情况等信息。

1.3 BT会话过程

BT作为一种文件传送协议,并不使用客户/服务器的方式,而是点到点(peer to peer)的传输方式。其中的Web服务器和Tracker与传统意义上的服务器不同,它们不提供要下载的源文件,只提供一些用户需要互连的信息,仅仅起到传话筒的作用。

BT会话过程:当一个新用户(New peer)要通过BT下载文件时,首先向Web服务器提出申请,这个提供BT发布的Web服务器便会向用户提供一个.torrent文件。.torrent文件中记录了Tracker服务器的地址,以及下载文件的相关信息。新用户的BT软件会分析.torrent文件,得到Tracker服务器的地址,并通过HTTP协议与Tracker服务器建立连接。Tracker服务器随时搜索网络上的在线用户,并将他们的IP地址等信息加入到自己的列表(list)中,然后Tracker服务器会从自己的列表中通过随机算法(random)选择多个用户(peers),并把他们的IP地址等信息返回给新用户。同时Tracker服务器会反连新用户的IP,并将新用户的IP,传输port等信息加入到自己的列表中,以便其他用户可以找到自己。这样新用户通过Tracker服务器提供的信息,与其他用户建立起点到点的双向连接方式,同时也建立了属于自己的集群(peer sets),然后通过Peer交换协议开始进行文件传输与交换。

BT软件将文件分成了许多大小不等的片断,也叫文件块(piece),并采用SHA1 hash算法来对文件块进行校验,确保文件传输的正确性。由于用户是直接连接到对方的微机上去下载,一个用户连接了多个用户同时进行下载不同的文件块,而不是到统一的一个服务器去下载,减少了服务器的负荷,因而下载带宽得到充分的保证,速度就会非常快。文件下载过程中,随时允许用户的退出与加入。用户之间的文件传输是在TCP协议基础上进行的。

1.4 BT协议

现在具体描述一下BT会话过程中使用到的协议。BT协议主要包括三方面的内容:torrent文件格式规定、Tracker HTTP协议和Peer交换协议。

1.torrent文件格式规定

torrent文件以“bencoding”方式定义。

Bencoding是一种规定和组织数据的方法。它支持的数据类型有字符串strings, 整数integers, 列表lists, 字典dictionaries。

l 字符串strings

strings以如下方式编码:<string length>:<string data>

注意这里没有开始和结束的分界符。

例子:4:spam

代表字符串“spam”

l 整数integers

integers的编码格式:i<integer>e

例子:i<3>e

代表整数3

l 列表lists

lists的编码格式:l<bencoded type>e

例子:l4:spam4:eggse

代表列表有两项: ["spam", "eggs"]

l 字典dictionary

dictionary的编码格式:d<bencoded string><bencoded element>e

其中d和e分别表示开始和结束符。

例子:d3:cow3:moo4:spam4:eggse

代表字典{ "cow" => "moo", "spam" => "eggs" }

例子:d4:spaml1:a1:bee

代表字典{ "spam" => ["a", "b"] }

torrent文件中的所有数据都是以bencoding的方式定义,它包括以下几个部分:

①info

是描述torrent 文件的字典。它有两种形式:single-file 和multi-file(single-file 表示torrent 文件中没有目录结构只有一个文件,multi-file表示torrent 文件中含有子目录而且有多个文件)

对于single-file 这种形式,它的结构是:

l length

文件的字节长度(整数)。

l md5sum

可选项。用MD5算法加密的文件总数,是32位16进制的字符串。

l name

文件的名称(字符串形式)。

l piece length

片长(整数)。

l pieces

片的内容,包括每个片都有的20个字节长的SHA1 HASH码。

对于multi-file形式,它的结构是:

l files

字典表。它包括以下关键字:length,md5sum,path(路径)。

l name

字典表中最顶端的名称。

l piece length

l pieces

②announce

Tracker的url链接

③announce-list

可选项。用来实现后备Tracker的列表。

④creation date

可选项。Torrent文件的创建时间。

⑤comment

可选项。作者对正文的注释。

⑥created by

可选项。生成torrent文件的软件的名称和版本。

注意:片长取决于文件的大小。片长不能太小,否则torrent文件会很大,一般情况,片长取256K,512K或1M。还可以遵循这样的原则:取得的片长最小长度满足torrent文件不大于50-75k。同一个文件片长是相等的。每一个片都包含一组20个字节长的SHA1 HASH校验码。

2.Tracker HTTP协议

用户与Tracker之间的通信使用的是HTTP协议。用户首先向Tracker发送HTTP GET请求,这个请求包括用户给Tracker的一些信息, Tracker会将其进行统计。Tracker然后给用户发回响应,这个响应包括点的列表信息,通过列表用户可以与其他人建立连接。

⑴GET请求

用户发送到Tracker的GET请求信息包括以下几项:

l info_hash

对torrent文件的info字的20个字节的SHA1 HASH校验码值(bencoding编码)。

l peer_id

20个字节长的字符串,是用户的唯一标识ID。

l port

用户监听的端口号。典型的从6881-6889。

l uploaded

用户上传的总数。

l downloaded

下载的总数。

l left

还需要下载的数量。

l event

下载的状态:开始、停止、完成

l ip

可选的。用户真实的IP地址。

l numwant

可选项。用户可以连接的其他用户总数。数值可以为0,缺省值为50。

⑵Tracker响应

Tracker回复给用户的响应信息包括两种:请求成功和请求失败。

①请求成功时,响应信息包括:

l peers

peers的列表信息:其他下载用户的ID、IP地址,端口号。

注意:用户连接peers数目的缺省值是50,当Tracker列表中peers的数目多于这个值时,Tracker会随机的选择peers给用户。用户如果想要增加连接peers的数目,可修改numwant的值。

l interval

用户发送请求的间隔。

l files

其中的关键字有:种子数,完成下载的用户数,正在下载的用户数等。

例子:

d5:filesd20:....................d8:completei5e10:downloadedi50e10:incompletei10eeee

表示:这....................20个字节的info_hash,有5个种子,10个用户正在下载,50个用户下载完成。

②请求失败时,响应信息包括:

l failure reason

请求失败的原因。

3.Peer交换协议

Peer交换协议主要描述的是peer与peer之间的传输规定。前面提到用户之间交换的是文件块(piece),所以Peer交换协议是针对piece来规定的。

用户必须为每一个连接跟踪状态信息:choked或者interested。

Choked表示不允许下载,Interested表示允许下载。实际的情况有四种:am_choking(我不愿让别人下载),am_interested(我希望下载),peer_choking(用户不愿让下载),peer_interested(用户希望下载)。也可表示为:

am_choking = 1

am_interested = 0

peer_choking = 1

peer_interested = 0

只有当用户希望下载而对方不阻止的时候,才能下载信息;当对方希望下载而用户又不阻止的情况下,才能上传信息。因此确定连接的状态非常重要。

⑴peer交换协议中用户之间的通信过程:

用户与其他人建立连接时,首先发送握手信号(handshake),握手信号中带有info_hash和peer_id信息,对方如果有相同的info_hash和与之匹配的peer_id,就回复用户响应,进行信息(message)交换。否则,对方会断掉连接。

①握手信号(handshake)

握手信号(handshake)最先由希望得到下载文件的用户发送。它的格式为:<pstrlen><pstr><reserved><info_hash><peer_id>

pstrlen:pstr的字符串长。(pstrlen=19)

pstr:协议的字符串标识符。(pstr="BitTorrent protocol")

reserved:保留的8个字节位。

info_hash:20个字节的SHA1 HASH校验码,与Tracker GET请求中的info_hash相同。

peer_id:用户的唯一标识ID,20字节长。

握手信号完成后,用户之间开始交换信息。

②信息(message)

peer交换协议中信息(message)的表示格式是:

<length prefix><message ID><payload>.

length prefix:表示信息的长度。

message ID:一个十进制的数。

payload:信息的承载内容。

信息(message)的种类有:

l keep-alive: <len=0000>

keep-alive是0字节的信息。

l choke: <len=0001><id=0>

l unchoke: <len=0001><id=1>

l interested: <len=0001><id=2>

l not interested: <len=0001><id=3>

l have: <len=0005><id=4><piece index>

通常在bitfield发送给对方用户后,用户还会下载新的文件块。Have信息用来表示用户新下载的piece, piece index表示块的索引号。

l bitfield: <len=0001+X><id=5><bitfield>

在握手队列完成后,其他信息未发送前,会立即发送bitfield信息告诉对方自己所拥有的文件块。如果用户没有pieces,就没有必要发送此信息。Bitfield信息表示用户所有的piece的位图。它是变长的,X的值就是bitfield的长度。关键字bitfield表示拥有的文件块的内容。

l request: <len=0013><id=6><index><begin><length>

对方请求下载的信息,表示希望下载的文件块的内容是什么。Index表示希望下载的文件块的标号,begin表示文件块的起始位置,length表示文件块的长度,通常必须小于2的17次方字节,典型的值是2的15次方。

l piece: <len=0009+X><id=7><index><begin><piece-section>

文件块信息,是用户下载的数据内容了。它是变长的,X是分片的长度。Index表示文件块的标号,begin表示文件块的起始位置,piece-section表示文件块的内容。

l cancel: <len=0013><id=8><index><begin><length>

撤销请求下载的信息。

⑵点的选择算法(peer algorithm):

Bram Cohen在他的BT network中规定,点的选择以随机算法(random)为益,因为随机算法得到的随机图表具有很强的稳健性。

但是现在有观点指出,同时与多个peers通信并不高效。而且如果想要保证BT network的传输速度,选择好的peers很重要,Peers的数量也要有限。具体怎样选择优秀的peers,也将是BT研究的下一个方向。

⑶片的选择算法(piece algorithm):

如何选择一个好的策略来进行piece的下载,是非常重要的,它直接影响到BT network的性能。

BT规定在第一个块的选择上使用随机算法,然后后面的块使用最少优先算法(rarest first)。最少优先算法指的是在所有的点中选择最少出现的块来下载。如此这样使得少的块的数量能够增多,从而在网络中达到一个平衡。另外,网络中可能会出现一些块在下载结束时速度变得很慢的情况,这时候就使用结束算法(endgame)。

(ip.addr eq 192.168.1.115 and ip.addr eq 61.153.19.22) and (tcp.port eq 4844 and tcp.port eq 8080)

0 投票 关键词: bt电影下载 bt下载工具 集结号bt下载 bt下载器 投名状bt下载 bt bt种子下载 成人bt下载 爱城bt下载
所属类别bt软件下载
相关链接原文链接 过滤文章链接 举报删除