Bittorrent는 어떻게 작동합니까?


34

비트 토 런트 파일 공유 방법에 대해 자세히 알고 싶습니다. 나는 기술적으로 진보 된 사용자 (프로그래머)이므로 기술적으로 진보 된 자료는 문제가되지 않지만 간결하고 정확하게 설명해야합니다. 전반적인 비트 토 런트 아키텍처를 설명하는 훌륭한 리소스 북 / 웹이 필요합니다.

세부 사항, 전체 아키텍처 및 종자, 동료 등과 같은 용어에 관심이 없습니다.

어떤 제안?

답변:


29

비트 토렌트 작동 방식 개요 :

  • 당신은 동료추적기가 있습니다. 주어진 순간에 함께있는 모든 동료는 입니다. 일반적인 상황은 하나 또는 몇 명의 피어가 완전한 파일 세트를 가지고 있으며 다른 피어가이를 사용할 수 있기를 원합니다.

  • 피어는 .torrent 파일을 얻습니다. 여기에는 A) 파일 세트의 SHA-1 해시, B) 추적기의 URL 및 C) 파일이 분할 된 조각 수 및 파일이 포함됩니다. 모든 조각의 SHA-1 해시. 조각의 크기는 급류 자체에 의해 결정됩니다.

  • 그런 다음 피어는 토렌트에 지정된 URL을 사용하여 추적기에 연결합니다. 추적기는 동료 목록으로 응답합니다. 트래커는 포트 80 또는 443을 통해 HTTP를 사용합니다.

  • 그런 다음 피어는 추적기의 정보를 사용하여 다른 피어를 선택하고 직접 연결하여 교환 세션을 설정하여 조각을 얻습니다. 교환 세션은 피어가 직접 수행하며 트래커는 전송에 관여하지 않습니다. 추적기는 정보 만 제공합니다.

  • 피어에 조각이 있으면 SHA-1 해시에 대해 피어를 확인하여 파일에 씁니다. 그런 다음 다른 피어를 선택할 때 해당 부분을 제공 할 수 있습니다. 후속 교환 세션에는 "거래"가 포함됩니다. 나는 다른 조각이 없다면 동료는 일반적으로 첫 번째 조각 만 줄 것이라고 믿습니다.

  • 피어는 업데이트 된 피어 목록을 얻기 위해 매번 추적기를 재검토합니다. 피어는 여러 조각이있는 경우 다른 교환을 시작하기 전에 한 교환이 완료되기를 기다릴 필요가 없으므로 피어가 많은 조각을 가지고 있으면 전송 속도가 실제로 빨라질 수 있습니다. 이것이 급류가 느리게 시작하지만 피어가 조각을 얻음에 따라 빠르게 속도를 얻는 이유입니다.

  • 피어에 모든 부분이 있으면 파일 세트 SHA-1 해시에 대해 전체 파일이 확인됩니다. 그런 다음 시더 가되어 이제는 파일 세트의 가용성을 높이는 것 외에는 아무것도하지 않습니다. 모든 조각이없는 동료는 거머리 입니다.

  • 토렌트에 시드가 없으면 파일의 완전한 사본이 모든 동료가 보유한 모든 조각 사이에 존재하더라도 결국에는 완전한 사본을 얻기 위해 거래됩니다.

  • SHA-1 해시는 트래커와 피어가 어떤 파일을 떼어 내야하는지 "알고있는"방법입니다. 토렌트의 파일 이름은 데이터를 식별하는 데 사용되지 않습니다. .torrent 파일의 hases에 대해 확인되지 않은 조각은 버립니다. 지속적으로 나쁜 조각을 보내는 피어는 다른 피어에 의해 방해받으며 결국 떼의 누구에게도 연결할 수 없습니다.

  • 조각 크기가 작 으면 피어가 조각을 더 빨리 거래 할 수 있기 때문에 토렌트가 더 강력 해지지 만 .torrent 파일에 더 많은 조각 해시가 나열되어야하므로 .torrent 파일이 클 수 있습니다.

  • BitTorrent를 통해 무언가를 게시하는 경우 파일을 사용 가능하게하려면 파일을 시드하는 것이 가장 좋습니다. 대부분의 BitTorrent 소프트웨어는 동시 연결을 최대화하기 위해 가능한 한 많은 피어간에 항목을 분산시키는 것을 선호하는 알고리즘을 구현하기 때문에 다른 피어가 당신을 도울 것입니다. 이러한 방식으로 BitTorrent는 내용을 게시하고 대역폭 비용을 절약 할 수 있습니다.


