사용자 도구

사이트 도구


research:torrentfileformat

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

research:torrentfileformat [2013/01/15 15:23] – 새로 만듦 127.0.0.1research:torrentfileformat [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +====== 토렌트 파일 포맷 조사 ======
  
 +거두절미하고 토렌트 파일 포맷에 대해 소개합니다.
 +===== Bencode ======
 +토렌트 파일 포맷의 근간은 Bencode(B encode)입니다. 형식은 바이너리 파일이지만 자유롭게 확장이 가능한, 유연한 구조를 가지고 있습니다.
 +
 +==== Bencode Data Type ====
 +Bencode는 네가지 데이터 타입을 지원합니다.
 +  * 바이트 스트링 (byte string)
 +  * 정수 (integer)
 +  * 리스트 (list)
 +  * 사전 (dictionary)
 +
 +=== 바이트 스트링 (byte string) ====
 +바이트 스트링은 바이트의 나열입니다. 기본적으로 ASCII 코드로 가정하며, 인코딩에 대해서는 신경쓰지 않습니다. '<길이>:<문자열>' 식으로 표현합니다. 그러므로 'apple'을 bencode하면 '5:apple'이 되겠네요. 문자열 끝은 널(null) 문자가 아닙니다. 문자열의 길이는 10진법으로 표시하며 0이 될 수 있습니다. 문자열의 길이를 나타내는 숫자 또한 단순한 아스키 문자입니다.
 +
 +=== 정수 (integer) ===
 +정수는 처음에 'i'라는 문자열이 나옵니다. 그리고 'e'로 마칩니다. i, e 사이에는 0~9사이의 아스키 문자가 나옵니다. 이 아스키 문자가 정수입니다. 0은 허용하지만 0이 아닌 수에 처음으로 나오는 0은 허용하지 않습니다. 음수는 '-' 기호를 붙여 표기하면 됩니다. -0도 안 됩니다. 그러므로 정수 56과 -32를 각각 Bencode하면 'i56e', 'i-32e'가 되겠네요.
 +
 +=== 리스트 (list) ===
 +리스트는 'l'과 'e' 사이에 데이터를 적어주기만 하면 됩니다. 리스트 ['a', 'bar', 78]은 'l1:a3:bari78ee'로 인코딩되는군요.
 +
 +=== 사전 (dictionary) ===
 +딕셔너리는 'd'와 'e' 사이에 키와 값을 적으면 됩니다. 키는 반드시 사전순서야만 하고 키 다음에 바로 해당 키의 값이 나와야 합니다. (키, 값) 쌍의 목록인 (apple, fruit), (lion, animal), (cat, 12)를 Bencode해 보겠습니다.
 +각 키 값을 따로따로 Bencode하면
 +  * 5:apple 5:fruit
 +  * 4:lion 6:animal
 +  * 3:cat i12e
 +키를 사전 순으로 정렬한 후 모두 합치면 'd5:apple5fruit3:cati12e4:lion6:animale'이 됩니다.
 +
 +
 +===== 토렌트 파일 포맷 =====
 +
 +===== 참고 문헌 =====
 +  * [[http://en.wikipedia.org/wiki/Torrent_file | Torrent file - Wikipedia]]
 +  * [[http://en.wikipedia.org/wiki/Bencode | Bencode - Wikipedia]]

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki