【原理篇】qBittorrent下载+转种Transmission快校版+IYUU Plus辅种教程
一、前言
之前写了篇教程,PT工具之Docker全家桶+HTTPS详细配置教程,主要讲述了使用Docker部署常用工具及反向代理上https,之前预告过还写一篇辅种教程合集的,故有了此篇教程,但是发现内容实在太多,这是第一篇原理篇,还有一份操作篇另起一文。
二、服务种类
之前一直使用qBittorrent下载、保种,因为数量不多,除了内存占用较大没发现什么问题,只是后来使用IYUU Plus辅种后,大文件重新校验实在等待太漫长,所以换成了Transmission快校版,也就是快速校验版本,和跳过检查相比,原理就是抽检,所以速度快了不少。
本次教程里面主要包含下面几个服务:
- qBittorrent
- Transmission快校版
- IYUU Plus
三、原理解释
刚把IYUU Plus的源码clone下来看了一下,下面是我理解的IYUU Plus转种+辅种流程。
因为我不是写Web的,也不会PHP语言,所以理解的不一定对,如果理解错了,欢迎指正。
1. 辅种
首先,我们用qb去A站点去下载我们想看的电影,A站点会生成一个有我们passkey的种子文件,我们的qb就可以使用这个种子去下载电影了,但是去哪里下载呢,这就是tracker的作用,A站的tracker实时的告诉我们当前有哪些人在下这个文件和下载了多少,这个时候qb就可以用这些信息直接去连接正在下载的这些人的电脑,所以这是为什么需要公网IP的原因,因为你有公网IP这样其他想下载相同文件的人才能更快地连上你。
当我们下载完成后,只有A站点知道你下载了这个文件,而且正在做种,也就是将这个文件提供上传给其他正在下载相同文件的用户,但是实际上B站点和C站点,他们也有一个和你这个一模一样的资源,你也想为B站点和C站点的用户提供上传,并且让B站点和C站点知道(因为这样才能计算魔力是不是),这个时候我们用A站点下载的文件,也为B站点和C站的用户做种,这个过程就叫辅种。
但是怎么让B站点C站点知道你有这个文件呢,是不是只要我们去B站点和C站点下载相同文件的种子,然后跳过下载这个过程(因为这个文件你已经从A站点下载完成了),直接告诉B站点和C站点的服务器,这个文件我已经下完啦,现在可以做种了!
这个时候B站点和C站点下载这个文件的用户是不是也可以连上你,然后从你这边下载文件了。
因上面有告诉B站点和C站点你已经有这个文件了的过程了,所以这时候B站点和C站点tracker和A站点一样,也会告诉你现在有哪些人在下这个文件和下载了多少,也可以为你计算上传量和魔力了是不是。
从服务器的角度来看,B站点和C站点看你和A站点一模一样,都是你有这么一个文件,你可以为其他人做种,唯一的区别的就是辅种的站点省去了下载这个过程,所以,B站点和C站点不会计算你的下载量。
2. 检验
看完上面,我们是不是有一个疑问,怎么保证我从A站点和B站点和C站点的种子下载的是同一个文件呢,所以当我们下载完上B站点和C站的种子时,你想跳过下载这个过程,证明你已经有这个文件的过程,就是校验过程。
种子文件会记录你这个文件有多少块,已经每一块对应的hash,检验文件就是把你本地的文件读一遍,每一块都算一遍,看看是否与种子记录的信息一致。
一个种子里包含的信息示列:
但是当你文件很大的时候,你要辅种的站很多的时候,是不是每个站都要校验一遍,非常耗时?所以这也是我选择Transmission快校版的原因,就是告诉tr,差不检查检查就行了,开头,中间,结尾(简单化描述)都抽检一下,都对的话,我们就认为文件一致,这样的话是不是会快很多。
3. 转种
其实上面的辅种操作,我们完全可以在一个下载器里面完成,比如qb下载,qb辅种,但是正因为我觉得太慢,换成了tr快校版。
将qb里面的的种子,转移到tr里面,这个过程就叫做转种(当然,不局限这2个)。
四、IYUU
1.辅种
那辅种的难点在哪里呢,是不是就是我怎么知道A站点的种子对应着B站点和C站点的哪一个种子呢?所以IYUU解决的第一个痛点就是他的服务器数据库记录着相同文件,在不同的站点分别对应着哪一个种子,运行辅种任务的时候,将种子的信息发给服务器,服务器返回给我们其他站的种子信息,然后再将其他站的种子直接发送给我们用来保种的下载器不就行了。
这里多说两句,实际上我们查询时,我们的IYUU客户端IYUU服务端发起查询请求,请求参数包含我们微信扫码生成的Token
和种子文件的info_hash
:
IYUU服务器返回查询结果,查询成功的json文件示列如下:
1 |
|
返回信息中的sid
对应着是哪一个站点,torrent_id
对应着这个种子在这个站点的id
,info_hash
你可以理解为这个种子的身份号。
我们本地的IYUU客户端,就根据返回的信息,以及我们设置的是否需要https
,我们设置的passkey
,id
就是返回信息中的torrent_id
,拼接我们的种子下载信息,最终拼接如下:
1 |
|
普通站点使用这个连接就可以直接下载种子了,所以我们直接将这个链接发给tr,tr使用链接添加种子。
但是有的站点毕竟严格,这样是无法直接下载的,必须要用验证cookie,所以这是有的站点需要配置cookie的原因,而这个时候我们模拟浏览器将这个种子文件给下载下下来,将这个种子文件直接推给tr就行了,这也是上图中B站点和C站点的区别。
第二个痛点就是批量操作,就算你知道其他站的种子是哪个,当你的种子和站点数量上去的时候,是不是就要操作m*n次?IYUU就是帮我们把下载种子,推送这个操作给自动完成了。
2. 转种
当我们使用qb下载的时候,是不是qb管理着这个种子文件着这个种子对应的电影的文件夹,但是我们想把这个种子让tr来做种的时候,tr是不是也需要知道这个信息。
IYUU做的就算要把这个种子和个种子对应的电影的文件夹传给tr,然后让tr去连接站点的tracker,告诉服务器,这个种子和他对应的文件我有呢,可以连接我进行下载!这个时候,我们的转种操作是不是就已经完成了,种子和他所存放的这个文件就是接力棒,qb将这个接力棒递给了tr。
这里多说一句,是不是选项里面有一个是否删除原种子,因为和接力的区别是这根接力棒是可以复制的,等于不删除的话,qb和tr手里是不是都有一根棒子,这个时候任一客户端都是可以做种的,但因为干的是同一件事,我们的电脑资源是有限的,这个事情让一个人干就行了,所以转种成功后,可以在qb里删除原种子。
但是不建议自动删除,因为万一你设置有误,tr没有成功,qb里的种子也删除了,是不是所有的种子都没有了。而且切记不要勾上删除硬盘上的文件,因为我们只是想让qb不要管理这些种子了,但是这些种子对应的文件还是需要的,因为一旦删除文件,tr那边就会发现文件没有了,然后报错。