【原理篇】qBittorrent下载+转种Transmission快校版+IYUU Plus辅种教程

一、前言

之前写了篇教程,PT工具之Docker全家桶+HTTPS详细配置教程,主要讲述了使用Docker部署常用工具及反向代理上https,之前预告过还写一篇辅种教程合集的,故有了此篇教程,但是发现内容实在太多,这是第一篇原理篇,还有一份操作篇另起一文。

二、服务种类

之前一直使用qBittorrent下载、保种,因为数量不多,除了内存占用较大没发现什么问题,只是后来使用IYUU Plus辅种后,大文件重新校验实在等待太漫长,所以换成了Transmission快校版,也就是快速校验版本,和跳过检查相比,原理就是抽检,所以速度快了不少。

本次教程里面主要包含下面几个服务:

  • qBittorrent
  • Transmission快校版
  • IYUU Plus

三、原理解释

刚把IYUU Plus的源码clone下来看了一下,下面是我理解的IYUU Plus转种+辅种流程。

因为我不是写Web的,也不会PHP语言,所以理解的不一定对,如果理解错了,欢迎指正。

reseed

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,检验文件就是把你本地的文件读一遍,每一块都算一遍,看看是否与种子记录的信息一致。

一个种子里包含的信息示列:

seed_info

但是当你文件很大的时候,你要辅种的站很多的时候,是不是每个站都要校验一遍,非常耗时?所以这也是我选择Transmission快校版的原因,就是告诉tr,差不检查检查就行了,开头,中间,结尾(简单化描述)都抽检一下,都对的话,我们就认为文件一致,这样的话是不是会快很多。

3. 转种

其实上面的辅种操作,我们完全可以在一个下载器里面完成,比如qb下载,qb辅种,但是正因为我觉得太慢,换成了tr快校版。

将qb里面的的种子,转移到tr里面,这个过程就叫做转种(当然,不局限这2个)。

四、IYUU

1.辅种

那辅种的难点在哪里呢,是不是就是我怎么知道A站点的种子对应着B站点和C站点的哪一个种子呢?所以IYUU解决的第一个痛点就是他的服务器数据库记录着相同文件,在不同的站点分别对应着哪一个种子,运行辅种任务的时候,将种子的信息发给服务器,服务器返回给我们其他站的种子信息,然后再将其他站的种子直接发送给我们用来保种的下载器不就行了。

这里多说两句,实际上我们查询时,我们的IYUU客户端IYUU服务端发起查询请求,请求参数包含我们微信扫码生成的Token和种子文件的info_hash:

iyuu_get

IYUU服务器返回查询结果,查询成功的json文件示列如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"ret": 200,
"data": [
{
"sid": 3,
"torrent_id": 377467,
"info_hash": "a444850638e7a6f6220e2efdde94099c53358159"
},
{
"sid": 7,
"torrent_id": 35538,
"info_hash": "cf7d88fd656d10fe5130d13567aec27068b96676"
}
],
"msg": "",
"version": "1.0.0"
}

返回信息中的sid对应着是哪一个站点,torrent_id对应着这个种子在这个站点的idinfo_hash你可以理解为这个种子的身份号。

我们本地的IYUU客户端,就根据返回的信息,以及我们设置的是否需要https,我们设置的passkeyid就是返回信息中的torrent_id,拼接我们的种子下载信息,最终拼接如下:

1
https://xxxxx.org/download.php?https=1&id=377467&passkey=your_passkey

普通站点使用这个连接就可以直接下载种子了,所以我们直接将这个链接发给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那边就会发现文件没有了,然后报错。


【原理篇】qBittorrent下载+转种Transmission快校版+IYUU Plus辅种教程
https://www.shangyexin.com/2021/12/20/iyuu-plus-theory/
作者
Yasin
发布于
2021年12月20日
许可协议