torrent 客户端如何重组并存储片段?

torrent 客户端如何重组并存储片段?

我想知道,torrent 客户端下载的片段是如何存储和重组的?它们使用元数据吗?似乎情况并非如此,因为如果它们是半成品文件,人们就可以播放它们?我不知道这是怎么做到的?所以基本上我在问下载文件中的片段是如何组织的?是从头到尾,还是中间有缓冲空间?

答案1

欢迎来到精彩的 Torrent 世界!Bittorrent 协议由几个部分组成:您有文件 legalthing.iso,并且希望将其分发给尽可能多的人。因此,您创建一个描述 legalthing.iso 的“torrent”文件,然后通过网站或您喜欢的任何其他方式分发该 torrent 文件。torrent 文件可以直接指向您的计算机(您将充当种子),或者 torrent 文件可以指向“跟踪器”,即连接“种子”(已拥有整个 legalthing.iso 文件的用户)和“对等点”(正在主动下载文件的用户)的服务器。

现在更接近您的问题了。文件本身 legalthing.iso 经过加密哈希处理,因此每个阅读 torrent 文件并开始下载 legalthing.iso 的人都可以根据哈希检查每个部分,并确保他们没有下载已修改原始部分。未通过哈希检查的部分将被丢弃。

现在假设您是一台使用 Bittorrent 下载文件的计算机。该协议可以以两种方式工作,要么下载文件的随机部分,要么先下载最稀少的部分。后一种方法是为了提高 torrent 的整体“健康度”(可用性)。

那么实际的 torrent 文件中有什么呢?它根据制作它的客户端而有所不同,但通常包含一个“announce”部分,即您正在使用的跟踪器的地址,以及您要下载的所有文件片段的庞大列表。​​每个片段的大小都是统一的(32 kb、512kb、4mb,实际上任何大小都是您想要的),并且每个片段都有一个与之关联的哈希值。每次对等方获得一个片段时,它都会将该片段的哈希值(使用 SHA-1 哈希码)与 torrent 文件中列出的哈希值进行比较。这就是它判断片段是否良好的方法。

由于 torrent 文件列出了您正在下载的文件的每个片段,因此每当您的客户端成功下载一个片段并对其进行哈希处理时,它都会将该片段写入文件内硬盘上的正确位置。这就是为什么如果您下载 1gb 的文件,客户端会在您的磁盘上留出一个 1gb 大小的空白空间块,以容纳您将要下载的 torrent 片段。

现在,一些视频播放器和其他文件查看器可以处理“损坏”的文件。当然,下载一半的种子并没有损坏,但它缺少一些部分,对于 VLC 等程序来说,它只是看起来损坏了。因此,VLC 将尽其所能播放它能找到的任何数据,这就是为什么它们可以在部分下载时播放。

还有许多更复杂的方面(google DHT、torrent 写入缓冲,所有这些有趣的东西),但这就是 Bittorrent 工作原理的基础。

相关内容