|
Shareaza . La Rete Gnutella 2
Introduzione
Gnutella 2 è una piattaforma peer-to-peer di terza generazione moderna
ed efficiente progettata per offrire delle fondamenta solide a servizi
distribuiti globali come la comunicazione punto a punto, trasferimento
dati e altri servizi futuri.
Gnutella 2 è la rete principale usata dal programma Shareaza e da altri
client compatibili.
Le tecnologie legate al P2P sono diventate molto diffuse e numerose in
questi ultimi anni e ci sono già parecchie reti p2p in varie fasi del
loro sviluppo. A cosa serve allora un' altra rete, relativamente nuova
come Gnutella2?
Gnutella2 è una rete esclusiva rispetto alle attuali reti p2p sotto
diversi punti di vista: |
|
-
Molte delle attuali reti di successo sono
'chiuse' ovvero sono di proprietà di una singola entità con restrizioni
più o meno marcate. Questo non è un modello percorribile per realizzare
una rete aperta e soprattutto che abbia uno scopo generico. Gnutella2
ha una architettura aperta dove ognuno può partecipare e contribuire.
La rete è stata progettata per consentire una tale diversità senza la
necessità di comprometterne l'integrità
-
La maggior parte delle reti sono dedicate
esclusivamente ad uno scopo, spesso la condivisione di files. Questo è
si un'applicazione molto popolare per una tecnologia peer-to-peer ma
non è certamente l'unica possibile. Gnutella2 è progettata come rete
generica che può essere un solido punto di partenza per un gran numero
di applicazioni peer-to-peer diverse - certamente il file sharing ma
anche strumenti di comunicazione e altri idee che saranno concepite in
futuro.
Il nome Gnutella 2 deriva sai due componenti di
cui racchiude il significato : Gnutella2 lo Standard
e Gnutella2 la rete.
La Rete Gnutella2 è forse 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.
Lo Standard Gnutella2 è un insieme di specifiche
richieste per costruire applicazione che operino sulla rete Gnutella2
in diversi modi. Specifica il minimo livello di compatibilità richiesta
per essere riconosciuta come applicazione compatibile con Gnutella2.
La
Rete Gnutella 2
La rete Gnutella2 è una collezione auto-gestita di nodi interconnessi
che cooperano per svolgere produttive attività distribuite.
Non tutti i nodi che partecipano al sistema sono uguali: ci sono due
principali tipi di nodi, i nodi 'hubs' ( singolare
'hub', in italiano significa 'centro') e i nodi 'leaves'
( singolare leaf, in italiano significa 'foglia') Lo scopo è di
massimizzare il numero di leaves e di minimizzare il numero di hubs,
tuttavia a causa della natura limitata delle risorse il rapporto
praticabile tra leavers ed hubs e' limitato. Questa quantità è definita
'densità di leaf'
Nodi leaf
I nodi leaf sono i nodi più comuni - non hanno responsabilità speciali
e non costituiscono una parte operosa dell'infrastruttura di rete. I
Nodi con risorse limitate devono operare come nodi 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 ingresso.
Nodi Hub
I nodi Hub d'altra parte costituiscono una parte importante, attiva
dell'infrastruttura di rete, organizzando i nodi circostanti, filtrando
ed indirizzando il traffico. I nodi Hub sacrificano una parte delle
loro risorse alla rete, e quindi la loro capacità di partecipare a
funzioni di rete di alto livello è limitata. Sono i nodi più capaci
vengono eletti al grado di Hub, in base alle regole riportate di
seguito.
Sistema operativo adatto ( capace di supportare più di 100 sockets )
Una buona CPU e quantità di RAM adatta
Tempi in cui si resta connessi ( molte ore , almeno 2), possibilmente
considerando una cronologia dei tempi di connessione
Banda di connessione adeguata, soprattutto banda in ingresso.
Possibilità di accettare connessioni TCP e UDP in ingresso.
Oltre a questi fattori interni , bisogna anche considerare la necessità
per la rete di avere altri hubs. Senza un punto centrale di autorità la
necessità di hubs addizionali non può essere determinata con assoluta
certezza; tuttavia può essere approssimata considerando lo stato dei
nodi vicini e in particolare lo stato degli hubs nel cluster di hub
locale ( cluster = gruppo, grappolo )
I nodi che funzionano da Hubs per Gnutella 2 hanno un insieme di
responsabilità. Gli Hubs sono fortemente interconnessi, a formare una
'rete di Hub' o una 'ragnatela di hub', dove ogni Hub è connesso ad
altri 5-30 vicini hubs. Il numero di interconnessioni di hub può
crescere al crescere delle dimensioni della rete.
Ogni Hub accetta anche connessioni da una numerosa collezione di nodi
leaf, tipicamente 300-500 in dipendenza dalle risorse disponibili. I
nodi leaf si connettono simultaneamente a 3 hub, tuttavia dal punto di
vista degli Hubs ogni leaf viene visto come un collegamento finale.

