|
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^

|