Bittorrent

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 7 februarie 2022; verificările necesită 4 modificări .

BitTórrent (lit. engleză) Bitstream este un protocol de rețea peer-to- peer (P2P) pentru partajarea cooperativă de fișiere pe Internet .

Fișierele sunt transferate în părți, fiecare client torrent , primind (descărcând) aceste părți, în același timp le oferă (descărcă) altor clienți, ceea ce reduce încărcarea și dependența de fiecare client sursă și oferă redundanță a datelor .

Protocolul a fost creat de Bram Cohen , care a scris primul client torrent BitTorrent în Python , pe 4 aprilie 2001 . Lansarea primei versiuni a avut loc pe 2 iulie 2001 .

Există multe programe client pentru schimbul de fișiere folosind protocolul BitTorrent.

Fișier de metadate

Fișierul de metadate este un dicționar în format bencode cu extensia .torrent - conține informații despre distribuție (fișiere, trackere etc.)

Cum funcționează protocolul

Înainte de descărcare, clientul se conectează la tracker la adresa specificată în fișierul torrent, îi spune adresa și suma hash a fișierului torrent, la care clientul primește ca răspuns adresele altor clienți care descarcă sau distribuie același fișier. În plus, clientul informează periodic tracker-ul despre progresul procesului și primește o listă actualizată de adrese. Acest proces se numește anunț . 

Clienții se conectează între ei și schimbă segmente de fișiere fără participarea directă a tracker-ului, care stochează doar informațiile primite de la clienții conectați la schimb, o listă a clienților înșiși și alte informații statistice. Pentru ca rețeaua BitTorrent să funcționeze eficient, este necesar ca cât mai mulți clienți să poată accepta conexiuni de intrare. Setările incorecte pentru NAT sau firewall pot preveni acest lucru.

Când se conectează, clienții schimbă imediat informații despre segmentele pe care le au. Un client care dorește să descarce un segment ( leecher ) trimite o cerere și, dacă al doilea client este gata să dea, primește acest segment. Clientul verifică apoi suma de control a segmentului. Dacă se potrivește cu cel înregistrat în fișierul torrent, atunci segmentul este considerat descărcat cu succes, iar clientul anunță toți colegii conectați că are acest segment. Dacă sumele de verificare diferă, atunci segmentul începe să fie descărcat din nou. Unii clienți interzic acei colegi care oferă segmente incorecte prea des.

Astfel, cantitatea de informații despre serviciu (dimensiunea fișierului torrent și dimensiunea mesajelor cu o listă de segmente) depinde direct de numărul și, prin urmare, de dimensiunea segmentelor. Prin urmare, atunci când alegeți un segment, este necesar să mențineți un echilibru: pe de o parte, cu o dimensiune mare a segmentului, cantitatea de informații despre serviciu va fi mai mică, dar în cazul unei erori de verificare a sumei de control, va trebui să mai multe informații. fi descărcat din nou. Pe de altă parte, cu o dimensiune mică, erorile nu sunt atât de critice, deoarece un volum mai mic trebuie să fie re-descărcat, dar dimensiunea fișierului torrent și a mesajelor despre segmentele existente devine mai mare.

Algoritm de schimb de date

Fiecare client are capacitatea de a bloca temporar întoarcerea către alt client ( ing.  choke ). Acest lucru se face pentru o utilizare mai eficientă a canalului de întoarcere. În plus, atunci când se alege pe cine să deblocheze, se acordă preferință colegilor care au transferat ei înșiși multe segmente acestui client. Astfel, sărbătorile cu rate bune de retur se încurajează reciproc după principiul „tu – la mine, eu – la tine”.

Schimbul de segmente se realizează după principiul „tu - la mine, eu - la tine” simetric în două direcții. Clienții își spun reciproc ce fragmente au atunci când se conectează și apoi când primesc noi fragmente, astfel încât fiecare client să poată stoca informații despre ce fragmente au alți colegi conectați. Ordinul de schimb este ales în așa fel încât clienții schimbă mai întâi cele mai rare segmente: acest lucru crește disponibilitatea fișierelor în distribuție. În același timp, alegerea unui segment dintre cele mai rare este aleatorie și, prin urmare, este posibil să se evite situația în care toți clienții încep să descarce același segment rar, ceea ce ar avea un impact negativ asupra performanței.

Schimbul de date începe atunci când ambele părți sunt interesate de el, adică fiecare dintre părți are segmente pe care cealaltă nu le are. Numărul de segmente transmise este numărat, iar dacă una dintre părți constată că transmite în medie mai mult decât primește, blochează ( ing.  choke ) pentru un timp întoarcerea pe cealaltă parte. Astfel, protecția împotriva lipitorilor este încorporată în protocol .

