개요
이 제안은 I2P의 BEP9 구현에서 전체 정보 복구를 추가하는 것에 대한 것입니다.
동기
BEP9는 전체 토렌트 파일을 보내지 않기 때문에 여러 중요한 딕셔너리 항목을 잃게 되고, 토렌트 파일의 총 SHA1을 변경합니다. 이는 maggot 링크에 나쁘고 중요한 정보가 손실되기 때문에 나쁩니다. 트래커 목록, 댓글 및 기타 추가 데이터가 사라집니다. 이 정보를 복구하는 방법이 중요하며, 토렌트 파일에 가능한 한 적게 추가되어야 합니다. 또한 순환 종속적이지 않아야 합니다. 복구 정보는 현재 클라이언트에 전혀 영향을 주어서는 안 됩니다. 트래커가 없는 토렌트(트래커 URL이 문자 그대로 ’trackerless’)는 추가 필드를 포함하지 않는데, 이는 원래 maggot 프로토콜의 검색 및 다운로드 방식을 사용하기 때문입니다. 이 프로토콜은 처음부터 정보를 잃지 않습니다.
해결책
잃게 될 정보를 압축하여 info 딕셔너리에 저장하면 됩니다.
구현
- 일반 info 딕셔너리를 생성합니다.
- main 딕셔너리를 생성하고, info 항목을 제외합니다.
- main 딕셔너리를 bencode로 인코딩하고 gzip으로 압축합니다.
- 압축된 main 딕셔너리를 info 딕셔너리에 추가합니다.
- main 딕셔너리에 info를 추가합니다.
- 토렌트 파일을 작성합니다.
복구
- info 딕셔너리에서 복구 항목을 압축 해제합니다.
- 복구 항목을 bdecode로 디코딩합니다.
- 복구된 딕셔너리에 info를 추가합니다.
- maggot을 인식하는 클라이언트를 위해 SHA1이 올바른지 확인할 수 있습니다.
- 복구된 토렌트 파일을 작성합니다.
토론
위에서 설명한 방법을 사용하면 토렌트 크기의 증가는 매우 작으며, 일반적으로 200에서 500바이트입니다. Robert는 새로운 info 딕셔너리 항목 생성이 포함된 상태로 출시될 것이며, 이는 비활성화할 수 없습니다. 구조는 다음과 같습니다:
주된 딕셔너리 {
트래커 문자열, 댓글, 기타...
info : {
info 딕셔너리와 모든 다른 일반적인 정보를 제외한
압축된 main bencoded 딕셔너리
}
}