비트 토 런트 클라이언트는 처음에 어떻게 피어를 발견합니까?
토런트 클라이언트가 파일 조각을 공유하고 모으기 위해 군대에 가입하면 동료가 어디에 있는지 정확히 알 수 있습니까? 우리가 BitTorrent 프로토콜을 지배하는 메커니즘 내부를 훑어 볼 때 읽어보십시오..
오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..
질문
수퍼 유저 리더 인 Steve V.는 BitTorrent 프로토콜의 DHT (Distributed Hash Table) 시스템에 관해 매우 구체적인 질문을했습니다.
나는 이미이 수퍼 유저 응답과이 위키 피 디아 기사를 읽었지만 둘 다 내 머리를 감싸기에는 너무 기술적이다..
나는 추적자의 아이디어를 이해한다 : 클라이언트는 떼에서 동료의 명부를 유지하는 중앙 서버에 연결한다..
또한 동료 교환의 아이디어를 이해합니다. 이미 떼주기에있는 고객이 동료 목록을 서로에게 보냅니다. 새로운 피어가 발견되면 목록에 추가됩니다..
제 질문은, DHT는 어떻게 작동합니까? 그건, 어떻게 새로운 클라이언트가 추적자 또는 적어도 하나의 맴버의 지식없이 동료와 합류하여 동료를 교환 할 수 있습니까??
(참고 : 간단한 설명이 가장 좋습니다.)
그의 질문은 BitTorrent 시스템의 다양한 기능에 대한 정말 자세한 답변을 나타 냈습니다. 이제 살펴 보자..
대답
수퍼 유저 기고가 Allquixotic은 깊이있는 설명을 제공합니다.
어떻게 새로운 고객이 추적자없이 또는 적어도 하나의 맴버의 지식없이 동료와 합류하여 동료를 교환 할 수 있습니까??
당신은 할 수 없습니다. 불가능하다.*
* (당신의 노드가 로컬 영역 네트워크 이미 DHT의 노드가 된 것입니다. 이 경우, Avahi와 같은 브로드 캐스팅 메커니즘을 사용하여이 피어를 "발견"하고 부트 스트랩 할 수 있습니다. 그러나 어떻게 그들 스스로 부트 스트랩? 결국 공용 인터넷에 연결해야하는 상황에 직면하게됩니다. 공용 인터넷은 멀티 캐스트가 아닌 유니 캐스트 전용이므로 동료의 사전 목록 사용에 어려움을 겪고 있습니다.
참고 문헌
Bittorrent DHT는 분산 된 해시 테이블의 이론적 개념의 특별한 경우 인 Kademlia라는 프로토콜을 통해 구현됩니다..
박람회
Kademlia 프로토콜을 사용하면 네트워크에 가입 할 때 부트 스트랩 절차를 거치게됩니다., 미리, DHT 네트워크에 이미 참여하고있는 적어도 하나의 노드의 IP 주소와 포트. 예를 들어, 연결하는 추적기 자체가 DHT 노드 일 수 있습니다. 한 DHT 노드에 연결되면 더 많은 노드에 대한 연결 정보를 제공하는 DHT에서 정보를 다운로드 한 다음 그 "그래프"구조를 탐색하여 더 많은 노드에 대한 연결을 얻습니다. 다른 노드와의 연결, 페이로드 데이터 (다운로드의 덩어리).
나는 당신의 실제 질문을 굵은 글씨로 생각합니다. - 모르는 사이에 Kademlia DHT 네트워크에 가입하는 방법에 관한 것입니다. 어떤다른 구성원들 - 거짓 가정에 기초 함.
질문에 대한 간단한 답변은 굵게 표시되어 있습니다., 너는하지 않는다.. DHT 메타 데이터가 포함되어있을 수도있는 호스트 한 개라도 정보를 모르는 경우 시작이되지 않습니다. 제 말은, DHT 정보를 방송하는 공개 포트를 사용하여 공중 인터넷에서 IP를 발견하려는 시도를 무차별 적으로 시도 할 수 있다는 것입니다. 하지만 BT 클라이언트는 DHT 메타 데이터를 제공하는 안정적인 DHT 노드로 연결되는 특정 고정 IP 또는 DNS에 하드 코딩됩니다..
기본적으로 DHT는 가입 메커니즘처럼 분산되어 있으며 가입 메커니즘이 매우 취약하기 때문에 (전체 인터넷에서 "방송"할 방법이 없습니다!) 유니 캐스트DHT 데이터를 얻기 위해 개별 사전 할당 된 호스트에게), Kademlia DHT는 정말 분산 된. 단어의 가장 엄격한 의미가 아닙니다..
이 시나리오를 상상해보십시오. P2P를 중지하려는 사용자가 나가서 공격을 준비합니다. 모든 일반적으로 사용되는 안정적인 DHT 노드는 부트 스트래핑에 사용됩니다. 일단 그들이 공격을 무대에 올리면 모든 한 번에 모든 노드. 쾅; 모든 단일 부트 스트래핑 DHT 노드가 하나씩 다운되었습니다. 이제 뭐? 에 연결되어 있습니다. 중앙 집중식 추적기 그 (것)들에게서 동료의 전통적인 명부를 다운로드하기 위하여. 음, 추적기도 공격한다면, 당신은 정말로, 정말 개울. 즉, Kademlia와 전체 BT 네트워크는 인터넷 자체의 한계로 인해 제한을받습니다. 즉, 90 %를 초과하는 공격을 막기 위해 성공적으로 공격하거나 오프라인으로 전환해야하는 한정된 (그리고 비교적 작은) 컴퓨터가 있습니다. 사용자가 네트워크에 연결할 수 없음.
"pseudo-centralized"부트 스트래핑 노드가 모두 사라지면 DHT의 내부 노드는 부트 스트래핑하지 않기 때문에 DHT 외부의 아무도 내부 노드에 대해 안다., 쓸모 없어. DHT에 새로운 노드를 가져올 수는 없습니다. 그래서 각 내부 노드가 시간이 지남에 따라 DHT와의 연결을 끊을 때, 사람들이 컴퓨터를 종료하고 업데이트를 위해 재부팅하기 때문에 네트워크가 무너질 것입니다.
물론이 문제를 해결하기 위해 누군가가 사전에 결정된 안정적인 DHT 노드 또는 DNS 주소 목록을 포함하는 패치 된 BitTorrent 클라이언트를 배포하고이 새로운 목록을 대신 사용하도록 큰 소리로 P2P 커뮤니티에 알릴 수 있습니다. 그러나 이것은 침략자 (노드 - 먹는 사람)가 점차적으로이 목록을 다운로드하고 용감한 새로운 부트 스트래핑 노드를 목표로 삼은 다음 "오프라인으로 가져가는" "꽝꽝 나무"상황이 될 것입니다.
원래 질문에 대한 답변을 배울뿐만 아니라 BitTorrent 시스템의 특성과 취약점에 대해서도 상당히 배웠습니다..
설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..