BitTorrent / Magnet URI scheme 入门

结月lalalll

阅读本文章前,请确保您具备:
1.基本的阅读及理解能力
2.基本的搜索引擎使用意识
3.基本的有关互联网连接原理的知识
4.基本的计算机相关的知识
5.一套完备的联网PC设备

基本原理

直链

所谓直链,就是我们可以通过链接直接从服务器拿到文件,是用户最基本最常见的下载方式之一
https://releases.ubuntu.com/22.04/ubuntu-22.04.2-desktop-amd64.iso
这就是一串常见的下载直链,访问后可以直接得到一个 ubuntu映像 文件
通过观察,我们可以看到这串链接的开头为https,它使用HTTPS协议传输文件数据,HTTPS协议是一种point-to-point协议
此时,我们获取数据的来源是中心服务器,我们通过链接向服务器发送请求,服务器收到请求后向我们发送数据
但是,这种下载方式存在一定风险,一旦服务器被查封,文件就会消失
关于这种下载方式有很多知识点,但本文中心不在此,故略过

BitTorrent

BitTorrent协议(简称BT,比特协议),是peer-to-peer协议(即P2P协议)中的一种
这时,文件不再存放在单一的服务器,而是"活"在每一位用户的硬盘中
HTTPS协议中,当我们下载完文件后就可以拍屁股走人了,身后的人需要这份文件只需要再次向中心服务器发送请求…但在BitTorrent协议中,每位用户(曾经下载过这份文件的人)都可以成为中心服务器(这真的还是"中心"服务器么=-=),并向以后需要资源的人发送文件
所以,我们不需要担心中心服务器是否会和我们说拜拜,只要还有人的电脑中有这份文件并处于上传状态,我们就可以通过种子文件来得到它

到这里,我们已经知道,只要得到文件的直链,并且我们能平安访问到中心服务器,就可以从中心服务器那里要到文件,但在BT中…
我们怎么知道谁的电脑中有我们想要的文件呢?
这时,你的手边出现了一个神奇的文件,它的后缀名是.torrent,啊!这就是我们需要的东西
这个神奇的文件有个学名,叫种子文件,当你在网上冲浪时看到有人求种子,那么指的就是这个.torrent结尾的文件
这个文件本质是一个文本文件,它包含Tracker信息以及文件信息两部分
Tracker信息为你指明了你应该连接到哪个Tracker服务器,而Tracker服务器则为你指明了应该找谁获得这个文件文件块
欸,你可能会问"什么是文件块呢?"
哈哈,在BitTorrent协议中我们可以连接多个用户(即中心服务器)来获取文件,例如此时我需要下载一个数据大小"10"的文件,如果我们用直链直接从中心服务器获取,可能会受限于中心服务器的数据上传速度,假设中心服务器每秒可以传输1大小的数据(即1大小/s),我们需要10s才能完整的得到这份文件(前提是我们的数据下载速度大一点,你1s只能下载0.0001大小的数据那你操心个屁人家上传多块),但用BitTorrent协议的话,我们可以把文件分成好多份,连接多位用户(即中心服务器),把每份文件分散到每个人身上,此时,就算就算一名用户1s只能上传0.1大小的数据,你连接100位用户,同时下载就可以拥有10大小/s的数据下载速度,1s就可以下载完毕,每份文件则称为文件块
但是!出现了一个问题,我把文件分成好多份分散下去下载,万一同时下载到两份重复文件块怎么办?
这时Tracker服务器文件信息就起到作用了
在下载/上传过程中,你需要时刻连接这个Tracker服务器,来明白自己需要从谁/给谁那里下载/上传什么文件块,你也需要读取种子文件中的文件信息来知道一共有多少文件块,每个文件的哈希值是多少,由此确认我到底下载到了正确文件块没有
停停停停,你说的我都明白,但是哈希值是什么啊?
此处的哈希值通过一系列神奇的算法计算文件块得来,可以看作是这个文件块身份证/指纹信息(关于说法你开心就好啦=-=),一般情况下,每个文件块都有它唯一的哈希值,注意,是"一般情况下"…此处知识点非常非常多且晦涩,因为与中心无关,所以我们略过