Segmentele sunt împărțite în blocuri cu o dimensiune de 16-4096 kilobytes , iar fiecare client solicita exact aceste blocuri. Blocurile din diferite segmente pot fi solicitate în același timp. Mai mult, unii clienți acceptă descărcarea de blocuri ale aceluiași segment de la diferiți colegi. În acest caz, algoritmii și mecanismele de schimb descrise mai sus sunt aplicabile și la nivelul blocului.

Încheiați modul de joc

Când descărcarea este aproape completă, clientul intră într-un mod special numit joc final. În acest mod, solicită toate segmentele rămase de la toți colegii conectați, ceea ce evită încetinirea sau „înghețarea” completă a unei descărcări aproape finalizate din cauza mai multor clienți lenți.

Specificația protocolului nu definește exact când trebuie să intre clientul în jocul final, dar există un set de practici general acceptate. Unii clienți intră în acest mod când nu mai sunt blocuri nesolicitate, alții până când numărul de blocuri rămase este mai mic decât numărul celor transmise și nu mai mult de 20. Există o părere nerostită că este mai bine să păstrați numărul de blocuri în așteptare. scăzut (1 sau 2) pentru a minimiza redundanța și că, atunci când solicitați aleatoriu, șansele mai mici de a obține duplicate ale aceluiași bloc [1] [2] .

Semănat

Când un fișier complet este primit, clientul trece la un mod special de operare în care trimite doar date (devine o sămânță). În plus, seed-ul informează periodic tracker-ul despre schimbările în starea torrenților (descărcări) și actualizează listele de adrese IP.

Caracteristici generale

Protocoale și porturi

Clienții se conectează la tracker folosind protocolul TCP . Portul de intrare al trackerului cel mai frecvent utilizat : 6969. Intervalul de porturi de intrare a clientului cel mai frecvent utilizat: 6881-6889.

Numerele porturilor nu sunt fixate în specificația protocolului și pot fi modificate după cum este necesar. În prezent, majoritatea trackerelor folosesc portul HTTP 80 și este recomandat clienților să aleagă un port de intrare aleatoriu. Mai mult, unele trackere nu permit utilizarea porturilor client din gama standard 6881-6889, deoarece unii furnizori interzic utilizarea acestui interval de porturi.

Rețeaua DHT din clienții BitTorrent utilizează protocolul UDP .

În plus, protocolul UDP este utilizat de trackerii UDP (nu este acceptat de toți clienții și nu este o parte oficială a protocolului) și pentru a conecta clienții între ei prin UDP NAT Traversal (utilizat numai în clientul BitComet și este nu este o parte oficială a protocolului).

Tracker

Tracker ( în engleză  tracker ; /ˈtɹækə(ɹ)/ ) este un server specializat care rulează prin protocolul HTTP . Tracker-ul este necesar pentru ca clienții să se poată găsi unul pe celălalt. De fapt, tracker-ul stochează adrese IP , porturi client de intrare și sume hash care identifică în mod unic obiectele implicate în descărcări. Conform standardului, numele fișierelor nu sunt stocate pe tracker și este imposibil să le recunoașteți după sumele hash. Cu toate acestea, în practică, tracker-ul adesea, pe lângă funcția sa principală, îndeplinește și funcția de server web mic . Un astfel de server stochează fișiere de metadate și descrieri ale fișierelor distribuite, oferă statistici de descărcare pentru diferite fișiere, arată numărul curent de colegi conectați etc.

Lucrați fără tracker

Noile versiuni ale protocolului au dezvoltat sisteme fără tracker  care rezolvă unele dintre problemele anterioare. Eșecul unui tracker în astfel de sisteme nu duce automat la eșecul întregii rețele.

Începând cu versiunea 4.2.0 a clientului oficial, lansată la sfârșitul anului 2015, a fost implementată o funcție de lucru fără tracker bazată pe DHT Kademlia . Într-o astfel de implementare, tracker -ul este disponibil descentralizat pe clienți sub forma unui tabel hash distribuit .

În prezent, nu toți clienții folosesc un protocol compatibil între ei. BitComet , µTorrent , Deluge , KTorrent , Transmission , qBittorrent și clientul oficial BitTorrent sunt compatibile între ele . Vuze (Azureus) are și un mod trackerless, dar implementarea lui diferă de cea oficială, drept urmare nu poate funcționa prin DHT cu clienții de mai sus [3] . Cu toate acestea, există suport pentru DHT standard pentru Vuze prin intermediul pluginului Mainline DHT.

