TesinaGnutella2

GNUTELLA2: LA RETE P2P PURA

Salve a tutti!!!
Prima di tutto le presentazioni: sono Simone D'Arpino, studente di Ingegneria delle Telecomunicazioni dell'Università La Sapienza di Roma. In questa sezione potete trovare una tesina sui principi di funzionamento della rete Gnutella2, con particolare attenzione alla sua configurazione topologica.
...Buona lettura a tutti!!

1 - Il P2P come antitesi del client/server

Fino ad oggi, l’idea più naturale di rete informatica è sempre stata basata su una delle varie implementazioni dell’architettura client/server, il cui funzionamento può essere semplicemente descritto così: alcune macchine particolarmente potenti erogano dei servizi a delle macchine meno potenti. Di esempi ce ne sono tanti: il più noto è sicuramente il World Wide Web. In questa struttura gerarchica, c’è una grande quantità di risorse concentrata su uno o su uno o pochi NODI CENTRALI, denominati SERVER, mentre poche o nessuna sono dislocate su NODI PERIFERICI che attingono direttamente dai server: i CLIENT. Ma fin dagli esordi del TCP/IP, era presente un paradigma, in cui i ruoli di client e di server sono decisamente più sfumati (se non completamente assenti) e la cui diffusione su larga scala è avvenuta in quest’ultimo decennio. Il modello in discussione è il Peer-to-Peer (p2p).

1.1 - Che cos'è il modello P2P?

Generalmente Peer-to-Peer sta per “condivisione di risorse fra pari”: cioè, si intende una rete di computer o qualsiasi rete informatica che non possiede client o server fissi, ma solamente un numero di nodi equivalenti, detti PEER, che fungono sia da client che da server verso gli altri nodi della rete. Al più, secondo questa configurazione, il server potrà svolgere una funzione di autenticazione iniziale dell’utente, nel momento in cui questi si collegherà al sistema. Il servizio più utilizzato delle reti p2p è ilFILE SHARING: la sua grande affermazione si deve all’estrema facilità con cui è possibile condividere una grande quantità di risorse, senza la necessità di un server centrale che smisti ed indicizzi le richieste ed abbia una visione globale sia degli utenti sia dei file condivisi. Molti software di file sharing oggi presenti in rete sono: KaZaA, GNUTELLA, Freenet, eMule, Morpheus, OpenNap. Gli utenti di Internet li utilizzano per la trasmissione peer-to-peer, ossia DA UN UTENTE ALL’ALTRO, di svariati tipi di files. Il prototipo del file sharing è stato per tutti, a livello planetario, NAPSTER, poi preso di mira ed in parte sconfitto dalla RIAA (Recording Industry Association of America). Tuttavia, la sua introduzione ha scatenato una vera e propria rivoluzione, grazie alla quale, i milioni di utenti connessi alla rete hanno cominciato ad utilizzare i loro computer per fare molto di più del semplice browsing e dello scambio di e-mail. In parole povere, così facendo, è stato trovato il modo per connettere e far collaborare tra loro, i milioni di host che popolano Internet. Fino a pochi anni fa il ruolo della maggior parte degli host era passivo: solo un ristretto numero di nodi possedeva le risorse, per cui chi voleva usufruirne non doveva far altro che richiederle ad uno di questi, adesso non più.

1.2 - Vantaggi e svantaggi del peer to peer

Napster non si basava su un sistema p2p puro, bensì su una contaminazione del più consolidato ed usuale sistema client/server, ma da sempre si tende ad evidenziare la natura a file condivisi del suo protocollo: in realtà la sua più grande conquista fu mettere sullo stesso piano tutti i computer collegati. Infatti, alcune reti e canali, come appunto Napster, OpenNap e IRC (Internet Relay Chat) usano il modello client-server per alcuni compiti, come ad esempio la ricerca e il modello peer-to-peer per tutti gli altri, come appunto, lo scmabio dei file mp3.
Invece, le reti Gnutella e Freenet vengono indicate come vero modello di rete p2p, in quanto prsentano una struttura peer-to-peer ad ogni livello, con tutta una serie di vantaggi:
  • si basano sui protocolli http e ftp, quindi prevedono un libero scambio di informazioni attraverso i router ed i firewall;
  • non richiedono operazioni di autenticazione, e questo è fondamentale ai fini della garanzia di anonimità degli utenti della rete stessa;
  • danno la possibilità di implementare chat e di utilizzare e-mail;
  • non necessitano di amministratori di rete e sono particolarmente semplici da utilizzare;
  • sono estremamente tolleranti ai guasti poiché, in linea di massima, non dipendono da una struttura centrale, quindi la perdita di un nodo non porta ad un isolamento totale dalle informazioni cui si desidera accedere.
