BT种子是“.torrent”文件,装有BitTorrent下载必须的文件信息,该种子文件包含一个称为“追踪器(tracker)”的服务器节点(因特网上有很多追踪器)的地址,该追踪器负责维护参与一个特定文件分发的所有对等方的信息。
一种电脑“.torrent”文件,装有 BT(BitTorrent)下载必须的文件信息,作用相当于 HTTP 下载里的 URL 链接。
一个用户要利用 BitTorrent 协议下载文件之前,先要从某个网站下载一个包含该文件相关信息的“.torrent”文件。
该种子文件包含一个称为“追踪器(tracker)”的服务器节点(因特网上有很多追踪器)的地址,该追踪器负责维护参与一个特定文件分发的所有对等方的信息。
P2P
Peer to Peer 点对点网络,简称 P2P,是指网络用户之间可以直接通信的网络结构。简单的说,P2P 直接将人们联系起来,让人们通过互联网直接交互。使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间环节。P2P 使用户可以直接连接到其他用户的计算机,而不是像过去那样连接到服务器去浏览与下载。P2P 另一个重要特点是改变互联网现在的以大网站为中心的状态,重返“非中心化”,把权力交还给用户。
BitTorrent 协议
BitTorrent(简称 BT,比特洪流)是一个多点下载的的 P2P 文件共享软件。它由程序员 Bram Cohen 使用 Python 语言编写,并且还是代码开源的专利软件,可以自由地下载和传播。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),使多个用户同时下载一个文件的时候,他们之间互相为对方提供自己所拥有的文件部分的下载。这样就把文件下载的带宽开销分摊到每个用户那里,理论上 BT 下载可以支持无限多个用户来下载同一个文件。因此,BT 被人们称之为“群集、散布、集中”的文件传输协议。目前,各种支持 BT 下载的软件层出不穷,BT 技术已经被广泛的应用于文件下载中。
一般来说一个 BT 文件发布系统由以下几个部分组成:
(1)一个普通的 web 服务器;
(2)一个静态元信息文件,即 BT 种子文件( 以.torrent 结尾, 包含了文件的基本属性);
(3)一个追踪器(Tracker);Tracker 实际上是一台服务器,它负责帮助 peer 之间相互建立连接;
(4)BT 客户端(peer,系统的核心部分,用于实现下载策略);
(5)一个被下载文件的拥有者(seed)。
种子是一个形象的比喻。BT 下载的原理从某种意义上说就像春天种下一粒种子,到了秋天就会收获万粒稻菽一样的滚雪球般的越来越大。于是人们就把发出的下载文件叫做种子。而种子文件就是记载下载文件的存放位置、大小、下载服务器的地址、发布者的地址等数据的一个索引文件。这个种子文件并不是你最终要下载的东西(如电影,软件等等),但是有了种子文件,你就能高速下载到你需要的文件。种子文件的扩展名是:*.torrent。
BT 种子可称为比特流种子,主要是因为很多下载软件解析种子后下载速度很快。
BT 首先在上传者端把一个文件分成了 Z 个部分,甲在服务器随机下载了第 N 个部分,乙在服务器随机下载了第 M 个部分,这样甲的 BT 就会根据情况到乙的电脑上去拿乙已经下载好的 M 部分,乙的 BT 就会根据情况去到甲的电脑上去拿甲已经下载好的 N 部分,这样就不但减轻了服务器端的负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几 K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT 的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。
BT 把提供完整文件的档案称为种子(SEED),正在下载的人称为客户(Client),某一个文件有多少种子多少客户是可以看到的,只要有一个种子,就可以放心地下载,一定能抓完。当然,种子越多、客户越多的文件抓起来的速度会越快,下载以后的种子可能会因目标文件不存在而失效。
BT 是通过 BT 种子文件进行下载部署的,BT 种子文件放在一个普通的网络服务器上,它包含了要共享的文件的信息,包括文件名、大小、文件的分块信息和一个指向追踪器的超级链接 Url。被下载文件的拥有者也可以看成这个文件的“原始”下载者。要求文件下载的用户通过 BT 客户端软件分解.torrent 文件,取得文件的信息和指向追踪器服务器的 Url,同 Tracker 进行通讯。
BT 种子文件(.torrent)的具体文件结构如下:
全部内容必须都为 Bencoding 编码类型。整个文件为一个字典结构,包含如下关键字:
announce: tracker 服务器的 URL(字符串);
announce-list(可选):备用 tracker 服务器列表(列表);
creation date(可选):种子创建的时间,Unix 标准时间格式,从 1970 1 月 1 日 00:00:00 到创建时间的秒数(整数);
comment(可选):备注(字符串) created by(可选):创建人或创建程序的信息(字符串);
info:一个字典结构,包含文件的主要信息。分为二种情况,单文件结构或多文件结构。
单文件 info 结构如下:
length:文件长度,单位字节(整数);
md5sum(可选):长 32 个字符的文件的 MD5 校验和,BT 不使用这个值,只是为了兼容一些程序所保留!(字符串);
name:文件名(字符串);
piece length:每个块的大小,单位字节(整数), 块长一般来说是 2 的权值;
pieces:每个块的 20 个字节的 SHA1 Hash 的值(二进制格式)。
多文件 info 结构如下:
files:一个字典结构;
length:文件长度,单位字节(整数);
md5sum(可选):与单文件结构中相同;
path:文件的路径和名字,是一个列表结构,如testtest。txt 列表为 l4:test8test。txte;
name:最上层的目录名字(字符串);
piece length:与单文件结构中相同;
pieces:与单文件结构中相同。
下载资源
首先,客户端用户访问 BT 发布站点,通过站点上的信息找到想要的资源文件。其中 Bt 发布站点上显示共享文件的信息和每个文件的共享用户信息,并为每个文件提供一个种子文件的下载链接。
客户端下载了该种子后,与 BT 种子文件中的跟踪服务器(Tracker)通讯。跟踪服务器首先记录该客户端的用户信息,同时将其它共享用户的信息提供给该客户端,该客户端根据这些信息与其他共享用户的客户端软件发生通讯,从其中找出下载速率最快的 40~50 个客户端进行下载;其中每个客户端都按照种子文件中的规定对文件进行分块。文件的上传和下载都是按块进行的。
当客户端软件完成一个文件分块的下载后,就可以进行该块的上传。
随着参与下载的用户数量的增加,下载速度加速。
完成整个共享文件的下载后客户端就只上传,不下载,成为共享文件的种子;在一些人气很旺的下载中,原始下载者经常可以在较短的时间内退出上传,由其它已经下载到整个文件的下载者继续提供上传。
部分完成的用户开始退出,当某个种子的所有用户均结束下载或上传后,该种子可用生命期结束。
Tracker 即时接收所有 peer 信息,并且给每个 peer 一份随机的 peers 列表。Tracker 通过 HTTP GET 参数获得信息,然后返回一个 Bencoding 编码后的信息。peer 每隔一段时间连一次 Tracker,告知自己的进度,并和那些已经直接连接上的 peer 进行数据的上传下载。这些连接遵循 BitTorrent peer 协议,通过 TCP 协议进行通信。seed 和 tracker,peers 之间通讯连接的步骤如右图。