1. DHT #1

    #1. Trackerless Torrents

    지난해 11월 PirateBay가 Torrent의 Peer 정보를 중앙에서 제공하는 Tracker를 중지하고 DHT(Distributed Hash Table)와 PEX(Peer Exchange) 만으로 Peer 정보를 유통하는 구조로 바꾸기 시작했다. DHT가 이제는 특수한 용도가 아닌 보편적인 서비스의 일부로 사용되기 시작했다는 것을 시사한다. PirateBay의 경우 Tracker 유지비용도 줄이고 중앙에서 관리해야하는 위험부담도 줄여보려고 한듯 하다. BitTorrent이외에도 aMule의 Kad는 이미 사용되고 있다. 특수한 용도로는 Amazon의 Dynamo가 업계에 가장 대표적인 예가 되고 있다. 

    여기서 말하는 DHT는 Mainline DHT로 BitTorrent의 DHT를 말한다. DHT는 Kademlia의 일종인 Khashmir로 운영된다. Kademlia는 nodeID사이의 XOR연산을 통해 목적지 노드를 찾아가는 라우팅 알고리즘을 갖고 있다. 한번에 하나의 비트씩 움직여 가기 때문에 O(logN)의 시간을 갖는다. XOR의 이점은  1. A XOR A = 0, 2. A XOR B = B XOR A, 3. A < B <C가 성립한다.

    Khashmir의 경우 라우팅테이블은 160개의 버킷(bucket)으로 구성되고 각 버킷에는 최대 8개의 엔트리가 들어가도록 되어 있다. 버킷i는 2^i부터 2^(i+1)사의 거리차가 있는 노드들을 담고 있다. .torrent파일은 받고자 하는 파일의 infohash로 구성이 되는데 이 infohash를 key로 한다. key인 infohash가 담고 있는 value는 그 파일 조각(segment)를 가지고 있는 peer list가 되겠다. key는 160 bits.

    아래 그림은 Wikipedia의 Kademlia 설명을 바탕으로 다시 그린 그림이다. (예: 2^3 key 공간, k-Bucket=2) 거리(distance) = (목표 Key) XOR (nodeID)

    PEX(Peer Exchange)는 각 Peer사이에서 자신이 가지고 있는 다른 Peer에 대한 리스트를 서로 교환하는 방식이다. 처음 Bootstap하는 오버헤드는 존재하지만 꽤 쓸만하다.

    #2. Magnet Link

    최근에 torrent파일 대신 주소를 통한 torrent파일을 받도록 하는 Magnet Link를 자주 사용하게 되었다. 미리 서버에서 최신의 peer정보를 반영하기 때문에 효율적이다.

    #3. TeleHash : JSON for DHT

    몇 년 지나지 않아 XML은 사라지지 않을까 하는 추측을 한다. (사라졌으면 좋겠다.) 세상에서 가장 많이 사용되고 있는 언어가 된 Javascript 때문일 수도 있기는 하지만 그 형식의 간편함 때문이겠다. 최근들어 Binary JSON, GeoJSON이니 각 분야별로 다양한 포맷이 나오고 있다.

    TeleHash는 DHT의 한 가지인 Kademlia 네트워크상에서 UDP에 JSON을 담아 유통시키는 프로토콜이다.