BitTorrent v2

Понеділок, 7 вересня 2020 р. Від arvid

Щойно вийшов libtorrent-2.0 із кількома основними новими можливостями. Один з них - підтримка BitTorrent v2.

Більшість робіт зі специфікації BEP 52 було виконано 8472. Підтримку libtorrent для bittorrent v2 в основному реалізував Стівен Сілоті. BiglyBT також має реалізацію BitTorrent v2, яка буде випущена найближчим часом.

BitTorrent v2 стартував, намагаючись перейти від SHA-1 як хеш-функції для фрагментів, незабаром після того, як Google оголосив про зіткнення. Враховуючи, що нова хеш-функція не буде зворотно сумісною, було запропоновано також кілька інших змін, поки ми все одно приймали хіт сумісності. У цій публікації описано нові функції протоколу BitTorrent v2.

SHA-256

Хеш-функцію для поштучних даних було змінено на SHA-256. Одним із наслідків цього є те, що хеші складають 32 байти замість 20 байт. У BitTorrent v2 інформаційний словник також обчислюється SHA-256, що створює загрозу сумісності з DHT і трекерами, які мають протоколи, які очікують 20 байтних хешів. Для цього DHT- і трекер оголошує та шукає торренти v2, використовуючи інформаційний хеш SHA-256, усічений до 20 байт.

Це було одне з початкових обґрунтувань для створення протоколу v2 для початку. Це означає, що по суті торрент v2 буде ідентифікований іншим хешем, ніж торрент v1, який завжди створюватиме окремий рой, навіть під час спільного використання одних і тих самих файлів. Детальніше про це пізніше, при зворотній сумісності.

хеш-дерева

У BitTorrent v1 шматки хешуються, а отримані хеші включаються у файл/метадані .torrent (в інформаційному словнику). У більшості випадків хеш фрагмента становить основну частину файлу .torrent. Щоб розмір файлу .torrent не відповідав розумним для великих файлів, розмір фрагмента можна збільшити, тобто кожен хеш представляє більшу частину файлу. Наслідком великих розмірів фрагментів є те, що якщо хеш не вдається, потрібно повторно завантажити більшу частину файлу, поки фрагмент не пройде перевірку хешу.

Стара ідея вдосконалення обох цих показників полягає у використанні хеш-дерев merkle для представлення хешів фрагментів (спочатку реалізованих у tribler). Це робить файли .torrent невеликими, оскільки все, що вам потрібно - це хеш кореня дерева. BitTorrent v2 використовує хешові дерева merkle для фрагментів (але інший протокол, який реалізував той триблер). Це має наступні переваги:

  • Метадані торренту (зокрема, частина інформаційного словника файлу .torrent) стають набагато меншими. Це позбавляє затримки запуску при додаванні магнітного посилання, оскільки потрібно завантажити менше байт, перш ніж почнеться завантаження самого торрента.
  • Завантажені дані можна перевірити на рівні блоку. Це означає, що якщо одноранговий сервер надсилає пошкоджені дані, їх можна негайно виявити, і лише 16 кіБ потрібно повторно завантажити. Ровесник, який надіслав пошкоджені дані, також може бути визначений з певністю. Це є значним покращенням евристики, необхідної для ідентифікації поганого партнера у версії 1, яку іноді називають інтелектуальною забороною.

Листя хеш-дерев завжди складають 16 кіБ (розмір блоку), незалежно від розміру шматка. Поняття розміру шматка все ще існує і досі використовується в одноранговому протоколі, як і сьогодні. напр. у повідомлення HAVE та REQUEST. Однак замість хеш-фрагментів насправді є хешем вмісту шматка, це корінь хеш-дерева шматка. тобто піддерево повного дерева меркле.

У версії 2 файл .torrent все одно повинен містити ці хеш-фрагменти (насправді хеші в дереві merkle, що представляють рівень фрагмента). Це допомагає розподіляти та зберігати хеші, щоб їх не потрібно було перераховувати під час перезапуску клієнта, який засіває. Вони також зберігаються у стані відновлення. Розмір файлу .torrent не менший для торрента v2, оскільки він все ще містить фрагменти фрагментів, але є інформаційний словник, який є частиною, необхідною для початку завантаження магнітних посилань.

файлу torrent