1
아름다운 대답! 한 번의 퀴즈 : 씨앗 은 첫 번째 조각이 아니라 가장 희귀 한 씨앗을 선호합니다 . 이것이 알고리즘인지 확실하지 않지만 설정을 망칠 때 한 번 토렌트 프로그램에서 얻은 것입니다.
Gallifreyan


8

YouTube 에는 골판지 컷 아웃으로 시각적으로 설명 하는 다소 멋진 비디오가 있습니다. 기술적 설명은 아니지만 BitTorrent의 기본 개념을 간단하고 이해하기 쉬운 방식으로 사람들에게 설명하는 데 유용합니다.

YouTube에서 비트 토렌트 작동 방식


3
유용한 동영상 +1 아빠 한테 보여 줬어 그는 나중에 질문이 없었다. 놀라운. :)
zero2cx

2

피어 메시지 프로토콜 에 대한 개요 .

클라이언트는 두 가지 프로토콜을 사용하여 피어, TCP 또는 uTP (UDP를 통해)와 정보를 공유 할 수 있습니다. 이 데이터 는 비트 토렌트 프로토콜 사양 섹션 피어 메시지를 따릅니다 .

따라서 프로그래밍 방식으로 두 클라이언트간에 연결을 시작해야합니다. 연결이 설정되면 (TCP 또는 uTP를 통해) 추적기 또는 DHT를 통해 원격 피어 정보 (ip & port)를 확보 한 클라이언트가 비트 토렌트 핸드 셰이크를 시작합니다 . 이 핸드 셰이크에는 이 연결에 대한 토런트를 식별 하는 info_hash 가 포함 됩니다.

프로토콜을 통해 Torrent 데이터가 잘리는 방법을 먼저 살펴 보겠습니다. 조각은 당신이 네트워크를 통해 공유되는 데이터의 일부입니다. 패킷으로 싸인 조각의 한 부분 인 block 과 혼동하지 마십시오 . 블록을 공유하는 단위 인 부분 패킷을 통해, 그리고 조각 피어 통해 런트를 공유하는 단위이다.

연결의 시작, 두 클라이언트 (내가 전화 할게 로컬 클라이언트, 때 LC 및 원격 클라이언트, RC는 )되어 숨 막혀 하고 부여하지 . Choked 는 "너무 바빠서 답장을 보내지 않지만이를 고려할 수 있음"을 의미합니다. 따라서 Unchocked 는 "메시지에 답하겠습니다"를 의미합니다. 관심 좀 싶다고 과정을 통해 조각 당신이 가지고 있습니다. 따라서 두 피어 간의 연결 상태는 LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested?의 네 가지 상태로 정의 할 수 있습니다. RC 에게 내가 겁이 나거나 관심이 없다는 것을 경고하기 위해나는 그에게 보낼 수있다 (UN) 관심초킹 (chock) (취소)를 상호 메시지 등을.

어떤 조각 이 있는지 서로 알리기 위해 핸드 셰이 킹 직후 비트 필드 메시지를 보낼 수 있습니다 . 그것의 이름에서 알 수 있듯이, 각 비트가 설정되어 비트 문자열 1클라이언트가이 특이한 경우 조각을 , 0그렇지 않은 경우는.

그렇다면 LC가 되어 초킹 (chock)관심RC가 있다 unchocked 그 후 그는 보낼 수 있습니다 요청 A에 대한 요청하는 메시지를 블록 하나 개에 속하는 조각 그가 알고 LC는 덕분에이 비트 필드 메시지.

피어가 전체 조각 을 수신하면 조각 메시지를 보내 모든 원격 피어에게 알리고 보유 중인 관련 비트 필드 를 업데이트 할 수 있습니다.

그것은 매우 기본적인 개요이며, 물론 질식 알고리즘 등과 같은 모든 세부 사항이 여기에 제공되는 것은 아닙니다. 더 자세한 내용을 원한다면 주석 섹션에서 위에 게시 한 두 개의 링크를 확인하십시오 (새로운 사용자로서 게시물 내에 두 개 이상의 링크가 없습니다).

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