Bencode는 비트토렌트(BitTorrent) 프로토콜에서 사용되는 메타데이터와 파일 조각을 인코딩하기 위한 간단한 직렬화 형식이다.
주요 특징은 다음과 같다.
-
형식
- 정수:
i로 시작하고e로 끝난다. 예)i42e→ 정수 42 - 바이트 문자열: 길이를 십진수로 표현한 뒤 콜론(
:)과 문자열을 연결한다. 예)4:spam→ 문자열 "spam" - 리스트:
l로 시작하고e로 끝난다. 리스트 안에 다른 Bencode 객체들을 순차적으로 배치한다. 예)l4:spam4:eggse→ ["spam", "eggs"] - 딕셔너리:
d로 시작하고e로 끝난다. 키와 값이 순차적으로 배치되며, 키는 반드시 문자열이며 사전순으로 정렬되어야 한다. 예)d3:cow3:moo4:spam4:eggse
- 정수:
-
용도
- 트래커와 클라이언트 간에 전송되는
.torrent파일은 Bencode 형식으로 인코딩된 메타데이터(파일 목록, 조각 해시, 트래커 URL 등)를 포함한다. - 비트토렌트 네트워크 내에서 피어 간에 교환되는 핸드셰이크와 메세지도 Bencode를 활용한다.
- 트래커와 클라이언트 간에 전송되는
-
장점
- 구문이 단순하고 파싱이 빠르며, 구현이 쉬워 다양한 언어와 플랫폼에서 지원된다.
- 문자열 길이가 명시되기 때문에 바이너리 데이터를 그대로 인코딩할 수 있다.
-
표준화
- Bencode 자체는 공식적인 국제 표준(예: ISO/IEC)으로 지정되어 있지는 않지만, 비트토렌트 프로토콜 사양에 명시적으로 정의되어 있다.
- 주요 비트토렌트 클라이언트(예: µTorrent, Transmission, qBittorrent)와 라이브러리(예: libtorrent, Bencode.NET)에서 광범위하게 구현된다.
-
보안 고려사항
- 정수 오버플로우, 과도한 문자열 길이 등 부정확하게 처리된 경우 메모리 소모가 급증할 수 있다. 따라서 구현 시 입력 검증이 필요하다.
이와 같이 Bencode는 비트토렌트 에코시스템에서 핵심적인 데이터 직렬화 방식으로 인정받고 있다.