BitTorrent

Da Wikipedia, l'enciclopedia libera.
bussola Disambiguazione – Se stai cercando l'omonimo client BitTorrent, vedi BitTorrent (software).

BitTorrent, spesso abbreviato BT, è un protocollo finalizzato alla distribuzione e condivisione di file nella rete.

Caratteristiche[modifica | modifica wikitesto]

BitTorrent è un protocollo di tipo peer-to-peer (P2P) utilizzato per lo scambio di file in rete. In realtà non è da considerarsi come un algoritmo distribuito puro, dato che la sua architettura prevede la presenza di un server utilizzato per la fase di aggancio alla rete. L'omonimo client originale e il protocollo sono stati sviluppati da Bram Cohen, un programmatore di San Francisco, nel 2002.

In precedenza, Cohen aveva scritto "Moyonation", un programma che frammentava i file e li inviava via web.

BitTorrent è scritto in linguaggio Python e fu originariamente distribuito sotto Licenza MIT. Dalla versione 4.0.0 del 7 marzo 2005 la licenza è cambiata in BitTorrent Open Source License.

Il software è disponibile per i sistemi operativi Microsoft Windows, Mac OS e Linux.

Funzionamento[modifica | modifica wikitesto]

Esempio di condivisione

A differenza dei tradizionali sistemi di file sharing, l'obiettivo di BitTorrent è di realizzare e fornire un sistema efficiente per distribuire lo stesso file verso il maggior numero di utenti disponibili, i quali possono sia prelevarlo scaricandolo sul proprio terminale (download) che inviarlo ad altri (upload).

BitTorrent impone di fatto un meccanismo di coordinamento del lavoro di numerosi computer, ottenendo il massimo beneficio possibile per tutti. Grazie a questo sistema, ogni nodo contribuisce alla diffusione del file. Maggiore è l'ampiezza di banda in uscita su quel nodo, maggiori sono le probabilità che il file venga diffuso verso altri nodi. Questo metodo ha anche il pregio di ridurre l'impatto della cosiddetta "leech resistance" (vedi in proposito la voce Leechers).

Il file originale[modifica | modifica wikitesto]

BitTorrent permette di distribuire file di qualsiasi tipo. Il documento originale viene frammentato in tanti piccoli pezzi che poi saranno ricomposti a destinazione. Le parti hanno dimensione fissa, la fingerprint calcolata con l'algoritmo SHA1 viene distribuita agli altri client per verifica mediante i network (come il Web).

