我已经使用 uTorrent 很长时间了。我无数次地使用了它的“强制重新检查”功能。每次我都惊讶于 uTorrent 如何成功检测出文件的哪些部分已经下载,哪些部分尚未下载。即使您没有连接到互联网,它也会检查它们;所以我推测它不会从互联网下载任何数据来进行此检查。
你能解释一下这个“强制重新检查”功能是如何工作的吗?我认为 .torrent 文件中保存了每个片段的哈希值;但我不确定,这只是猜测。我在 Google 中搜索关键字“torrent 文件格式”以查找 .torrent 文件的文件格式,但它返回了大量的 torrent 搜索结果。所以这次 Google 不是我的朋友。请向我解释一下。
答案1
据我了解,torrent 文件包含您正在下载的每个文件片段的哈希值。它只是对照检查表检查您认为拥有的每个片段的哈希值。就像您下载 torrent 时一样,任何不匹配的片段都会被丢弃。
更详细地,基于bitorrent 规格您已下载文件,包括“片段长度”和“片段”。片段长度是每个片段的大小,片段只是每个片段的 sha1 总和,附加到前一个片段以形成一个长字符串。
为了简化问题,我们假设您已预先分配文件,并且基本上有一个与源文件长度相同的大型“填充”文件。首先,根据片段长度,程序获取文件的前 n 位,并进行 SHA1 求和。然后,它将文件的 SHA1 求和与“片段”的相应部分进行比较。如果它们匹配,则没问题。否则,将其标记为无用并丢弃。