Internet e il “file sharing”

La “condivisone di files” (file sharing) in rete, cioè tra computers (o più precisamente hosts) remoti, è uno dei servizi fondamentali offerti oggi dalla rete Internet. Era già diffuso negli anni ’70, quando diverse organizzazioni decisero di interconnettere le proprie reti (private) di calcolatori, ponendo in questo modo le basi, almeno concettuali, per la costruzione di una “rete mondiale di reti”, che oggi conosciamo come “Internet” (interconnected networks). Queste reti venivano utilizzate allora essenzialmente per la “posta elettronica” e il file sharing, appunto. Per la nascita del World Wide Web e quindi delle pagine e dei siti Web si è dovuto attendere fino al 1993. E’ chiaro che i due termini di “Internet” e “Web”, utilizzati in maniera intercambiabile da molti, fanno riferimento a concetti tecnicamente e storicamente ben diversi.

Secure-File-Sharing-OptionsLa condivisione dei files è stata per circa venti anni l’unico strumento disponibile per trasmettere risorse di vario tipo, per le quali non fosse sufficiente la posta elettronica. Oggi la maggior parte delle esigenze degli utenti sono soddisfatte dal Web, che permette di accedere ad un immenso archivio distribuito di risorse di vario genere e di interagire anche con esse. Nonostante questo, continuano ad esistere ed essere utilizzate tecnologie di file sharing, con modalità e finalità nuove rispetto al passato. Applicazioni come BitTorrent o eMule sono molto diffuse, perché consentono da un lato di distribuire files di grandi dimensioni (diversi gigabytes) in maniera efficiente (grazie alle implementazioni peer-to-peer, di cui parleremo più avanti) e dall’altro costituiscono un valido strumento per quanti desiderano condividere illegalmente materiale coperto da diritti d’autore (films, files musicali, etc…).

Nel resto dell’articolo cercherò di dare un’idea di cosa c’è dietro questo tipo di applicazioni dal punto di vista informatico. Il buon funzionamento del file sharing oggi è un problema non banale, se si considera che ad interagire sono milioni e milioni di utenti. Farò qualche richiamo alle inevitabili conseguenze legali della condivisione di informazioni sulla rete, in particolare se coperte da copyright, in relazione ad alcune tecniche di implementazione, ma gli aspetti giuridici andrebbero approfonditi in maniera più autorevole.

L’architettura client-server: un caso elementare

Il primo e più semplice approccio alla progettazione di una applicazione per la condivisione di files è basato sull’architettura client-server. In questo modello implementativo è prevista l’esistenza di un server in possesso di tutte le risorse che dovranno essere condivise; gli utenti, attraverso un semplice programma “client”, potranno richiedere files al server e scaricarli. La realizzazione dell’applicazione risulta in questo modo piuttosto semplice, ma le sue prestazioni rischiano di non essere sempre soddisfacenti.

Un server chiamato a distribuire files a un numero anche grande di utenti dovrebbe ovviamente disporre di una banda in upload (ovvero la capacità di inviare dati verso l’esterno nell’unità di tempo) sufficientemente ampia. Pur ammettendo che questo requisito venga inizialmente soddisfatto, se il numero degli utenti aumentasse col tempo, le prestazioni dell’applicazione subirebbero un rapido peggioramento: nella pratica ciò equivale per gli utenti a un tempo sempre maggiore necessario ad ottenere le risorse richieste.

Il passaggio al P2P

L’idea alla base di tutte le più diffuse applicazioni di file sharing è la seguente: se gli utenti non si limitassero a scaricare i contenuti che richiedono ma distribuissero anche quelli di cui già dispongono, la banda in upload disponibile nel sistema sarebbe proporzionale al numero di utenti connessi; cioè, idealmente, al crescere delle richieste di files, crescerebbe anche la capacità di inviare dati agli utenti. Ovviamente nella pratica i fattori in gioco sono molti di più e un’analisi delle prestazioni di una rete di questo tipo non si può svolgere in poche righe.

Da questo tipo di ragionamenti sono nate le applicazioni “peer-to-peer” (P2P), che lavorano “da nodo a nodo”, cioè senza una gerarchia tra server e client: tutti possono scambiare dati con tutti. Al beneficio prestazionale offerto da questa architettura, si contrappone un nuovo problema creato dal P2P nell’implementazione di un’applicazione di file sharing: in ogni istante, senza un server di riferimento per tutti, come posso sapere chi è connesso e chi possiede i files che sto cercando?

Napster, successo di breve durata

La prima applicazione di successo ad utilizzare il P2P per realizzare file sharing fu Napster, nata nel 1999 e divenuta famosissima tra il 2000 e il 2001. Napster risolveva il problema di tracciare utenti e risorse impiegando un server per questo scopo (per semplicità ci riferiamo ad un server, ma realisticamente veniva utilizzato un sistema di servers). L’architettura dell’applicazione non era quindi un P2P “puro”, a causa della presenza del server: ogni utente faceva riferimento al server per ottenere i riferimenti dei possessori dei files desiderati, per poi connettersi direttamente a questi ultimi (peer-to-peer) per scaricare i contenuti.

