programing tip

Bittorent 클라이언트의 DHT는 어떻게 "부트 스트랩"됩니까?

itbloger 2020. 11. 11. 08:11
반응형

Bittorent 클라이언트의 DHT는 어떻게 "부트 스트랩"됩니까?


트래커가없는 토렌트가 있고 비트 토런트 클라이언트를 시작하여 아직 피어가없는 경우 ... DHT에서 누가 먼저 연결해야하는지 어떻게 알 수 있습니까? 시작하려면 DHT에서 적어도 하나의 노드를 알아야 할 것 같습니다 ....


BitTorrent 클라이언트가 DHT에 연결하면 피어를 찾는 초기 위치가 있습니다. 원래 BitTorrent 클라이언트에는 작업을 시작하는 데 도움이되는 bitorrent.com에 대한 URL이있었습니다. 참조를 찾아 보았지만 찾을 수 없습니다. 다른 클라이언트와 연결을 설정 announce하면 DHT 네트워크에서을 수행하여 찾고있는 토렌트에 대한 피어를 찾을 수 있습니다.

다음은 DHT를 논의 하는 BitTorrent 사양에 대한 링크 입니다.

트래커리스 토렌트 사전에는 "알림"키가 없습니다. 대신, 트래커리스 토렌트에는 "노드"키가 있습니다. 이 키는 클라이언트의 라우팅 테이블을 생성하는 토렌트에서 K 개의 가장 가까운 노드로 설정되어야합니다. 대안으로, 키는 토렌트를 생성하는 사람이 운영하는 것과 같은 알려진 좋은 노드로 설정 될 수 있습니다. 토렌트 파일에 "router.bittorrent.com"을 자동으로 추가하거나이 노드를 클라이언트 라우팅 테이블에 자동으로 추가하지 마십시오.


메인 라인 DHT 부트 스트랩 노드는 여기 router.utorrent.com에 CNAME router.bittorrent.com입니다. 포트 6881.


DHT 모니터링 프로젝트 사이트 하단의 그래프

  • dht.transmissionbt.com
  • router.utorrent.com
  • router.bittorrent.com

부트 스트래핑 피어로


BiTTorrent에는 세 가지 주요 옵션이 있습니다.

  • 토렌트 파일 : 일부 토렌트 파일은 nodesDHT에 링크 할 수 있도록 포함 할 수 있습니다 (사실 토렌트 파일을 만들 때 권장 됨).
  • 하드 코딩 : 일부 토렌트 클라이언트는 몇 개의 부트 스트랩 노드 (stk에서 언급 한 것과 같은)를 하드 코딩합니다. 이들은 일반적으로 장기 실행 서버가있는 회사 및 조직에서 실행합니다.
  • PEX / Peer Conversations : 일반적으로 다른 토렌트를 다운로드하는 사람들에게 DHT 노드를 요청할 수 있습니다 (클라이언트가 서로 언어를 이해하는 경우. 즉 일부 버전이 호환되지 않는 경우).

Transmission피어를 가져올 다른 방법이없는 경우 dht에 하드 코딩 된 부트 스트랩 노드사용합니다 .

bootstrap_from_name( "dht.transmissionbt.com", 6881, bootstrap_af(session) );

각 토렌트 클라이언트가 자체 부트 스트랩 노드를 사용한다고 생각합니다.


클라이언트는 상호 작용을 통해 다른 DHT 가능 피어에 대해 배울 수 있습니다. DHT에 대한 피어의 지원은 Handshake에 광고됩니다. 클라이언트가 하나 이상의 양호하고 잘 연결된 DHT 피어를 발견하면 DHT를 탐색하여 점점 더 가까운 DHT 피어를 찾을 수 있습니다. 소프트웨어를 다시 시작할 때 DHT-speak 노드라고하는 이러한 피어를 기억하고 실행중인 동안 목록을 지속적으로 유지 / 업데이트합니다. 클라이언트가 좋은 DHT 가능 피어를 알지 못하는 더 나쁜 경우에는 추적기를 통해 알게 된 몇 가지 좋은 DHT 가능 피어와 연락 할 수 있도록 추적기 기반 토렌트를 다운로드해야합니다.

업데이트 : @Seppo가 지적한 바와 같이 DHT 피어의 초기 목록의 경우 토렌트 클라이언트는 하나 이상의 하드 코딩 된 DNS 이름을 사용하여 잘 알려진 피어의 주소를 찾을 수 있으며 하드 코딩 된 목록을 포함 할 수도 있습니다. 최종 폴백으로도 피어링됩니다. 그러나 DNS의 한 가지 제한은 포트 정보가 제공되지 않으므로 일반적으로 기본 포트 6881이 가정되는 반면 다른 방법은 다른 포트에서 작동하는 피어를 지원하는 것을 의미합니다.


기록을 위해 Deluge하드 코딩 된 boostrap 노드 도 사용합니다 .

        self.session.add_dht_router("router.bittorrent.com", 6881)
        self.session.add_dht_router("router.utorrent.com", 6881)
        self.session.add_dht_router("router.bitcomet.com", 6881)

참고 URL : https://stackoverflow.com/questions/1181301/how-does-a-dht-in-a-bittorent-client-get-bootstrapped

반응형