답변:
비트 토렌트 작동 방식 개요 :
당신은 동료 와 추적기가 있습니다. 주어진 순간에 함께있는 모든 동료는 떼 입니다. 일반적인 상황은 하나 또는 몇 명의 피어가 완전한 파일 세트를 가지고 있으며 다른 피어가이를 사용할 수 있기를 원합니다.
피어는 .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는 내용을 게시하고 대역폭 비용을 절약 할 수 있습니다.
여기 주제에 관한 좋은 종이
http://davidhales.name/posters/patarin-hales-delis-poster6.pdf
(참고는 실제로 .pdf
파일이며 Acrobat Reader로 볼 수 있습니다.)
누군가가 만든 이미지 파일은 다음과 같습니다.
YouTube 에는 골판지 컷 아웃으로 시각적으로 설명 하는 다소 멋진 비디오가 있습니다. 기술적 설명은 아니지만 BitTorrent의 기본 개념을 간단하고 이해하기 쉬운 방식으로 사람들에게 설명하는 데 유용합니다.
피어 메시지 프로토콜 에 대한 개요 .
클라이언트는 두 가지 프로토콜을 사용하여 피어, 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는 덕분에이 비트 필드 메시지.
피어가 전체 조각 을 수신하면 조각 메시지를 보내 모든 원격 피어에게 알리고 보유 중인 관련 비트 필드 를 업데이트 할 수 있습니다.
그것은 매우 기본적인 개요이며, 물론 질식 알고리즘 등과 같은 모든 세부 사항이 여기에 제공되는 것은 아닙니다. 더 자세한 내용을 원한다면 주석 섹션에서 위에 게시 한 두 개의 링크를 확인하십시오 (새로운 사용자로서 게시물 내에 두 개 이상의 링크가 없습니다).