Впервые я использовал магнитную ссылку . Любопытно, как это работает, я посмотрел спецификации и не нашел ответов. Вики говорит, что xt
означает «точную тему» и сопровождается форматом ( btih
в данном случае) с хешем SHA1. Я видел упомянутое base32, зная, что это 5 бит на символ и 32 символа, я обнаружил, что он вмещает ровно 160 бит, что в точности соответствует размеру SHA1.
Там нет места для IP-адреса или чего-то еще, это просто SHA1. Так как же клиент BitTorrent находит фактический файл? Я включил URL Snooper, чтобы увидеть, посещает ли он страницу (использует TCP) или выполняет поиск или тому подобное, но ничего не произошло. Я понятия не имею, как клиент находит пиров. Как это работает?
Кроме того, в чем хэш? Это хэш массива всех файловых хешей вместе? Может быть, это хеш фактического требуемого торрент-файла (удаление определенной информации)?
В виртуальной машине я попытался установить магнитную связь с uTorrent (который был недавно установлен), и он смог найти пиров. Откуда появился первый пэр? Это было свежо и других торрентов не было.
источник
Ответы:
Магнитная ссылка BitTorrent идентифицирует торрент, используя 1 значение SHA-1 или усеченное значение SHA-256, известное как «infohash». Это то же значение, которое используют одноранговые узлы (клиенты) для идентификации торрентов при общении с трекерами или другими одноранговыми узлами. Традиционный файл .torrent содержит структуру данных с двумя ключами верхнего уровня:
announce
идентифицирует трекер (ы), который будет использоваться для загрузки, иinfo
содержит имена файлов и хэши для торрента. «Infohash» - это хэш закодированныхinfo
данных.Некоторые магнитные ссылки включают трекеры или веб-семена, но они часто этого не делают. Ваш клиент может ничего не знать о торренте, кроме его infohash. Первое, что ему нужно, это найти других пиров, которые скачивают торрент. Это делается с использованием отдельной одноранговой сети 2, в которой используется «распределенная хэш-таблица» (DHT). DHT - это большой распределенный индекс, который отображает торренты (определяемые информационными хэшами) в списки пиров (идентифицируемых по IP-адресу и портам), которые участвуют в скоплении для этого торрента (загрузка / загрузка данных или метаданных).
Когда клиент впервые подключается к сети DHT, он генерирует случайный 160-битный идентификатор из того же пространства, что и информационные мешки. Затем он загружает свое соединение с сетью DHT, используя либо жестко закодированные адреса клиентов, контролируемых разработчиком клиента, либо клиенты, поддерживающие DHT, ранее встречавшиеся в торрент-рое. Когда он хочет принять участие в рое для данного торрента, он ищет в сети DHT несколько других клиентов, чьи идентификаторы максимально приближены к 3 -му. Он уведомляет этих клиентов о своем желании участвовать в рое и запрашивает у них информацию о подключении любых знакомых им знакомых, которые участвуют в рое.
Когда одноранговые узлы загружают / скачивают определенный торрент, они пытаются рассказать друг другу обо всех других знакомых одноранговых узлах, которые участвуют в одном и том же торрент-рое. Это позволяет коллегам узнать друг о друге быстро, не подвергая трекер или DHT постоянным запросам. Как только вы узнаете о нескольких одноранговых узлах из DHT, ваш клиент сможет запросить информацию о подключении еще одного однорангового узла в рое торрента, пока у вас не появятся все необходимые одноранговые узлы.
Наконец, мы можем запросить у этих пиров
info
метаданные торрента , содержащие имена файлов и список хэшей. После того, как мы загрузили эту информацию и убедились, что она верна с использованием известногоinfohash
, мы практически находимся в том же положении, что и клиент, который начал с обычного.torrent
файла и получил список пиров из включенного трекера.Загрузка может начаться.
1 Инфо-хэш обычно закодирован в шестнадцатеричном формате, но некоторые старые клиенты вместо этого использовали base 32. v1 (
urn:btih:
) напрямую использует дайджест SHA-1, а v2 (urn:bimh:
) добавляет префикс мультихеша для определения алгоритма хеширования и длины дайджеста.2 Существуют две основные сети DHT: более простой «магистральный» DHT и более сложный протокол, используемый Azureus.
3 Расстояние измеряется с помощью XOR.
Дальнейшее чтение
источник
dht.transmission.com
, просто трекером? Насколько я понимаю, он должен отслеживать список пиров на каждый информационный хеш - именно это и делает трекер.ws=
параметр указывает на URL-адрес начальных веб-страниц BEP-19 фактических данных, аxs=
параметр указывает на URL-адрес самого.torrent
файла. Я думаю, что это немного несовместимо с другими вариантами использованияmagnet:
схемы, но это так. Я забываю, используют ли какие-либо клиентыas=
для чего-либо ... возможно, просто как запасной вариант дляxs=
, но не широко поддерживаемой, IIRC.Одноранговое обнаружение и обнаружение ресурса (файлы в вашем случае) - это две разные вещи.
Я больше знаком с JXTA, но все одноранговые сети работают по одним и тем же базовым принципам.
Первое, что должно произойти, - это открытие со стороны сверстников.
Peer Discovery
Большинство p2p-сетей являются «затравленными» сетями: при первом запуске одноранговый узел подключается к общеизвестному (жестко запрограммированному) адресу для получения списка работающих одноранговых узлов. Это может быть прямое заполнение, например, подключение к тому,
dht.transmissionbt.com
как упомянуто в другом сообщении, или косвенное заполнение, как это обычно делается с JXTA, когда одноранговый узел подключается к адресу, который предоставляет только простой текстовый список адресов других одноранговых сетей.Как только соединение установлено с первым (несколькими) одноранговыми узлами, соединяющийся одноранговый узел выполняет обнаружение других одноранговых узлов (отправляя запросы) и поддерживает их таблицу. Поскольку число других одноранговых узлов может быть огромным, подключающийся одноранговый узел поддерживает только часть распределенной хэш-таблицы (DHT) одноранговых узлов. Алгоритм определения того, какую часть таблицы должен поддерживать подключающийся узел, зависит от сети. BitTorrent использует Kademlia с 160-битными идентификаторами / ключами.
Обнаружение ресурсов
После того, как соединяющийся узел обнаружил несколько узлов, последний отправляет им несколько запросов на обнаружение ресурсов. Магнитные ссылки идентифицируют эти ресурсы и построены таким образом, что они являются «подписью» для ресурса и гарантируют, что они однозначно идентифицируют запрошенный контент среди всех пиров. Соединяющийся узел затем отправит запрос на обнаружение магнитной ссылки / ресурса узлам вокруг него. DHT построен таким образом, что он помогает определить, каких пиров нужно сначала запросить для ресурса (подробнее о Kademlia в Википедии). Если запрошенный узел не удерживает запрошенный ресурс, он обычно «передает» запрос дополнительным узлам, извлеченным из его собственного DHT.
Количество «прыжков», на которые может быть выполнен запрос, обычно ограничено; 4 - это обычный номер в сетях типа JXTA.
Когда узел удерживает ресурс, он отвечает со всеми подробностями. Соединяющийся одноранговый узел может затем подключиться к одноранговому узлу, удерживающему ресурс (напрямую или через ретранслятор - я не буду вдаваться в подробности здесь), и начать извлекать его.
Ресурсы / сервисы в P2P-сетях напрямую не связаны с сетевыми адресами: они распределены, и в этом прелесть этих масштабируемых сетей.
источник
Я был любопытен тем же вопросом сам. Читая код для передачи, я нашел следующее в
libtrnasmission/tr-dht.c
:Он пытается это 6 раз, ожидая 40 (!) Секунд между попытками. Я предполагаю, что вы можете проверить это, удалив файлы конфигурации (
~/.config/transmission
в Unix) и заблокировав все коммуникации сdht.transmissionbt.com
, и посмотрите, что произойдет (подождите не менее 240 секунд).Таким образом, кажется, что клиент имеет встроенный узел начальной загрузки. Конечно, как только он попал в сеть, ему больше не нужен этот узел начальной загрузки.
источник
Я наконец нашел спецификацию. Впервые гугл не помог . (Вики ссылаются на bittorrent.com, который является основным сайтом. Я щелкнул ссылку для разработчиков, обратил внимание на вкладку bittorrent.org справа, тогда было легко оттуда. Сложно найти ссылки, когда вы не знаете, что они помечены, и многие щелкает)
Кажется, что все торренты имеют сеть пиров. Вы находите сверстников из трекеров и держите их между сессиями. Сеть позволяет находить сверстников и другие вещи. Я не читал, как он используется с магнитными ссылками, но кажется, что он не определен, как свежий клиент находит пиров. Возможно, некоторые запекаются, или они используют свой домашний сервер или известные трекеры, встроенные в клиент, чтобы получить первый узел в сети.
источник
Когда я начал отвечать на ваш вопрос, я не понял, что вы спрашиваете, как работает магнитная схема. Просто подумал, что вы хотите знать, как генерируются части, относящиеся к протоколу bittorrent.
Хэш, указанный в URI магнита, является информационным хешем торрента, закодированным в base32. Информационный хеш - это хэш sha1 закодированного информационного блока торрента.
Этот код Python демонстрирует, как его можно рассчитать.
Я написал (очень наивную) реализацию C #, чтобы проверить это, так как у меня не было bencoder под рукой, и он соответствует тому, что ожидается от клиента.
Насколько я понимаю, этот хэш не содержит никакой информации о том, как найти трекер, клиент должен выяснить это другими способами (предоставлен URL объявления). Это как раз то, что отличает один торрент от другого на трекере.
Все, что связано с протоколом bittorrent, все еще вращается вокруг трекера. Это по-прежнему основной способ общения между роями. Схема магнита URI не была разработана специально для использования BitTorrent. Он используется любыми протоколами P2P в качестве альтернативной формы общения. Клиенты Bittorrent приспособлены принимать магнитные ссылки как еще один способ идентифицировать торренты, так что вам больше не нужно загружать файлы .torrent. Магнит uri все еще должен указать
tr
acker, чтобы найти его, чтобы клиент мог участвовать. Он может содержать информацию о других протоколах, но не имеет отношения к протоколу bittorrent. Протокол bittorrent в конечном итоге не будет работать без трекеров.источник
список пиров, вероятно, заполняется из торрента, который обновляет клиента (например, есть торрент для utorrent, который обновляет его). если все используют один и тот же клиент, это будет хорошо, потому что у вас нет другого выбора, кроме как поделиться обновлением.
источник