Lucrul fără un tracker este posibil și atunci când utilizați clienți multiprotocol care acceptă BitTorrent. Shareaza schimbă hash-uri și adrese peer ale altor rețele acceptate, inclusiv BitTorrent, prin intermediul rețelei Gnutella2 . Suportul BitTorrent este planificat în GreyLink 6.0, în timp ce rețeaua Direct Connect poate fi folosită nu numai pentru a converti în TTH , ci și pentru a găsi peer-uri.

Lucrul fără un client torrent

Pentru a prelua și distribui fișiere în rețelele torrent, nu este necesar să folosiți programe speciale. Există mai multe servicii care vă permit să descărcați fișiere folosind doar un browser [4] .

Prezența unor informații suplimentare în fișierele de metadate, cum ar fi surse suplimentare și hash-uri opționale, permite utilizarea unui fișier de metadate .torrent într-un mod similar cu formatele Metalink , MAGMA , Listă de fișiere (Conexiune directă) . Clientul Shareaza folosește hashuri opționale pentru a căuta surse alternative pe alte rețele.

Web seeds

Un caz de utilizare este așa-numitul web seeding. Uneori, din diverse motive, un client torrent cu drepturi depline nu poate fi lansat pe server. În acest caz, un server care operează prin protocolul HTTP acționează ca sursă de distribuție. De regulă, clienții preferă alți clienți BitTorrent și accesează seed-ul web numai atunci când este necesar. Rețineți că acest caz de utilizare este implementat în cel puțin trei moduri: BEP0017 BitTornado style webseed , BEP0019 GetRight style webseed și External Sourcing , fiecare dintre acestea fiind diferit în detaliile implementării.

A fost creat pentru prima dată de John „TheSHAD0W” Hoffman, care a creat BitTornado [5] . Deoarece versiunea 5.0 a clientului BitTorrent acceptă semințele web și descărcări de pe site-uri web, a fost creat un instrument simplu care creează publicații web seed torrent. μTorrent a adăugat suport pentru obținerea de semințe web în versiunea 1.7. BitComet a adăugat suport pentru obținerea de semințe web în versiunea 1.14.

BTIH (BitTorrent Info Hash)

Acesta este hash -ul SHA-1 al câmpului Info din fișierul de metadate . Acest hash este folosit în legăturile magnet , precum și pentru identificarea pe tracker și între clienți. Când încărcați un fișier de metadate într-un instrument de urmărire , hashul de informații al acestuia se poate modifica, deoarece instrumentul de urmărire poate modifica câmpul de informații prin setarea semnalului de distribuție privată sau prin modificarea/adăugarea câmpurilor din interiorul informațiilor. Prin urmare, trebuie să descărcați din nou fișierul de metadate (fișier .torrent) din tracker și să îl adăugați la client [6] .

Link BTC

Specificat ca:

btc://[Адрес]: [Порт]/[Peer ID]/[ BTIH ]

O legătură de acest fel se referă la distribuție și sursa acesteia. Sprijinit in Shareaza .

Dezavantaje și limitări

Indisponibilitatea distribuției

Dacă distribuția este nepopulară, atunci poate apărea o situație când nu există o singură sămânță, iar colegii prezenți nu au suficiente date pentru a finaliza descărcarea. În acest caz, este necesar să așteptați apariția fie a unei semințe, fie a unui egal care are segmente care lipsesc celorlalți. De asemenea, puteți utiliza copii ale fișierelor obținute în alt mod. O mână care nu are nicio sămânță de mult timp se numește „moartă”.

Pentru a încuraja cadourile, a fost creat chiar și un token BitTorrent [7] .

Lipsa anonimatului și personalizării

Principiul protocolului BitTorrent presupune ca fiecare client sa cunoasca adresele IP ale cel putin altor clienti primiti de la server. Utilizarea diferitelor extensii de protocol în unele cazuri vă permite, de asemenea, să aflați adresele altor colegi din roi. De aceea:

Problema cu anonimatul poate fi rezolvată folosind Tor [8] . Clientul Vuze BitTorrent are suport software încorporat pentru această rețea anonimă . Dar această metodă nu este 100% eficientă [9] .

Pe de altă parte, protocolul nu implică utilizarea de porecle. Niciun chat între colegi. Nu se pot enumera fișierele de la egal la egal (căutând alte fișiere care ar putea fi de interes). Cele mai multe dintre aceste caracteristici sunt implementate în alte protocoale (cum ar fi Direct Connect ).

Problema leecher

Unii utilizatori, în special pe trackere care nu necesită înregistrare, nu acceptă distribuția după finalizarea descărcării, ceea ce duce la o scădere a performanței generale, astfel încât unele trackere de torrent iau în considerare și cantitatea de descărcat / dat și dau permisiunea. de descărcat în funcție de dimensiunea datelor oferite de client.

Lipsa contabilității exacte a traficului