到这里为止,我们就基本上明白了BitTorrent协议是什么以及它的工作原理,但是,你发现什么问题了么
我们进行BT下载时,首先需要得到.torrent后缀的种子文件,但这个文件我们应该怎么获取呢…再用一个种子文件来下载?这个解决方法可不太好…
我们需要使用直链来下载种子文件,另外,我们与Tracker服务器的连接也是通过point-to-point协议(例如HTTPS协议)来传递的,所以,我们的文件依旧存在风险,只要Tracker服务器或提供种子文件下载的中心服务器没了,我们也就找不到谁有这个文件了,就算它还在其他用户的硬盘里躺着,我们也没办法碰到他们
因此, Magnet URI scheme 横空出世!

Magnet URI scheme

Magnet URI scheme(即磁力链接),名字很形象,它是"有磁力的"
我们已经意识到,BitTorrent协议尽管比直链安全太多了,但它还有一定风险
风险主要集中在种子文件的获取以及与Tracker服务器的连接上
磁力链接改进了BitTorrent协议
(注意,由于Magnet URI scheme基本原理与BitTorrent协议相差无几,所以后文所述的BitTorrent协议大多一起指代这二者)
magnet:?xt=urn:btih:oiwxm5uql3kyidxd5oljtkbrgcbmbefd&dn=tixati_%E4%B8%AD%E6%96%87_%E6%B1%89%E5%8C%96_language_chinese.txt&xl=156055&fc=1
这是一串完整的磁力链接,不要好奇它是什么,后文我们会再见到它…
观察这串链接,它可以被拆分为magnet:? xt= dn= xl= fc=
其中,magnet:?表明了这是个磁力链接而不是个直链.xt=这部分则是最重要的,仔细观察,你会发现它后面还跟着两个部分,urn:学名:统一资源名称,咳…这里不需要刨根问底,它类似于一个资源的身份证,欸,是不是想到了哈希值,哈哈,我们接着来看,btih:它是BitTorrent使用的散列函数算法,它是干什么的?咳咳,它是计算哈希值的一种算法.终于,我们见到了我们的老朋友:哈希值!它是你要下载的文件的哈希值,没错…又是它,正是靠它,我们才能知道我们要找的文件到底是什么,可见它是多么的重要.接着看dn=后表示这个文件的实际名称是什么(你可以把它理解为人看的,而哈希值是程序看的…当然,你要是通过看哈希值识别文件那我也没话说…).xl=表示文件的总字节数,也就是这个文件多大.fc=我也不知道是什么=-=…
顺带着说一下,事实上,你仅仅只需要知道文件的哈希值就可以找到这个文件了

至此,我们已经知道了磁力链接的基本格式,我们只要获得了这串文本,就能够知道所需要的文件信息了,这比获得一个种子文件方便多了
那么磁力链接是如何解决Tracker服务器的问题呢?
这里出现了个厉害的东西:DHT(分布式哈希表)
可以理解为它将每个用户都变成了小型Tracker服务器,我们只要连接到了一个用户,就可以借此找到其他的用户,然后接着找下去…最终找到拥有我想要的文件的用户,就仿佛磁铁
另外,磁力链接通过PEX(节点交换)来更加高效的交换相互所拥有的文件块,以及其他拥有我需要的文件块用户,极大摆脱了对于Tracker服务器的依赖

现在,我们明白了磁力链接是怎样摆脱对于种子文件的依赖:换用文本类型的磁力链接,怎样替代Tracker服务器:使用DHT以及PEX技术

至此,我们可以愉快的开始下载之旅了

下载优化

工欲善其事,必先利其器

看到这里,你是不是已经感到头疼了,恭喜你坚持到这里,以下的内容可以稍微轻松一下了
现在,我们已经知道了BitTorrent协议的基本原理,并且得到了下载工具,但是并没有速度,怎么办?

Tracker服务器