A fianco di tali vantaggi, notiamo però che:
  • non è sempre facile riuscire a reperire i dati cercati, a causa della struttura della rete;
  • è necessario concepire ed implementare nuovi ed efficienti algoritmi di ricerca per questo tipo di reti;
  • in certi casi viene consumata una grande quantità di larghezza di banda per soddisfare le richieste degli utenti;
  • la larghezza di banda impone delle restrizioni sul possibile numero di utenti che possono accedere alla rete;
  • spesso non si hanno garanzie sulla qualità e l’affidabilità dei dati che vengono forniti da un nodo.
Uno dei problemi fondamentali che si presenta per questo tipo di reti sta proprio nel fatto che il confine tra libertà di parola e abuso di tale libertà è decisamente sottile. La garanzia di anonimato nello scambio di informazioni fa sì che possano essere distribuiti materiali relativi alla pornografia o alle attività terroristiche o razziste.
D’altra parte però questo è un rischio che bisogna correre dato che i vantaggi di questo tipo di reti sono enormi, come la semplicità di ricerca e la condivisione di file.

1.3 - Il p2p è legale?

Ora, poniamoci una domanda: esistono disposizioni di legge in Italia che vietano la condivisione di file via Internet? La risposta non è tanto semplice. Anzi è piuttosto complessa.
Anzitutto va detto che il p2p in sé, inteso come sistema di scambio e condivisione di file, non è vietato dalla legge, né lo sono i software che consentono il download di file dal computer di un utente a quello di un altro. Piuttosto, quello che potrebbe rendere illegale un software di file sharing è la condivisione, da parte degli utenti, di materiale protetto dal copyright.
Tuttavia, non è lecito considerare illegali i sistemi p2p perché, l’assenza di un server centrale in grado di smistare ed indicizzare le richieste, privo di una visione globale sia degli utenti sia dei file contenuti negli hard disk degli stessi, non offre la possibilità concreta di individuare file eventualmente illegali.
Il server centrale, qualora questo sia presente, viene interrogato solo per l’autenticazione iniziale dell’utente, senza interessarsi alla comunicazione e allo scambio di file tra utenti. La condivisione ed il download passano solo ed esclusivamente per i computer degli utenti, (veri e propri client/server decentralizzati), diventando un FATTO personale dei soggetti coinvolti.
Napster fu dichiarato illegale in quanto era incentrato su un sistema client/server ibrido: infatti, fu giudicato responsabile di violazione delle norme sul diritto d’autore relativamente ai file musicali scambiati dagli utenti senza l’autorizzazione del discografico, in quanto avrebbe messo coscientemente a disposizione degli utenti un software, per violare il copyright, senza il quale mezzo tali violazioni non si sarebbero mai verificate. In altre parole, è stata riscontrata una responsabilità oggettiva di Napster, colpevole di non aver impedito la trasmissione di file illeciti, pur conoscendo gli utenti e i file scambiati dagli stessi.
Per i moderni sistemi di file sharing, incentrati sul modello p2p, il problema in cui è incappato Napster, invece, non si pone proprio per l’assenza di un server centrale capace di esercitare un certo controllo, sulla globalità degli utenti e dei file condivisi. Sistemi come Freenet, Gnutella, Imesh non sono illegali e sono stati ideati e costruiti dai propri autori in maniera tale da evitare le motivazioni che costrinsero Napster alla chiusura.

1.4 - Le contese legali

Il tipi di file maggiormente condivisi nelle reti p2p sono: file musicali mp3 e file video DivX (filmati in formato digitale compressi tramite omonimo codec video).
Questo ha portato molti, soprattutto le compagnie discografiche e i media, ad affermare che tali reti potevano rappresentano una minaccia per i loro interessi e il loro modello industriale. Di conseguenza il peer-to-peer è diventato il bersaglio legale delle organizzazioni che riuniscono queste aziende, come la RIAA e la MPAA (Motion Picture Association of America). Per esempio, abbiamo già della controversia tra il servizio di Napster e RIAA. Sia la RIAA che la MPAA spesero ingenti quantità di denaro al fine di convincere i legislatori ad approvare restrizioni legali. La manifestazione più estrema di questi sforzi risale al Gennaio 2003 quando venne introdotto, negli U.S.A. un disegno di legge dal Californian Rapresentative Berman, col quale si garantiva al detentore del copyright, i diritti legali per fermare i computer che distribuivano materiale tutelato dai diritti d’autore.
Ma da quel momento in poi, le reti peer-to-peer, anziché accusare il colpo, si espansero a dismisura, diventando tecnologicamente sempre più difficili da smantellare, grazie al supporto della major degli utenti.

