我正在使用bittorrent协议研究文件传输,并且有兴趣知道与每个部分关联的piece index
在重新排列部分中是否有任何意义。这是piece index
分配的?除了使用.torrent
文件中的哈希值重新排列部分之外,还有其他一些方法吗?
答案 0 :(得分:1)
torrent的元数据包含足够的信息来重新组装和验证torrent描述的数据,而不管数据到达的顺序如何。完整定义可以找到here,对于您的问题,有一些重要的部分。
info 这会映射到字典,其中包含下面介绍的密钥。
和
件映射到长度为20的倍数的字符串。它将被细分为长度为20的字符串,每个字符串都是相应索引处的片段的SHA1哈希值。 / p>
和
出于其他键的目的,通过按文件列表中出现的顺序连接文件,多文件案例被视为只有一个文件。
最后
片段长度映射到文件被分割成的每个片段中的字节数。出于传输的目的,文件被分成固定大小的片段,除了可能被截断的最后一个片段之外,它们的长度都相同。片长几乎总是2的幂,最常见的是2 18 = 256 K(版本3.2之前的BitTorrent默认使用2 20 = 1 M)。
一起拍摄。假设 .torrent 描述的基础数据按照从 0 到 NumPieces 的顺序排列。所有的部分都是完全相同的长度,可能是最后一个,因此 piece_index X piece_size 将给出从开头到那个部分的字节偏移量适合数据。多个文件被视为全部连接在一起。每个部分哈希位于件开头的 piece_index X 20 字节。现在,因为件位于信息部分,如果您通过更改其索引来重新排列片段,这将更改信息部分的SHA1哈希,从而更改infoHash,改变洪流。这是设计的,因此可以验证数据的真实性。实际上,不可能以错误的顺序伪造或意外重新组装碎片,因为infoHash是最终检查件是否正确而件是检查数据是对的。