BitTorrent는 DHT를 사용합니다?

요약

Bittorrent는 파일 전송을 위해 설계된 피어 투 피어 프로토콜입니다. 사용자가 서로 직접 연결하여 파일 부분을 보내고받을 수 있습니다. 이 프로토콜은 추적기라는 중앙 서버를 사용하여 관련된 모든 동료의 동작을 조정합니다. 그러나 Bittorrent는 UDP 기반 피어 투 피어 트래커 프로토콜 인 DHT (Distributed Sloppy Hash 테이블) 프로토콜이라는 확장 기능도 포함되어 있습니다.

키 포인트

  • BitTorrent는 파일을 전송하기위한 프로토콜입니다.
  • 사용자는 파일 부분을 보내고 받기 위해 서로 직접 연결합니다.
  • 이 프로토콜은 트래커라는 중앙 서버를 사용합니다.
  • 추적기는 관련된 동료의 행동을 조정합니다.
  • DHT 프로토콜은 BitTorrent로의 확장입니다.
  • DHT는 UDP 기반 피어 투 피어 트래커 프로토콜입니다.
  • Bittorrent는 TCP를 전송 프로토콜로 사용합니다.
  • Bittorrent 트래픽을위한 잘 알려진 TCP 포트는 6881-6889입니다.
  • DHT는 동료들이 협상 한 다양한 UDP 포트를 사용합니다.
  • Bittorrent는 2002 년 창립 이후 널리 채택되었습니다.

질문과 답변


Q : BitTorrent는 어떻게 작동합니까??

A : BitTorrent는 사용자가 서로 직접 연결하여 파일을 전송할 수있는 피어 투 피어 프로토콜입니다. Bittorrent는 중앙 서버에 의존하는 대신 추적기를 사용하여 파일 전송에 관련된 피어의 동작을 조정합니다. 이 분산 된 접근 방식은 사용자가 이미 다른 사람과 이미 다운로드 한 파일의 일부를 공유 할 수 있으므로 효율적인 파일을 배포 할 수 있습니다.


Q : BitTorrent의 DHT 프로토콜의 목적은 무엇입니까??

A : DHT 프로토콜 또는 분산 된 경사 해시 테이블 프로토콜은 BitTorrent의 확장입니다. 분산 된 해시 테이블에 피어 연락처 정보를 저장하여 트래커가없는 급류를 허용합니다. 네트워크의 각 피어는 추적기가되고 프로토콜은 UDP를 통해 구현됩니다. DHT는 동료들이 중앙 추적기 서버에 의존하지 않고 서로 찾아서 연결할 수 있도록합니다.


Q : BitTorrent가 주로 사용하는 전송 프로토콜은 무엇입니까??

A : BitTorrent는 주로 TCP (Transmission Control Protocol)를 전송 프로토콜로 사용합니다. TCP. Bittorrent 트래픽에 대한 잘 알려진 TCP 포트 범위는 6881-6889입니다.


Q : DHT 프로토콜은 UDP 또는 TCP를 사용합니까??

A : BitTorrent의 DHT 프로토콜은 UDP (사용자 데이터 그램 프로토콜)를 전송 프로토콜로 사용합니다. UDP. DHT 프로토콜에 관련된 동료들은 UDP 포트를 협상하여 연결을 설정합니다.


Q : BitTorrent는 언제 만들어 졌습니까??

A : Bittorrent는 2001 년 4 월 Bram Cohen이 설계했으며 2002 년 여름에 구현되었습니다. Bittorrent 프로토콜을 사용한 최초의 프로그램이었으며 그 이후로 많은 응용 프로그램이 프로토콜을 기반으로 개발되었습니다.


Q : BitTorrent에서 트래커의 역할은 무엇입니까??

A : Bittorrent의 트래커는 동료 간의 연결을 관리하는 중앙 서버입니다. 파일의 다른 부분을 보유한 피어가 어떤 동료를 추적하고 그들 사이의 데이터 교환을 용이하게합니다. 그러나 트래커는 분산되는 실제 파일 내용에 대한 지식이 없습니다.


Q : BitTorrent 트래픽과 관련된 특정 포트 번호가 있습니까??

A : 그렇습니다. Bittorrent 트래픽을위한 잘 알려진 TCP 포트 범위는 6881-6889입니다. 이 포트는 동료 간의 TCP 연결을 설정하는 데 사용됩니다. 또한 DHT 프로토콜에 사용되는 UDP 포트는 커뮤니케이션에 관련된 동료들에 의해 협상됩니다.


Q : BitTorrent의 피어와 노드의 차이점은 무엇입니까??

A : BitTorrent의 맥락에서 피어는 TCP 포트에서 듣는 클라이언트 또는 서버를 말하고 파일 전송에 대한 BitTorrent 프로토콜을 구현합니다. 반면, 노드는 UDP 포트에서 청취하고 분산 된 해시 테이블 (DHT) 프로토콜을 구현하는 클라이언트 또는 서버를 나타냅니다. 노드는 트래커가없는 급류에 대한 피어 연락처 정보를 저장하고 검색하는 데 사용됩니다.


Q : Wireshark는 Bittorrent 트래픽을 분석 할 수 있습니다?

A : 그렇습니다. Wireshark에는 BitTorrent 트래픽을 분석하고 디코딩 할 수있는 완벽한 기능적 비트 토렌트 디렉터가 포함되어 있습니다. DHT 및 UTP 연장은 Wireshark에서도 지원합니다. Bittorrent Dissector는 특정 Wireshark 릴리스 이후 제공되었습니다 (세부 사항 제공).


Q : Wireshark의 Bittorrent와 관련된 기본 설정 설정이 있습니까??

A : 예, BitTorrent와 관련된 Wireshark에 선호도 설정이 있습니다. 이러한 설정 중 일부에는 여러 TCP 세그먼트에 걸쳐 BitTorrent 메시지를 재 조립하는 기능과 핸드 셰이크 메시지의 PEER_ID를 해독하는 옵션이 포함됩니다. 이러한 선호도 설정은 Wireshark에서 캡처 한 Bittorrent 트래픽에 대한보다 자세한 분석을 제공합니다.


Q : BitTorrent 트래픽의 예제 캡처 파일을 제공 할 수 있습니까??

A : 예, BitTorrent 트래픽에 사용할 수있는 예제 캡처 파일이 있습니다. 한 가지 예는 “Samplecaptures/Bittorrent입니다.전송 1.CAP, “Microsoft Network Monitor를 사용하여 캡처했습니다. BitTorrent에서 다운로드하는 동안 얻은 비트 토렌트 패킷이 포함되어 있습니다. 또 다른 예는 “Samplecaptures/Bittorrent입니다.PCAP, “LIBPCAP를 사용하여 캡처했습니다. DHT 또는 동료 교환없이 두 토렌트 클라이언트 간의 커뮤니케이션을 포착합니다.


Q : Wireshark에 BitTorrent 트래픽 만 표시하려면 어떻게해야합니까??

A : Wireshark에서 Bittorrent 기반 트래픽 만 표시하려면 디스플레이 필터 “Bittorrent를 사용할 수 있습니다.”이 필터를 적용하면 BitTorrent 트래픽과 관련된 패킷 만 표시됩니다. 이 필터는 특정 버전 (세부 사항이 제공되지 않음) 후 Wireshark에서 사용할 수 있습니다.