没错,虽然磁力链接减少了甚至取消了对于Tracker服务器的依赖,但是…有的话总比没有好吧XD
下面推荐几个我常用的Tracker服务器列表
至于如何给软件添加Tracker服务器列表,网上教程泛滥,此处不多赘述

TrackersListCollection

https://trackerslist.com/#/zh
本列表由西柚秀XIU2大佬整合
建议下载时优先使用本列表

Stable Trackers

https://newtrackon.com/list
国外知名的稳定Tracker服务器列表,由于某些众所周知的问题,可能国内访问效果不佳,但列表中的Tracker服务器大多数是可用的

Ngosang Tracker

https://github.com/ngosang/trackerslist
机器人维护的Tracker服务器列表
也是我用过的最爽的列表,下载冷门资源也总会找到几个有速度的用户

animeTrackerList

https://github.com/DeSireFire/animeTrackerList
动漫资源有效Tracker列表,动漫资源磁链死链解决和加速方案
二次元狂喜
由于我使用时会出现奇怪的问题:只能连接到列表的第一条Tracker服务器,故不予置评

路由器配置

获取公网ipv4ipv6地址以及开启路由器端口映射UPnP / NAT-PMP 功能
因本人懒,所以没折腾这方面的内容,感兴趣的请自行搜索

基本素质/和谐社区

保持做种

前文我们说过,BT下载的本质是把每个有文件的人都当成中心服务器来提供上传
我们也不例外
当我们通过BT下载工具下载完文件后,一般正常的工具都会自动开启做种,开始为后来的人服务
正是一位又一位无私的上传者,我们才能组成开放的资源分享网络
所以,在你使用下载完文件,尽量不要移动/删除下载的原文件,保持下载工具开启的状态,工具会自动把你的文件传递给以后需要的人

抵制迅雷

此处我不想写了,容易犯恶心…直接引用西柚秀大佬的话吧…
原文链接: https://zhuanlan.zhihu.com/p/87193566

可能一些人发现了同一个资源,其他 BT 软件都没下载速度,反而迅雷有速度,这是为什么呢?难道迅雷有什么“黑科技”?让我给大家介绍一下迅雷“黑科技”吧:

迅雷,别名吸血雷,因为迅雷在享受其他 BT 软件用户上传提供的速度时,自身却只把上传的速度提供给其他迅雷用户,而不会提供给其他 BT 软件用户。

通俗的说就是:迅雷用户之间是一个圈子,会把圈子之外其他 BT 软件用户上传提供的速度的吸进自己的圈子,导致迅雷客户端的圈子越来越壮大,而其他 BT 软件共同组成的圈子却越来越弱小,对于其他客户端来说,迅雷只进不出,故称吸血雷。

为此,目前主流的 BT 软件都多少支持了反吸血功能(断开只下载不上传的用户),一定程度上抑制了迅雷吸血行为(当然也可以直接一刀切屏蔽迅雷)。不是不报,时候未到,现在迅雷用户大量流失,纵使有多方面原因,但和它流氓的行径也脱不了干系~

简单来讲就是迅雷就是个貔貅,只进不出,它吃了其他用户的文件却不把自己的文件贡献给它人
另外,迅雷限制用户本来就应该拥有的速度,逼迫你开会员
我只能说,赶紧倒闭

在我们加入BT下载的同时,请严格践行以上有素质的行为,不做没素质的孤儿

结语

到这里,我们就基本上成为能够熟练使用BT的老司机了,如果你坚持看到了这里,感谢你的耐心
本来还想写软件的具体使用方法,但实在懒得截图片了…所以这里揭晓谜底:那串磁力链接Tixati(一个免费BT下载软件)的中文汉化文本,哈哈,是不是都忘了还有这么一个悬念
好了,就到这里,再次感谢你能看完,如果有问题,请给我发邮件(lalalll@zohomail.cn )
注意:发邮件问问题前请看完 提问的智慧https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way

  • 本文标题:BitTorrent / Magnet URI scheme 入门
  • 本文作者:结月lalalll
  • 创建时间:2023-05-01 23:52:31
  • 本文链接:https://lalalll-lalalll.github.io/theme/bt/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!