2 - GNUTELLA2: Rete p2p di terza generazione

Da sempre, lo sviluppo di nuovi progetti relativi al peer-to-peer, quali Gnutella e ora Gnutella2, spinge all'ottimismo vecchi e nuovi fan del p2p, timorosi per le iniziative delle major contro tale sistema.
Come noto, l'apparire di Gnutella provocò uno scossone nel mondo del file sharing, aprendo nuove prospettive proprio nei mesi in cui Napster, veniva travolto in tribunale. Quindi, per le sue caratteristiche la rete Gnutella, è stata da molti additata come risposta ideale ai ripetuti tentativi di destabilizzazione, che l’intero mondo del p2p continua a subire da parte dell'industria del disco, il cui unico obiettivo è porre fine una volta per tutte alla violazione del copyright.
Dunque, proprio in quest’ottica si può inquadrare Gnutella2: si tratta di una rete che vuole essere una evoluzione della “precedente” e può essere descritta come una piattaforma di peering di terza generazione, pensata per consentire la comunicazione, la localizzazione di dati e il trasferimento tra i suoi utenti.

2.1 - La rete Gnutella2

Qualunque sia l’architettura fisica e logica di una rete, il funzionamento di base è sempre lo stesso: nel momento in cui un nodo della rete richiede una connessione ad un altro nodo, che accetta, si apre un canale di comunicazione. Questa richiesta si esplicita in maniera diversa a seconda delle architetture utilizzate: in ambito client/server si denota sempre chi è client (colui che richiede la connessione) e chi è server (colui che attende la connessione). Anche nel caso del p2p le connessioni non nascono spontaneamente e devono essere sempre iniziate da una delle parti in causa: però, stavolta, chi dà inizio alla connessione non è necessariamente ad un livello inferiore di chi la accetta.
In una rete p2p i casi possibili sono:
  • non esistono client o server;
  • esiste un server centrale che svolge funzioni di coordinamento dei client, ma i client hanno la possibilità di stabilire connessioni fra loro senza che il server debba intervenire;
  • tutti possono essere contemporaneamente client e server: SERVANT.
    Il servizio talk di UNIX è un esempio del primo caso, Napster del secondo e Gnutella2 del terzo.
Per meglio fruire la comprensione del funzionamento della rete Gnutella2, riportiamo in figura il procedimento di file sharing previsto da Napster, ripreso poi da tutti i client p2p.
Il server non interviene direttamente nella comunicazione fra due client, ma svolge la funzione sia di collettore di informazioni sui file mp3 messi a disposizione dai client collegati sia di motore di ricerca di tali informazioni. Quando un utente ha individuato il file mp3 che intende scaricare, lo seleziona attraverso l’interfaccia di Napster; il programma richiede al server i dati che gli sono necessari a stabilire la connessione con il peer che ospita quel file e una volta stabilita la connessione, il client inizia il download, informando dell’evento il server; un’ulteriore notifica giunge quando il download termina.
Siccome i pacchetti di file trasferiti non passano attraverso il sistema Napster, è possibile continuare a scaricare i file anche se l’utente che li condivide, passa ad un server diverso senza però uscire dall’intero sistema.
Più recente è GNUTELLA2 che rispetto alle altre reti p2p, è contraddistinta da una architettura aperta, in cui ognuno può partecipare e contribuire, senza comprometterne l'integrità.
Il nome GNUTELLA2 deriva dai due componenti di cui racchiude il significato : “Gnutella2 lo Standard” e “Gnutella2 la rete”:
  • Gnutella2 la rete” è la componente più facilmente riconoscibile. E’ una nuova architettura di rete peer-to-peer ad alta performance sulla quale possono essere costruite un gran numero di applicazioni distribuite come le applicazioni per il file sharing;
  • Gnutella2 lo Standard” è un insieme di specifiche richieste per costruire applicazioni che operino sulla rete Gnutella2 in diversi modi. Sostanzialmente, dice qual è il minimo livello di compatibilità richiesta per un’applicazione, per essere riconosciuta come compatibile con Gnutella2.

