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?
1.2 - Vantaggi e svantaggi del peer to peer
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.
- 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.
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?
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
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
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.

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
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.
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.
- dichiarare il proprio tipo: dire, cioè, si tratta di un nodo Hub o Leaf;
- fornire informazioni riguardo le proprie capacità.
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.

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).
2.3 - La ricerca e il trasferimento delle risorse
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.

- 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.
2.4 - La comunicazione in Gnutella2
- 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).
- 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.

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
- 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).
- 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.
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.
- LA CAPACITÀ DI RICERCARE E SCARICARE FILES DA PIÙ RETI CONTEMPORANEAMENTE, UTILIZZANDOLE COME SORGENTI PER UN DOWNLOAD.

3.2 - Connessione
- “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”.
- 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.
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
- 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.
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
- 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
- Peer to Peer DBMS: il sistema FOAF - Giampiero Miccoli, Modena 2005
- Problematiche di sicurezza nelle applicazioni peer-to-peer: un approccio all'anonimato - Manuela Morello, Milano 2003