Bittorrent 协议及工作原理

在 2000 年左右开始接触互联网的同学都应该记得用 BT 种子下载电影和小电影那段的时光。之前只是大概知道 BT 的工作原理,但并没有仔细研究过,所以一直很好奇。 随便在网上搜索下,可以知道 BT 大概是这样工作的: BitTorrent 协议把提供下载的文件虚拟分成大小相等的块,块大小必须为 2k 的整数次方,并把每个块的索引信息和 Hash 验证码 写入 .torrent 文件(即种子文件,也简称为“种子”)中,作为被下载文件的“索引”。 下载者要下载文件内容,需要先得到相应的 .torrent 文件,然后使用 BT 客户端软件进行下载。 下载时,BT 客户端首先解析 .torrent 文件得到 Tracker 地址,然后连接 Tracker 服务器。Tracker 服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的 IP。或者,BT客户端也可解析 .torrent 文件得到 nodes 路由表,然后连接路由表中的有效节点,由网络节点提供下载者其他下载者的 IP。 torrent 文件包含了什么 根据 bittorrent.org官方文档,种子文件也被称为metainfo files, 主要包含以下信息: announce, The URL of the tracker. info, This maps to a dictionary. 所以种子文件就是告诉你,去 announce 这个地址找文件,具体文件信息包含在 info 里面。 Info 结构体有以下基本内容: name key maps to a UTF-8 encoded string. piece length maps to the number of bytes in each piece the file is split into. pieces maps to a string whose length is a multiple of 20. 其实就是文件被切成很多片,这个变量保存了所有片的 SHA1 值。 length - The length of the file, in bytes. 以上4个是最基本的结构体信息,只支持下载单个文件,如果是表示多个文件或文件夹,还需要增加一些额外信息,具体见官方文档。 ...

2020-10-24 · Me