PROGRAMMIAMO
Internet - Tipologie di servizi
Servizi affidabili e non affidabili

Abbiamo detto in precedenza che ogni livello fornisce dei servizi al livello superiore e ne riceve da quello inferiore. Per esempio, nella suite TCP/IP, il livello di Trasporto fornisce servizi al livello Applicazione e utilizza i servizi forniti dal livello di Rete.

Un servizio si dice affidabile (reliable) quando esso è in grado di garantire la ricezione corretta e completa di un messaggio. Viceversa il servizio si dice inaffidabile (unreliable). Per estensione i termini affidabile e inaffidabile vengono applicati anche ai protocolli che definiscono le regole di un certo servizio.

Facciamo un esempio. L'invio di una lettera ordinaria per posta è un servizio inaffidabile, in quanto le poste non offrono nessuna garanzia della consegna e, nel caso la lettera vada smarrita, non ne informano il mittente. Viceversa una raccomandata con ricevuta di ritorno è un servizio affidabile, in quanto il mittente riceve conferma dell'avvenuta ricezione della raccomandata: in caso di mancanza di ricezione, può informarsi sullo stato della raccomandata presso le Poste o, in ultima analisi, può rispedire la lettera.

Nel caso dei servizi di rete, per esempio il TCP offre servizio affidabile (controlla se i segmenti inviati sono stati correttamente ricevuti), mentre l'UDP offre un servizio inaffidabile (non viene fatto nessun controllo sulla eventuale perdita dei datagram).

E' bene subito notare che il termine non affidabile non ha in generale una connotazione negativa. Ci sono dei casi in cui un servizio inaffidabile è preferibile a uno affidabile, in quanto riduce le dimensioni dei messaggi scambiati (non ci sono informazioni di controllo) e, soprattutto, rende più veloce la comunicazione stessa. Infatti i dati di controllo (necessari per la realizzazione di un servizio affidabile) aumentano il traffico di rete e dunque rallentano la trasmissione.

Facciamo un semplice esempio per comprendere il problema. Immaginiamo una persona che voglia dettare un testo al telefono a un'altra persona che lo trascrive. Le parole dettate potrebbero essere ricevute dallo scrivente in modo errato per vari motivi (dizione non chiara di chi parla, difficoltà di ascolto, disturbi sulla linea). Così potrebbe succedere, tanto per fare un esempio, che la parola CONNIVENZA venga ricevuta come CONVIVENZA. In un servizio non affidabile lo scrivente si limiterebbe a trascrivere quello che riesce a capire, senza verificare in nessun modo la presenza di errori. Supponiamo ora di voler implementare un controllo di errore su questa trasmissione. Potremmo per esempio pensare che, al termine della trascrizione, il ricevente rilegga l'intero messaggio trasmesso in modo da aver la conferma da colui che detta che la trascrizione è corretta. Come si può notare facilmente, lo svantaggio di questo tipo di controllo è che la trasmissione si rallenta, cioè ci vuole più tempo per ricevere e controllare il messaggio, di quanto ce ne vuole per riceverlo senza effettuare controlli.

Un altro modo per considerare il problema è osservare che, per implementare un servizio affidabile, la quantità di dati da trasmettere deve aumentare (nel nostro caso raddoppia, poiché lo stesso testo viene trasmesso due volte, una volta da colui che detta a colui che scrive e la volta dopo in direzione contraria). Questa quantità aggiuntiva di dati necessaria ad effettuare il controllo di correttezza viene detta overhead.

Un servizio inaffidabile dunque presenterà un overhead ridotto, mentre un servizio affidabile invece avrà un grande overhead. Un classico esempio è quello che mette a confronto lo scaricamento di una pagina web (protocollo HTTP) con un servizio di streaming video (protocollo RTP). Nel primo caso è bene usare a un servizio affidabile (TCP) in quanto è importante che la pagina web venga ricevuta per intero e correttamente, anche a scapito di un certo rallentamento nella trasmissione a causa dell'overhead. Nel secondo caso la perdita di qualche datagram (corrispondente a qualche pixel o fotogramma non trasmesso) è meno importante che assicurare la velocità della connessione: perciò si userà un servizio inaffidabile ma veloce, come l'UDP.

