Network BitTorrent

Cos’è la rete BitTorrent?

E’ un sistema per la distribuzione di file o meglio un protocollo p2p (Peer to Peer) per lo scambio di file in rete. Molto utilizzato in tutto il mondo e studiato nel campo dei sistemi distribuiti (anche se 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).

Un file statico .torrent è posto su un web server e contiene varie informazioni che ci permettono di avviare il download del file, tra cui:
– nome
– lunghezza
– info di hashing
– URL dei tracker

Il download avviene fra Peer, un peer è un nodo che fa parte della rete BitTorrent (un comune utente), che con il suo client BitTorrent può effettuare download e upload di più file contemporaneamente. Con lo scopo di tener traccia di quali peers hanno cosa, BitTorrent spezza i file in pezzi di misura fissa. Per verificare l’integrità dei dati, nel file .torrent sono inclusi gli hashes SHA1 di tutti i pezzi del file. I Peers non dichiarano di avere un pezzo finchè non effettuano il confronto dell’hash.

Il client BitTorrent più conosciuto e utilizzato è uTorrent. Ma esistono molti altri client, o addirittura browser (vedi Opera) che integrano all’interno un client BitTorrent.

Screenshot uTorrent

Tracker

I Tracker servono per aiutare i Downloaders a trovarsi. Infatti da un certo momento in poi non si scarica più dal web server ma dagli altri utenti. Un tracker può essere pubblico o privato e da informazioni su quali altri peer stanno scaricando lo stesso file.

tracker torrent

I requisiti di banda per il tracker o il web server sono bassi (non trasferisce direttamente il file!) mentre il seed deve spedire l’intera copia del file originale.
Per meglio tener traccia dei file in possesso dei peer, BitTorrent spezza ogni file in pezzi di misura prefissata: ogni downloader annuncia al tracker quali pezzi possiede.

Alcuni dei siti più famosi nella storia di BitTorrent sono:
– The pirate bay
– Kickass torrent
– Demonoid
– tntvillage (italiano)

La maggior parte oscurati dai provider italiani ma ancora accessibili tramite proxy.

Seed, Leech e Swarm

Per rendere un file disponibile, un downloader che lo abbia già completato deve metterlo in upload, e diviene seed (seme). I Seed son coloro che possiedono ogni parte che compone il file. Quando parliamo di BitTorrent, sentiamo parlare anche di Leech. E’ un termine che tradotto letteralmente sta per “sanguisuga”. I Leech sono coloro che hanno messo in download un file e non lo hanno ancora completato. In BitTorrent i leech possono anche effettuare upload pur non avendo completato il download dell’intero file. Mentre per Swarm (sciame), intendiamo un gruppo di gente che scarica lo stesso file. Una problematica che sorge in BitTorrent è che i seed una volta completato il file, si disconnettono o comunque possono spostare il file e quindi interromperne la condivisione. Abbassando il numero di Seed il file diviene meno popolare e le velocità di download per i leech rallentano. Valori alti di seed e di leech generalmente stanno a indicare che il torrent è in condivisione da un numero elevato di utenti.

seed leech

Verifica Integrità

La verifica d’integrità di un file avviene attraverso funzioni di Hashing (solitamente SHA1). Ogni parte ricevuta viene controllata attraverso il confronto dell’hash. Se per errore o modifiche illecite, ci ritroviamo parti del file compromesse, la verifica dell’hash fa si che le parti non genuine vengano scartate, procedendo nuovamente con il download da altri peer. Ogni parte del file ha un suo hash! Qualora una parte modificata del file abbia ugualmente un’hash genuino ci ritroveremo in presenza di un hash collision! Un fenomeno abbastanza raro che ha a che fare con l’algoritmo di hashing utilizzato piuttosto che con la rete BitTorrent.

Calcolo degli Hash di alcuni file tramite un software specifico.

Calcolo degli Hash di alcuni file tramite un software specifico.

Politiche sugli utenti e i blocchi

Quando si trasferiscono dati su TCP, come BitTorrent stesso fa, è importante avere sempre tante richieste pendenti per evitare ritardi tra pezzi che si inviano. In pipeline vengono tenute sempre almeno 5 richieste.
BitTorrent per evitare ciò spezza i blocchi in sottoblocchi.

Algoritmi per scegliere cosa scaricare

La selezione dei blocchi da scaricare per un peer è importante per garantire una buona performance.

Ci sono più politiche per decidere quali selezionare:

Strict Priority: Quando un sottoblocco è stato richiesto, i restanti sottoblocchi di quel blocco sono richiesti a quello stesso peer. Prima di altri sottoblocchi diversi.

Rarest Block First: Si vanno a scaricare i blocchi più rari per assicurarsi che il download si completi, lasciando i blocchi più comuni per ultimi, dato che non sarà difficile trovarli. In questo modo ci si assicura che i blocchi più rari non diventino introvabili.

Random First Piece: All’inizio un peer potrebbe non avere nulla da condividere (da uppare), quindi è necessario procurarsi un Blocco completo non appena possibile. Per questo solitamente all’avvio del download di un nuovo file, il primo blocco è scelto randomicamente. Se si cercasse subito un Blocco raro, la sua acquisizione sarebbe lenta e quindi di conseguenza anche l’entrata del peer all’interno del network. Dopo l’acquisizione di un paio di blocchi random infatti, si potrà tornare alla strategia Rarest Block First.

Endgame Mode: Verso la fine del download se ci sono rallentamenti si possono richiedere tutti i sottoblocchi mancanti allo stesso seed. Si sprecherà della banda, ma non importa perchè tanto siamo alla fine.

Algoritmi per decidere verso chi fare upload (Algoritmi di CHOKING)

Questi algoritmi sono necessari per una questione di performance: per essere cooperativi i peers fanno upload mentre altri rifiutano temporaneamente di farlo (to choke = soffocare). Un algoritmo di Choking serve a garantire un tasso di download ragionevole e deve evitare che ci siano peers che non fanno mai upload!

Queste proprietà le hanno i sistemi “pareto efficiency”, ovvero nessuna controparte coinvolta in uno scambio dev’essere più felice dell’altra.

Per decidere quali peers non devono fare choking ci si basa sul tasso di download che è valutato ogni 20 secondi.

Optimistic Unchocking: meccanismo che, in maniera randomica, fornisce dei blocchi senza chiederne altri in cambio (unchocking = desoffocare). Viene usato per permettere ai nuovi peer di entrare nel sistema e iniziare a scaricare (all’inizio infatti, non avrà niente da offrire, quindi se seguissimo una politica del tipo “this for that”, questo per quello: “io ti do questo se tu mi dai quello”, poverello non entrerebbe mai nel network).

Anti Snubbing: occasionalmente ogni peer sarà soffocato da tutti i peer dai quali stava scaricando. Se passa più di 1 minuto senza ricevere un singolo blocco da un certo peer, BT assume che è snobbato da quel certo peer, e non fa più upload nei suoi riguardi (a meno che non venga scelto come optimistic unchoke).

Upload only: quando un peer sta per finire i suoi download non ha molti criteri su cui basarsi per decidere verso chi uplodare. Si preferiscono dunque i peer verso i quali nessuno sta uplodando: si cerca verso chi ha il miglior tasso di upload così anche da sfruttare a pieno la sua capacità di upload, una volta che avrà scaricato il blocco passatogli.

Gli algoritmi di choking servono a rendere le cose più eque.
Più peers = più velocità, e i peer più veloci sono preferiti. La capacità di upload di un peer, influenza anche la capacità di download.

Torna all'inizio