File .torrent[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Torrent (file).

Per poter usufruire del sistema è quindi necessario, prima di tutto, prelevare un file caratterizzato dall'estensione .torrent. Di ridotte dimensioni (poche decine di KB), tale file svolge la funzione di indice, in quanto contiene la descrizione di tutti i pacchetti in cui è stato suddiviso il documento o file originale e le chiavi hash che garantiscono l'integrità dei vari pezzi. Tecnicamente altro non è che un file statico contenente informazioni codificate mediante un algoritmo di hashing, che descrivono i file da prelevare e/o da trasferire. Un qualsiasi client BitTorrent, oltre a leggere i file .torrent e compiere le operazioni possibili, è anche in grado di generarli.

Motori di ricerca .torrent[modifica | modifica wikitesto]

Per trovare file .torrent, esistono motori di ricerca appositi, che indicizzano solo file .torrent.

Tracker[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi BitTorrent tracker.

I file .torrent, inoltre, contengono l'indirizzo URL di uno o più tracker (server traccia), utilizzati per localizzare le sorgenti che posseggono il file o parte di esso. Il tracker si occupa di coordinare i rapporti fra utenti richiedenti il file e quelli che lo offrono. Solitamente, i siti tracker forniscono anche delle statistiche sul numero di trasferimenti, il numero di nodi che hanno completato la copia del file e il numero di nodi che ne posseggono una copia parziale.

Nodi[modifica | modifica wikitesto]

I nodi della rete BitTorrent sono costituiti dagli utenti che condividono tra loro i files.

Seed[modifica | modifica wikitesto]

I seed (in italiano semi) o seeder sono quei nodi della rete costituiti da coloro che hanno già scaricato il file (o i file) associato al .torrent e ora lo stanno solo inviando ad altri. Questa fase di solo invio (upload) prende il nome di seeding ed è la fase in cui si va a trovare il file dopo è stato scaricato. Il primo seed di un torrent è il releaser, che trasmette parti ai peer fino a quando almeno uno di loro completa il download del torrent, diventando a sua volta un seed.

Peer[modifica | modifica wikitesto]

I peer sono nodi che non sono ancora in possesso del file completo e fungono contemporaneamente sia da client (verso i seed) che da server (verso gli altri peer). Oltre a ricevere e salvare (downloading) parti di files quindi, i peer inviano (uploading) le parti di cui sono già in possesso ad altri peer.

Un tipo particolare di peer sono i cosiddetti peer locali, ovvero i peer che condividono lo stesso torrent mediante una rete LAN. In molti client è possibile abilitare una funzione di ricerca dei peer locali, in modo da connettersi a loro più velocemente.

Leechers[modifica | modifica wikitesto]

Come già detto i peer, oltre a scaricare, inviano anche dati; il rapporto tra dati inviati e scaricati è detto share ratio (cioè "rapporto di condivisione"). Coloro che inviano solo pochi dati rispetto a quanti ne scaricano (e che quindi hanno un pessimo share ratio) vengono detti leechers (ovvero sanguisughe). Questo comportamento è altamente disapprovato dalla comunità di BitTorrent, in quanto l'intero protocollo si basa sulla condivisione: chi scarica un file è in grado di farlo solo grazie ai seed e/o ai peer che gli inviano i dati di cui necessita, se quindi per assurdo tutti gli utenti si comportassero da leechers si arriverebbe alla "morte" del sistema, ossia non si riuscirebbe a scaricare più nulla. Per tale motivo vengono utilizzate delle contromisure contro i leechers, come ad esempio privilegiare i peers con elevato share ratio (che quindi otterranno velocità di download più elevate), fino al ban da un tracker.

Swarm[modifica | modifica wikitesto]

Con "swarm" (in italiano sciame) s'intende il numero complessivo di seed e di peer che condividono lo stesso file .torrent. Tale valore indica però il numero di fonti totali, non quelle effettivamente connesse al proprio client.

Client[modifica | modifica wikitesto]

Azureus 2.3.0.4 sotto GNU/Linux

Con client (in italiano cliente), nel linguaggio informatico, si intende una componente (hardware o software che sia) che accede ai servizi o alle risorse di un altro componente, detto server. Un computer, quindi, collegato ad un server tramite una rete informatica, funge da apparato hardware e come tale è detto per l'appunto client.

Un Client BitTorrent dunque si occupa di accedere all'omonima rete ed effettuare il download/upload da e verso tutti i nodi ad esso collegati. Il client è quindi lo strumento fondamentale che permette lo scambio dei dati.
Il primo client BitTorrent fu creato da Cohen basandosi su quella che lui definisce "Golden Rule": più veloce un utente fa un upload, più veloce potrà fare il download.[1] e porta lo stesso nome del protocollo. In seguito sono nati altri numerosissimi client, che si adattano alle esigenze dei più svariati utenti.

Lista dei maggiori Client[modifica | modifica wikitesto]

Dati tecnici[modifica | modifica wikitesto]

BitTorrent utilizza un protocollo nuovo rispetto ad altri sistemi P2P. La sua caratteristica principale è la facile estensibilità, segue il limitato consumo di banda. Il protocollo si basa su un algoritmo di codifica detto Bencode, utilizzato per le comunicazioni client/server e client/client.

I seguenti paragrafi trattano, nell'ordine,

  1. la codifica Bencode, utilizzata nei file .torrent;
  2. la struttura vera e propria del file .torrent;
  3. il protocollo client/server;
  4. il sistema Scrape.

La codifica Bencode[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Bencode.

La codifica Bencode è quella utilizzata per i file torrent. È stata progettata per avere al tempo stesso la flessibilità dell'XML e la "leggerezza" necessaria per ridurre al minimo le dimensioni del file .torrent (cioè il numero di byte inviati dal server al client).

Il file di meta-informazioni[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Torrent (file).

Il file torrent comprende la lista dei file disponibili e i relativi checksum (per garantire l'integrità delle parti di file che vengono scaricate).

Protocollo client/server - Announce e l'ottenimento dei peer[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Bencode.

Un client che intende scaricare un torrent, una volta ottenuto il file di meta-informazioni, deve contattare il tracker tramite il protocollo HTTP con una richiesta GET. Esso fornirà al tracker i dati richiesti tramite la Query String, e riceverà in risposta un dizionario Bencode contenente informazioni sul tracker e gli indirizzi IP dei client connessi.

Questi sono i parametri che devono essere inviati al tracker (in grassetto quelli richiesti dal protocollo standard):

  • info_hash: hash SHA1 del dizionario info codificato in Bencode, in formato stringa codificata secondo le convenzioni URL
  • peer_id: una stringa di 20 caratteri che permette di identificare in maniera quasi-univoca l'utente sul tracker
  • port: numero di porta sulla quale il client è in ascolto. Le porte tipiche sono nel range 6881-6900.
  • uploaded: bytes inviati agli altri client dall'inizio della sessione, codificati in ASCII base-10
  • downloaded: bytes scaricati dagli altri client dall'inizio della sessione, codificati in ASCII base-10
  • left: bytes rimanenti al completamento del file, codificati in ASCII base-10. Il valore 0 indica un seeder
  • compact: indica al tracker di utilizzare il Compact Announce, per l'elenco dei peer. Si veda l'elemento peers della risposta
  • event: può assumere i tre seguenti valori: "started", "stopped", "completed". Il primo viene inviato a inizio sessione e indica al tracker che si sta iniziando una nuova sessione. Il secondo chiude la connessione con il tracker e chiede di essere rimosso dalla lista dei peer. L'ultimo comunica al tracker il completamento del download e il passaggio allo status di seeder.
  • ip: indirizzo IP da comunicare agli altri peer. Solitamente utilizzato se si è dietro NAT/router
  • numwant: numero di fonti massimo che il tracker deve comunicare
  • key: stringa randomizzata per una migliore identificazione univoca del client
  • trackerid: se il tracker ha comunicato in precedenza un tracker id, esso va inviato qui

Announce risponde con una stringa (MIME text/plain). Le eventuali condizioni di errore non possono essere comunicate con i Hypertext Transfer Protocol. La stringa rappresenta un dizionario con i seguenti elementi:

  • failure reason(stringa): se presente, rappresenta la condizione di errore in formato human-readable. In presenza di failure reason non devono essere presenti ulteriori elementi
  • warning message(stringa): rappresenta una condizione di allerta in formato human-readable. L'elaborazione della risposta di Announce non viene interrotta e all'utente viene mostrato un messaggio descrittivo
  • min interval(intero): tempo minimo in secondi che deve trascorrere tra due richieste Announce, pena il rifiuto da parte del server
  • interval(intero): tempo in secondi da raccomandare al client per gli intervalli tra gli aggiornamenti Announce, al fine di non sovraccaricare il server.

Deve essere compreso tra il valore di min interval e il time-out per la disconnessione forzata dei peer morti

  • tracker id(stringa): una stringa che identifichi univocamente il tracker.
  • complete(intero): seeder attualmente connessi (utile se il numero di peer connessi supera di molto il limite di risposta)
  • incomplete(intero): leecher attualmente connessi (utile se il numero di peer connessi supera di molto il limite di risposta)

Se il client utilizza il Compact Announce

  • peers(stringa): ogni peer occupa 6 byte in questa stringa. I primi 4 rappresentano l'indirizzo IP in formato numerico, e gli altri 2 la porta.

I peer sono concatenati tra di loro in ordine di rete.

Se il client non utilizza il Compact Announce

  • peers(lista): lista di dizionari, ciascuno dei quali contiene informazioni sul peer
    • (dizionario): contiene i dati necessari a identificare e contattare un peer
      • peer id(stringa): il valore arbitrario che il peer ha fornito in fase di connessione
      • ip(stringa): l'indirizzo IP in formato IPv4, IPv6 o DNS
      • port(intero): numero di porta usato dal peer

Per convenzione il numero massimo di peer forniti durante un'interrogazione di Announce non dovrebbe superare i 50.

Protocollo client/server - Scrape e il conteggio dei peer[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Bencode.

Un tracker può ospitare al proprio indirizzo uno script denominato scrape che permette il solo conteggio dei peer connessi al tracker per uno o più Torrent registrati. Solo se l'indirizzo del tracker termina con announce, eventualmente seguito da un'estensione, è possibile utilizzare la convenzione scrape. Senza specificare altri parametri, sarà il client ad operare una sostituzione testuale nell'indirizzo URL del tracker in modo da ottenere l'URL Scrape. Ad esempio:

Scrape viene contattato con richiesta HTTP GET: può essere specificato il parametro info_hash per identificare il Torrent di interesse, o tale parametro può essere omesso per ottenere l'intera lista di Torrent registrati al tracker. La seconda opzione richiede molta più banda della prima.

Il server restituisce una stringa (MIME text/plain) che rappresenta un dizionario con i seguenti elementi:

  • files(dizionario): elenca tutti i Torrent in base al loro info hash
    • [info-hash](dizionario): rappresenta un singolo Torrent
      • complete(intero): seeder attualmente connessi al tracker
      • incomplete(intero): leechers attualmente connessi al tracker
      • downloaded(intero): numero di volte che il file è stato completato (event=completed)
      • name(stringa): nome del Torrent

Se il parametro di richiesta info_hash è specificato, il dizionario files conterrà un solo elemento.

BitTorrent a confronto con altri sistemi peer-to-peer[modifica | modifica wikitesto]

Uno schema esplicativo di come funzioni lo scambio di parti di file all'interno del Torrent Swarm.

Tra BitTorrent e i sistemi peer-to-peer più conosciuti vi sono due principali differenze. Prima di tutto, BitTorrent non ha la ricerca dei file per nome: l'utente deve prima prelevare da un sito web apposito (ad esempio annunciato su un forum di discussione o trovato con una ricerca sul web a partire da un motore di ricerca) un file .torrent. Inoltre, BitTorrent non tenta affatto di nascondere l'ultimo host responsabile della disponibilità di un dato file: una persona che desidera rendere disponibile un file deve prima eseguire un server traccia su di uno specifico host o serie di host e distribuire l'indirizzo della traccia o gli indirizzi di traccia in un file .torrent. Uno dei grossi svantaggi di BitTorrent rispetto agli altri sistemi di peer-to-peer è che i file muoiono con facilità perché è un programma pensato più che altro per diffondere file piuttosto che per condividerli.

Mentre è possibile eseguire semplicemente un server traccia su di un host immune dal pericolo di azioni legali per violazioni del copyright, questo protocollo scarica, attraverso il "seeding" ("semina"), la responsabilità su altri protocolli. Con un peer-to-peer tradizionale, invece, per la sua natura intrinsecamente più individuabile, è abbastanza facile costringere alla chiusura un Internet Service Provider nel momento in cui vengono identificati utenti che scaricano file protetti da copyright.

BitTorrent sembra sempre di più essere l'unico protocollo P2P utilizzabile per scopi legali: è molto diffuso per diffondere le distribuzioni in ambiente GNU/Linux. A seguito del suo successo, il creatore di BitTorrent, Bram Cohen, ha sviluppato un sistema per distribuire patch, altri contenuti e plug-in per videogiochi on line.

Rispetto ad eMule[modifica | modifica wikitesto]

Il metodo utilizzato da BitTorrent per distribuire file somiglia a quello utilizzato dalla reti eDonkey e Kad ma, oltre alle analogie, ci sono anche molte differenze:

  1. In BitTorrent gli scambi sono sempre molto veloci per tutti i partecipanti in quanto tutti i nodi si scambiano parti di file a vicenda senza distinzioni di sorta.
  2. Con eMule ogni nodo di solito condivide e scarica una grande quantità di dati senza alcun bilanciamento fra i nodi presenti. La causa di ciò sono il sistema dei crediti e il sistema delle code, assenti in BitTorrent.
  3. Lo standard del protocollo eDonkey/Kad causa una bassa "leech resistance": non c'è l'obbligo costante di uploadare come in BitTorrent e, finché non si viene comunque identificati dai sistemi anti-leech dei clients, si può scaricare senza condividere più di tanto usando le comunque disoneste leech mod.
  4. In BitTorrent l'assenza dei crediti comporta subito, per chi ha una connessione a banda larga, una buona velocità nel download senza dover prima attendere il conseguimento dei crediti verso gli altri utenti.
  5. I file su BitTorrent però sono spesso destinati a morire prima dei file condivisi di eMule: i .torrent richiedono la loro continua attivazione nel client mentre il file di eMule risiedono in cartella condivisa.

Controversie[modifica | modifica wikitesto]

Per la sua natura intrinsecamente trasparente e per il notevole risparmio di banda che procura BitTorrent è probabilmente il protocollo di condivisione dei file più utilizzato per scopi legali, che cioè non violano il diritto d'autore. Esempi di questo tipo di contenuti sono le distribuzioni GNU/Linux e i trailer cinematografici di grandi dimensioni. Tuttavia sempre più spesso BitTorrent viene utilizzato per lo scambio di file musicali, film e software coperti da copyright. A questo riguardo ci sono molte discussioni su chi sia perseguibile e in che termini secondo le leggi vigenti (vedi la voce peer-to-peer per ulteriori informazioni).

Dato che l'occultamento degli utilizzatori non è ancora una funzionalità implementata nel diversi client BitTorrent, la privacy dell'utente finale non viene tutelata in alcun modo e, che egli scarichi illegalmente o meno, può essere soggetto a violazioni della propria privacy da parte di società spia anti-p2p.

Per cercare di risolvere, o almeno mitigare, tale problema è possibile utilizzare:

  • un proxy per la connessione del client che mascheri il vero IP dell'utente,
  • una rete di anonimato, come quella offerta dal programma Tor (in cui il proxy è comunque incluso),
  • una block-list degli indirizzi IP ritenuti malevoli da inserire nel client stesso (qualora esso supporti tale funzionalità),
  • uno speciale firewall come Peerguardian (ora convertito nel progetto Peerblock).

Il caso Supernova.org[modifica | modifica wikitesto]

A circa un anno dall'uscita di BitTorrent, in concomitanza con la sua diffusione su vasta scala, Andrej Preston, conosciuto anche come Sloncek, aprì la prima grande community BitTorrent: Supernova.org. Sul sito era possibile scaricare gratuitamente torrent di ogni genere, anche quelli che non rispettavano le leggi sul diritto d'autore. Anche a causa della sua grossa popolarità, nel 2004 Supernova.org era primo in classifica su tutti i motori di ricerca con milioni di contatti giornalieri, il sito entrò nel mirino delle case discografiche unite nella lotta alla pirateria e della RIAA. Senza finire in tribunale, già in vista di una sentenza a suo sfavore, Supernova.org chiuse spontaneamente i battenti e il proprietario iniziò a lavorare ad un nuovo progetto peer-to-peer basato su BitTorrent. Tale progetto è eXeem, vittima di numerose polemiche per via dei codici sorgenti chiusi.

Questo enorme sito è stato riaperto in agosto 2007 grazie al supporto del team di The Pirate Bay. Sembra attualmente che il progetto eXeem sia stato abbandonato dal team di sviluppo ufficiale e la sua rete di eXeem al momento non è più funzionante.

Il caso The Pirate Bay[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Processo a The Pirate Bay.

Sviluppi recenti[modifica | modifica wikitesto]

Il protocollo e tutti i client BitTorrent sono in continuo sviluppo. Una delle più recenti implementazioni è il web seeding. Gli sviluppatori della rete BitTorrent inoltre stanno lavorando sodo per ottenere una rete decentralizzata indipendente dai Tracker, ritenuti un punto debole facilmente sfruttabile da coloro che conducono la lotta al p2p. Un primo passo è stata l'introduzione del DHT (Distributed Hash Table, "tabella di Hash distribuita") che al momento è stata introdotta nel client BitTorrent ufficiale, su Azureus, su Transmission, su BitComet, su Deluge, su μTorrent, su rTorrent, su KTorrent, su Tomato Torrent e su qBittorrent.

DHT (Distributed Hash Table)[modifica | modifica wikitesto]

Exquisite-kfind.png Per approfondire, vedi Tabella di hash distribuita.

Il «DHT» (Distributed Hash Table, ovvero «Tabella di Hash distribuita») è forse il primo vero passo per ottenere una rete BitTorrent decentralizzata. Il DHT è un sistema che aiuta la distribuzione di file e di informazioni quando un tracker è offline, e non fa parte del protocollo BitTorrent.

Per capire meglio quanto appena detto, supponiamo che 50 utenti partecipino contemporaneamente in un network.

All'inizio tutti i 50 utenti utilizzeranno un grande tracker che farà loro da indice durante il download. Durante il "soggiorno" sul network, ogni client (che supporta il sistema DHT) dei 50 utenti, creerà un indice virtuale che punterà al grande tracker. In questo modo se sto scaricando un file di modeste dimensioni ed il grande tracker cade l'indice virtuale mi consentirà di continuare il download e cercare nuove fonti.

Per il momento il sistema DHT di BitComet è compatibile con la versione 4.1.2 di BitTorrent ufficiale, e con Ktorrent a partire dalla versione 2.2.0 mentre non lo è con Azureus.

Il futuro[modifica | modifica wikitesto]

L'evoluzione del protocollo BitTorrent prevede, tra l'altro, la possibilità di aumentare la velocità di download dei file utilizzando le parti (byte) in comune dei vari pezzi di file.

CarTorrent[modifica | modifica wikitesto]

I ricercatori dell'UCLA Engineering con a capo Mario Gerla e Giovanni Pau stanno implementando un protocollo basato su BitTorrent per condividere informazioni via wireless fra automobili. Il nome del progetto è CarTorrent.[2]

Browser[modifica | modifica wikitesto]

Opera è il primo browser ad integrare un client per la gestione dei file torrent, che si possono scaricare direttamente all'interno di Opera senza l'apertura di altri programmi.

Note[modifica | modifica wikitesto]

  1. ^ Seth Schiesel, File Sharing's New Face, The New York Times Company. URL consultato il 5 ottobre 2008.
  2. ^ PI: CarTorrent, per condividere anche in auto

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Telematica Portale Telematica: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete