Магнитная ссылка BitTorrent идентифицирует торрент с помощью 1 хеш-значения SHA-1 или усеченного SHA-256, известного как «infohash». Это то же значение, которое одноранговые узлы (клиенты) используют для идентификации торрентов при взаимодействии с трекерами или другими одноранговыми узлами. Традиционный файл .torrent содержит структуру данных с двумя ключами верхнего уровня: announce
, идентифицирующий трекеры, используемые для загрузки, и info
, содержащий имена файлов и хеши для торрента. «Infohash» - это хэш закодированных info
данных.
Некоторые магнитные ссылки включают трекеры или веб-семена, но часто их нет. Ваш клиент может ничего не знать о торренте, кроме его хэша. Первое, что ему нужно, это найти других пиров, которые скачивают торрент. Для этого используется отдельная одноранговая сеть 2, работающая с «распределенной хеш-таблицей» (DHT). DHT - это большой распределенный индекс, который сопоставляет торренты (идентифицируемые с помощью хэшей информации) со списками одноранговых узлов (идентифицируемых по IP-адресу и портам), которые участвуют в рое для этого торрента (загружают / скачивают данные или метаданные).
Когда клиент впервые подключается к сети DHT, он генерирует случайный 160-битный идентификатор из того же пространства, что и хэши информации. Затем он загружает свое соединение с сетью DHT, используя либо жестко запрограммированные адреса клиентов, контролируемых разработчиком клиента, либо клиентов, поддерживающих DHT, которые ранее встречались в потоке торрентов. Когда он хочет участвовать в рое для данного торрента, он ищет в сети DHT несколько других клиентов, чьи идентификаторы как можно ближе 3 к infohash. Он уведомляет этих клиентов о том, что хотел бы участвовать в рое, и запрашивает у них информацию о подключении всех уже известных им пиров, которые участвуют в рое.
Когда одноранговые узлы загружают / скачивают определенный торрент, они пытаются рассказать друг другу обо всех других узлах, о которых они знают, которые участвуют в одном и том же потоке торрентов. Это позволяет одноранговым узлам быстро узнавать друг друга, не подвергая трекер или DHT постоянным запросам. Как только вы узнаете о нескольких пирах из DHT, ваш клиент сможет запрашивать у этих партнеров информацию о подключении еще большего количества одноранговых узлов в торрент-рое, пока у вас не будут все необходимые узлы.
Наконец, мы можем запросить у этих пиров info
метаданные торрента, содержащие имена файлов и список хэшей. После того, как мы загрузили эту информацию и проверили ее правильность с помощью известного infohash
, мы оказались практически в том же положении, что и клиент, который начал с обычного файла .torrent
и получил список пиров от включенного трекера.
Скачивание может начаться.
1 infohash обычно имеет шестнадцатеричное кодирование, но некоторые старые клиенты использовали вместо него базу 32. v1 (urn:btih:
) использует дайджест SHA-1 напрямую, а v2 (urn:bimh:
) добавляет префикс multihash для идентификации алгоритм хеширования и длина дайджеста.
2 Существуют две основные сети DHT: более простой «основной» DHT и более сложный протокол, используемый Azureus.
3 sup> Расстояние измеряется с помощью XOR.
Дальнейшее чтение
person
Jeremy
schedule
07.03.2014