분산화하고 싶은 p2p 구현을 코딩하고 있지만 bittorrent와 같은 프로토콜에서 DHT가 작동하는 방식을 파악하는 데 어려움이 있습니다. 추적기가없는 경우 클라이언트는 피어가 어디에 있는지 어떻게 알 수 있습니까? 피어는 실제 토렌트 파일에 저장됩니까?
분산화하고 싶은 p2p 구현을 코딩하고 있지만 bittorrent와 같은 프로토콜에서 DHT가 작동하는 방식을 파악하는 데 어려움이 있습니다. 추적기가없는 경우 클라이언트는 피어가 어디에 있는지 어떻게 알 수 있습니까? 피어는 실제 토렌트 파일에 저장됩니까?
답변:
트래커리스 / DHT 토렌트를 사용하면 BitTorrent 정보 해시를 키로 사용하여 피어 IP 주소가 DHT에 저장됩니다. 트래커는 기본적으로 put / get 요청에 응답하기 때문에이 기능은 DHT (분산 해시 테이블)가 제공하는 인터페이스와 정확히 일치합니다.이를 통해 infohash를 통해 DHT에서 IP 주소를 조회하고 저장할 수 있습니다.
따라서 "get"요청은 BT 정보 해시를 조회하고 IP 주소 집합을 반환합니다. "put"은 주어진 infohash에 대한 IP 주소를 저장합니다. 이는 피어 IP 주소의 사전을 수신하기 위해 트래커에 대한 "알림"요청에 해당합니다.
DHT에서 피어는 키 공간의 작은 부분에 속하는 값을 저장하기 위해 무작위로 할당됩니다. 해싱은 참여하는 피어간에 키가 무작위로 배포되도록합니다. DHT 프로토콜 ( Kademlia for BitTorrent)은 입력 / 가져 오기 요청이 주어진 키의 IP 주소 목록을 유지 관리하는 피어로 효율적으로 라우팅되도록합니다.
일반적인 이론은 Kademlia 에 대한 wikipedia의 기사에서 찾을 수 있습니다 . bittorrent에서 사용되는 특정 프로토콜 사양은 다음과 같습니다. http://wiki.theory.org/BitTorrentDraftDHTProtocol
bittorrent와 DHT에서 발생하는 일은 처음에 bittorrent가 토렌트 파일에 포함 된 정보를 사용하여 추적기 또는 DHT의 노드 집합 중 하나로 이동한다는 것입니다. 그런 다음 한 노드를 찾으면 계속해서 다른 노드를 찾고 유지 관리하기 위해 중앙 추적기가 필요없이 DHT를 계속 사용할 수 있습니다.
원래 정보는 나중에 DHT 사용을 부트 스트랩합니다.
DHT 노드에는 노드 ID라는 고유 식별자가 있습니다. 노드 ID는 BitTorrent 정보 해시와 동일한 160 비트 공간에서 무작위로 선택됩니다. 근접성은 Node ID의 라우팅 테이블을 비교하여 측정되며, Node가 가까울수록 더 자세 해져 최적의 결과를 얻을 수 있습니다.
그렇다면 단순한 부호없는 정수를 사용한 이전의 "Kademlia"보다 더 최적화 된 것은 다음과 같습니다. distance (A, B) = | A xor B | 값이 작을수록 더 가깝습니다. XOR. 안전하지 않은 것 외에도 논리에 결함이 있습니다.
클라이언트가 DHT를 지원하는 경우 0x09와 UDP 포트 및 DHT 노드가있는 2 바이트 페이로드가 포함 된 8 바이트가 예약되어 있습니다. 핸드 셰이크가 성공하면 위의 내용이 계속됩니다.