Torrent (formato di file)
Torrent (o metainfo[1]) è un formato di file utilizzato dal protocollo peer-to-peer BitTorrent per la distribuzione e la condivisione di file tramite Internet.[2][3][4]
Torrent | |
---|---|
Estensione | .torrent
|
Tipo MIME | application/x-bittorrent
|
Standard | BEP-0003 |
Funzione e caratteristiche
modificaLa funzione di questo tipo di file è quella di condividere contenuti personali. Ogni utente, infatti, può creare e pubblicare un proprio torrent. La diffusione dei file .torrent si è avuta parallelamente alla diffusione della banda larga (ADSL).
Tecnicamente, i .torrent sono file di piccole dimensioni che, aperti con programmi appositi, portano a scaricare il contenuto memorizzato nel computer delle persone che stanno condividendo il file. Si tratta di file di tipo binario, che contengono tutte le informazioni di riferimento del file da scaricare e condividere.
La codifica utilizzata per i file torrent viene chiamata Bencode.
La codifica Bencode
modificaBencode è una codifica derivata da XML, sebbene la sua sintassi sia completamente diversa. Bencode ha infatti la scalabilità, l'inclusione e l'estensibilità completa di un documento XML, ma permette di risparmiare caratteri (e, quindi, byte in trasmissione) per codificare le informazioni.[5]
I quattro tipi fondamentali di Bencode sono il dizionario, la lista, l'intero e la stringa. Differentemente da XML il tipo intero è separato dal tipo stringa. Un dizionario e una lista possono contenere un numero infinito di elementi di natura qualsiasi, mentre intero e stringa non possono contenere altri elementi.
- Codifica della stringa
Una stringa XXXXX viene codificata come l:XXXXX, dove l è la lunghezza in caratteri della stringa.
Esempi:
foo => 3:foo bar => 3:bar spam => 4:spam eggs => 4:eggs Ciao Mondo => 10:Ciao Mondo
- Codifica dell'intero
Un intero Y viene codificato come iYe.
Esempi:
8 => i8e 765 => i765e
- Codifica del dizionario
Un dizionario consiste in una serie di elementi ciascuno identificato da una stringa. Gli elementi non hanno limitazioni di tipo. Possono essere anch'essi dizionari. Un dizionario con un elemento XYZ => ABC, indicando (ABC) la codifica in Bencode dell'elemento, è rappresentato dalla stringa d3:XYZ(ABC)e. Il carattere e è un terminatore.
Esempi:
{ filename => miofile.txt size => 76500 attributes => { readonly => 1 hidden => 0 } } equivale a d8:filename11:miofile.txt4:sizei76500e10:attributesd8:readonlyi1e6:hiddeni0eee
- Codifica della lista
Una lista inizia con il carattere l e termina col carattere e. Gli elementi sono disposti nel loro ordine, ciascuno nella rispettiva codifica.
Esempio:
{ foo bar spam { ciao => mondo num => 5 } } equivale a l3:foo3:bar4:spamd4:ciao5:mondo3:numi5eee
Il file torrent
modificaIl file torrent, come già visto, contiene le informazioni necessarie per identificare e scaricare un file dalla Rete in tutta sicurezza. Si tratta di un file di testo che contiene la codifica in Bencode di un unico grande dizionario, il quale contiene a sua volta i dati (anch'essi sotto forma di dizionari) che identificano il torrent.
I seguenti elementi fanno parte del protocollo standard e comprendono le ultime estensioni [6]: (quelli in grassetto sono richiesti dal protocollo standard)
- announce(stringa): indirizzo URL del tracker codificato come stringa ASCII
- announce-list(lista): estensione del protocollo verso il Multitracker. Il dizionario announce è comunque richiesto per retrocompatibilità
- creation date(intero): data di creazione codificata come timestamp Unix
- comment(stringa): un commento al Torrent codificato come stringa ASCII
- created by(stringa): programma che ha generato il Torrent
- info(dizionario): dizionario principale che descrive il contenuto del Torrent.
I suoi elementi possono variare se il torrent è composto da uno o da più file
In caso di file singolo:
- length(intero): dimensione del file in byte
- md5sum(stringa): fingerprint MD5 del file per migliore identificazione
- name(stringa): il nome del file in formato ASCII (i nomi UTF-8 e Unicode generano problemi di codifica)
In caso di archivio con più file:
- files(lista): la lista dei file contenuti nel Torrent
- (dizionario): ogni file è rappresentato da un dizionario con la seguente struttura:
- length(intero): dimensione del file in byte
- md5sum(stringa): fingerprint MD5 del file per migliore identificazione
- path(lista): lista di stringhe che permette di ricostruire il percorso del file prendendo gli elementi del loro ordine
- (stringa): l'ultimo elemento rappresenta nome ed estensione del file (esempio: "Dir1", "Dir2", "File.ext" rappresenta Dir1/Dir2/File.ext)
- piece length(integer): lunghezza in byte di ogni parte in cui è suddiviso il(i) file
- pieces(stringa): stringa che concatena le fingerprint SHA1 del/i file in formato ASCII. Se in fase di creazione la stringa non ha lunghezza multipla di 20, essa viene completata con zeri.
- (dizionario): ogni file è rappresentato da un dizionario con la seguente struttura:
Note
modifica- ^ BEP-0003.
- ^ (EN) TORRENT File Extension - What is a .torrent file and how do I open it?, su fileinfo.com. URL consultato il 14 luglio 2017.
- ^ (EN) File Extension .TORRENT Information, su pc.net. URL consultato il 14 luglio 2017.
- ^ What's a TORRENT File and How Do You Open One?, in Lifewire. URL consultato il 14 luglio 2017.
- ^ Bencode - search.cpan.org, su search.cpan.org. URL consultato il 14 luglio 2017.
- ^ (EN) Ian J. Taylor e Andrew Harrison, From P2P and Grids to Services on the Web: Evolving Distributed Communities - Second Edition, Springer, 2009, pp. 231-232. URL consultato il 14 luglio 2017.
Voci correlate
modificaCollegamenti esterni
modifica- (EN) Bram Cohen, The BitTorrent Protocol Specification, su BitTorrent.org.
- (EN) Bram Cohen, The BitTorrent Protocol Specification v2, su BitTorrent.org.