Q : 특정 필터를 사용하여 Bittorrent 추적기 트래픽 만 캡처 할 수 있습니까??

A : 네트워크 트래픽을 캡처 할 때 BitTorrent 프로토콜을 직접 필터링 할 수 없습니다. 그러나 Bittorrent 트래커 (예 : 6881)에서 사용하는 TCP 포트를 알고 있다면 해당 포트의 트래픽 만 캡처하기 위해 캡처 필터를 설정할 수 있습니다. 예를 들어, 캡처 필터 “TCP 포트 6881″은 포트 6881의 비트 토렌트 추적기 트래픽 만 캡처합니다. 또한 다양한 기본 포트를 통해 비트 토렌트 트래커 트래픽을 캡처 할 수 있습니다 (E.g., 6881-6889) 필터 사용 “TCP 묘사 6881-6889.”


Q : BitTorrent와 관련된 외부 링크가 있습니까??

A : 그렇습니다. BitTorrent와 관련된 외부 링크가 있습니다


Q : DHT 프로토콜은 BitTorrent에서 어떻게 작동합니까??

A : Bittorrent의 DHT 프로토콜은 분산 된 해시 테이블을 사용하여 추적이없는 급류에 대한 피어 연락처 정보를 저장하고 검색합니다. DHT의 각 노드에는 “노드 ID로 알려진 전 세계 고유 식별자가 있습니다.”노드는 다른 노드의 연락처 정보를 포함하는 라우팅 테이블을 유지합니다. 노드가 자신의 노드 ID에 가까워지면 라우팅 테이블이 더 자세하게 나타납니다. 이 구조는 노드가 피어와 효율적으로 피어를 발견하고 연결할 수 있습니다.

추가 정보

Bittorrent.Org는 Bittorrent의 공식 웹 사이트입니다. BitTorrent 프로토콜 및 구현에 관한 리소스, 문서 및 업데이트를 제공합니다. Bittorrent는 DHT 프로토콜을 사용하여 추적자 토론자를 활성화하여 파일 공유 프로세스의 확장 성 및 분산 성을 증가시킵니다. DHT 프로토콜은 UDP를 통해 구현되며 노드에 의존하여 피어 연락처 정보를 저장하고 검색합니다.

참고 :이 기사는 Bittorrent, DHT 확장 및 관련 정보에 대한 간결한 개요를 제공합니다. 보다 심층적 인 세부 사항 및 기술 사양은 공식 Bittorrent 웹 사이트 및 제공된 외부 링크를 방문하는 것이 좋습니다.

BitTorrent는 DHT를 사용합니다

당신 후’VE는 모든 동료를 발견하면 다운로드가 시작됩니다!

Bittorrent

BitTorrent는 파일을 전송하도록 설계된 프로토콜입니다. 사용자가 파일의 일부를 보내고 받기 위해 서로 직접 연결함에 따라 자연의 피어 투 피어입니다. 그러나 중앙 서버 (트래커라고 함)가 있습니다. 트래커는 연결 만 관리하며, 배포중인 파일의 내용에 대한 지식이 없으므로 비교적 제한된 트래커 대역폭으로 많은 사용자를 지원할 수 있습니다.

Bittorrent 로의 최근 확장은 DHT ( “분산 슬로피 해시 테이블”또는 간단히 UDP 트래커라고 함) 프로토콜입니다. UDP 기반 피어 – 피어 트래커 프로토콜. UTORRENT는 UDP라고하는 또 다른 UDP 기반 마이크로 전송 프로토콜을 수입합니다.

역사

2001 년 4 월 Bram Cohen은 Bittorrent 프로토콜을 설계했으며 2002 년 여름을 구현했습니다. 프로토콜을 사용하는 첫 번째 프로그램은 원래 BitTorrent 클라이언트였습니다. 오늘날 많은 응용 프로그램이 이용 가능하며 프로토콜이 널리 사용됩니다.

프로토콜 종속성

  • TCP : 일반적으로 Bittorrent는 TCP를 전송 프로토콜로 사용합니다. Bittorrent 트래픽에 대해 잘 알려진 TCP 포트는 6881-6889 (및 트래커 포트의 경우 6969)입니다. DHT Extension (PEER2PEER 트래커)은 동료들이 협상 한 다양한 UDP 포트를 사용합니다.

예제 트래픽

XXX- 여기에 예제 트래픽 추가 (일반 텍스트 또는 Wireshark 스크린 샷).

Wireshark

Bittorrent Dissector는 (현재 상태가 무엇이든간에 완전히 기능적이며 부분적으로 기능적이며 존재하지 않습니다). DHT 확장은 R39653 이후 지원되었습니다. UTP 연장은 R36716 이후 지원되었습니다.

기본 설정 설정

  • 여러 TCP 세그먼트에 걸친 비트 토렌트 메시지를 재 조립합니다
  • 핸드 셰이크 메시지의 peer_id를 디코딩하십시오

예제 캡처 파일

Samplecaptures/Bittorrent.전송 1.CAP (Microsoft Network Monitor) 여기에는 비트 토렌트 패킷이있는 캡처가 있습니다. 그것은 bittorrent에서 무언가를 다운로드하는 동안 얻은 작은 패킷이 포함되어 있습니다.

Samplecaptures/Bittorrent.PCAP (LIBPCAP) DHT 또는 PEER EXCHING없이 2 개의 토런트 클라이언트 커뮤니케이션의 캡처 파일.

디스플레이 필터

Bittorrent 디스플레이 필터 필드의 전체 목록은 디스플레이 필터 참조에서 찾을 수 있습니다

Bittorrent 기반 트래픽 만 표시하십시오

 Bittorrent

참고 : Wireshark Post 0에서 구현되었습니다.10.12!

필터를 캡처하십시오

캡처하는 동안 BitTorrent 프로토콜을 직접 필터링 할 수 없습니다. 그러나 사용 된 TCP 포트 (위 참조)를 알고 있다면 그 중 하나를 필터링 할 수 있습니다.

기본 포트 중 하나를 통해 BitTorrent 추적기 트래픽 만 캡처합니다 (E.g. 6881) :

 TCP 포트 6881

기본 포트 범위에서 비트 토렌트 추적기 트래픽을 캡처합니다 (E.g. 6881-6889) :

 TCP는 6881-6889를 묘사합니다