2.2 - La topologia della rete Gnutella2

In generale il p2p descrive un ambiente in cui i computer (HOST) sono connessi gli uni agli altri secondo un’architettura distribuita che non usa un punto di controllo centrale per collegare le macchine ed instradare il traffico dei dati. Vista l'assenza di un unico punto di erogazione del servizio, nelle reti p2p2, i nodi della rete fungono sia da fornitori che da utilizzatori di servizi e la responsabilità del corretto funzionamento della rete viene distribuita tra tutti i “pari”. Ovviamente, non tutti i nodi che partecipano al sistema sono uguali, ma possono differire nella configurazione locale, nella velocità di elaborazione, nella ampiezza di banda e nella quantità di dati memorizzati. Quindi, possiamo classificarli in due categorie principali:
1. NODI “HUBS” (al singolare “HUB”, che in italiano significa “CENTRO”):
costituiscono un’importante parte attiva dell'infrastruttura di rete. Provvedono ad organizzare i nodi circostanti, filtrando ed indirizzando il traffico e partecipano in maniera limitata a funzioni di rete di alto livello.Per essere eletti al grado di Hub, i nodi devono disporre di:
  • un sistema operativo adatto, capace innanzitutto di supportare almeno di 100 sockets;
  • una buona CPU;
  • una discreta quantità di memoria RAM;
  • prolungati tempi di connessione (almeno due ore);
  • una banda di connessione adeguata, soprattutto in ingresso;
  • possibilità di accettare connessioni TCP e UDP in ingresso.
2. NODI “LEAVES” (al singolare “LEAF”, in italiano significa “FOGLIA”):
sono i nodi più comuni e non costituiscono una parte operosa dell'infrastruttura di rete. Quando un nodo presenta risorse limitate, deve sempre funzionare come nodo leaf: per risorse limitate si intende banda limitata, CPU o RAM inadeguati, tempo in cui si resta online scarso ed incapacità ad accettare connessioni TCP e UDP in ngresso.
Entrambi i tipi di nodo, Hub e Leaf, quando si connettono per la prima volta ad un altro nodo devono:
  • dichiarare il proprio tipo: dire, cioè, si tratta di un nodo Hub o Leaf;
  • fornire informazioni riguardo le proprie capacità.
Lo scopo è di massimizzare il numero di NODI LEAVES e di minimizzare quello di NODI HUBS, anche se, a causa della natura limitata delle risorse, il rapporto praticabile tra Leaves ed Hubs, denominato “DENSITÀ DI LEAF”, è abbastanza ristretto.
I nodi che funzionano da Hubs per Gnutella2, sono fortemente interconnessi: si può parlare di una vera e propria “RETE” o “RAGNATELA DI HUB”, in cui ognuno di essi è connesso ad altri hubs vicini (da un minimo di cinque ad un massimo di trenta). Ogni Hub accetta anche connessioni da una numerosa collezione di nodi leaf, tipicamente 300-500, a seconda delle risorse disponibili. I nodi Leaf si connettono simultaneamente a 3 Hub, anche se dal punto di vista degli stessi Hubs, ogni Leaf viene visto come un collegamento finale.
Il gruppo di Hubs che comprende l’Hub Locale e i suoi vicini viene chiamato “HUB CLUSTER”. Gli Hub Cluster conservano una comunicazione costante con gli altri cluster, condividendo informazioni sul carico di rete e statistiche, scambiando riferimenti di cache e filtrando le tavole degli hash. L’Hub Cluster rappresenta la più piccola unità di rete in cui è possibile svolgere delle ricerche sulla rete.
Tra le responsabilità degli Hubs ci sono:
  • mantenere aggiornate le informazioni relative agli altri hubs nel cluster;
  • conservare un indice delle risorse condivise da tutte le connessioni che l'hub stesso stabilisce, ovvero le risorse condivise dagli hubs vicini e soprattutto dai leaf connessi all’Hub;
  • monitorare lo stato delle connessioni locali per decidere se declassarsi allo stato di leaf;
  • una DONE LIST (i nodi a cui abbiamo inviato una QUERY più i loro vicini);
  • una TRY LIST (i vicini dei vicini dei nodi a cui abbiamo inviato una query).
