BitTorrent v2

Luni, 7 septembrie 2020 de arvid

libtorrent-2.0 tocmai a fost lansat cu câteva caracteristici noi majore. Unul dintre ele este suportul pentru BitTorrent v2.

Cea mai mare parte a lucrărilor de specificații ale BEP 52 au fost realizate de către8472. Suportul libtorrent pentru bittorrent v2 a fost implementat în cea mai mare parte de Steven Siloti. BiglyBT are, de asemenea, o implementare a BitTorrent v2 care va fi lansată în viitorul apropiat.

BitTorrent v2 a început cu un efort de a trece de la SHA-1 ca funcție hash pentru piese, la scurt timp după ce Google a anunțat că a produs o coliziune. Având în vedere că o nouă funcție hash nu ar fi compatibilă cu versiunile anterioare, au fost propuse și alte câteva modificări, în timp ce oricum luam succesul de compatibilitate. Această postare descrie noile caracteristici ale protocolului BitTorrent v2.

SHA-256

Funcția hash pentru datele pieselor a fost schimbată în SHA-256. O consecință a acestui fapt este că hashurile sunt de 32 de octeți în loc de 20 de octeți. În BitTorrent v2, dicționarul de informații este de asemenea calculat de SHA-256, ceea ce reprezintă o provocare de compatibilitate cu DHT și trackere, care au protocoale care așteaptă hashuri de 20 de octeți. Pentru a gestiona acest lucru, DHT- și tracker anunță și căutări pentru torrentele v2 folosesc SHA-256 info-hash trunchiat la 20 de octeți.

Acesta a fost unul dintre motivele originale pentru crearea unui protocol v2 pentru început. Înseamnă că, în mod fundamental, un torrent v2 va fi identificat printr-un hash diferit decât un torrent v1, care ar crea întotdeauna un roi separat, chiar și atunci când partajează aceleași fișiere. Mai multe despre acest lucru mai târziu, în conformitate cu compatibilitatea inversă.

copaci hash

În BitTorrent v1, piesele sunt hashate și hashurile rezultate sunt incluse în fișierul/metadatele .torrent (în dicționarul de informații). În majoritatea cazurilor, hash-ul piesei reprezintă cea mai mare parte a dimensiunii fișierelor .torrent. Pentru a menține dimensiunea fișierului .torrent în limita motivului pentru fișierele mari, dimensiunea piesei poate fi mărită, ceea ce înseamnă că fiecare hash reprezintă o porțiune mai mare a fișierului. O consecință a dimensiunilor mari ale pieselor este că, dacă un hash eșuează, trebuie să descărcați din nou o porțiune mai mare a fișierului, până când piesa trece de verificarea hash.

O idee veche pentru a îmbunătăți ambele metrici este de a folosi arbori de hasle merkle pentru a reprezenta hash-ul piesei (inițial implementat în tribler). Acest lucru păstrează fișierele .torrent mici, deoarece tot ce aveți nevoie este hashul rădăcină al copacului. BitTorrent v2 folosește arborii de hasle merkle pentru piese (dar un protocol diferit pe care cel implementat). Aceasta are următoarele avantaje:

  • Metadatele torrent (în special porțiunea info-dicționar a unui fișier .torrent) devin mult mai mici. Acest lucru elimină latența de pornire la adăugarea unui link magnetic, deoarece mai puțini octeți trebuie descărcați înainte ca descărcarea torrent să poată începe.
  • Datele descărcate pot fi validate la nivel de bloc. Adică dacă un partener trimite date corupte, acesta poate fi descoperit imediat și doar 16 kiB trebuie re-descărcați. Partenerul care a trimis datele corupte poate fi, de asemenea, identificat cu certitudine. Aceasta este o mare îmbunătățire față de euristicile necesare pentru a identifica peerul rău din v1, uneori denumit smart-ban.

Frunzele copacilor sunt întotdeauna 16 kiB (dimensiunea blocului), indiferent de dimensiunea piesei. Conceptul de dimensiune a piesei există încă și este încă folosit în protocolul peer-wire așa cum este astăzi. de exemplu. în mesajele HAVE și CERERE. Cu toate acestea, în loc ca hash-ul piesei să fie de fapt hash-ul conținutului piesei, este rădăcina arborelui hash al piesei. adică un sub-copac al arborelui complet merkle.

În v2, fișierul .torrent trebuie să conțină în continuare aceste hashuri de piese (într-adevăr hashurile din arborele merkle reprezentând nivelul piesei). Acest lucru ajută la distribuirea și stocarea hashurilor, astfel încât acestea să nu fie recomputate la repornirea unui client care este însămânțat. De asemenea, sunt stocate în starea CV. Dimensiunea fișierului .torrent nu este mai mică pentru un torrent v2, deoarece conține încă hash-ul piesei, dar este informația-dicționar, care este partea necesară pentru ca linkurile magnet să înceapă descărcarea.

hash-ul piesei