TPSIT

Applicazioni di rete: cosa sono e come funzionano?

Le applicazioni di rete: cosa sono e quali sono le diverse architetture

Nel modello ISO/OSI e TCP/IP il livello applicativo è quello che si occupa di implementare applicazioni di rete che verranno utilizzate dall’utente finale.  Il principale scopo delle reti, sia in locale che in remoto, è proprio quello di condividere dati mediante applicazioni.

Il livello applicazione è lo strato protocollare che mette a disposizione i protocolli mediante i quali le applicazioni possono comunicare tra host remoti presenti in rete.

Alcuni esempi di protocolli del livello applicativo sono:

  • SMTP: Simple Mail Transfer Protocol (Porte 25/587);
  • POP3: Post Office Protocol (Porta 110);
  • FTP: File Transfer Protocol (Porte 20/21);
  • HTTP: HyperText Transfer Protocol (Porta 80);
  • DNS: Domain Name System (Porta 53).

Oltre alle applicazioni pubbliche su Internet, sulla rete è presente un infinito numero di applicazioni proprietarie, sviluppate all’interno di organizzazioni.

 

Applicazione di rete

Un’applicazione di rete è un insieme di programmi che vengono eseguiti su due o più computer contemporaneamente che operano interagendo tra loro utilizzando delle risorse comuni, accedendo cioè concorrentemente ai database, mediante la rete che li connette.
L’applicazione di rete viene anche detta applicazione distribuita, dato che non viene eseguita su un solo elaboratore.
Affinché un processo, su un host, invii un messaggio ad un altro processo posizionato su qualunque altro host il primo deve essere in grado di identificare in maniera univoca il destinatario, l’identificazione univoca avviene attraverso un socket, del quale l’IP specifica l’host e la Porta specifica il processo, ossia il servizio offerto.

L’applicazione di rete può essere vista come composta da due parti:

  • User agent, che funge da interfaccia tra l’utilizzatore dell’applicazione e gli aspetti comunicativi;
  • Implementazione dei protocolli che permettono all’applicazione di integrarsi con la rete.

 

Architetture per le applicazioni di rete

Il primo passo che un programmatore deve effettuare per realizzare un’applicazione di rete è scegliere la sua architettura, le principali architetture ad oggi usate sono:

  • Client/Server;
  • Peer-to-Peer (P2P);
  • Architetture ibride (dove convivono client-server e P2P).
Architettura Client/Server

La caratteristica principale è che deve sempre essere presente un server attivo che offre un servizio, restando in attesa che uno o più client si connettono ad esso, per potere rispondere alla richieste che gli vengono effettuate. Il server deve essere attivo e possedere l’indirizzo IP, al quale poter essere raggiunto, fisso ossia statico, contrariamente a quello dei client che generalmente è dinamico.

Un client non è in grado di comunicare con altri client, ma solo con il server, più client possono comunicare contemporaneamente con lo stesso server. Se un server riceve troppe richieste
contemporaneamente potrebbe entrare in stato di congestione, quindi si rende necessaria la virtualizzazione della risorsa mediante una server farm. Ossia un server con un unico hostname ma con più indirizzi IP, trasparenti rispetto ai client, sui quali vengono dirottate le richieste di connessione. Un esempio di questa architettura è il WWW.

Per maggiori informazioni su questa architettura leggete questo articolo sul modello client/server.

Peer-to-Peer (P2P)

Nelle architetture P2P abbiamo coppie di host chiamati peer che dialogano direttamente tra loro. Ogni peer è un’entità autonoma, capace di auto organizzarsi; i peers tra loro condividono un insieme di risorse distribuite presenti all’interno di una rete. Il sistema utilizza tali risorse per offrire funzionalità in maniera totalmente decentralizzata.
In sintesi nei sistemi P2P ogni host (peer) fornisce una risorsa e ottiene in cambio altre risorse. Gli esempi più noti sono in ambito di condivisione file, come Emule e Gnutella.

P2P Decentralizzato

