Architetture di rete
Introduzione
Nel modello ISO/OSI e TCP il livello delle applicazioni si occupa di implementare le applicazioni di
rete che vengono utilizzate dall’utente finale. A tale livello, possiamo individuare Internet come la
struttura più complessa esistente, in cui il programmatore non si deve preoccupare dei livelli inferiori ma soltanto utilizzare le primitive di comunicazione messe a disposizione dai diversi protocolli degli altri strati.
Il modello a pila (stack) ISO/OSI può essere messo in relazione con altri stack protocollari, in
modo da poterli comparare: la figura seguente mostra la pila TCP/IP, formata da 5 livelli, messa
a confronto con la pila ISO/OSI:
Possiamo notare che la pila TCP/IP è analoga alla pila OSI, a eccezione del livello applicazione
di Internet che racchiude i livelli 5, 6 e 7.
Il primo passo che il programmatore deve effettuare per progettare una applicazione di rete è la scelta della architettura dell’applicazione; le principali architetture attualmente utilizzate sono le seguenti: client-server; peer-to-peer (P2P); architetture ibride (client-server e P2P).

Torna Su
Modello client-server
Nella architettura client-server la caratteristica principale è che deve sempre esserci un server attivo che offre un servizio, restando in attesa che uno o più client si connettano a esso per poter rispondere alle richieste che gli vengono effettuate.
Un tipico esempio di questa architettura è il WWW, dove molteplici server (al limite uno per ogni sito pubblicato) possiedono le pagine (statiche o dinamiche) che saranno inviate ai client che ne fanno richiesta tramite i browser. Il server deve sempre essere attivo e deve possedere un indirizzo IP fisso dove può essere raggiunto dagli host client: quindi l’indirizzo IP deve essere statico, contrariamente a quello dei client che generalmente è dinamico. Un client non è in grado di comunicare con gli altri client ma solo con il server: più client possono invece comunicare contemporaneamente con lo stesso server.
Torna Su
Peer to peer
Nelle architetture peer-to-peer (P2P) abbiamo coppie di host chiamati peer (persona di pari grado, coetaneo) che dialogano direttamente tra loro. Nei sistemi P2P gli host possono essere visti come una comunità che collabora con il binomio dare e ricevere: ogni peer fornisce una risorsa e ottiene in cambio altre risorse. Gli esempi più noti sono rappresentati dalle reti peer to peer in ambito di condivisione di file, come per esempio eMule, oppure Gnutella.
Se un server viene consultato contemporaneamente da molti client potrebbe non essere in grado di soddisfare tutte le richieste e potrebbe entrare in stato di congestione: è necessario virtualizzare la risorsa realizzando una server farm : questa non è altro che un server con un unico hostname ma con più indirizzi IP, trasparenti rispetto al client, sui quali vengono dirottate le richieste di connessione (viene utilizzato per esempio da Google, Amazon, Facebook e tutti i siti che hanno una elevata affluenza di visite).
Un peer può anche decidere di offrire gratuitamente risorse, magari per la partecipazione a iniziative caritatevoli oppure di ricerca, come per esempio alla ricerca sul cancro oppure agli aiuti ai terremotati mediante donazioni.
Un sistema Peer to Peer è formato da un insieme di entità autonome (peers), capaci di auto-organizzarsi, che condividono un insieme di risorse distribuite presenti all’interno di una rete. Il sistema utilizza tali risorse per fornire una determinata funzionalità in modo completamente o parzialmente decentralizzato.
Torna Su
P2p centralizzato
P2P decentralizzato
Nella architettura completamente decentralizzata un peer ha sia funzionalità di client che di server (funzionalità simmetrica = servent ), ed è impossibile localizzare una risorsa mediante un indirizzo IP statico: vengono effettuati nuovi meccanismi di indirizzamento, definiti a livello superiore rispetto al livello IP. Le risorse che i peer condividono sono i dati, la memoria, la banda ecc: il sistema P2P è capace di adattarsi a un continuo cambiamento dei nodi partecipanti (churn) mantenendo connettività e prestazioni accettabili senza richiedere l’intervento di alcuna entità centralizzata (come un server).
Il P2P centralizzato è un compromesso tra il determinismo del modello client server e la scalabilità del sistema puro: ha un server centrale (directory server) che conserva informazioni sui peer (index, cioè il mapping resorse-peer) e risponde alle richieste su quelle informazioni effettuando quindi la ricerca in modalità centralizzata. I peer sono responsabili di conservare i dati e le informazioni perché il server centrale non memorizza file, di informare il server del contenuto dei file che intendono condividere e di permettere ai peer che lo richiedono di scaricare le risorse condivise. La sua implementazione più famosa è Napster, dove gli utenti si connettono a un server centrale dove pubblicano i nomi delle risorse che condividono.
P2P ibrido (o parzialmente centralizzato) Il P2P ibrido è un P2P parzialmente centralizzato dove sono presenti alcuni peer (detti supernodi o super-peer o ultra-peer) determinati dinamicamente (tramite un algoritmo di elezione) che hanno anche la funzione di indicizzazione: gli altri nodi sono anche chiamati leaf peer.
Torna Su