BT协议简介

1        简介

BT:BT是一种用来进行文件下载的共享软件(不是“变态”),全名叫"BitTorrent"。

一般来讲,下载是把文件由服务器端传送到客户端,例如FTP,HTTP,PUB等等。

但是这样就出现了一个问题,随着用户的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,而且搞不好还会把服务器挂掉,所以很多的服务器会都有用户人数的限制,下载速度的限制,这样就给用户造成了诸多的不便。但BT就不同,用BT下载反而是用户越多,下载越快,这是为什么呢?因为BT用的是一种传销的方式来达到共享的,工作原理如下图:

BT首先在上传者端把一个文件分成了Z个部分,甲在服务器随机下载了第N各部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的N部分,这样就不但减轻了服务器端得负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。

一些常用的术语解释:

BT= BitTorrent 比特洪流

HTTP= HyperText Transmission Protocol 超文本传输协议

FTP= File Transfer Protocol 文件传送协议

PUB= 可以匿名登陆的FTP站点的统称

torrent文件(扩展名为.torrent),包含了一些 Bit Torrent 下载所必须的信息,有了这个文件,才可以下载最新的文件,.torrent文件通常很小,大约几百K

client (客户端)与 trackers服务器通信,这样其他的客户端才能下载到那些发布的文件. 

Tracker是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。客户端连上tracker服务器,就会获得一个下载人员得名单,根据这个,BT会自动连上别人的机器进行下载

Seed= 种子,在制作完torrent文件后,发布者可以使用 bittorrent下载客户端,进行seed他们将会被加进tracker服务器的列表,其他人就可以从他那里下载文件了

ReSeed= 相对与Seed来说就是二次开放的种子

Hash:是指用一小段数据来标识容量很大的一段数据,以验证她的完整性. 在bt的下载中,hash主要来验证文件的完整性,并且hash还可以作为不同文件判别的标志

SHA1 hashing 一般是BT网站使用的hash方式

P2P= Peer-to-Peer 点对点(传输)

2        BT协议介绍

BitTorrent文件下载包括如下几个实体:

ü        web server

ü        一个静态的metainfo文件

ü        一个BitTorrenttracker

ü        一个初始下载者

ü        用户终端web浏览器

ü        一些终端下载者

作为服务器的主机需要完成以下几个步骤的工作

1.        运行Tracker;

2.        运行WEB服务程序;

3.        生成metainfo (.torrent)文件,包涵已经下载的文件信息和Tracker的URL;

4.        把metainfo (.torrent)文件放到WEB服务器上;

5.        在其它网页上增加metainfo (.torrent)的链接

用户侧需要在网上找到.torrent文件就可以下载了。

下载过程如下:

1.        Tracker从Downloaders接收信息,然后给每个下载者下发随机生成的Peer 列表,这个过程是建立在HTTP or HTTPS上;

2.        Downloaders 周期性的检入到tracker,使Tracker随时了解他们的进程,Downloaders 之间通过P2P的直接连接互相进行上传和下载a。这些连接使用TCP上构建的BitTorrentpeer protocol;

3.        作为提供种子的Origin,只上传不下载

Metainfo 文件和tracker的响应采用一种称为bencoding (pronounced 'bee encoding')的简单、有效、易扩充的报文,Bencoded消息是嵌套的字典和列表(as in Python),可以包含字符、整数。

Metainfo (.torrent)文件具有以下键值:

1、announce :Tracker的URL

2、Info:指向一个词典,词典具有以下键值:

ü        Name:指向一个字符串,是建议的保存文件名;

ü        Piece length:每个分片的bytes数量;

ü        Pieces:一个长度是20的倍数的字符串,将被进一步分割为20字节的字符串,用来建行Hash计算;

ü        其他的键值不细介绍

Tracker 查询是双向的,Tracker通过HTTP GET 参数接收信息,然后返回bencoded 消息

Tracker GET 请求包括一下主要键值:

1.        info_hash:在metainfo文件中的bencoded 的20 byte sha1 hash,该值必须

2.        peer_id:该downloader 作为其ID的20字节长的字符串,每一个downloader在开始下载时会随机生成他自己的id,该值必须

3.        ip:可选参数,该Peer的IP (or dns name),一般用于Origin和Tracker在一台机器上的情况;

4.        Port:该Peer侦听的port number。一般来说downloader会首先侦听port 6881,如果被占用就会尝试6882, 然后6883等,最后是6889

5.        Uploaded:目前已经上载的数量

6.        Downloaded:目前已经下载的数量

7.        Left:该Peer还需要下载的数量

8.        Event:用来指示started、completed、stopped

Tracker的应答是bencoded 词典.假如tracker的应答有一个指示失败的原因,则会转换成可读的字符串用来解释失败的原因,此时其他的键就不需要了。否则, 应答中必须包涵两个键:

Interval,指示downloader 在发出请求之间应该等待的时间

Peers,映射到一系列的与peer相关联的词典,包含:peerid、ip、port


3         BitTorrent'speer protocol

BitTorrent's peerprotocol承载在TCP上,Peer之间的连接是对称的,数据可以双向传输。peer protocol通过metainfo文件中的index对文件的分片进行索引,当一个Peer结束一个分片的下载,验证了Hash匹配后,可以对他的所有Peers声明他已经下载了这个分片。

Peer之间的上载和下载关系有其简单的机制来保证。

在连接的任一端包含两个bit位用来指示连接状态:choked or not、interested ornot。Choking 指示在没有出现unchoking时,没有任何数据可以发送。

数据传输出现在以测试处于Interested状态,另一侧处于unchoking状态。Interest状态应该保持最新的状态,这样,downloaders可以知道出现unchoked哪peers将会开始下载文件。

Choking 算法

BT下载过程中没有一个统一的资源调度,所有的下载者都希望能够尽可能的提高下载速度,对等体之间从任何对端下载,同时礼尚往来的进行上传,就是说,在下载上传形成对子,对于不合作方,则在上传方向进行Choke(阻塞),比如我和你之间形成Pair,但是你只想下载不想上传,则把你Choke。Choking用于阶段性的阻止上载,但是在Choking结束后,上传可以继续进行。

Choking算法不是BT链路协议的技术组成,但是对提高下载效率很有作用,一个好的Choking应该能够利用各种资源,保障参加下载的每个用户获得理想的下载速度,同时杜绝有人只下载不上载。

每一个BT客户一般会不阻塞一定数量的对等体,所以应该决定哪些Peer应该不去阻塞,这个决定是是基于当前的下载速度,为提高效率,BT对20S内的下载速度进行计算,同时为避免频繁的计算在成效率下降,BT每隔10S进行一次计算,10S的时间也足够TCP机制达到最高的下载速度。另外,为了始终选择到能够提供最大下载速度的Peer,BT会使用一种‘optimistic unchoke’机制,每隔30s就循环的地Choke一个Peer,这样有机会去查询是否还有更好的下载对象。

4        BT所带来的影响

1、             带宽利用模式的影响,一般来说上下行带宽是不均衡的,比如ADSL,如果不限速,下行比上行大的多,但是有了BT,情况大变,经常遇到上行大于下行的情况;

2、             由于BT应用中,每隔Downloader会把自己的一些信息发到Tracker上,这样存在用户安全方面的很大隐患,很容易被黑客侵入;

3、             部分采用防火墙的网络用户不能使用BT,端口号被封;

4、             运营商对BT有些恼火,这个软件确实病态,蚕食带宽非常厉害,已经出现了重庆网通把BT封掉惹的网民大骂,然后告上法庭。

你可能感兴趣的:(BT协议简介)