前言
世界上根本没有 LSP,又或者,人人都是 LSP。
说起种子,你会想到什么?
是农民伯伯春天播下,秋天就会收获果实的东西?还是以.torrent
结尾的文件?
如果是前者,那你一定是一个热爱大自然的人。如果是后者,你一定是一个“热爱生活”的人。
不过今天我们要聊的不是大自然的那个种子,而是 LSP 们喜闻乐见的这个种子。
P2P 与 BitTorrent 协议
所谓“种子”(或者叫种子文件),其实就是以.torrent
结尾的文件,而他之所以叫种子,是因为这个文件里包含了你需要获取的文件的相关信息。就和自然界中的种子一样,包含了日后形成一颗果实所需要的最基本的成分。
而这个.torrent
后缀其实指的是支持 BitTorrent 协议的文件。BitTorrent 简称 BT,俗称比特流。看到这,想必你已经有些印象了吧,我们常说的 BT 种子和种子其实是一种东西。
那么这个 BitTorrent 协议是什么?
不急,在介绍 BitTorrent 之前,先让我们梦回高中课堂,回想一下以前抄作业的时光。
抄作业的例子
如上图所示,学霸在写完作业后,要把作业借给同学抄,但是一次只能借给一个人,且其他人只能抄学霸的作业,那么如果想要让学霸在内的 7 个人都写完作业,取决与学霸写作业的速度和每个同学抄作业的速度。我们知道,这样的效率一定是很低下的,所以聪明的学霸想出了第二个办法。如下图所示:
学霸的办法就是,把作业分成几块,让每个人抄不同的部分,比如 A 抄单选题、B 抄多选题、C 抄填空题……然后每个人再把自己抄到的作业和其他人抄到的作业互换,这样,所有人都可以在规定时间内把所有的作业都抄完了,以此实现效率的提升。
P2P 与文件下载
之所以要先提抄作业这个事情,是因为这两种方案和下载文件颇为相似。
传统的文件下载就和上面的第一种方案类似,如上图所示,客户端向服务器发送“我要下文件”,服务器便将文件再发给客户端,这是一个很常见的场景,在这个场景中,客户端下载文件的速率取决于两个因素:服务器的上传带宽和客户端的下载带宽。带宽是指在单位时间(一般指的是 1 秒钟)内能传输的数据量。
而一旦需要下载的文件数量是多个时,下载的总时间便受到下载数量 N 的限制,即越多的人下载某一个文件时,理论上所需要的下载时间就越长,如下图所示:
这种用户体验显然是很糟糕的,那么有没有什么好的方法解决这个问题呢?这就要请出我们本期的“天降猛男”——P2P(peer-to-peer)。
这里的 P2P,和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer),当然也不是我们前几年经常听见的暴雷的 P2P(互联网金融点对点借贷平台)。
本文所说的 P2P 是一种架构模式,就和我们之前说过的 C/S(客户端/服务端)架构类似。
在 P2P 模式中,服务和资源分布化,资源不集中存储在某些设备上,而是分散存储在运行 P2P 程序的设备上,每一个对等方都可以为其他对等方提供服务。
还是拿抄作业这个例子来说,学霸的第二个方案就是一个很典型的 P2P 模式。他将自己的作业分成填空、选择、单选、多选等部分,然后分别送给 6 个人,这样当每个人都有自己的一部分副本后,就可以不用再找学霸本人要作业了,直接找其他拥有和自己副本不同的人索取然后互换资源即可。
在互联网,P2P 模式也有一个非常重要的,乃至影响了所有 LSP 的应用,即 BitTorrent,也就是本文开篇所说的种子。
BitTorrent 协议
维基百科对 BitTorrent 的解释是:
BitTorrent 协议(简称 BT,俗称比特洪流、BT 下载)是用在对等网络中文件分享的网络协议程序。和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer)。
BitTorrent 协议是架构于 TCP/IP 协议之上的一个 P2P文件传输通信协议,处于 TCP/IP 结构的应用层。
简而言之就是 BitTorrent 是一个用来传输文件的协议,和第二个抄作业案例的特性类似,该协议的特点是,用户越多,即下载同一文件的人越多,下载该文件的速度越快。且下载后,继续维持上传的状态,就可以“分享”,成为其用户端节点下载的种子文件(.torrent),同时上传及下载。
在大多数人感觉中 BitTorrent 与 P2P 成了对等的一组概念,而它也的确将 P2P 技术发展到了近乎完美的地步。
原理
介绍完 BitTorrent 协议后,我们来说说他的原理吧。
其实和学霸将作业分成选择题、填空题等给其他人抄的道理一样,BitTorrent 协议也是将需要下载的文件虚拟分成大小相等的块,这些块的大小被要求成 2k 的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和 Hash 验证码写入 .torrent 文件(即种子文件,也简称为“种子”)中,作为被下载文件的“索引”。 下载者要下载文件内容,需要先得到相应的 .torrent 文件,然后使用 BT 客户端软件进行下载。
而.torrent 文件其本质就是一张信息清单,存储了一些信息,如下图所示,其中就包括了文件大小、哈希值、tracker 地址等信息。
下载时,BT 客户端首先解析 .torrent 文件得到 Tracker 地址,然后连接 Tracker 服务器。Tracker 服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的 IP。或者,BT 客户端也可解析 .torrent 文件得到 nodes 路由表,然后连接路由表中的有效节点,由网络节点提供下载者其他下载者的 IP。
下载者再连接其他下载者,根据 .torrent 文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参或者其他网络节点的参与,分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个块,需要算出下载块的 Hash 验证码与 .torrent 文件中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。
因此,下载的人越多,提供的带宽也越多,种子也会越来越多,下载速度就越快。
如下图所示:
从 BT 客户端角度考虑,下载原理分为以下几步:
- 根据 BitTorrent 协议,文件发布者会根据要发布的文件生成提供一个 .torrent 文件。客户端可从 Web 服务器上下载种子文件,并从中得到 Tracker 服务器 URL。
- 根据 Tracker URL 与 Tracker 服务器建立连接,并从服务器上得到 Peers 信息。
- 根据 Peers 信息与一个 Peer 建立连接,依据 Peer wire 协议完成握手,并从 Peer 端下载数据文件。同时监听 Peer 的连接,并给 Peer 上传数据文件。
Tracker 没了怎么办?
从上面的分析中我们得知,想要利用种子下载资源,第一步就是根据种子里的信息获取到 Tracker 地址,那么这时候问题就来了,如果运营商掐断了你和 Tracker 服务器间的连接了怎么办?
有两种解决方案:
PT
第一种是采用一种不会被运营商掐断的 Tracker 服务器,PT(英语:Private Tracker),即私有种子服务器。他与 BT 最大的不同点为:可进行私密范围下载。由于是私有的,所以一般的 PT 网站都是采用的邀请制,由已注册的用户向自己所信任的人发送邀请,以确保用户质量。例如紫荆站就是南大人专属的网络资源的 PT 站点(需要在连接到校园网的状态下登录)。
说个题外话,紫荆花的花语是矢志不渝,而这个网站之所以叫紫荆,是因为开发者曾约定和他的女朋友一起在南大种一朵紫荆花,虽然最后因为学校的原因没有种成,但意外诞生了紫荆 PT 来纪念他们的爱情。就像紫荆的作者说的,紫荆是胡同写给他的领导“紫荆 MM”的一封情书,即“你的心里,刻着我的名字”。
不说了,这就去吃柠檬。
DHT 网络
第二种解决方案便是 DHT 网络了,维基百科对他的解释是:
DHT 全称为分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个 DHT 网络的寻址和存储。使用支持该技术的 BT 下载软件,用户无需连上 Tracker 就可以下载,因为软件会在 DHT 网络中寻找下载同一文件的其他用户并与之通讯,开始下载任务。
不知道上面这种解释能否理解,我换个说法,大家可能就清楚了。
曾经有一个非常著名的理论:最多通过五个人你就能够认识世界上任何一个陌生人,即六度分离理论。在 DHT 网络中,每个节点就跟人一样,你可以通过你的朋友,或者你朋友的朋友,或者你朋友的朋友的朋友,只需要不断递归即可找到你想要的资源地址。这样的话,在一个网络中也就不需要 Tracker 服务器了,又或者说,在这个网络中,所有的机器都充当了 Tracker 服务器。再回顾开篇说的那句,世界上根本没有 LSP,又或者,人人都是 LSP。这么一想,是不是有那味了。
而这也是磁力链接的原理。所以其实磁力下载和种子下载的本质都是 P2P 下载,都是让每个下载者分享资源片段,从而拼凑出一个完整的资源,下载者既是资源的消费者,又是资源的传播者。他们之间的区别仅仅是寻找其他下载者的方式不同。由于篇幅的原因,本文便不详细介绍磁力链接查找下载者的方式了,有兴趣的小伙伴们可以搜索相关的资料学习下。
发展
看到这想必你对 BT 种子已经有了一定的了解了。其实 BT 技术早已涉及我们生活的方方面面了,以在线游戏为例,有些在线游戏的在线更新(如魔兽世界)就是采用 BT 的技术。所以当每次有改版时,动辄数百 MB 的更新档,透过游戏厂商所提供的更新程序,以 BT 的方式进行下载分流。这为以往的其他种在线游戏,每次重大改版就必须重新压制光盘,或是等待单一下载点的下载方式,带来另一种节省成本的经营模式。
技术是把双刃剑,利用 BT 传播非收费性内容的好处有目共睹,但利用 BT 免费发布著作权内容肯定损害著作权所有者的合法权益,因此是否应因此立法全面禁止 BT 仍然是一个焦点问题。
对于大多数 85 后,90 后来说,第一次接触 BT 种子想必和一个名为“快播”的播放器是脱不了干系的,我至今仍然记得王欣的那句技术本无罪。其实 Facebook 创立之初就是为了找到好看的女生,BT 的也是靠着他的作者科亨收集了些免费的色情电影才吸引到更多的人来测试他的程序,不得不说,某种程度上,ghs 真的促进了互联网技术的发展。
最后
以上就是本文的全部内容了,如果你觉得还不错的话,欢迎点赞关注转发支持一波,你们的支持是我肝文的最大动力。