Questa soluzione aveva il vantaggio di essere molto semplice, ma fu alla base della brusca fine di Napster: nel 2002 un tribunale degli USA, in seguito a denunce di case discografiche, ordinò la chiusura del servizio, in quanto i dati mantenuti nel server (in particolare titoli di canzoni in formato .mp3 e relativi distributori) violavano il copyright sugli stessi brani musicali. La sentenza fece molto scalpore, trattandosi della prima chiusura forzata di un servizio on-line così popolare.

Peer-to-peer “puro”

p2p-networkL’esperienza di Napster ha spinto gli sviluppatori ad orientarsi verso soluzioni sempre più vicine al puro P2P, che eliminassero le potenziali fragilità legate all’impiego di server centrali e distribuissero tutte le funzionalità sui “nodi”, ovvero gli utenti. Sono nati in questo modo numerosi nuovi sistemi di file sharing (per l’esattezza “protocolli”, in quanto definiscono esattamente come avviene la comunicazione nel sistema, lasciando la libertà di sviluppare applicazioni diverse che le implementano), tra cui BitTorrent (il più utilizzato attualmente) e Gnutella (probabilmente il più interessante).

BitTorrent è un protocollo piuttosto complesso e avrebbe poco senso tentare di descriverne in maniera esaustiva il funzionamento in questo articolo; chi fosse interessato, può trovare facilmente molto materiale sul web. E’ centrale il concetto di “torrent”, ossia l’insieme degli utenti che possiedono o richiedono un determinato file; la distribuzione dei dati tra i componenti del torrent avviene in maniera molto efficiente grazie a degli algoritmi che ottimizzano gli scambi tra i nodi. BitTorrent non realizza comunque un P2P puro, in quanto ad ogni torrent sono associati uno o più “server traccia”, che devono gestire gli utenti legati a quel torrent. Proprio perché legati ai singoli torrent, questi server non costituiscono in ogni caso una fragilità paragonabile a quella esistente in Napster e, inoltre, avendo introdotto l’utilizzo delle DHT (Dynamic Hash Tables, archivi di informazioni distribuiti e mantenuti unicamente nei nodi) il protocollo sta andando sempre di più verso una architettura totalmente decentralizzata.

Gnutella, sebbene poco conosciuto ed utilizzato rispetto a BitTorrent, costituisce dal punto di vista tecnico un’alternativa estremamente interessante. E’ un protocollo basato esclusivamente sul peer-to-peer, perciò tutte le funzionalità sono decentralizzate e distribuite tra i nodi. Non essendoci un server a tenere traccia degli utenti e dei loro files, il compito di individuare i peers con cui scambiare dati,deve essere svolto dagli utenti stessi.

Ciascuno conosce solo i propri files e alcuni nodi a lui “vicini” con cui è connesso (per questo scopo potrebbero esistere dei semplici server, ma si potrebbero adottare anche altre soluzioni). Quando un nodo vuole richiedere un file, invia una richiesta ai suoi “vicini” con il nome del file: ciascuno di loro potrà rispondere inviando i dati, se li possiede, oppure inoltrerà a sua volta la richiesta ai propri “vicini”. In questo modo le richieste “navigano” in tutta la rete (con alcuni accorgimenti per evitare che possano girare in circolo per un tempo indefinito). Questa soluzione garantisce un completo anonimato verso l’esterno per i files condivisi, che possono essere ricercati solo all’interno della rete degli utenti di Gnutella, ma offre prestazioni in generale inferiori ad altri sistemi come BitTorrent, pagando il prezzo della totale decentralizzazione.

L’ascesa del “cloud”, un ritorno al client-server?

Sebbene le soluzioni P2P siano attualmente sinonimo di “file sharing”, non si può trascurare la grande diffusione che sta avendo il “cloud computing”, ossia un insieme di tecnologie che spostano il carico della computazione e dell’archiviazione di risorse su – traducendo letteralmente – una “nuvola”, ovvero dei servers collegati ad Internet e quindi accessibili (quasi) ovunque.

Questo tipo di soluzioni sono adottate sempre più frequentemente dalle aziende e vengono utilizzate, tra l’altro, per condividere files tra collaboratori. Inoltre, esistono molti siti web che offrono (a pagamento e non) la possibilità di caricare contenuti sui propri servers e in seguito condividerli a piacimento (il celebre MegaUpload ad esempio, sequestrato nel 2012 per violazione di copyright e pirateria). In questo senso, tali tecnologie portano un contributo alla sfera del file sharing, rilanciando l’architettura client-server almeno limitatamente a particolari scenari applicativi. Non è detto, però, che lo sviluppo di soluzioni basate su “cloud” mettano in discussione il ruolo del paradigma “peer-to-peer” in maniera più estesa.

Condividi l'articolo se ti è piaciuto!

Commenti chiusi.