Bit torrent 原理记录

May 18, 2018

torrent 文件结构

.torrent 文件主要包括了这些信息:

A) 元文件中数据的 SHA1 值。一般会把文件分成多块,分别计算。这些值占了 torrent 文件的绝大部分空间。它们主要是用来保证下载数据的安全性,在下载的过程中对数据进行校验。防止恶意数据攻击。

B) 一个或多个Tracker 地址。类似 http://www.a.com:8080/announce,torrent 下载工具通过这些地址的问询服务器查询下载节点信息。

C) 文件和文件夹内每个文件的名字。

D) 其它一些辅助信息,比如 P2SP 的辅助下载、制作软件的名字、备注等。

E) 根据 A) 生成的 SHA1 信息,以及 torrent 里面的文件名等关键信息,进行一次 Hash,生成一个新的 SHA1 作为 torrent 的 Hash 值。

BT 下载原理

A) 下载软件拿到 .torrent 文件后,解码读取信息。

B) 读取文件中的 Tracker 地址,和问询服务器通讯,发送查询请求。

C) 问询服务器记录客户端 IP, 并返回结果,告诉客户端哪些 IP 同样在下载这个文件。一般默认返回 200 个。

D) 客户端拿到 IP 后,分别和他么进行连接。进行数据交换。

E) 如果 torrent 中有 P2SP 的 Http 地址辅助下载,也可以同时从这个地址下载数据。通过 Http 协议里的 Range 标记,指定只下载某一部分数据。

F) 下载过程中,协议要求每 5 分钟跟 问询服务器通讯一次。避免服务器把自己从节点列表中删除。

G) BT 有个 DHT 的概念,中文叫分布式哈希表。如果 Tracker 全都连不上,也可以通过 DHT 在网络中慢慢寻找目标邻居节点。不过相比直接在 Tracker 中查询,速度相差甚远。

/* 看板娘 */