Naturalmente, queste due liste devono essere “mantenute” per ogni query.

2.3 - La ricerca e il trasferimento delle risorse

In un’architettura p2p decentralizzata, ribadiamo, non è presente alcun server centrale e tutti i nodi connessi alla rete hanno gli stessi diritti: si può parlare di veri e propri SERVANT. Un servant è un’entità che è in grado di ricoprire il doppio ruolo di server e di client: un server centrale può essere utilizzato, eventualmente, solo per operazioni di registrazione alla rete ma tutte le altre operazioni avvengono in modo completamente decentralizzato.
In figura è mostrato il meccanismo con cui avviene la ricerca e il trasferimento delle risorse in una rete dal LOOKUP DECENTRALIZZATO, come appunto Gnutella e Gnutella 2.
Immediatamente si evince che, per poter entrare a far parte del circuito, è necessario conoscere l’indirizzo di almeno un servant già attivo. Perciò, il primo compito è proprio quello di comunicare al nodo servant conosciuto, la nostra presenza all’interno della rete: poi, il servant stesso, provvederà a comunicare agli altri nodi al quale è connesso la nostra esistenza e lo stesso faranno questi ultimi, così via. Naturalmente, il processo non si perpetua all’infinito, poiché il protocollo prevede un TTL (time to live), cioè un numero massimo di passaggi, dopo il quale il messaggio di propagazione della nostra esistenza termina.
In generale, la comunicazione e lo scambio di informazioni tra i nodi connessi avviene tramite messaggi di tre tipi:
  • Multicast: messaggi che vengono inviati da un nodo della rete verso tutte le connessioni attive e servono sia ad effettuare le ricerche (Query) sia a segnalare la propria presenza in rete (Ping), cercando contemporaneamente di scoprire gli altri host connessi. Un nodo che riceve un messaggio di questo tipo deve propagarlo a tutti i nodi ai quali è connesso, ad eccezione di quello da cui l’ha ricevuto;
  • Unicast: messaggi che tipicamente rappresentano risposte a messaggi multicast(QueryHit in risposta a Query e Pong in risposta a Ping); c’è anche un altro messaggio (Push) che serve a mettere in comunicazione diretta nodi protetti da firewall;
  • Diretto: messaggi che consentono a due nodi di comunicare con connessione IP diretta senza utilizzare la rete Gnutella. Servono essenzialmente per gestire e trasferire le risorse.
Dopo essersi inseriti nella rete è possibile effettuare le ricerche presso i nodi direttamente collegati, i quali la inoltreranno a loro volta se non sono in grado di soddisfarla. Ogni nodo Gnutella2, infatti, deve conservare un elenco non completo di hubs conosciuti a livello globale e un elenco completo degli hubs che partecipano nei clusters di hub adiacenti. Un client può, così, localizzare oggetti distribuiti sulla rete in modo ottimo, richiedendo e ricevendo un sottoinsieme di tutte le informazioni conosciute su quel oggetto. Una volta che la richiesta raggiunge un peer che ospita la risorsa, questa viene messa a disposizione instaurando una connessione diretta tra il peer richiedente e quello offerente: si stabilisce tra i due servent (richiedente e offerente) una connessione diretta di tipo HTTP. Il file non viene mai trasferito attraverso la rete logica Gnutella, ma fluisce in modo diretto da un servent all’altro
Il trasferimento dell’oggetto cercato, ad esempio un file mp3, come già anticipato in precedenza, rispecchio il procedimento già illustrato per il sistema Napster, con un’unica fondamentale differenza: non mai viene utilizzato, ad alcun livello, un server centrale.
Per questo tipo di strutture osserviamo, quindi, i seguenti vantaggi:
  • grazie ai moltissimi punti d’accesso, reti di questo tipo non soffrono della presenza di colli di bottiglia, tipica dei sistemi client/server;
  • le reti decentralizzate sono decisamente robuste sia dal punto di vista “burocratico”che da quello topologico;
  • nessun nodo si rivela vitale per l’esistenza della rete.
Bloccare le reti decentralizzate è praticamente impossibile perché non c'è nessun server da chiudere (a meno di chiudere l'intera rete Internet), ma è vero anche che i tempi di ricerca dei files, risentono del fatto che la richiesta deve passare da nodo a nodo e non semplicemente essere rivolta al server centrale.

2.4 - La comunicazione in Gnutella2