Il gruppo di Hubs all'interno della rete di hubs che comprende l'hub
locale e i suoi vicini viene chiamato 'hub cluster'
e rappresenta una modalità di raggruppamento importante. 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, e i loro hubs vicini, fornendo gli
aggiornamenti
-
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, e mantenere aggiornati
i servizi di connessione ( ad esempio le GWebCaches )
Questi due tipi di nodo, hub e leaf, durante la
connessione iniziale ad un altro nodo devono dichiarare il proprio tipo
..dire cioé se sono un nodo di tipo Hub o un nodo tipo leaf e fornire
informazioni riguardo le proprie capacità.
UDP
Affidabile
L'architettura di Gnutella 2 fa largo uso di
una compressione di 'deflazione'. Il supporto dei collegamenti TCP
compressi non è uno standard Gnutella 2 ma è fortemente raccomandato.
L'UDP ( User Datagram Protocol ) è una risorsa inestimabile nei sistemi
p2p poiché fornisce uno strumento a basso costo ( basso overhead ) per
inviare piccoli messaggi irregolari a richiesta ad un numero elevato di
nodi. Stabilire una connessione TCP con un nodo semplicemente per
trasferire un singolo pacchetto di informazione è uno spreco in termini
di dati e di tempo per i nodi. Quando si ha a che fare con un grande
numero di nodi questi costi diventano insostenibili.. L'UDP fornisce
una soluzione e rende possibile questo tipo di interazione.
Tuttavia l'uso di pacchetti UDP non è affidabile: i pacchetti possono
andare persi per strada per diverse ragioni. Spesso questo
comportamento è desiderabile per esempio quando la connessione del nodo
di destinazione è molto congestionata i pacchetti UDP saranno molto
probabilmente scartati. Se il contenuto non è critico questa perdita è
appropriata poiché le risorse dell'host sono effettivamente non
disponibili. In altri contesti purtroppo la mancanza di affidabilità è
un problema: spesso o il mittente ha bisogno di assicurarsi che il
destinatario ha ricevuto il messaggio o deve sapere che il destinatario
non è al momento disponibile.
La rete Gnutella2 ha risolto questo problema implementando un nuovo
selezionabile strato affidabile al di sopra del protocollo UDP di base.
Questo strato affidabile ha alcune funzioni simili al TCP, ma non
fornisce uno stato circa la connessione guadagnando così in efficienza.
Questo permette a Gnutella 2 di selezionare il mezzo di comunicazione
ottimale per ogni tipo di trasmissione:
- se bisogna scambiare una grande quantità di dati, o se vengono
inviati ad uno stesso destinatari più dati in successione, viene
stabilita una connessione di tipo TCP.
- se deve essere trasferito un volume piccolo di dati in un'unica
operazione o in modo irregolare, viene utilizzato l'UDP affidabile
- se deve essere trasferito un piccolo volume di dati non importanti in
un'unica operazione o in modo irregolare, viene utilizzato l'UDP non
affidabile.
Meccanismo
di ricerca
Ogni nodo Gnutella2 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.
Il meccanismo di ricerca di oggetti distribuiti sulla rete è una
componente importante di Gnutella2. Consente ad un client di
localizzare oggetti distribuiti sulla rete in modo ottimo, richiedendo
e ricevendo un sottoinsieme di tutte le informazioni conosciute su
quell'oggetto.
Il meccanismo di ricerca degli oggetti su Gnutella 2 viene descritto
come una successione iterativa di tentativi con una serie di importanti
ottimizzazioni ricavate dalla topologia e dai componenti di rete:
-
Un client contatta iterativamente hub noti
inviando loro la sua ricerca
-
Gli Hub cercano le parole di ricerca che hanno
ricevuto nella tabella degli hash dei loro vicini
quando viene trovata una corrispondenza la ricerca viene inviata ad
altri hub ancora una volta
-
In questo modo la ricerca si estenderà almeno
ad un cluster che è l'unità base di ricerca.
-
I nodi che ricevono la richiesta di ricerca
filtrata la processano ed inviano i risultati direttamente al client
che aveva avviato tale ricerca.

|