Посилання BitTorrent-магніту ідентифікує торрент, використовуючи 1 SHA-1 або усічене значення хеша SHA-256, відоме як "infohash". Це те саме значення, яке ровесники (клієнти) використовують для ідентифікації торрентів під час спілкування з трекерами чи іншими однолітками. Традиційний файл .torrent містить структуру даних з двома клавішами верхнього рівня: announce
ідентифікація трекера (ів), який використовуватимуться для завантаження, і info
, містить імена файлів та хеші для торрента. "Інфохаш" - це хеш кодованих info
даних.
Деякі посилання на магніти містять трекери або веб-насіння, але вони часто не відповідають цьому. Ваш клієнт може нічого не знати про торрент, окрім його інфохаша. Перше, що потрібно, це знайти інших однолітків, які завантажують торрент. Це робиться за допомогою окремої однорангової мережі 2, що управляє "розподіленою хеш-таблицею" (DHT). DHT - це великий розподілений індекс, який відображає торенти (ідентифіковані infohashes) на списки однолітків (ідентифікованих за IP-адресою та портами), які беруть участь у рої для цього торрента (завантаження / завантаження даних або метаданих).
Перший раз, коли клієнт приєднується до мережі DHT, він генерує випадковий 160-бітний ідентифікатор з того самого простору, що і infohashes. Потім він завантажує з'єднання з мережею DHT, використовуючи або жорстко кодовані адреси клієнтів, контрольованих розробником клієнта, або клієнтів, що підтримують DHT, раніше зустрічалися в рої. Коли він хоче брати участь в рій для даного потоку, він шукає в мережі DHT для декількох інших клієнтів , чиї ідентифікатори як можна ближче 3 , як можна ближче до infohash. Він повідомляє цих клієнтів, що хотів би брати участь у рій, і просить їх інформацію про з'єднання будь-яких однолітків, які вони вже знають, які беруть участь у рої.
Коли однолітки завантажують / завантажують певний торрент, вони намагаються розповісти один одному про всіх інших однолітків, про яких вони знають, які беруть участь у тому ж рої. Це дозволяє ровесникам швидко знати один одного, не піддаючи трекеру або DHT постійним запитам. Після того, як ви дізнаєтесь про декількох однолітків з DHT, ваш клієнт зможе попросити у цих ровесників інформацію про з'єднання ще більшої кількості однолітків у торрент-рої, поки у вас не будуть всі потрібні однолітки.
Нарешті, ми можемо запитати у цих однолітків info
метадані торента, що містять імена файлів та хеш-список. Після того, як ми завантажили цю інформацію та перевірили, чи правильно вона, використовуючи відоме infohash
, ми .torrent
опинилися практично в тому ж самому становищі, що і клієнт, який розпочав роботу зі звичайного файлу та отримав список однолітків із включеного трекера.
Завантаження може початися.
1 Як правило, infohash кодується шістнадцятковим, але натомість деякі старі клієнти використовували базу 32. v1 ( urn:btih:
) використовує дайджест SHA-1 безпосередньо, тоді як v2 ( urn:bimh:
) додає префікс мультихаша для ідентифікації алгоритму хешу та довжини дайджесту.
2 Існують дві основні мережі DHT: простіший "DHT" основної лінії та складніший протокол, який використовується Azureus.
3 Відстань вимірюється XOR.
Подальше читання