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. main 딕셔너리를 생성하고, info 항목을 제외합니다.
  3. main 딕셔너리를 bencode로 인코딩하고 gzip으로 압축합니다.
  4. 압축된 main 딕셔너리를 info 딕셔너리에 추가합니다.
  5. main 딕셔너리에 info를 추가합니다.
  6. 토렌트 파일을 작성합니다.

복구

  1. info 딕셔너리에서 복구 항목을 압축 해제합니다.
  2. 복구 항목을 bdecode로 디코딩합니다.
  3. 복구된 딕셔너리에 info를 추가합니다.
  4. maggot을 인식하는 클라이언트를 위해 SHA1이 올바른지 확인할 수 있습니다.
  5. 복구된 토렌트 파일을 작성합니다.

토론

위에서 설명한 방법을 사용하면 토렌트 크기의 증가는 매우 작으며, 일반적으로 200에서 500바이트입니다. Robert는 새로운 info 딕셔너리 항목 생성이 포함된 상태로 출시될 것이며, 이는 비활성화할 수 없습니다. 구조는 다음과 같습니다:

주된 딕셔너리 {
    트래커 문자열, 댓글, 기타...
    info : {
        info 딕셔너리와 모든 다른 일반적인 정보를 제외한
        압축된 main bencoded 딕셔너리
    }
}