libpcap을 사용할 때.9.1 이상 또는 winpcap 3.1 이상; 그 표현은 이전 버전의 libpcap 또는 winpcap에서 작동하지 않으므로 Windows에서 WinpCap 3으로 업그레이드하십시오.1 이상, UN*X에서 LibpCap 0으로 업그레이드하십시오.9.x 가능하면 가능하지 않으면 0 이전에 libpcap 버전이 있습니다.8.1, 사용

 (TCP [0 : 2]> = 6881 및 TCP [0 : 2] = 6881 및 TCP [2 : 2] 

(LibpCap Optimizer의 BUG I LIBPCAP 0.8.x는 이것이 LIBPCAP 0에서 작동하지 않음을 의미합니다.8.x, "-o"플래그와 함께 tcpdump를 사용할 수 있지만).

외부 링크

  • http : // www.Bittorrent.com/ 공식 비트 토렌트 페이지
  • Wikipedia bittorrent 페이지
  • Bittorrent가 일반적으로 P2P에 대한 작동 방식, BitTorrent 및 방화벽 설정
  • DHT 프로토콜 (BEP 5), 분산 추적기에 대한 UDP 기반 비트 토렌트 확장 (UDP 포트 번호가 협상). 또한 : DHT Protocol의 초안 DHT 프로토콜 (Dead Link), 웹 아카이브 사본 (2007-12-21) 초안 DHT 프로토콜에 대한 링크.
  • 히피 프로토콜 서명 설명 설명 BitTorrent 프로토콜 웹 아카이브 링크를 휴리스틱으로 식별하는 데 사용될 수있는 TCP 및 UDP 프로토콜 서명
  • BitTorrent에 대한 자세한 내용

Bittorrent .org

Bittorrent는 "Trackerless"급류에 대한 피어 연락처 정보를 저장하기 위해 "분산 슬로피 해시 테이블"(DHT)을 사용합니다. 사실상 각 피어는 추적기가됩니다. 이 프로토콜은 Kademila [1]를 기반으로하며 UDP를 통해 구현됩니다.

혼란을 피하기 위해이 문서에 사용 된 용어에 주목하십시오. "피어"는 BitTorrent 프로토콜을 구현하는 TCP 포트에서 듣는 클라이언트/서버입니다. "노드"는 분산 된 해시 테이블 프로토콜을 구현하는 UDP 포트에서 청취하는 클라이언트/서버입니다. DHT는 노드로 구성되어 있으며 동료의 위치를 ​​저장합니다. Bittorrent 클라이언트에는 DHT 노드가 포함되어 있으며 DHT 노드가 포함되어있어 DHT의 다른 노드에 연락하여 BitTorrent 프로토콜을 사용하여 피어의 위치를 ​​다운로드 할 수 있습니다.

개요

각 노드에는 "노드 ID로 알려진 전 세계 고유 식별자가 있습니다."노드 ID는 Bittorrent Infohashes와 동일한 160 비트 공간에서 무작위로 선택됩니다 [2]. "거리 메트릭"은 두 노드 ID 또는 노드 ID를 비교하는 데 사용됩니다."노드는 소수의 다른 노드에 대한 연락처 정보가 포함 된 라우팅 테이블을 유지해야합니다. ID가 노드 자체 ID에 가까워지면 라우팅 테이블이 더 자세하게 나타납니다. 노드는 DHT의 다른 많은 노드에 대해 자체적으로 "가까운"ID가 있지만 자체적으로 멀리 떨어진 ID와의 연락처 만 가지고 있습니다.

Kademlia에서는 거리 메트릭이 XOR이며 결과는 서명되지 않은 정수로 해석됩니다. 거리 (a, b) = | a xor b | 작은 값이 더 가깝습니다.

노드가 급류에 대한 피어를 찾으려면 거리 메트릭을 사용하여 토런트의 정보가 자체 라우팅 테이블의 노드의 ID와 비교합니다. 그런 다음 Infohash에 가장 가까운 ID로 알고있는 노드에 연락하여 현재 급류를 다운로드하는 동료의 연락처 정보를 요청합니다. 연락처 노드가 급류의 피어에 대해 알고 있다면 피어 연락처 정보가 응답으로 반환됩니다. 그렇지 않으면, 접촉 된 노드는 토런트의 정보 해시에 가장 가까운 라우팅 테이블의 노드의 연락처 정보로 응답해야합니다. 원래 노드는 더 가까운 노드를 찾을 수 없을 때까지 대상 정보 해시에 가까운 노드를 반복적으로 쿼리합니다. 검색이 소진 된 후 클라이언트는 급류의 정보 해시에 가장 가까운 ID가있는 응답 노드에 동료 연락처 정보를 삽입합니다.

피어에 대한 쿼리의 반환 값에는 "토큰으로 알려진 불투명 값이 포함됩니다."노드가 제어 피어가 급류를 다운로드하고 있다고 발표하려면 최근 동료를위한 쿼리에서 동일한 쿼리 노드에서받은 토큰을 제시해야합니다. 노드가 토런트를 "발표"하려고 시도하면 쿼리 노드는 쿼리 노드의 IP 주소에 대해 토큰을 확인합니다. 이것은 악의적 인 호스트가 급류에 대한 다른 호스트에 가입하는 것을 방지하기위한 것입니다. 토큰은 단지 쿼리 노드에 의해 토큰을받은 동일한 노드로 반환되므로 구현은 정의되지 않습니다. 토큰은 배포 된 후 합리적인 시간 동안 수락해야합니다. Bittorrent 구현은 5 분마다 변경되고 10 분 동안 토큰이 수락되는 비밀에 연결된 IP 주소의 SHA1 해시를 사용합니다.

라우팅 테이블

모든 노드는 알려진 좋은 노드의 라우팅 테이블을 유지합니다. 라우팅 테이블의 노드는 DHT의 쿼리의 시작점으로 사용됩니다. 라우팅 테이블의 노드는 다른 노드의 쿼리에 응답하여 반환됩니다.

우리가 배우는 모든 노드가 동일하지는 않습니다. 일부는 "좋은"이고 일부는 그렇지 않습니다. DHT를 사용하는 많은 노드는 쿼리를 보내고 응답을받을 수 있지만 다른 노드의 쿼리에 응답 할 수 없습니다. 각 노드의 라우팅 테이블에 알려진 좋은 노드 만 포함 해야하는 것이 중요합니다. 좋은 노드는 노드가 지난 15 분 이내에 쿼리 중 하나에 응답했습니다. 노드도 우리의 쿼리 중 하나에 응답하고 지난 15 분 이내에 쿼리를 보낸 경우에도 좋습니다. 15 분의 비 활동 후, 노드는 의심스러워집니다. 노드가 여러 쿼리에 연속으로 응답하지 않으면 노드가 나빠집니다. 우리가 잘 알고있는 노드는 알려지지 않은 노드보다 우선 순위가 부여됩니다.

라우팅 테이블은 전체 노드 ID 공간을 0에서 2 160까지 다룹니다 . 라우팅 테이블은 각각 ​​공간의 일부를 덮는 "버킷"으로 세분화됩니다. 빈 테이블에는 ID 공간 범위가 최소 = 0, 최대 = 2 160 인 한 버킷이 있습니다 . ID "N"이있는 노드가 테이블에 삽입되면 최소가있는 버킷 안에 배치됩니다 <= n < 맥스. 빈 테이블에는 하나의 버킷 만 있으므로 모든 노드에 맞아야합니다. 각 버킷은 "Full이"가되기 전에 K 노드 만 보유 할 수 있습니다."버킷에 알려진 좋은 노드로 가득 차면 자체 노드 ID가 버킷의 범위에 속하지 않는 한 더 이상 노드가 추가 될 수 없습니다. 이 경우 버킷은 구식 버킷의 절반의 절반으로 각각 두 개의 새로운 버킷으로 교체되며 오래된 버킷의 노드는 두 개의 새로운 버킷에 분포됩니다. 양동이 단 하나의 새 테이블의 경우 전체 버킷은 항상 범위 0을 덮는 두 개의 새 버킷으로 나뉩니다..2 159 및 2 159 ..2 160 .

버킷에 좋은 노드로 가득 차면 새 노드는 단순히 폐기됩니다. 버킷의 노드가 나빠진 것으로 알려져 있다면 하나는 새 노드로 대체됩니다. 버킷에 의심스러운 노드가 지난 15 분 안에 보이지 않으면 최근에 가장 최근에 보이는 노드가 핑되었습니다. 핑 된 노드가 응답하면 응답하지 못하거나 버킷의 모든 노드가 양호한 것으로 알려질 때까지 최근 가장 최근에 보이는 의심스러운 노드가 핑됩니다. 버킷의 노드가 핑에 응답하지 않으면 노드를 버리고 새로운 좋은 노드로 교체하기 전에 한 번 더 시도하는 것이 좋습니다. 이런 식으로 테이블은 안정적인 장거리 러닝 노드로 채워집니다.

각 버킷은 내용이 "신선한"내용을 나타내려면 "마지막으로 변경된"속성을 유지해야합니다. 버킷의 노드가 핑되고 응답되거나 응답하거나 버킷에 노드가 추가되거나 버킷의 노드가 다른 노드로 교체되면 버킷의 마지막 변경 특성을 업데이트해야합니다. 15 분 안에 변경되지 않은 버킷은 "새로 고침해야합니다."이것은 버킷 범위에서 임의의 ID를 선택하고 find_nodes 검색을 수행하여 수행됩니다. 다른 노드에서 쿼리를 수신 할 수있는 노드는 일반적으로 버킷을 자주 새로 고칠 필요가 없습니다. 다른 노드에서 쿼리를 수신 할 수없는 노드는 일반적으로 DHT가 필요할 때 테이블에 좋은 노드가 있는지 확인하기 위해 모든 버킷을 주기적으로 새로 고침해야합니다.

첫 번째 노드를 라우팅 테이블에 삽입하고 그 이후로 시작할 때 노드는 DHT에서 가장 가까운 노드를 찾아야합니다. Find_Node 메시지를 더 가까이서 가까이서 더 가까이 찾을 수 없을 때까지 더 가까이서 노드를 발행 하여이 작업을 수행합니다. 클라이언트 소프트웨어의 호출간에 라우팅 테이블을 저장해야합니다.

Bittorrent 프로토콜 확장

Bittorrent 프로토콜은 추적기가 소개하는 피어 간의 노드 UDP 포트 번호를 교환하기 위해 확장되었습니다. 이런 식으로 고객은 정기적 인 급류의 다운로드를 통해 라우팅 테이블을 자동으로 파종 할 수 있습니다. 첫 번째 시도에서 트래커리스 토런트를 다운로드하려는 새로 설치된 클라이언트는 라우팅 테이블에 노드가 없으며 토런트 파일에 포함 된 연락처가 필요합니다.

DHT를 지원하는 피어는 BitTorrent 프로토콜 핸드 셰이크로 교환 된 8 바이트 예약 플래그의 마지막 비트를 설정합니다. 원격 피어가 DHT가 포트 메시지를 보내야한다는 것을 나타내는 핸드 셰이크를받는 피어. 바이트 0x09로 시작하며 네트워크 바이트 순서에서 DHT 노드의 UDP 포트를 포함하는 2 바이트 페이로드가 있습니다. 이 메시지를받는 피어는 원격 피어의 수신 된 포트 및 IP 주소에 노드를 핑하려고 시도해야합니다. 핑에 대한 응답이 리시 된 경우, 노드는 일반적인 규칙에 따라 새로운 연락처 정보를 라우팅 테이블에 삽입하려고 시도해야합니다.

급류 파일 확장

추적자 토런트 사전에는 "발표"키가 없습니다. 대신 트래커리스 토런트에는 "노드"키가 있습니다. 이 키는 급류 생성 클라이언트의 라우팅 테이블에서 가장 가까운 노드로 설정해야합니다. 또는 키는 급류를 생성하는 사람이 작동하는 것과 같은 알려진 좋은 노드로 설정할 수 있습니다. "라우터를 자동으로 추가하지 마십시오.Bittorrent.com "토런트 파일에 또는 클라이언트 라우팅 테이블 에이 노드를 자동으로 추가하십시오.

노드 = [[ "",], [ "",], . ] 노드 = [[ "127.0.0.1 ", 6881], ["당신.라우터.노드 ", 4804], ["2001 : DB8 : 100 : 0 : D5C8 : DB3F : 995E : C0F7 ", 1941]]

KRPC 프로토콜

KRPC 프로토콜은 UDP를 통해 전송 된 벤 코드 사전으로 구성된 간단한 RPC 메커니즘입니다. 단일 쿼리 패킷이 전송되고 응답으로 단일 패킷이 전송됩니다. 재 시도가 없습니다. 쿼리, 응답 및 오류의 세 가지 메시지 유형이 있습니다. DHT 프로토콜의 경우 Ping, Find_node, Get_peers 및 Aontouns_peer의 네 가지 쿼리가 있습니다.

KRPC 메시지는 메시지 유형에 따라 모든 메시지에 공통적 인 3 개의 키와 추가 키가있는 단일 사전입니다. 모든 메시지에는 트랜잭션 ID를 나타내는 문자열 값이있는 "T"가 있습니다. 이 트랜잭션 ID는 쿼리 노드에 의해 생성되며 응답에서 에코가되므로 응답은 동일한 노드와 여러 쿼리와 상관 관계가있을 수 있습니다. 트랜잭션 ID는 짧은 이진 번호로 인코딩되어야하며, 일반적으로 2자는 2^16 미결 쿼리를 다루기에 충분합니다. 모든 메시지에는 메시지 유형을 설명하는 단일 문자 값이있는 "y"도 있습니다. "y"키의 값은 쿼리의 "Q", 응답의 경우 "r"또는 오류의 경우 "e"중 하나입니다. 클라이언트 버전 문자열이있는 모든 메시지에 키 "V"가 포함되어야합니다. 문자열은 Bep 20 [3]에 등록 된 두 문자 클라이언트 식별자 여야하며 두 문자 버전 식별자 여야합니다. 모든 구현에 "V"키가 포함 된 것은 아니므로 고객이 그 존재를 가정해서는 안됩니다.

인코딩에 문의하십시오

피어의 연락처 정보는 6 바이트 문자열로 인코딩됩니다. "Compact IP-Address/포트 정보"라고도하는 4 바이트 IP 주소는 네트워크 바이트 순서의 2 바이트 포트와 함께 네트워크 바이트 순서로 표시됩니다.

노드의 연락처 정보는 26 바이트 문자열로 인코딩됩니다. "Compact Node Info"라고도 함.

쿼리

"y"값 "Q"값을 가진 쿼리 또는 KRPC 메시지 사전에는 두 개의 추가 키가 포함되어 있습니다. "Q"와 "A". 키 "Q"는 쿼리의 메소드 이름을 포함하는 문자열 값을 갖습니다. 키 "A"는 쿼리에 이름이 지정된 인수를 포함하는 사전 값을 가지고 있습니다.

응답

"y"값 "r"인 응답 또는 KRPC 메시지 사전에는 하나의 추가 키 "r"이 포함됩니다. "R"의 값은 이름이 지정된 리턴 값을 포함하는 사전입니다. 쿼리가 성공적으로 완료되면 응답 메시지가 전송됩니다.

오류

"y"값 "e"의 "y"값을 가진 오류 또는 KRPC 메시지 사전에는 하나의 추가 키 "e"가 포함됩니다. "e"의 값은 목록입니다. 첫 번째 요소는 오류 코드를 나타내는 정수입니다. 두 번째 요소는 오류 메시지를 포함하는 문자열입니다. 쿼리를 수행 할 수 없을 때 오류가 전송됩니다. 다음 표는 가능한 오류 코드를 설명합니다

암호 설명
201 일반적인 오류
202 서버 오류
203 기형 패킷, 유효하지 않은 인수 또는 잘못된 토큰과 같은 프로토콜 오류
204 알 수없는 방법

예제 오류 패킷 :

일반 오류 = Bencoded = D1 : ELI201E23 : 일반 오류 OCURREDE1 : T2 : AA1 : Y1 : EE

DHT 쿼리

모든 쿼리에는 쿼리 노드의 노드 ID가 포함 된 "ID"키와 값이 있습니다. 모든 응답에는 응답 노드의 노드 ID를 포함하는 "ID"키와 값이 있습니다.

가장 기본적인 쿼리는 핑입니다. "Q"= "Ping"핑 쿼리는 단일 인수가 있습니다. 핑에 대한 적절한 응답에는 응답 노드의 노드 ID가 포함 된 단일 키 "ID"가 있습니다.

인수 : "> 응답 :">

Ping query => bencoded = d1 : ad2 : id20 : abcdefghij0123456789e1 : q4 : ping1 : t2 : aa1 : y1 : qe

응답 => bencoded = d1 : rd2 : id20 : mnopqrstuvwxyz123456e1 : t2 : aa1 : y1 : re

find_node

찾기 노드는 ID가 주어진 노드의 연락처 정보를 찾는 데 사용됩니다. "q"== "find_node"wind_node 쿼리에는 쿼리 노드의 노드 ID가 포함 된 "ID"와 쿼리가 추구하는 노드의 ID를 포함하는 "대상"이라는 두 가지 인수가 있습니다. 노드가 find_node 쿼리를 수신하면 키 "노드"및 대상 노드의 소형 노드 정보를 포함하는 문자열 값 또는 자체 라우팅 테이블에서 가장 가까운 노드로 응답해야합니다.

인수 : ","대상 ":" "> 응답 :", "노드": "">

find_node query => bencoded = d1 : ad2 : id20 : abcdefghij01234567896 : target20 : mnopqrstuvwxyz123456e1 : Q9 : find_node1 : t2 : aa1 : y1 : qe

응답 => bencoded = d1 : rd2 : id20 : 0123456789ABCDEFGHIJ5 : NODES9 : def456. E1 : T2 : AA1 : Y1 : re

get_peers

토런트 정보 해시와 관련된 동료를 얻으십시오. "Q"= "get_peers"get_peers 쿼리에는 쿼리 노드의 노드 ID가 포함 된 "ID"와 토런트의 정보가 포함 된 "info_hash"가 포함되어 있습니다. 쿼리 노드에 정보 해시에 대한 피어가있는 경우 문자열 목록으로 "값"으로 반환됩니다. 단일 피어를위한 "Compact"형식 피어 정보를 포함하는 각 문자열. 쿼리 노드에 정보 해시에 대한 피어가없는 경우 쿼리에 제공된 정보 해시에 가장 가까운 쿼리 노드 라우팅 테이블에 K 노드가 포함 된 키 "노드"가 반환됩니다. 두 경우 모두 "토큰"키도 반환 값에 포함됩니다. 토큰 값은 향후 anounce_peer query에 필요한 인수입니다. 토큰 값은 짧은 바이너리 스트링이어야합니다.

인수 : ","info_hash ":" "> 응답 :", "토큰": "", "value": [ "", ""]> 또는 : ","토큰 ":" ","노드 ":" ">

get_peers query => bencoded = d1 : ad2 : id20 : abcdefghij01234567899 : info_hash20 : mnopqrstuvwxyz123456e1 : Q9 : get_peers1 : t2 : aa1 : y1 : qe

peers => bencoded = d1 : rd2 : id20 : abcdefghij01234567895 : token8 : aoeusnth6 : valuel6 : axje.U6 : idhtnmee1 : t2 : aa1 : y1 : re

가장 가까운 노드가있는 응답 => bencoded = d1 : rd2 : id20 : abcdefghij01234567895 : nodes9 : def456. 5 : TOKEN8 : AOEUSNTHE1 : T2 : AA1 : Y1 : RE

ance_peer

쿼리 노드를 제어하는 ​​피어가 포트에서 토런트를 다운로드하고 있음을 알립니다. Aontouns_Peer는 쿼리 노드의 노드 ID를 포함하는 "ID", "Info_Hash", 토런트의 정보 해시, 포트를 정수로 포함하는 "포트"및 이전 GET_PEERS Query Query에 대한 응답으로받은 "토큰"을 포함하는 "ID"는 다음과 같습니다. 쿼리 노드는 토큰이 이전에 쿼리 노드와 동일한 IP 주소로 전송되었는지 확인해야합니다. 그런 다음 쿼리 노드는 쿼리 노드의 IP 주소와 정보 해시 아래에 제공된 포트 번호를 동료 연락처 정보 저장에 저장해야합니다.

선택적 인수가 있습니다 묵시적 _port 어떤 값은 0 또는 1입니다. 그것이 존재하고 0이 아닌 경우 포트 인수를 무시하고 UDP 패킷의 소스 포트는 대신 피어의 포트로 사용해야합니다. 이것은 외부 포트를 알지 못하는 NAT 뒤의 동료들에게 유용하며 UTP를 지원하면 DHT 포트와 동일한 포트에서 들어오는 연결을 수락합니다.

인수 : ","empsied_port ":,"info_hash ":" ","포트 ":"토큰 ":" "> 응답 :">

ANTOUNS_PEERS query => bencoded = d1 : ad2 : id20 : abcdefghij012345678912 : empsied_porti1e9 : info_hash20 : mnopqrstuvwxyz1234564 : porti6881e5 : token8 : aoeusnthe1 : q13 : qual q1 : ancake_peer1 : aoeusnthe1 :

응답 => bencoded = d1 : rd2 : id20 : mnopqrstuvwxyz123456e1 : t2 : aa1 : y1 : re

참조

[1] Peter Maymounkov, David Mazieres, "Kademlia : XOR 메트릭을 기반으로 한 P2P 정보 시스템", IPTPS 2002. http : // www.CS.쌀.EDU/Conferences/IPTPS02/109.PDF
[2] SHA1과 많은 엔트로피를 사용하여 고유 한 ID를 보장하십시오.
[삼] BEP_0020. 동료 ID 규칙. (http : // www.Bittorrent.org/beps/bep_0020.HTML)

저작권

이 문서는 공개 영역에 배치되었습니다.

WebTorrent/BitTorrent-Dht

이 커밋은이 저장소의 어떤 지점에도 속하지 않으며, 저장소 외부의 포크에 속할 수 있습니다.

스위치 브랜치/태그

지점 태그

분기를로드 할 수 없었습니다

보여줄 것이 없습니다

태그를로드 할 수 없습니다

보여줄 것이 없습니다

이미 사용중인 이름입니다

제공된 지점 이름이 이미 존재합니다. 많은 git 명령은 태그와 분기 이름을 모두 받아들이 므로이 분기를 만드는 것이 예기치 않은 동작을 유발할 수 있습니다. 이 지점을 만들고 싶습니까??

취소 생성

  • 현지의
  • Codespaces

https github cli

웹 URL을 사용하여 SVN과 함께 git 또는 체크 아웃 사용.

공식 CLI와 함께 빨리 일하십시오. CLI에 대해 자세히 알아보십시오.

필요한 로그인

Codespace를 사용하려면 로그인하십시오.

Github 데스크탑을 시작합니다

아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.

Github 데스크탑을 시작합니다

아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.

Xcode를 시작합니다

아무 일이 발생하지 않으면 Xcode를 다운로드하고 다시 시도하십시오.

Visual Studio 코드 시작

Codespace가 준비된 후에 열립니다.

Codespace를 준비하는 데 문제가있었습니다. 다시 시도하십시오.

최신 커밋

3B4ED64 2023 년 5 월 8 일

… v1.0.9

git 통계

파일

최신 커밋 정보를로드하지 못했습니다.

최신 커밋 메시지

시간을 투입하십시오

readme.MD

간단하고 강력한 비트 토렌트 DHT 구현

마디.Bittorrent DHT 프로토콜의 JS 구현. Bittorrent DHT는 BitTorrent의 주요 피어 디스커버리 레이어로 추적자가없는 급류를 허용합니다. DHT는 굉장합니다!

이 모듈은 WebTorrent에서 사용합니다.

  • JavaScript에서 DHT 프로토콜의 완전한 구현
  • 사양을 따릅니다
  • DHT에 임의의 데이터를 저장하기위한 BEP44를 지원합니다
  • 견고하고 잘 테스트
    • 포괄적 인 완벽한 플린 테스트 스위트
    • WebTorrent, Peerflix 및 Playback에서 사용합니다

    NPM 설치 BitTorrent-Dht 

    NPM 설치 MAGNET-URI 

    수입 DHT ~에서 'bittorrent-dht' 수입 자석 ~에서 '마그넷-우리' Const 우리 = '자석:?XT = 항아리 : BTIH : E3811B9539CACFF680E418124272177C47477157 ' Const 구문 분석 = 자석(우리)) 콘솔.통나무(구문 분석.정보 해시)) // 'E3811B9539CACFF680E418124272177C47477157' Const DHT = 새로운 DHT()) DHT.듣다(20000, 기능 ())  콘솔.통나무('지금 듣고')) >)) DHT.~에('또래', 기능 (또래, 정보 해시, ~에서))  콘솔.통나무('잠재적 인 동료' + 또래.주인 + ':' + 또래.포트 + ' 을 통해 ' + ~에서.주소 + ':' + ~에서.포트)) >)) // 주어진 토런트 정보 해시에 대한 피어를 찾으십시오 DHT.조회(구문 분석.정보 해시))

    DHT = New DHT ([Opts])

    새 DHT 인스턴스를 만듭니다.

    Opts가 지정되면 기본 옵션 (아래 표시)이 재정의됩니다.

     nodeid: '' '', // 160 비트 DHT 노드 ID (버퍼 또는 육각 문자열, 기본값 : 무작위로 생성) 부트 스트랩: [의 뜻]], // 부트 스트랩 서버 (기본값 : 라우터.Bittorrent.com : 6881, 라우터.uTorrent.com : 6881, dht.TransmissionBT.com : 6881) 주인: 거짓, // 로컬 피어의 호스트, 지정된 경우 로컬 테이블에 추가 된 GET GET (string, 기본적으로 비활성화) 동시성: 16, // K-RPC 최대 동시 UDP 요청을 지정하려는 옵션 허용 (숫자, 16 기본적으로 16) 해시시: 기능, // 사용하는 Custom HASH 기능 (기본적으로 SHA1), KRPC: KRPC()), // 선택적 k-rpc 인스턴스 TimebucketoutDated: 900000, // 15 분마다 버킷을 확인합니다 최대: 무한대 // 발표 된 동료들을위한 선택적 설정 >

    dht_store를 사용하려면 Opts를 설정하십시오.ED25519 SUPERCOP/REF10 구현을 확인하십시오. opts.검증 (서명, 값, publickey)은 Signature 및 Value 버퍼가 Public Key에 의해 생성되었는지 여부를 반환해야합니다 .

    예를 들어, DHT_STORE의 경우 다음을 수행 할 수 있습니다

    수입 에드 ~에서 'ED25519-SuperCop' Const DHT = 새로운 DHT( 확인하다: 에드.확인하다 >))

    주어진 정보 해시에 대한 동료를 찾으십시오.

    이것은 DHT에서 재귀적인 조회를합니다. 발견되는 잠재적 인 동료는 동료 이벤트로 방출됩니다. 자세한 내용은 아래의 피어 이벤트를 참조하십시오.

    Infohash는 문자열 또는 버퍼 일 수 있습니다. 콜백은 재귀 조회가 종료되었을 때 호출되며 두 개의 매개 변수로 호출됩니다. 첫 번째는 오류 또는 널입니다. 두 번째는 동료가있는 노드의 수입니다. 일반적 으로이 정보를 사용할 필요가 없으며 단순히 동료 이벤트를들을 수 있습니다.

    쿼리를 중단 할 수있는 abort () 함수를 반환합니다.

    DHT.듣기 ([포트], [주소], [onlistening])

    주어진 포트에서 DHT를 듣게하십시오 . 포트가 정의되지 않은 경우 사용 가능한 포트가 자동으로 선택됩니다.

    주소가 정의되지 않은 경우 DHT는 모든 주소에서 듣기 위해 노력합니다.

    onlistening이 정의되면 청취 이벤트에 첨부됩니다.

    DHT의 청취 소켓에 대한 주소 정보가 포함 된 개체를 반환합니다. 이 개체에는 주소, 가족 및 포트 속성이 포함되어 있습니다.

    DHT.발표 (Infohash, [Port], [Callback])

    쿼리 노드를 제어하는 ​​피어가 포트에서 토런트를 다운로드하고 있음을 알립니다.

    포트를 생략하면 묵시적 포트 옵션이 설정되고 다른 피어는 발표 된 포트로 공개 DHT 포트를 사용합니다.

    DHT.발표가 호출되고 캐시 된 라우팅 테이블이없고 DHT.조회는 먼저 관련 노드를 발견하고 각각의 "토큰"을 얻기 위해 수행됩니다. 시간이 더 걸립니다.

    "토큰"은 제어 피어가 토런트를 다운로드하고 있음을 알리기 위해 노드를 위해 제시 해야하는 불투명 값입니다. 최근 동료를위한 쿼리에서 동일한 쿼리 노드에서받은 토큰을 제시해야합니다. 이것은 악의적 인 호스트가 급류에 대한 다른 호스트에 가입하는 것을 방지하기위한 것입니다. 모든 토큰 관리는이 모듈에서 내부적으로 처리됩니다.

    발표 작업이 완료되면 콜백이 호출되며 오류 또는 널 인 단일 매개 변수로 호출됩니다.

    DHT 노드 및 BEP44 값을 포함하여 DHT의 현재 상태를 반환합니다.

    < "노드": [], "가치": <>>

    특히 DHT 노드는 BitTorrent 클라이언트의 재시작 사이에 DHT를 디스크로 지속하는 데 유용합니다 (사양에 의해 권장). 배열의 각 노드는 호스트 (문자열) 및 포트 (번호) 속성이있는 개체입니다.

    새 DHT 객체를 인스턴스화 할 때 DHT 노드를 복원하려면 배열의 노드를 통해 단순히 추가하여 추가 노드 방법으로 추가하십시오.

    Const DHT1 = 새로운 DHT()) // 시간이 지남에 따라 . // DHT를 파괴하십시오 Const 노드 = DHT1.Tojson()).노드 DHT1.파괴하다()) // 시간이 지남에 따라 . // 첫 번째 라우팅 테이블로 새 DHT를 초기화합니다 Const DHT2 = 새로운 DHT()) 노드.각각(기능 (마디))  DHT2.추가 노드(마디)) >))

    DHT 라우팅 테이블에 노드를 수동으로 추가하십시오. 라우팅 테이블에 공간이 있거나 반응이없는 노드를 퇴거하여 공간을 만들 수 있음) 노드가 추가됩니다. 그렇지 않은 경우 노드가 추가되지 않습니다. 피어 와이어가 포트 메시지를 보내 DHT 포트를 공유 할 때 호출하는 데 유용합니다.

    노드는 다음과 같습니다

     주인: 노드 호스트, 포트: Nodeport >

    DHT를 파괴하십시오. 소켓을 닫고 큰 데이터 구조 자원을 정리합니다.

    DHT에 임의의 페이로드를 작성하십시오. (Bep 44).

    모든 요청의 경우 다음을 지정해야합니다

    • opts.V- 쓰기 버퍼 페이로드, 1000 바이트 미만

    Opts 만 지정하는 경우.v, 내용은 불변으로 간주되며 해시는 콘텐츠의 해시 일뿐입니다.

    다음은 DHT에서 불변의 콘텐츠를 만드는 간단한 예입니다

    수입 DHT ~에서 'bittorrent-dht' Const DHT = 새로운 DHT()) Const  = 완충기.alloc(200)).채우다('알파벳')) DHT.놓다( V:  >, 기능 (오류, 해시시))  콘솔.오류('오류 =', 오류)) 콘솔.통나무('해시 =', 해시시)) >))

    Mutable Content의 경우 해시는 공개 키의 해시가 될 것입니다.케이 . 이 옵션은 사용할 수 있습니다

    • opts.K -ED25519 공개 키 버퍼 (32 바이트) (필수)
    • opts.부호 (BUF) - OPT에 해당하는 ED25519 시그니처 버퍼 (64 바이트)를 생성하는 기능.K 공개 키 (필수)
    • opts.seq- 선택적 시퀀스 (정수), 단조로 증가해야합니다 (필수)
    • opts.CAS- 비교 및 ​​스왑에 대한 옵션 이전 순서
    • opts.소금 - 선택적 소금 완충액을 포함합니다

    Bittorrent Bep44는 ED25519를 사용합니다. ED25519-SuperCop 패키지를 사용하여 적절한 서명, Bittorrent-DHT-STORE-KEYPAIR, BITTORRENT-DHT-SODIIM 또는보다 편리한 버전을 생성 할 수 있습니다.

    변이 가능한 업데이트를하려면 사양에 따라 타원 키와 팩 값을 만들어야합니다

    수입 에드 ~에서 'bittorrent-dht-sodium' Const 키어 아 = 에드.keygen()) Const  = 완충기.alloc(200)).채우다('무엇이든')) // 보내고 싶은 페이로드 Const opts =  케이: 키어 아.PK, 서열: 0, V: , 징후: 기능 (부프))  반품 에드.징후(부프, 키어 아.SK)) > > 수입 DHT ~에서 'bittorrent-dht' Const DHT = 새로운 DHT()) DHT.놓다(opts, 기능 (오류, 해시시))  콘솔.오류('오류 =', 오류)) 콘솔.통나무('해시 =', 해시시)) >))

    변이 가능하거나 불변의 형태로, 콜백 (오류, 해시, N)은 노드가 값을 저장할 수없는 경우 오류가있는 화재입니다 . n은 Put and Hash를 받아 들인 피어의 양을 설정합니다.get (해시)).

    전화해야합니다 .put () 노드는 2 시간보다 오래된 데이터 노드를 폐기 할 수 있으므로 살아 남기고 싶은 컨텐츠에 대해 매시간 ().

    키/값 쌍을 받고 DHT에 다시 집어 넣으려면 살아 남기 위해 다시 넣을 수 있습니다.

    수입 에드 ~에서 'bittorrent-dht-sodium' Const DHT = 새로운 DHT( 확인하다: 에드.확인하다 >)) // 음소거 된 컨텐츠를 얻으려면 "확인"PARAM을 지정해야합니다. 그렇지 않으면 NULL이 반환됩니다 DHT.얻다(열쇠, 기능 (오류, 해안))  DHT.놓다(해안, 기능 ())  // 키/값 쌍을 다시 설명했습니다 >)) >))

    DHT.get (해시, opts, 콜백)

    데이터 레코드를 읽으십시오 (생성 .dht에서 put ()). (Bep 44)

    해시, 16 진 문자열 또는 버퍼, DHT의 조회 데이터 컨텐츠, 콜백으로 결과를 보냅니다 (err, res) .

    이 옵션은 사용할 수 있습니다

    • opts.확인 - DHT 인스턴스화 중에 제공된 기본값 ED25519 확인 기능을 재정의하십시오.
    • opts.소금 - 해시를 계산하는 데 사용 된 옵션 소금 완충액 (있는 경우). 해시에 포함 된 경우 지정해야합니다.
    • opts.캐시 - 네트워크 조회를 수행하는 대신 사용 가능한 경우 로컬 캐시 된 응답 값을 사용하십시오 (기본값 to true).

    RES 객체는 DHT에 기록 된 옵션 객체와 유사합니다 .놓다() :

    • 해안.v- 값이 들어간다
    • 해안.ID- 컨텐츠를 반환 한 노드
    • 해안.K- 공개 키 (변이 가능한 데이터에 대해서만 존재 함)
    • 해안.SIG- 서명 (변이 가능한 데이터에 대해서만 존재 함)
    • 해안.seq- 시퀀스 (선택 사항, 변이 가능한 데이터에 대해서만 존재 함)

    DHT가 완전히 부트 스트랩 될 때 방출됩니다 (i.이자형. 라우팅 테이블은 부트 스트랩 노드를 통해 충분히 채워져 있습니다). '준비'이벤트가 시작되기 전에 조회를해도 괜찮습니다.

    참고 : DHT를 사용하여 초기화하는 경우 < bootstrap: false >옵션, 그런 다음 라우팅 테이블에 노드가 없어도 다음 진드기에서 '준비'이벤트가 시작됩니다. DHT로 라우팅 테이블을 수동으로 채우는 것으로 가정합니다.이 옵션을 통과하는 경우 추가.

    DHT가 듣고있을 때 방출됩니다.

    DHT.on ( 'peer', function (Peer, Infohash, From) < . >))

    잠재적 인 피어가 발견 될 때 방출됩니다. 피어는 형식입니다 . Infohash는 피어가 속한 떼의 토렌트 정보 해시입니다. 조회 (Infohash) 전화에 응답하여 방출.

    DHT.on ( 'error', function (err) < . >))

    DHT에 치명적인 오류가있을 때 방출됩니다.

    DHT.on ( '노드', 함수 (노드) < . >))

    DHT가 새 노드를 찾을 때 방출됩니다.

    DHT.on ( 'Ahnounts', function (Peer, Infohash) < . >))

    동료가 DHT에 저장되기 위해 스스로를 발표했을 때 방출.

    DHT.on ( '경고', 함수 (err) < . >))

    DHT가 다른 DHT 노드에서 예기치 않은 메시지를받을 때 방출됩니다. 이것은 순전히 정보입니다.

    • Bittorrent DHT 프로토콜
    • Kademlia : XOR 메트릭을 기반으로 한 피어 투 피어 정보 시스템

    MTE는 다음과 같이 설명합니다. BitTorrent DHT Peer Discovery가 작동하는 방법

    Peer Discovery는 BitTorrent 프로토콜의 필수 부분입니다. 그것&rsquo;s 다운로드가 너무 빨리 발생하는 방법 : 여러 사람에게 연결하고 각각 파일의 작은 부분을 귀하에게 업로드합니다. 이 현상은 인터넷에서 정보를 다운로드하고 공유하는 매우 인기있는 방법을 만들었습니다. 지적 재산에 미치는 영향에 관계없이 나는&rsquo;M은 한 가지를 설명하기 위해 여기에 : 전체 BitTorrent DHT Peer Discovery 프로세스가 실제로 어떻게 작동하는지. 이 메커니즘에 대해 조금 (또는 많은)를 알고 있을지 모르지만 확실히 충분합니다&rsquo;DHT라는 용어가 무엇을 의미하는지 알기가 궁금하고 그 아래에 나열된 동료들이 처음부터 당신을 찾았는지 궁금합니다.

    DHT는 무엇을 의미합니까??

    DHT는 짧습니다 &ldquo;분산 된 해시 테이블,&rdquo; 그리고 그것은 당신이 동료를 찾는 매체를 나타냅니다 &ldquo;부트 스트랩.&rdquo; 나&rsquo;조금만 설명합니다. DHT를 통해 동료를 찾을 수 있다는 사실을 명심하십시오.

    Bittorrent DHT 위치

    많은 사람들이 그것을 말하는 동안&rsquo;분산되어 있습니다&rsquo;인터넷의 유니 캐스트 특성을 고려할 때 실제로는이 작업을 수행하기가 매우 어렵습니다. 웹에 연결할 때는 그렇지 않습니다&rsquo;T는 이미 연결된 수십억 개의 컴퓨터에 귀하의 존재를 발표했습니다. 이것은 막대한 대역폭을 낭비합니다. 대신, 귀하의 지역 인터넷 서비스 제공 업체&rsquo;S 라우터와 연결 목적지는 당신을 알고있는 유일한 사람입니다&rsquo;온라인으로도. 저것&rsquo;s 뭐 &ldquo;유니 캐스트&rdquo; 평신도에서 의미합니다&rsquo;s 용어. 멀티 캐스트는 컴퓨터가 로컬 네트워크에 들어가면 발생하는 일입니다. 그 존재는 같은 서브넷의 다른 모든 컴퓨터에 알려져 있으며&rsquo;이제 당신의 존재를 알고 있습니다. 이렇게하지 않기 때문입니다&rsquo;T는 외부 인터넷에서 발생합니다&rsquo;비트 토렌트 프로토콜 자체의 한계를 고려할 때 실제로 완전히 분산 된 구조를 작성하는 방법은 없습니다.

    결과적으로 토런트 파일 다운로드를 시작할 때 연결하는 두 개의 주요 DHT가있는 경향이 있습니다 라우터.Bittorrent.com 그리고 라우터.uTorrent.com. 당신을 위해&rsquo;RE CURIVE, 당신은 포트 6881에서 그들과 연결. 그것&rsquo;이 정보를 암기 할 필요는 없습니다. 때때로 피어 데이터는 급류 파일에 포함되어 동료를 더 쉽게 찾는 프로세스를 제공합니다.

    부트 스트랩

    Bitdht-Discovery

    동료들을 모으려면 먼저 토런트 네트워크에 부트 스트랩을해야합니다. 부트 스트래핑은 DHT에 연결하고 동료를 찾는 과정을 설명하는 멋진 방법입니다. 연결되면 DHT 서버는 귀하의 소수의 피어 IP 주소를 보냅니다&rsquo;LL도 연결합니다. 그들&rsquo;동료 목록에 모든 피어가 파일을 다운로드 (또는 파종) 할 때까지 동료들과 연결된 피어의 주소를 제공합니다&rsquo;다시 얻으려고 노력합니다. 그것&rsquo;뿌리에서 가지까지 나무를 따르는 것과 같습니다.

    이론적으로 말하면, 당신은 다른 모든 동료들을 얻기 위해 하나의 단일 피어 주소 만 있으면됩니다. 나머지 주소를 당신과 공유하기 때문입니다. 이로 인해 트래커와 DHT는 많은 대역폭을 절약 할 수 있으며, 그렇지 않으면 연결된 모든 새로운 피어에게 동료 목록을 보내는 데 낭비됩니다. 동료는 서로에게 릴레이 정보를 제공함으로써 번거 로움을 최소화합니다.

    당신 후&rsquo;VE는 모든 동료를 발견하면 다운로드가 시작됩니다!

    DHT가있는 경우 왜 대부분의 사람들이 여전히 추적기를 사용합니까??

    DHT는 재미있을 수 있지만 대부분의 사람들은 여전히 ​​추적기를 사용하여 데이터를 다운로드합니다. 이것은 DHT의 고유 한 특성 때문입니다. 허락하다&rsquo;s는 오픈 소스 작품을 급류로 업로드하는 사이트가 있다고 말합니다. 그 급류에 어떤 일이 일어나는지 완전히 통제하고 다운로드하는 개인의 개인 정보를 보호하기 위해&rsquo;내 자신의 추적기를 호스팅하는 것이 더 유리합니다. 불법적 인 다운로드 자료 사용 추적기를 게시하는 사이트는 지하 측면을 유지하고 그에 게시되는 내용과 제거되는 내용을 제어하기위한 선호 매체로 추적자.

    즉, 모든 급류 다운로드가 불법은 아닙니다. 거기&rsquo;s 웹 호스트의 대역폭을 낭비하지 않고 자신이 가지고있는 것을 공유하고자하는 개인의 오픈 소스 프로젝트 및 공개 도메인의 대규모 저장소.

    혼란스러운?

    만약 너라면&rsquo;여기에 공유 된 정보에 여전히 의아해, 아래에 의견을 남겨두면 논의 할 수 있습니다!

    미구엘 라이바-고메즈

    Miguel은 10 년 이상 비즈니스 성장 및 기술 전문가였으며 더 오랫동안 소프트웨어를 작성했습니다. 루마니아에있는 그의 작은 성에서 그는 기술 세계에 영향을 미치는 것들에 차갑고 분석적인 관점을 제시합니다.

    뉴스 레터를 구독하십시오!

    최신 튜토리얼은받은 편지함으로 바로 전달됩니다