Nella architettura completamente decentralizzata ogni peer ha sia funzionalità di client che di server (hanno funzionalità simmetrica e sono chiamati servent), ed è impossibile localizzare una risorsa mediante un indirizzo IP statico, quindi si rende necessario l’uso di nuovi meccanismi di indirizzamento definiti a livello superiore rispetto all’IP. I peer possono condividere qualunque tipo di risorsa (dati, memoria, banda, etc) ed il sistema P2P è capace di adattarsi ad un continuo cambiamento dei nodi partecipanti (churn) mantenendo prestazioni e connettività accettabili senza necessitare di alcuna entità centralizzata.

P2P Centralizzato

In questa architettura è presente un server centrale (directory server) che conserva le informazioni sui peer e risponde alle richieste su quelle informazioni effettuando la ricerca in modalità centralizzata. I peer sono responsabili di conservare i dati e le informazioni, in quanto il server non memorizza file, e di informare il server dei file che intendono condividere e di permettere ai peer che lo richiedono di scaricare le risorse condivise.
L’implementazione più famosa è Napster, dove gli utenti si connettono ad un server centrale nel quale pubblicano i nomi delle risorse che condividono.

P2p Ibrido

Il P2P ibrido è parzialmente centralizzato. Sono presenti alcuni peer chiamati ultra-peer determinati dinamicamente che hanno anche la funzione di indicizzazione, gli altri nodi sono chiama leaf peer.

 

Servizi offerti dallo strato di trasporto alle applicazioni di rete

Tutti i protocolli, sia standard che specifici, hanno in comune una particolarità: trasferire dei messaggi da un parte all’altra della rete.
Ogni applicazione deve scegliere tra i protocolli di trasporto quale deve adottare in base ai servizi che sono necessari alle specifiche esigenze dell’applicazione, che possono essere riassunte in:

  • Trasferimento dati affidabile;
  • Ampiezza di banda;
  • Temporizzazione;
  • Sicurezza.
Trasferimento dati affidabile

Si intende un servizio che garantisca la consegna corretta dei dati. Alcune applicazioni come quelle di riproduzione audio/video possono tollerare qualche perdita senza compromettere lo scopo dell’applicazione, altre invece come i trasferimenti di file richiedono che la consegna del file sia garantita al 100%. A tale scopo il livello di trasporto mette a disposizione due principali protocolli:

  • UDP (User Datagram Protocol): protocollo non orientato alla connessione, da utilizzare quando la perdita di dati è un fatto accettabile, in quanto non affidabile non offre il controllo del flusso, della congestione, del ritardo e una banda minima.
  • TCP (Transmission Control Protocol): protocollo orientato alla connessione da utilizzare quando la perdita dei dati non è tollerabile, ovvero quando il trasferimento deve essere affidabile. Dà la garanzia di un trasporto senza errori o perdita di informazioni, effettua il controllo del flusso, in quanto si adatta alle velocità di server e client, esegue anche il controllo della congestione ma non dà garanzie di banda minima.
Ampiezza di banda

Alcune applicazioni per funzionare hanno bisogno di avere una garanzia sulla larghezza di banda minima disponibile, cioè possono chiedere un throughput garantito, come per esempio le applicazioni multimediali.

Temporizzazione

Alcune applicazioni, come la telefonia VoIP, i videogiochi e gli ambienti virtuali per funzionare correttamente ammettono solo piccoli ritardi. Essendo i protocolli di trasporto sia TCP che UDP temporalmente inaffidabili è stato sviluppato un protocollo in tempo reale ad hoc chiamato RTP (Real Time Transport Protocol). Questo è in grado di studiare i ritardi di rete e calibrare i collegamenti per garantire di restare in certi limiti di tempo, scegliendo alternativamente quando usare UDP e quando TCP.

Sicurezza

Un’applicazione può richiedere allo strato di trasporto la cifratura di tutti i dati trasmessi in maniera da garantire la riservatezza e ridurre l’efficacia delle attività di sniffing. É quindi possibile che vengano richiesti dei servizi di sicurezza da applicare per garantire l’integrità dei dati e l’autenticazione end-to-end.