토렌트에서 DHT는 어떻게 작동합니까?


80

분산화하고 싶은 p2p 구현을 코딩하고 있지만 bittorrent와 같은 프로토콜에서 DHT가 작동하는 방식을 파악하는 데 어려움이 있습니다. 추적기가없는 경우 클라이언트는 피어가 어디에 있는지 어떻게 알 수 있습니까? 피어는 실제 토렌트 파일에 저장됩니까?

답변:


74

트래커리스 / DHT 토렌트를 사용하면 BitTorrent 정보 해시를 키로 사용하여 피어 IP 주소가 DHT에 저장됩니다. 트래커는 기본적으로 put / get 요청에 응답하기 때문에이 기능은 DHT (분산 해시 테이블)가 제공하는 인터페이스와 정확히 일치합니다.이를 통해 infohash를 통해 DHT에서 IP 주소를 조회하고 저장할 수 있습니다.

따라서 "get"요청은 BT 정보 해시를 조회하고 IP 주소 집합을 반환합니다. "put"은 주어진 infohash에 대한 IP 주소를 저장합니다. 이는 피어 IP 주소의 사전을 수신하기 위해 트래커에 대한 "알림"요청에 해당합니다.

DHT에서 피어는 키 공간의 작은 부분에 속하는 값을 저장하기 위해 무작위로 할당됩니다. 해싱은 참여하는 피어간에 키가 무작위로 배포되도록합니다. DHT 프로토콜 ( Kademlia for BitTorrent)은 입력 / 가져 오기 요청이 주어진 키의 IP 주소 목록을 유지 관리하는 피어로 효율적으로 라우팅되도록합니다.


2
각 IP의 포트 번호는 어디에서 얻습니까?
Janus Troelsen 2013 년

2
포트는 피어의 IP 주소와 함께 포함됩니다. bittorrent.org/beps/bep_0005.html#contact-encoding
cce

2
키 스페이스 값이 유실 / 만료됩니까?
schulwitz

3
예, 만료 (TTL) 또는 변동으로 인해 값이 손실 될 수 있습니다 (피어가오고 가면서 해당 값에 대한 복제본이 충분하지 않은 경우 키 스페이스의 일부를 차지할 수 있음). 따라서 값을 장기간 유지하려면 지속적으로 PUT 요청을 발행해야합니다. BitTorrent 떼에서 동료들은 지속적으로 합류하고 떠나기 때문에 이것은 문제가되지 않으며 수명이 긴 동료는 주기적으로 DHT에 자신을 다시 알릴 수 있습니다.
cce

3
의견을 포함하면 답변이 더 나아질 것입니다.
ctrl-alt-delor


12

bittorrent와 DHT에서 발생하는 일은 처음에 bittorrent가 토렌트 파일에 포함 된 정보를 사용하여 추적기 또는 DHT의 노드 집합 중 하나로 이동한다는 것입니다. 그런 다음 한 노드를 찾으면 계속해서 다른 노드를 찾고 유지 관리하기 위해 중앙 추적기가 필요없이 DHT를 계속 사용할 수 있습니다.

원래 정보는 나중에 DHT 사용을 부트 스트랩합니다.


1

DHT 노드에는 노드 ID라는 고유 식별자가 있습니다. 노드 ID는 BitTorrent 정보 해시와 동일한 160 비트 공간에서 무작위로 선택됩니다. 근접성은 Node ID의 라우팅 테이블을 비교하여 측정되며, Node가 가까울수록 더 자세 해져 최적의 결과를 얻을 수 있습니다.

그렇다면 단순한 부호없는 정수를 사용한 이전의 "Kademlia"보다 더 최적화 된 것은 다음과 같습니다. distance (A, B) = | A xor B | 값이 작을수록 더 가깝습니다. XOR. 안전하지 않은 것 외에도 논리에 결함이 있습니다.

클라이언트가 DHT를 지원하는 경우 0x09와 UDP 포트 및 DHT 노드가있는 2 바이트 페이로드가 포함 된 8 바이트가 예약되어 있습니다. 핸드 셰이크가 성공하면 위의 내용이 계속됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.