如何获取 bittorrent 客户端下载片段的准确顺序?

如何获取 bittorrent 客户端下载片段的准确顺序?

为了了解有关 torrent 下载的更多信息,我使用 wireshark 捕获了下载过程中传输的数据包。我发现一个文件被分成来自不同对等方的多个部分。此外,单个部分被传输为多个大小相同的不同块。部分 ID 和长度是可用于识别块的信息。

我能够传输不同碎片的碎片 ID。但现在我该如何按正确顺序重新排列这些碎片?碎片 ID 在这方面有什么意义吗?

还,torrent 客户端如何重组并存储片段?讲述哈希值。我可以从哪里获取使用 wireshark 捕获的数据包中的这些值?

答案1

好的,让我们简化事情。

假设您有一个 100Mb 的 torrent。您可以将其分解为 100 个 1mb 的片段(编号为 0 到 99),但不一定非要是 1mb,它可以小到 64kb,也可以大到 16mb,并且通常(但并非总是)是 2 的幂。每个片段都由块组成。每个块为 16kb。块是 torrent 客户端处理的最小数据量(1mb 的片段有 64 个块)。

客户端可以从任何已宣布拥有该片段的对等方请求任何块、任何片段。

一旦客户端拥有了某个片段的所有块,它就会根据 torrent 文件中该片段的 SHA1 哈希值检查该组合片段(以回答最后一位)。如果通过,它将被保存并标记为“有”,以供其他人请求,否则将被丢弃。

所以是的,如果不知道片段 ID,您怎么知道它来自哪个片段,那么如何将它与该片段的其余部分分组,然后根据哈希值运行它,然后保存它?

答案2

片段 ID 在片段重排中确实具有重要意义。为了确保这一点,我创建了一个小文件的 torrent,并将其分成 10 个片段。然后,我从另一个系统下载了相同的 torrent,并记录了片段的下载顺序。同时,我使用 wireshark 捕获了数据包。下载完成后,我检查了have客户端广播的消息,消息中的片段 ID 与下载的顺序相同。由于我现在不关心哈希值,所以这解决了我的问题。

相关内容