I protocolli utilizzati dalla rete Gnutella2 sono alcuni dei più importanti protocolli del livello di trasporto della Suite di protocolli Internet, cioè:
  • UDP: protocollo PRIVO DI CONNESSIONE, cosiddetto a pacchetto, che non gestisce il riordinamento dei pacchetti né la ritrasmissione di quelli persi.;
  • TCP: protocollo orientato alla connessione solitamente usato in combinazione con il protocollo di LIVELLO RETE IP. Prima di poter trasmettere dati deve stabilire la comunicazione, negoziando una connessione tra mittente e destinatario, quindi conclude con la chiusura della connessione.
    Le principali differenze tra TCP e UDP sono:
  • UDP invia solo i datagrammi richiesti dal livello applicativo e non offre nessuna garanzia sul loro arrivo, mentre il protocollo TCP tramite i meccanismi ritrasmissione su timeout, riesce a garantire una comunicazione più sicura, anche se al costo di un maggiore OVERHEAD;
  • l'oggetto della comunicazione di TCP è il FLUSSO DI BYTE mentre quello di UDP è il singolo datagramma (entità di dati indipendente e autonoma, che contiene informazioni sufficienti per consentirne l'instradamento dal computer di origine a quello di destinazione, senza che siano necessari scambi di dati precedenti fra gli stessi computer di origine e destinazione e la rete di trasporto. U datagramma è l'entità in cui TCP/IP suddivide i file e gli altri tipi di dati prima di instradarli su una rete specifica).
Tuttavia, la scarsa affidabilità dell’USER DATAGRAM PROTOCOL, è stata ben presto risolta dalla rete Gnutella2, mediante l’implementazione di un nuovo selezionabile strato affidabile (al di sopra del protocollo UDP di base) che presenta alcune funzioni simili al TCP, ma non fornisce uno stato circa la connessione, guadagnando così in efficienza. Dunque, Gnutella 2 riesce a selezionare il mezzo di comunicazione ottimale a seconda del tipo di trasmissione:
  • se bisogna scambiare una grande quantità di dati, o se vengono inviati ad uno stesso destinatario più dati in successione, viene stabilita una connessione di tipo TCP;
  • se deve essere trasferito un volume piccolo di dati in un’unica operazione, viene utilizzato l’UDP affidabile;
  • se deve essere trasferito un piccolo volume di dati non importanti in un’unica operazione, viene utilizzato l’UDP non affidabile.
Le ricerche all’interno del cluster sono eseguite utilizzando il protocollo TCP, mentre le ricerche fra cluster utilizzano quello UDP.

3 - SHAREAZA: il client per GNUTELLA2

Col passar del tempo, l’evoluzione delle applicazioni peer-to-peer, ha visto l’adozione, da parte degli sviluppatori, di stili architetturali sempre più distaccati dal paradigma centralizzato, il quale, dopo la nascita di Internet, si era imposto come il modello di riferimento per lo sviluppo di applicazioni in Rete. Oggi il modello p2p non pretende di sostituirsi al paradigma client/server, ormai consolidato e adeguato per tante tipologie di applicazioni, ma vuole piuttosto offrire un modo alternativo di creare applicazioni, sfruttando le potenzialità di Internet e basandosi su un’architettura quanto più possibile decentralizzata.
Le più famose applicazioni p2p si possono distinguere in tre principali categorie: • Scambio istantaneo di messaggi; • Scambio di informazioni: applicazioni di File Sharing che permettono agli utenti di condividere servizi e risorse attraverso la rete, diventate famose grazie al precursore Napster; • Condivisione di potere computazionale. Per i fini di questa tesina, forniremo una breve panoramica del più diffuso client in grado di usufruire della rete Gnutella2: SHAREAZA.
Si tratta di uno dei più moderni e avanzati CLIENT PEER-TO-PEER, molto semplice da usare, grazie all’ottima interfaccia grafica. La versione attualmente più aggiornata è la 2.2.5.0 del 5 febbraio 2007, peraltro, completamente tradotta in italiano: il suo sviluppatore originale, verso la fine del 2002, introdusse una versione evoluta della rete Gnutella, cioè proprio Gnutella2.

3.1 - Shareaza

Tutte le applicazioni p2p sono costituite da tre fasi principali:
  • Boot: permette a un peer di trovare la rete e di connettersi ad essa; (nessuno o quasi fa boot p2p);
  • Lookup: permette ad un peer di trovare il gestore/responsabile di una determinata informazione; (pochi sono p2p);
  • Scambio di file; (sono tutti p2p).
