BT背后的技术

历史



早期的BT下载主要是通过开放的网站,进行种子资源的公布。在利用tracker中心服务器完成下载peer的交换,最终实现从下载用户的电脑中获取资源。

在这个过程中,存在两个风险比较大的点:

第一个公布种子的网站,种子文件包含了所需要下载资源的全部信息,很容易被检测出种子内容是否合规,从而关闭种子公布资源站点。

第二个提供tracker的中心服务节点,这个也是很容易从种子中查询到的,很容易被封杀。导致P2P自由的分享环境被打破。

在这个基础上,就出现替代tracker服务器和种子一些新方法,我们简单的介绍下比较主流的去中心化tracker和种子分享网站的P2P分享网络。


torrent and magnet


首先从第一步获取种子开始,我们一般想找一部电影/游戏或者一些其他资源,一般都是网盘搜索,或者去BT站,PT去找种子,或者论坛上去找链接。先介绍下种子和磁链的关系,种子一般以.torrent结尾的索引文件。

d8:announce62:https://xxxxx.im.xxx/88696dc48cbdad7518e4b111b83ee77c7:comment14:TorrenTGui.ORG10:created by13:uTorrent/221013:creation datei1523099215e8:encoding5:UTF-84:infod6:lengthi23715250176e4:name14:SKY HUNTER.iso12:piece lengthi4194304e6:pieces113100:xxx

这种被序列化的信息就是种子了,里面使用的是一种明文的序列化方法。bencode 第二节简单介绍。

反序列化里面主要包含以下信息:

多文件Torrent的结构的树形图为

Multi-file Torrent
 announce
 announce-list
 comment
 comment.utf-8
 creation date
 encoding
 info
   files
     length
     path
     path.utf-8
   name
   name.utf-8
   piece length
   pieces
   publisher
   publisher-url
   publisher-url.utf-8
   publisher.utf-8
 nodes

单文件Torrent的结构的树形图为

Single-File Torrent
 announce
 announce-list
 comment
 comment.utf-8
 creation date
 encoding
 info
   length
   name
   name.utf-8
   piece length
   pieces
   publisher
   publisher-url
   publisher-url.utf-8
   publisher.utf-8
 nodes

为了解决第一种子文件包含的内容信息太多,容易被检测中其中的关键信息。第二种子文件过大,不太容易扩散分享。出现了一种替代种子文件的信息字符串就是磁力链接。形如:magnet:?xt=urn:btih:b7d9b9d9df8d7678af1f2542677e195fdbdb1674

其中主要字段是 btih,其实这里的值就是bt种子文件中info字段sha1值的base32编码后的字符串。


bencode



种子文件的bencode 包含四种类型的编码:

string类型的编码格式为[length]:[string]。以字符串的长度开头,加一个冒号,并以字符串内容结束。

示例:"abc" => 3:abc

int类型的编码格式为i[int]e。以i开头,加上数字,以e结尾。

示例:123 => i123e