BEP9 信息恢复

Proposal 107
Dead
Author sponge
Created 2011-02-23
Last Updated 2011-02-23

概述

本提案旨在为 I2P 的 BEP9 实现增加完整的信息恢复功能。

动机

BEP9 不发送整个种子文件,因此丢失了一些重要的字典项目,并改变了种子文件的总 SHA1。这对 maggot 链接不利,因为重要信息丢失了。跟踪器列表、评论以及任何附加数据都会消失。因此,找到一种恢复这些信息的方法非常重要,并且需要尽可能少地添加到种子文件中。此外,它也不能有循环依赖。恢复信息不应以任何方式影响当前客户端。无跟踪器的种子文件(跟踪器 URL 实际上是 ’trackerless’)不包含额外字段,因为它们特定于使用 maggot 协议进行发现和下载,在这种情况下信息不会丢失。

解决方案

所需做的只是压缩将要丢失的信息,并将其存储在 info 字典中。

实施

  1. 生成正常的 info 字典。
  2. 生成主字典,并排除 info 项。
  3. 使用 gzip 对主字典进行 bencode 和压缩。
  4. 将压缩的主字典添加到 info 字典中。
  5. 将 info 添加到主字典中。
  6. 写入种子文件。

恢复

  1. 解压 info 字典中的恢复项。
  2. 对恢复项进行 bencode 解码。
  3. 将 info 添加到恢复的字典中。
  4. 对于支持 maggot 的客户端,现在可以验证 SHA1 是否正确。
  5. 写出恢复的种子文件。

讨论

使用上述方法,种子文件大小的增加非常小,通常为 200 到 500 字节。Robert 将支持新的 info 字典项的创建,并且这个功能不能被关闭。结构如下:

主字典 {
    跟踪器字符串、评论等……
    info : {
        经过 gzip 压缩的主 bencode 字典,不包含 info 字典和所有其他常规信息
    }
}