老司机们天天求的种子,到底是什么?

【万物30秒 · 第20期】

如果你没时间读下面的2553个字,可以只看上面的30秒超短视频。

一、

我们在利用BitTorrent协议下载电影、软件等资源之前,要先下载一个后缀名为“.torrent”的索引文件。这个索引文件,就是种子。

种子,实质上是一张信息清单。这张清单里,记载着Tracker(追踪服务器,网上有很多个追踪服务器)的地址。BT下载工具(比如迅雷),会根据种子里记载的信息,找到相应的追踪服务器并连接,然后从追踪服务器那里得知,还有哪些人在下载/上传这个资源。

于是我们就会与那些人连接,相互交换数据块,互通有无,最终拼凑出一个完整的资源,比如一部完整的电影。

为什么要跟别人交换数据呢?因为我们要下载的资源,不管是电影还是软件、游戏安装包,都被分成了很多个分片(数据块)。

你随机下载了数据块C,别人就可以从你这里拷贝数据块C。同时,你也从张三的电脑上拷贝数据块B、从李四的电脑上拷贝数据块A……

如果一来,就避免了所有人都从某一台资源服务器(不是追踪服务器)里下载整个资源。

打个比方:考场里面,除了一个学霸外,其他都是学渣。要是每一个学渣,都直接找学霸索要整张卷子的答案,那学霸的压力就太大了。于是学霸把一部分答案给了坐在前面的人,一部分答案给了后面座位的人,一部分给了左边,一部分给了右边……这些人之间再互相交换到手的答案,于是最终所有人都得到了整份试卷的答案。

这样做的好处很明显:每个学渣(节点)的能力都被调动起来,最终大家都得到了完整的答案(资源),而学霸(资源服务器)的负担也得以大大减轻。

二、

那么问题来了,一个资源,比如一部电影,被切成了很多数据块。这个人拿一块,那个人拿一块……我要想凑成一部完整的电影,我该如何高效地找对人,拿到我缺少的那部分数据块,而不是四处盲目乱撞,见人就问你有没有我缺少的那部分数据块?

这时候就需要一个追踪服务器,它会告诉你,你该找谁去交换数据。

这里要注意,追踪服务器(Tracker),与资源服务器是不一样的。

资源服务器,里面储存有你想要的资源,比如电影、歌曲、软件等等。传统的下载,就是你从资源服务器里直接拷贝资源到你的电脑里。

而BT下载方式中的追踪服务器,里面并没有储存你要的资源,它的功能只是告诉你,网络上还有哪些在线的电脑也拥有这个资源的数据块,你可以跟这些电脑连接,互换数据。

但是网络上有太多追踪服务器了。你究竟要找哪一台追踪服务器呢?种子里的信息,会告诉你答案的。这就是BT种子的作用。

三、

P2P下载,非常适合热门资源的分发。一大堆人在下载,下载的同时也在上传,大家既是资源的消费者,又是资源的传播者,人人都做贡献,人多力量大,人越多下载速度就越快。资源的生产者,就不必投入大量的带宽资源来满足众人的直接下载,负担大大减轻。

但是冷门资源,拥有的人很少。你想下载的时候,未必有人在线。就算有人在线,常常是你还没下载完,他们就断线或删除资源了,你就无法完整下载。

这个时候,传统的资源服务器就会发挥作用了。冷门资源,你却能顺利地完整下载,很可能是因为,你是从资源服务器上直接下载来的,这就完全是传统下载的模式了。

所以,我们平时的BT下载,通常都不是纯P2P下载。很多BT下载工具,比如迅雷等,都有自己的资源服务器。

四、

现在我们来讲讲,一份资源,从生产者来到最终的消费者,这一个完整的过程是怎样的。

你自拍了一段影片,想让全世界都欣赏。首先,你得制作BT种子。

使用诸如completedir这样的工具,经过几个傻瓜式的简单步骤,就能生成种子。前面说了,种子是个索引文件,里面记载了一些信息,主要包括:Tracker的主服务器和备用服务器列表、种子注释、默认编码、建立时间,以及资源的相关信息(文件体积、分片大小、哈希值等,这些信息都会由软件自动生成)。

种子做好以后,就该发布了。别人看到后,如果有兴趣,就会点击下载。

比如有个叫牛二的人,他下载了你的种子,并与你的电脑产生了连接,你电脑里的这部影片就开始传输给他。

假如你和牛二的网速都够快,那么很快,牛二就能下载到完整的影片了。于是这个世界上,除了你之外,还另有一处完整的信息源头,那就是牛二的电脑。

这就是“出种”。

此时你断掉网络或把影片删除,都没关系。因为牛二那边还有完整版的影片,再有人需要下载的话,可以从牛二那边下载——当牛二解析种子,与追踪服务器连接上时,追踪服务器就已经将牛二登记在案了。其他需要下载的人,与追踪服务器连上的时候,追踪服务器都会告诉他们“你应该与牛二连接”。

但是…等等,牛二刚下载完,你真的就可以退出网络或删改移除影片(“撤种”)吗?

最好不要。因为牛二下载完毕后,关掉电脑或断网或删影片的可能性,也是完全存在的。

所以,你要是有心让你拍的这部影片广为传播,你就应该让网络连接的时间尽量延长,让更多的人下载到你的影片。有完整源的人多了,才能保证每时每刻都有人“留种”。前期这段时间很重要,第一批下载者的数量足够多了,才能产生裂变,星星之火,才能燎原。

有些资源发布者会进行“卡种”。就是故意限制上传速度,让第一批下载者们下载得慢一点,时间久一点。那些人都是一边下载一边上传的,时间拖得久,他们的上传服务也就提供得久,这样就能让第一批下载者做出更大贡献,让更多人可以下载到。

等你觉得已经有足够多的人下载完成了,没了你也可以,那你就可以安心“撤种”了。

理想的状态下,每个人下载完之后,继续维持一段时间的上传服务,这样下载源就会有很多,下载速度会很快。可是现实中,许多人非常自私,下载完毕就立即退出网络,导致后来者的下载速度很慢,甚至下载不了。对此,并没有什么解决办法,顶多是有些下载工具商会提供缓存服务器,但这不足以拯救所有资源。

BT下载是纯粹靠自觉的。一个高素质的老司机,最底线的自我要求,是让自己的分享率>1,也就是上传多于下载。

五、

一个文件,是怎么被分片的?下载者下载到的是一块块碎片,又是怎么拼凑成一个完整的文件的?

还是上面那个例子,你给自己拍的那部影片制种。制种的时候,completedir这类工具会把整部影片看做是一长串字节,计算总长度。比如这部影片刚好总共是十万个字节,从第1个字节到第1000个字节作为分片1,从1001个字节到第2000个字节作为分片2……依此类推,整部影片分成了100个分片(这里只是逻辑分片,并不是真的把影片切割成100个单独的文件;另外,分片长度应是2k的整数次方,这里为便于理解,将1000个字节作为分片长度)。completedir软件会把每个分片的起始位置、顺序、哈希值等信息记载在种子里。

BT下载的用户,先根据种子里的信息找到追踪服务器,再按照追踪服务器的指示,与其他用户连接。用户之间,会根据种子里的分片信息,向对方请求交换数据。

比如用户A缺少分片6,就会向用户B请求第5001到第6000个字节。

用户A收到后,将这段分片的哈希值,与种子里记载的哈希值对照,如果完全一致,就说明正确无误。

所有分片按顺序拼装一下,就是一部完整的电影了。

简单说,资源的分片,是在最初的发布者制种时完成的。下载者们,以分片为单位,进行数据交换。

(完)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181015G1MXPM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励