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

|