Spre deosebire de multe protocoale comerciale de distribuție a conținutului media, arhitectura protocolului nu oferă un mecanism precis pentru contabilizarea și controlul traficului între punctele de rețea. Tot ce este acolo sunt câmpurile descărcate și încărcate, în care clienții trec numărul de octeți luați în considerare la descărcarea/încărcarea datelor de la anunțul anterior la anunțarea către tracker. Cu toate acestea, necontrolate de nimeni altul decât clientul, pot fi ușor falsificate. Pentru a face acest lucru, utilizatorii atribuie static valorile acestor câmpuri URI -ului de urmărire , folosesc patch-uri pentru clienți sau programe separate (RatioMaster, GiveMeTorrent, GreedyTorrent etc.), sau pur și simplu șterg înregistrarea trackerului de la client imediat după primirea unui lista punctelor de rețea din tracker . Toate acestea vă permit să ocoliți restricțiile artificiale create de administrarea multor trackere private și publice.


Terminologie

BitTorrent v2

Lucrările la protocolul BitTorrent al celei de-a doua versiuni au început din 2008. Protocolul s-a îndepărtat de la utilizarea algoritmului SHA-1, care are probleme cu selecția coliziunilor, în favoarea SHA2-256. SHA2-256 este folosit atât pentru controlul integrității blocurilor de date, cât și pentru intrările în indexuri (info-dicționar), ceea ce rupe compatibilitatea cu DHT și trackere. Un nou prefix „urn:btmh:” a fost propus pentru legăturile magnet către torrente cu hash-uri SHA2-256 (pentru SHA-1 și torrentele hibride, se folosește „urn:btih:”).

Deoarece modificarea funcției hash întrerupe compatibilitatea protocolului (un câmp hash de 32 de octeți în loc de 20 de octeți), dezvoltarea specificației BitTorrent v2 nu a fost inițial compatibilă cu versiunea precedentă și au fost făcute alte modificări semnificative, cum ar fi utilizarea unui hash Merkle. arbore în indexuri pentru a reduce dimensiunea fișierelor torrent și a verifica datele descărcate la nivel de bloc.

Alte puncte importante ale modificărilor din BitTorrent v2 sunt trecerea la asocierea arborilor hash separati pentru fiecare fișier și aplicarea alinierii fișierelor în părți (fără adăugarea de umplutură suplimentară după fiecare fișier), ceea ce elimină duplicarea datelor atunci când există fișiere identice și facilitează identificarea surse diferite pentru fișiere. Eficiență îmbunătățită a codificării structurii de directoare torrent și optimizări adăugate pentru a gestiona un număr mare de fișiere mici.

Pentru a ușura coexistența BitTorrent v1 și BitTorrent v2, este implementată capacitatea de a crea fișiere torrent hibride, care includ, pe lângă structurile cu hash-uri SHA-1, indexuri cu SHA2-256. Aceste torrente hibride pot fi utilizate cu clienți care acceptă doar protocolul BitTorrent v1. De asemenea, este în curs de dezvoltare pentru a sprijini protocolul WebTorrent [10] . Trecerea de la SHA-1 în sine creează incompatibilitate în rețelele DHT, trackere (care are o lungime fixă ​​de info-hash de 20 de caractere). Pentru a nu pierde compatibilitatea, la început puteți verifica atât SHA-1, cât și SHA-256, reducând cele 32 de caractere, incompatibile cu vechiul protocol BitTorrent v1, SHA-256 la 20 de caractere [11] .

Note

  1. Specificații BitTorrent: Încheierea jocului
  2. HAL - INRIA:: [inria-00000156, versiunea 3] Înțelegerea BitTorrent: o perspectivă experimentală
  3. Ce este DHT?//Întrebări frecvente pe torrent Arhivat 8 iulie 2007.
  4. Descărcarea torrenților fără client: Bitlet, Torrent2exe, httpTorrents . Chestii de internet . Arhivat din original pe 13 decembrie 2009.
  5. Specificația de însămânțare bazată pe HTTP (TXT)  (downlink) . Consultat la 9 mai 2006. Arhivat din original pe 22 august 2011.
  6. Cum să porniți distribuția (folosind exemplul clientului µTorrent 1.8.3.)
  7. BitTorrent Token (BTT) |  Tokenizare Partajarea descentralizată a fișierelor .
  8. Utilizarea BitTorrent în siguranță prin Tor
  9. Bittorrent peste Tor nu este o idee bună
  10. Lansarea libtorrent 2.0 cu suport pentru protocolul BitTorrent 2 . www.opennet.ru _ Data accesului: 13 noiembrie 2020.
  11. Bram Cohen. Propunere de îmbunătățire BitTorrent (BEP) - 0052 . bittorrent.org . Data accesului: 13 noiembrie 2020.

Link -uri