In particolar modo, si può parlare di applicazioni:
  • p2p pure, se le fasi di boot, lookup e scambio di file sono p2p;
  • p2p, se le fasi di lookup e scambio di file sono p2p, ma la fase di boot utilizza qualche server;
  • p2p ibride, se la fase di scambio dei file è p2p, la fase di boot utilizza qualche server, mentre nella fase di lookup vengono usati Peer particolari.
In base a quanto detto, si evince facilmente che tutte le applicazioni p2p hanno in comune un aspetto: il trasferimento dei dati avviene instaurando una connessione diretta tra il peer che offre la risorsa e il peer che la richiede. Dunque, quello che anche, e soprattutto, Shareaza consente di fare collegandosi alla rete Gnutella2 è: IL TRASFERIMENTO E LA MEMORIZZAZIONE DEI FILE IN P2P.
Le caratteristiche più importanti di questo client sono:
  • il sistema di ricerca è passato dalla tecnica del FLOODING a quella del WALKING;
  • consente di abilitare un SUPPORTO MULTI UTENTE: in questo modo Shareaza tiene separate le preferenze, la libreria e le impostazioni dei vari utenti del computer, per cui ogni utente che vorrà usare Shareaza, dovrà eseguire nuovamente l'installer dal suo account;
  • cancella gli installer vecchi, cioè elimina i programmi di installazione di Shareaza delle versioni precedenti eventualmente ancora presenti nella sua libreria.
Però, è bene sottolineare l'aspetto di maggior rilievo del suo funzionamento:
  • LA CAPACITÀ DI RICERCARE E SCARICARE FILES DA PIÙ RETI CONTEMPORANEAMENTE, UTILIZZANDOLE COME SORGENTI PER UN DOWNLOAD.

3.2 - Connessione

In virtù della topologia delle reti di riferimento, Gnutella2-G2 e Gnutella-G1, è necessario configurare il client Shareaza impostando:
  • LEAF A HUB” a 3 per G2 e “LEAF A HUB” a 2 per G1, perché, ricordiamo, che la rete G2 permette a 300 Leaves di connettersi a 1 Hub e ad ogni Hub di connettersi ad altri 5 Hub, in modo che alla fine, tutti i Leaves risultino interconnessi fra di loro;
  • se si possiede una connessione di velocità inferiore a 1280/512 Kbps, è consigliato deselezionare “PERMETTI NODO DI DIVENTARE HUB”;
  • se si possiede una connessione di velocità inferiore a 640/256 Kbps è vietato selezionare “FORZA NODO A ESSERE HUB”.
A questo punto abbiamo chiarito, qual è in pratica, la differenza tra Hub e Leaf:
  • gli Hubs sono i super utenti che hanno connessioni veloci e che funzionano da “MINISERVER” per gli altri utenti, appunto i Leaves, dedicando parte della loro banda per il funzionamento della rete.
Tuttavia, un Hub non ottiene risultati migliori dei Leaves, si deve sempre lasciare selezionato “PERMETTI NODO DI DIVENTARE LEAF”.
Shareaza, una volta aperto, provvederà automaticamente a connettersi a meno che sia stato scelto diversamente durante l'installazione e/o la configurazione. Per visualizzare lo stato della connessione alle reti, è utile aprire la finestra Host: premendo il tasto F2, appare una tabella con cui è possibile notare che la rete eDonkey, generalmente, è quella che si connette più rapidamente, seguita dopo pochi secondi dalla Gnutella2 ed infine dalla rete Gnutella1, che potrebbe impiegare anche un paio di minuti prima di connettersi.

3.3 - La Ricerca e il Download dei file

Esistono due modi principali per cercare i file:
  • attraverso l'interfaccia di ricerca di Shareaza;
  • mediante i portali P2P Gnutella2 (ShareLive, PeerWeb, GamePhilez): siti che indicizzano migliaia di file segnalati dagli utenti, spesso accompagnati da una descrizione e dalle caratteristiche tecniche. Grazie alla grande popolarità di questi portali, è probabile che i file contenuti al loro interno siano quelli con più fonti.