Un altro problema dei servizi affidabili è la cosiddetta latenza (latency). In informatica latenza può essere definita come l'intervallo di tempo che intercorre fra il momento in cui arriva l'input al sistema ed il momento in cui è disponibile il suo output. In altre parole, la latenza non è altro che una misura della velocità di risposta di un sistema. Nel caso della trasmissione, la latenza è il tempo impiegato da un messaggio (pacchetto) per giungere a destinazione. La latenza dipende in generale dalla larghezza di banda dei mezzi trasmissivi e dal numero di nodi intermedi che il pacchetto deve attraversare. A causa della latenza si ha un ritardo nella comunicazione (un es. di latenza in un altro ambito è il tempo di ritardo nelle comunicazioni via satellite, dovuto al tempo di trasmissione del segnale fra satellite e Terra). Nei servizi affidabili, come vedremo meglio nel seguito, si ha uno scambio iniziale di messaggi (handshake) necessario per stabilire la connessione. Tale scambio provoca una latenza, cioè un ritardo prima che la comunicazione vera e propria abbia inizio (latenza di start up). Invece in un servizio non affidabile, non essendoci nessuna connessione, non si ha nessun ritardo di avvio: la comunicazione inizia subito.

Inoltre il fatto che il protocollo di un certo livello sia inaffidabile non significa affatto che l'intera comunicazione sia inaffidabile. Infatti l'affidabilità potrebbe essere assicurata da un livello superiore. Per esempio il protocollo IP è inaffidabile, in quanto non controlla eventuali perdite di pacchetti. Tuttavia se tale protocollo viene utilizzato al livello superiore dal TCP, l'affidabilità della trasmissione viene assicurata da questo livello. In altre parole: se un segmento viene perso dal livello iP, sarà il livello superiore (TCP) che si occupa di richiederne la trasmissione.

Per fare un esempio, abbiamo detto che la posta ordinaria è un servizio inaffidabile. Supponiamo tuttavia che io sia in corrispondenza con un amico in Australia e abbiamo precedentemente stabilito di aspettare per ogni lettera almeno due settimane per ricevere la risposta dall'altro. Se non riceviamo la risposta supponiamo che la nostra lettera sia andata persa e la rispediamo. Ecco che un servizio inaffidabile (a livello delle poste) è stato trasformato in un servizio affidabile (a livello di mittente e destinatario).

Servizi orientati alla connessione e non orientati alla connessione

Un'altra classificazione divide i servizi fra quelli orientati alla connessione (connection oriented) e quelli invece senza connessione (connectionless).

Un servizio orientato alla connessione offre una modalità di comunicazione dati tramite la quale i dispositivi terminali stabiliscono una connessione logica o fisica tra gli agenti della comunicazione prima della trasmissione di qualsiasi tipo di dato. Una comunicazione telefonica è un semplice esempio di servizio orientato alla connessione. In questo caso possiamo osservare che lo scambio di messaggi fra i due interlocutori avviene all'interno di una "struttura" generale (la connessione, appunto). In particolare la connessione dev'essere stabilita, prima che avvenga lo scambio vero e proprio delle informazioni, e dev'essere chiusa al termine dello scambio stesso.

Viceversa in un servizio senza connessione ogni comunicazione avviene singolarmente e indipendentemente da ogni altra. Per esempio lo scambio di sms è un servizio senza connessione. In questo tipo di servizi mancano le fasi iniziale (stabilire la connessione) e finale (chiudere la connessione) e ogni singolo messaggio contiene tutte le informazioni necessarie per il suo recapito.

Nel caso di Internet, per esempio il protocollo TCP è orientato alla connessione, cioè comprende l’instaurazione, l’utilizzo e la chiusura della connessione stessa. Viceversa UDP è senza connessione, in quanto ogni singolo messaggio viene spedito in modo indipendente dagli altri.

Generalmente i servizi senza connessione sono sempre inaffidabili. La ragione sta nel fatto che un servizio senza connessione non può verificare per definizione la completa e corretta trasmissione di tutti i messaggi, dal momento che ogni messaggio viene inviato separatamente dagli altri. Viceversa i servizi orientati alla connessione sono spesso anche affidabili, ma non sempre e non necessariamente.

Un servizio senza connessione e inaffidabile può essere utilizzato da un servizio orientato alla connessione su un livello superiore, in grado in tale modo di rendere affidabile la comunicazione nel suo complesso. 

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it