Il livello di sessione
Mediante il livello di sessione gli utenti possono stabilire
dei collegamenti logici o sessioni di lavoro che consentano il corretto
trasferimento di informazioni. Occorre spiegare la differenza far le funzioni
del livello di trasporto e di quello di sessione. Anche il livello di trasporto
si occupa, infatti, del coretto trasferimento dei dati. La differenza consiste
nel fatto che, mentre il livello di trasporto si occupa di evitare la perdita
di dati, il livello di sessione si occupa di evitare che il loro significato
venga deformato.
Facciamo l’esempio di una conversazione telefonica. Potremmo
dire che il livello di trasporto si occupa di impedire che cada la linea, di
impedire che dei disturbi elettrici sulla stessa rendano non comprensibile la
comunicazione, eccetera. Ma questo non basta a rendere adeguata la qualità
della conversazione. Infatti, se i due utenti che si stanno telefonando, non
rispettano il loro turno per parlare, i loro discorsi si sovrappongono rendendo
impossibile la conversazione. Occorre allora un sistema di sincronizzazione per
fare in modo che la conversazione avvenga in maniera ordinata ed ogn’una delle
persone coinvolte nella conversazione attenda pazientemente il proprio turno
per parlare. Analogamente occorre che si eviti l’interruzione brusca del
collegamento prima che la sessione di lavoro sia terminata. Non banale è anche
il problema di riprendere una sessione di lavoro dopo che si è interrotta in
caso di anomalie sulla rete. Immaginiamo che un utente stesse per dire
all’altro la seguente frase:
“Ci vediamo domani, alle 10, in piazza Cavour”. E supponiamo
che cada la linea quando è stata pronunciata la frase
“Ci vediamo domani, alle 10, in pia…”
L’utente ricompone il numero ma non ricomincerà certamente la
conversazione con la frase
“…zza Cavour”.
Occorre dunque che la conversazione ricominci da un punto
che abbia un senso logicamente completo, ad esempio
“Ti stavo dicendo che ci vediamo domani, alle 10, in piazza
Cavour”.
Uscendo dall’esempio, il livello di sessione si occupa
dunque
di evitare distorsioni sul significato
logico dei messaggi costringendo i vari utenti della sessione di lavoro a
scambiarsi i dati rispettando un’adeguata alternanza (sincronizzazione).
Garantire una corretta
risincronizzazione in caso di interruzione brusca della sessione di lavoro in
modo che non si riparta da un punto qualunque ma dall’inizio di un’unità
logicamente completa di dati.
IL problema della sincronizzazione si può risolvere con la
tecnica del token di sessione. Un nodo può trasmetter dati ad un altro nodo
soltanto se possiede questo token. Quando ha terminato consegna il token
all’altro nodo in modo che esso possa inviare a suo volta i dati.
Per quanto riguarda il problema della risincronizzazione,
una prima soluzione consiste nel suddividere i dati da trasmettere in pagine,
fra le quali esistono punti di risincronizzazione. Quando ha ricevuto un punto
di sincronizzazione il ricevitore manda un segnale di riscontro al trasmettitore
il quale sa in questo modo che la trasmissione fino a quel punto è andata a
buon fine.
Un’altra caratteristica del livello di sessione è la
suddivisione dei trasferimenti dati in attività. L e attività sono unità
logiche indipendenti l’una dalle altre. Il contenuto delle varie attività è
definito liberamente dagli utenti: lo strato di sessione si occupa soltanto di
aprire e chiudere un’attività.
Per comprendere il problema facciamo due esempi.
Trasferimento dei file.
Supponiamo che debbano essere trasferiti più file da un nodo
all’altro. Si pone il problema di indicare la fine di un file e l’inizio
dell’altro. Il problema non è semplice, se si ricorre, ad esempio alla
trasmissione di caratteri di controllo questi potrebbero coincidere casualmente
proprio con caratteri che appartengono al contenuto di un file, per cui questo
potrebbe essere interpretato non come un dato ma come la fine di un file. La
gestione delle attività è un’ottima soluzione alternativa. Prima di iniziare la
trasmissione di un file, il livello di sessione indica al nodo ricevitore che
inizia un’attività. Terminata la trasmissione del file il livello di sessione
indica al ricevitore che è terminata l’attività. In questo modo il ricevitore
sa che è terminata la trasmissione del file e non può confonderlo con quello
successivo.
Un altro esempio è quello della richiesta del trasferimento
di una somma da parte di un cliente dal suo conto corrente a quello di un’altra
persona. Supponiamo che questo cliente invii con un primo messaggio il numero
del suo conto corrente, con un secondo messaggio il numero del conto corrente
beneficiario del trasferimento e con un terzo messaggio la somma da trasferire.
In genere un’operazione di questo tipo prevede che il conto corrente da cui
trasferire i fondi venga bloccato in modo che non ci possano essere più accessi
contemporanei ad esso. Esso verrà sbloccato al termine dell’operazione di
trasferimento. Supponiamo ora che un guasto sulla linea impedisca la
conclusione dell’operazione. Il risultato sarebbe che il conto dell’utente
rimarrebbe permanentemente bloccato. La gestione delle attività può ovviare a
questo problema perché il livello di sessione comunica al computer della banca
l’inizio di un’attività, i tre messaggi vengono inviati e solo quando il livello
di sessione comunica alla banca che è terminata l’attività, la banca, essendo
sicura di possedere tutti i dati necessari, inizia ad operare il trasferimento
dei fondi. Se un guasto compromette la trasmissione dei tre messaggi non c’è
problema perché il computer della banca inizia il vero e proprio trasferimento
dei fondi con relativo blocco del conto corrente soltanto quando l’attività è
terminata.