|
Shareaza . La Rete Gnutella
Introduzione
Gnutella è una rete peer-to-peer decentralizzata usata soprattutto per cercare e scaricare files. E' stata sviluppata inizialmente come piccolo programma da Justin Frankel della Nullsoft, una compagnia facente capo ad AOL più famosa per il suo player multimediale WinAMP. AOL staccò la spina nei primi mesi del 2000 ed ordinò alla Nullsoft di cessare lo sviluppo del software perché non si riusciva a controllare come gli utenti usavano Gnutella.
Tuttavia i dettagli sul protocollo di Gnutella furono resi pubblici anche usando tecniche di reverse engineering e presto furono sviluppati nuovi client per accedere alla rete.
Al momento il protocollo Gnutella è sviluppato da un gruppo di programmatori chiamato 'Gnutella Developer Forum' (GDF). il protocollo supporta hashing, download multi-fonte e tanto altro.
Il protocollo è OpenSource e così sono pure la maggior parte dei clients.
Le caratteristiche salienti di Gnutella sono :
-
assoluta decentralizzazione, non è presente alcun server e tutti i nodi sono uguali ( almeno originariamente vedi Ultrapeer )
-
rete auto-gestita
-
architettura aperta, protocollo semplice e flessibile
La maggior parte delle comunicazioni Internet avvengono su una base client-server. Tu, client, ti connetti ad un server, che solitamente è più grande e veloce di te e puoi reperire da esso informazioni ( come ad esempio files ). Il server raramente ti chiede files. il protocollo di gnutella è sostanzialmente diverso poiché in tale protocollo i clients diventano servers ed i server diventano clients allo stesso tempo. Il campo di gioco viene livellato e tutti possono essere client o server allo stesso tempo , non importa quanto grande o veloce siano. Poiché si può essere sia client che server di solito ci si riferisce alla singola entità operante su rete gnutella col nome di 'servent'
Tutto ciò si realizza creando una specie di ambiente distribuito. Ci si comporterà da server con le persone che desiderano scaricare files dal proprio computer, e ci si comporterà da client per scaricare i files dagli altri. La rete Gnutella e fatta da migliaia ( o eventualmente milioni ) di servent che comunicano tra di loro e inviano files avanti ed indietro per la rete.
Tutte le comunicazioni avvengono con protocollo TCP/IP, non si fa uso del protocollo UDP. Ogni pezzo di informazione è chiamato pacchetto.
^Top^
Connessione alla rete
Per connettersi alla rete, bisogna conoscere solo una cosa: l'indirizzo IP e la porta di uno qualsiasi dei servent che sono già connessi. La prima cosa che il tuo servent fa quando si connette è annunciare la sua presenza. Il servent al quale ti connetti invia il messaggio agli altri servent ai quali è già connesso e così via finché il messaggio non si propaga sull'intera rete. Ogni servent risponde al tuo messaggio allegando poche informazioni circa la quantità di files scaricati , quanti KB stanno sharando etc...Così alla connessione saprai immediatamente quanto materiale è disponibile sulla rete.
^Top^
GWebCache
E' un sistema distribuito che aiuta i servent a connettersi alla rete Gnutella, risolvendo il problema dell'accesso alla rete ovvero la difficoltà iniziale di conoscere l'IP di almeno un altro servent connesso alla rete.
I Servent interrogano uno dei tanti server GWebCache per trovare indirizzi degli altri servents. I server GWebCache sono solitamente server web che eseguono un software speciale.
^Top^
Meccanismo di ricerca
La ricerca funziona in modo simile al meccanismo di connessione: invii una richiesta di ricerca, questa si propaga attraverso la rete ed ogni servent che possiede quel file invia i risultati indietro
>> Il nodo 2 avvia la ricerca del file A

>> Invia il messaggio ai suoi vicini

>> I nodi vicini propagano il messaggio ad altri nodi

>> I nodi che hanno il file A creano un messaggio di risposta

>> I messaggi di risposta si propagano velocemente indietro


>> Inizia il trasferimento

^Top^
Download
Per la condivisione di files ogni servent si comporta come un piccolo web server http. Quando trovi un risultato di ricerca di un file che vuoi scaricare ti connetti direttamente al servent via http così come un web browser si connetterebbe ad un web server, e sei pronto a scaricare.
I Servents sono anche abbastanza intelligenti da compensare la presenza di firewalls. Se sei dietro un firewall che ti permette di connetterti al mondo esterno solo su certe porte ( 80 per esempio ) avrai bisogno solo di trovare un servent che sia in ascolto su porta 80.. Poiché i servent possono mettersi in ascolto su qualsiasi porta è probabile che ne troverai qualcuno che ascolta su una porta aperta al firewall. Allo stesso modo se cerchi di scaricare un file da un servent che è dietro firewall, puoi chiedere a tale servent di inviarti il file tramite una connessione-push poiché tu non sei in grado di connetterti a lui direttamente. L'unica cosa che il protocollo non può compensare è quando ci sono due utenti dietro firewall ed uno dei due vuole scaricare un file dall'altro. In questo caso non c'è nulla che si può fare.
^Top^
TTL (Time To Live)
Proprio come i pacchetti TCP/IP i pacchetti Gnutella hanno un TTL (tempo di vita). Il TTL viene inizializzato ad un numero intero come ad esempio 5. Ogni volta che un pacchetto passa attraverso un servent diverso , il servent stesso diminuisce il valore del TTL di 1. Una volta che il TTL raggiunge il valore 0 il pacchetto non viene più propagato ad altri servents. Questo aiuta ad evitare che i pacchetti continuino a circolare sulla rete per sempre. Inoltre ogni servent ha l'opzione di ridurre arbitrariamente il valore del TTL di un pacchetto se pensa che sia un valore irragionevole. Così se invio tutti i miei pacchetti con un TTL di 200 si avrà che la maggior parte dei servents lungo il percorso ridurranno immediatamente il valore del TTL ad un numero più ragionevole.
^Top^
Ultrapeer
Originariamente tutti i nodi di Gnutella erano connessi gli uni agli altri in maniera casuale ed erano in questo assolutamente uguali. Questo meccanismo funziona bene con le connessioni a broadband ma non per gli utenti con modem lenti. Quel problema può essere risolto organizzando la rete in una forma + strutturata.
Il sistema degli Ultrapeer è stato trovato efficace per risolvere questo problema. Esso consiste nel dare una struttura gerarchica alla rete Gnutella dividendo i nodi sulla rete in leaf e Ultrapeer. Un leaf mantiene solo un piccolo numero di connessioni aperte e queste connessioni vengono stabilite con altri nodi di tipo UltraPeer. Un Ultrapeer invece agisce un poco come un proxy verso la rete Gnutella per i leaf connessi ad esso. Questo riduce il numero di nodi coinvolti nella manipolazione e nella circolazione dei messaggi sulla rete Gnutella e allo stesso tempo riduce il traffico reale tra i vari nodi.
Gli ultrapeer sono connessi gli uni agli altri e sono connessi anche ai 'normali' nodi Gnutella ( ovvero quei nodi che non implementano il sistema degli Ultrapeer magari perché usano client Gnutella che non fanno uso di questo schema )
^Top^

|