Invece, per utilizzare l’interfaccia di ricerca di Shareaza, bisogna aprire l’apposita finestra e impostare le chiavi di ricerca: il tipo di file cercato e le reti su cui verrà effettuata la ricerca, secondo una relazione AND (ad esempio, digitando i termini “abibo grrr” si otterranno tutti i risultati che contengono sia “abibo” che grrr”).
Sulla rete Gnutella 2, si possono cercare anche intere frasi: bisogna racchiudere la frase all'interno delle doppie virgolette (") (ad esempio se si cerca "abibo grrr", non riuslterà mai abibo aka grrr). Per escludere una parola dai risulati anteporre il segno meno ( - ) alla parola stessa.
Infine, per scaricare il file basta farci sopra DOPPIO CLICK, oppure selezionarlo/i con il tasto destro e scegliere “SCARICA”:
  • per visualizzare i download in corso apri la finestra “Download”;
  • per visualizzare tutte le fonti selezionare “Mostra tutte le fonti” dal menu “Filtro”.

3.5 - Sniffare la rete con Wireshark

Per farsi un’idea di quello che è il funzionamento di un client come Shareaza, forniremo alcuni esempi dei pacchetti che transitano nella rete Gnutella2, catturati utilizzando il software Wireshark, quando si eseguono le diverse fasi operative di:
  • connessione alla rete Gnutella2;
  • ricerca di un file mp3 (anche se non riportiamo alcun dato a riguardo visto che il procedimento avviene in UDP);
  • download dello stesso.


CONNESSIONE ALLA RETE GNUTELLA 2

(Estrazione del TCP Stream dai pacchetti catturati)

GNUTELLA CONNECT/0.6
User-Agent: Shareaza 2.2.5.0
Remote-IP: 71.199.89.228
Accept: application/x-gnutella2
Accept-Encoding: deflate
X-Ultrapeer: False
X-Ultrapeer-Needed: True

GNUTELLA/0.6 200 OK
User-Agent: Shareaza 2.2.3.0
Listen-IP: 71.199.89.228:6346
Remote-IP: 87.3.196.87
Accept: application/x-gnutella2
Content-Type: application/x-gnutella2
Accept-Encoding: deflate C
Content-Encoding: deflate
X-Ultrapeer: True
X-Ultrapeer-Needed: False

GNUTELLA/0.6 200 OK
Listen-IP: 87.3.196.87:6346
Accept: application/x-gnutella2
Content-Type: application/x-gnutella2
Accept-Encoding: deflate
Content-Encoding: deflate

DOWNLOAD
(Estrazione del TCP Stream dai pacchetti catturati)

urn:sha1:LXEBLDHA44FWIE7YGIGMH7GEACUTUQE7 HTTP/1.1
Host: 80.116.127.168:6346
Connection: Keep-Alive
X-Features: g2/1.0
Range: bytes=2228224-2490367
User-Agent: Shareaza 2.2.5.0
X-Queue: 0.1
X-Content-URN: urn:sha1:LXEBLDHA44FWIE7YGIGMH7GEACUTUQE7
Alt-Location:
http://87.3.196.87:6346/uri-res/N2R?urn:sha1:LXEBLDHA44FWIE7YGIGMH7GEACUTUQE7 2007-07-24T19:43Z

HTTP/1.1 206 OK
Server: Shareaza 2.2.1.0
Connection: Keep-Alive
Accept-Ranges: bytes
Content-Type: audio/mpeg
Content-Length: 262144
Content-Range: bytes=2228224-2490367/4171538
X-Content-URN: urn:bitprint:LXEBLDHA44FWIE7YGIGMH7GEACUTUQE7.DI7XZKEOVOIO7OXLV2EUZQUK5CA3NOT455JGCVI
X-Content-URN: urn:ed2khash:3ba2b85ebb838136e496e63d269d4516
X-Thex-URI: /gnutella/thex/v1?urn:tree:tiger/:DI7XZKEOVOIO7OXLV2EUZQUK5CA3NOT455JGCVI&depth=9&ed2k=0;
            DI7XZKEOVOIO7OXLV2EUZQUK5CA3NOT455JGCVI
X-Metadata-Path: /gnutella/metadata/v1?urn:tree:tiger/:DI7XZKEOVOIO7OXLV2EUZQUK5CA3NOT455JGCVI
Alt-Location: http://87.3.196.87:6346/uri-res/N2R?urn:sha1:LXEBLDHA44FWIE7YGIGMH7GEACUTUQE7 2007-07-24T19:48Z

4 - Riferimenti