Il modello di rete OSI (Open Systems Interconnection) è uno standard di comunicazione tra reti diverse. Le prime specifiche pubblicate nel 1978 dall’ISO (International Standards Organization), fanno riferimento ai sistemi aperti, sistemi cioè che permettono la comunicazione tra componenti hardware e software di fornitori diversi. La versione completa, pubblicata nel 1984, è diventata di fatto uno standard internazionale, nel senso che tutte le case produttrici progettano i loro prodotti in base alle specifiche del modello OSI. Il modello ha avuto successo grazie all'architettura modulare impostata su sette strati completamente indipendenti. Ogni strato infatti, poiché gestisce funzioni e servizi che svolgono attività simili, può essere modificato senza ripercussioni sugli altri strati; questo consente di suddividere operazioni molto complesse in elementi più semplici, di integrare i prodotti di venditori diversi, e quindi permette l’interoperabilità tra reti con caratteristiche differenti. Lo scambio delle informazioni tra i vari strati è invece delegata ad opportune interfacce di comunicazione. 1. L’architettura a livelli Il modello OSI si presenta strutturato in sette livelli, ciascuno dei quali implementa distinte funzioni di rete e fornisce servizi ai livelli adiacenti, in relazione ai protocolli che lo determinano. Ogni livello tuttavia si comporta come se la comunicazione avvenisse con il livello paritario dell’altra stazione di lavoro. Se prendiamo come riferimento le due serie dei 7 livelli, relative a due macchine che devono scambiarsi delle informazioni, allora possiamo affermare che il livello paritario è quello che svolge su ogni macchina la stessa funzione. Possiamo pertanto pensare che i due livelli paritari siano virtualmente connessi. La figura seguente illustra come avviene la comunicazione con i livelli adiacenti e con il livello paritario. Quando un utente invia un messaggio, questo attraversa tutti gli strati, a partire dal livello di Applicazione, fino al livello Fisico. Per fornire l’accesso ad un livello, il livello adiacente, deve essere fornito di un apposito programma, che prende il nome di interfaccia. Vi sono pertanto sei interfacce diverse, che interagiscono tra i sette livelli. Inoltre un programma detto entità, o meglio N_entità (se posto all’ennesimo livello del modello OSI), si preoccupa di trasformare il messaggio da inviare o ricevuto, aggiungendogli tutte le informazioni necessarie affinché esso possa essere elaborato dal livello adiacente e dal livello paritario. Ogni livello elabora il messaggio ricevuto, prelevando informazioni e aggiungendone altre. Quando il messaggio arriva alla stazione ricevente, esso attraversa i livelli a ritroso, partendo da quello più basso, fino a raggiungere il livello più alto. Ancora una volta, ogni livello elabora il messaggio ricevuto, prelevando le informazioni aggiunte dal livello paritario e aggiungendo quelle necessarie al messaggio per essere elaborato dal livello superiore. I primi tre livelli, quelli degli strati più bassi, sono livelli fisici, mentre gli altri 4, quelli degli strati più alti, sono livelli logici. 2. I servizi offerti dai sette livelli Analizziamoli ora in ordine, partendo dal livello più alto. Livello di Applicazione o Application Layer: il livello 7 occupa lo strato più alto della pila e per questo motivo non fornisce servizi agli altri livelli, ma interagisce in modo diretto con le applicazioni usate dall’utente, fornendo i servizi di rete. Al fine di soddisfare i servizi richiesti dall’utente, esso verifica innanzitutto se vi sono sufficienti risorse per comunicare tra i sistemi. E’ fornito di due interfacce, una diretta e l’altra indiretta. Attraverso l’interfaccia diretta con il livello sottostante, l’Application Layer serve le applicazioni tipiche di una rete, quali lo scambio di e-mail, il trasferimento dei file, l’accesso ai database, l’accesso ai siti Web, la gestione remota di applicazioni distribuite e l’emulazione di terminali. Nel controllo dei sistemi remoti, per non incorrere in problemi dovuti ai diversi tipi di terminali, viene definito come standard il terminale VT100. Ognuna delle applicazioni suddette utilizza un protocollo specifico dell’Application Layer. Un’interfaccia indiretta e un redirector vengono invece forniti per le applicazioni standalone (word processor, fogli di calcolo, programmi per la gestione di database ecc.) in un ambiente LAN, per attivare la funzionalità client-server. Il redirector è un protocollo che deve essere attivato sul cliente di rete, che permette di condividere e mappare diversi tipi di risorse. Esso entra per esempio in funzione ogni volta che un utente chiede di salvare un file su un file server o di stamparlo su un print server di rete. In tal caso il redirector rende l’applicazione, con cui è stato creato il file, un client di rete, abilitando così l’archiviazione o la stampa del file richiesto. In generale il redirector permette all’amministratore di rete di impostare sul client locale un nome logico per le risorse remote e di conseguenza abilita un client a utilizzare le risorse di rete come se fossero locali. Tra i redirector più comuni ricordiamo Apple File Protocol, Netbios, Novell IPX/SPX, Network File System (NFS). Nella comunicazione tra i processi il server mantiene generalmente la connessione con il client solo per il tempo necessario a effettuare la transazione, come il download di una pagina web o l’invio del file al print server o al file server. Terminata la transazione, la connessione viene abbattuta. In questa regola non rientrano tuttavia Telnet, né FTP. Livello di Presentazione o Presentation Layer: il livello 6 si preoccupa di preparare le informazioni ricevute dal livello Applicazione in un formato adatto alla trasmissione. Lo stesso livello della stazione ricevente, coinvolta nella comunicazione, trasforma il formato in modo da renderlo compatibile con la stazione ricevente; in particolare effettua la codifica dei dati, la conversione del set di caratteri e l’espansione dei comandi grafici. Grazie a questo livello, le applicazioni che girano su computer con sistemi diversi possono comunicare tra loro in modo indipendente dalle applicazioni stesse. Al livello 6 vengono infatti definiti gli standard ASCII ed EBCDIC per gestire i file di testo, gli standard GIF (Graphic Interchange Format), JPEG (Joint Photographic Experts Group) e TIFF (Tagged Image File Format) per rappresentare le immagini, lo standard MPEG (Motion Picture Experts Group) per la codifica e la compressione dei dati su memorie di massa digitali, lo standard MIDI (Musical Instrument Digital Interface) per l'audio digitale, lo standard Quick Time per i file con audio e video. Questo livello gestisce inoltre i file binari delle applicazioni multimediali e di FTP, e anche i file in formato HTML (Hypertext Markup Language) usati dai vari web browser. Il livello 6 si occupa infine della compressione dei dati (per ridurne la dimensione e velocizzare la trasmissione) e della crittografia, per proteggere i dati da intromissioni esterne; se sulla linea viaggiano crittografati, anche se intercettati da "estranei", i dati non possono infatti essere interpretati senza la chiave di decodifica. Livello di Sessione o Session Layer: il livello 5 si occupa di attivare la connessione tra due stazioni, di mantenerla per tutta la durata del trasferimento dei dati e di abbatterla a fine trasmissione. L’intero processo è chiamato appunto sessione. Poiché i dati vengono trasmessi su una rete a commutazione di pacchetto, questo livello ha il compito fondamentale di definire la durata della trasmissione e il controllo del dialogo decidendo quale delle due stazioni deve trasmettere. Specifica cioè se la trasmissione deve essere alternata tra i due dispositivi in comunicazione, o se entrambi possono inviare informazioni simultaneamente (attenzione a non confondere questo con la modalità di servizio HALF DUPLEX e FULL DUPLEX, che è gestita dal livello 2 del modello OSI). La trasmissione simultanea può provocare una collisione a livello di sessione (attenzione a non confonderla con la collisione sul mezzo fisico, gestito dal livello 1 del modello OSI), quando uno o più messaggi oltrepassano un messaggio inviato precedentemente, causando confusione su uno o su entrambi i sistemi in comunicazione. Nella trasmissione simultanea, il livello di sessione chiama altri livelli per gestire la conversazione. Se le collisioni compromettono troppo la comunicazione, allora il controllo del dialogo può optare per la comunicazione alternata; in tal caso, attraverso un data token, permette ad ogni host di comunicare quando arriva il suo turno (attenzione a non confondere con il Token Passing, gestito a livello 2 del modello OSI). Il livello di sessione realizza inoltre una sincronizzazione ad alto livello, introducendo dei checkpoint nel flusso dei dati. ![]() Ad ogni checkpoint entrambi gli host effettuano il backup dei dati, salvano la configurazione della rete e del clock, quindi annotano il punto in cui è arrivata la conversazione; in tal modo, se durante il trasferimento dei dati la sessione si interrompe, la sessione successiva può sincronizzare la comunicazione riprendendo la trasmissione dal punto in cui è stata interrotta. Diversi sono i protocolli che vengono utilizzati nel livello 5; tra i più conosciuti, vi sono senza dubbio i seguenti:
Livello di Trasporto o Transport Layer: il livello 4 è il più basso dei 4 livelli superiori end-to-end, cioè in grado di stabilire una connessione logica con i livelli paritari. Come gli altri livelli superiori, esso risulta completamente indipendente dal tipo di rete implementata a livello fisico. Questo livello incapsula i dati in segmenti in fase di trasmissione e li riassembla in fase di ricezione. I messaggi lunghi vengono suddivisi in più messaggi e attraverso la tecnica di multiplazione inviati su canali diversi, mentre quelli corti vengono riuniti per essere inviati su un unico canale di comunicazione. Il medesimo livello della stazione ricevente ricostruisce i pacchetti e invia un messaggio di conferma alla stazione trasmittente. La funzione principale è quindi quella di garantire che lo scambio di informazioni sia affidabile e sicuro e che i pacchetti siano ricevuti in sequenza e senza duplicati. Per questo motivo controlla il flusso delle informazioni usando il meccanismo della finestra, invia i segmenti nella sequenza corretta ed effettua il controllo e il recupero dei pacchetti attraverso l’acknowledgment e la ritrasmissione. Il livello di trasporto stabilisce, mantiene e chiude il circuito virtuale; per questo motivo è detto connection-oriented. Livello di Rete o Network Layer: il livello 3 si occupa della traduzione del nome logico dell’host destinatario in indirizzo fisico. Definisce l’instradamento, determinando il percorso più breve, prima dell’invio dei messaggi, attraverso la consultazione di tabelle di instradamento statiche o dinamiche. Si occupa di gestire la comunicazione controllando il flusso dei dati al fine di evitare la congestione della rete. I dati ricevuti dal livello superiore sono organizzati in pacchetti o datagramma, che contengono il network header con l’indirizzo logico della sorgente e della destinazione. Provvede inoltre alla commutazione del messaggio o dei singoli pacchetti che compongono il messaggio, determinando se il cammino deve essere lo stesso per tutti i pacchetti, oppure se ogni pacchetto può seguire un cammino diverso. Nelle reti WAN e MAN questo livello gestisce la tariffazione, calcolata in base al tempo di connessione. Come i due livelli sottostanti, questo livello dipende dal modo in cui è realizzato il cablaggio della rete e dal tipo di instradamento. Tra i protocolli forniti da questo livello ricordiamo il protocollo IP e il protocollo X.25.
Livello di Collegamento Dati o Data Link Layer: il livello 2 provvede che la trasmissione sul mezzo fisico sia affidabile. A questo livello diventa molto importante la topologia della rete e il possibile accesso. Il Data Link si preoccupa inoltre dell’indirizzamento fisico, di ordinare e incapsulare i dati in una struttura logica detta trama o frame e di trasmetterla correttamente al sottostante livello Fisico. Il frame permette infatti la connessione al successivo dispositivo di rete sul collegamento fisico. Ogni frame da inviare viene delimitato aggiungendo dei caratteri di controllo, quali i caratteri di Start, End, Parity, oppure CRC. In questo modo è possibile riconoscere eventuali errori e ritrasmettere la trama errata, o eliminare le trame duplicate. Il livello 2 gestisce la sincronizzazione tra mittente e destinatario attraverso l’introduzione di caratteri di sincronismo e modera lo scambio dei dati tra terminali di potenza diversa. In ricezione esso ha il compito di notificare eventuali errori e di inviare i frame ricevuti dal livello Fisico al livello di Rete. Tra i protocolli più conosciuti di questo livello vi sono HDLC e BSC. Livello Fisico, o Phisycal Layer: il livello 1 si preoccupa della gestione del mezzo trasmissivo (cavo coassiale, cavi STP o UTP, fibre ottiche) su cui avviene lo scambio di informazioni, occupandosi della conversione del frame in una sequenza di bit e della successiva trasmissione dei singoli bit. Esso definisce per questo le modalità di connessione tra il cavo e la scheda di rete e di conseguenza le caratteristiche cui i mezzi di collegamento fisico devono sottostare, quali:
Esistono diversi standard relativi alla gestione del mezzo trasmissivo, sia esso analogico o digitale. In particolare l’RS-232-C o V.24 e l’RS-449 sono gli standard più usati per le linee analogiche, mentre l’X-21 è il più utilizzato per le linee digitali. Come si è avuto modo di vedere, RS-232-C definisce come debba avvenire il collegamento tra un DTE e DCE.
3. Terminologia specifica del modello OSI Definiti i livelli del modello OSI e le foro funzioni, vediamo ora come avviene la trasmissione di un messaggio da un livello (detto genericamente N+1) a quello sottostante (detto N), dando per scontato che, essendo l’utente a richiedere la trasmissione di un messaggio, l’informazione non può che partire dall’Application Layer, cioè dal livello più alto del modello OSI. Prima dobbiamo però prendere confidenza con taluni termini specifici del modello OSI. Il punto di accesso tra due livelli prende il nome di SAP (Service Access Point), o N_SAP se riferito al livello ennesimo. Attraverso SAP, il livello superiore può richiedere dei servizi al livello inferiore. Il messaggio prende il nome di IDU (Information Data Unit)e risulta composto di due parti:
Nel caso si trovi al livello N+1 sarà denominato N+1_IDU. 4. La trasmissione di un messaggio tra i livelli Affinché il messaggio possa transitare dal livello N+1 al livello N, occorre richiamare la funzione detta SAP, che funge da interfaccia tra un livello e quello sottostante. Quando N+1_IDU arriva al livello N, il pacchetto viene suddiviso nell’N+1_ICI e nell’N+1_SDU. Come già detto, N+1_ICI contiene tutte le informazioni di controllo, mentre N+1_SDU è la parte del pacchetto relativa ai dati che l’utente vuole trasmettere. Il livello N, attraverso l’N_entità, esegue tutte le operazioni richieste dall’ICI, lasciando inalterati i dati contenuti nella SDU. A fine elaborazione, sempre il livello N elimina l’ICI ricevuta dal livello superiore e produce una nuova ICI, che sarà successivamente passata al livello N-1. Insieme alla nuova ICI, al livello N-1 viene inviata anche la N_PCI, contenente le informazioni di controllo che devono essere elaborate dal livello paritario della macchina ricevente. L’N_PCI viene quindi imbustato insieme all’SDU, per generare il nuovo N_PDU, al fine di ottenere l’informazione che deve essere virtualmente ricevuta dal livello paritario del sistema ricevente. 5.La funzione delle Primitive Per far transitare il messaggio da un determinato livello al livello superiore o inferiore, il modello OSI utilizza quattro particolari funzioni dette primitive. Esse prendono il nome di:
Per capire la logica sottostante la trasmissione di un messaggio, supponiamo che il collegamento tra i livelli paritari avvenga attraverso un circuito virtuale. Affinché l’IDU possa passare da un livello (diciamo N+1) a quello sottostante (diciamo N) dello stesso sistema, è necessario che il livello N+1 invochi la primitiva Request. Il livello N invia quindi l’N_PDU al livello paritario. A questo punto il livello paritario (N) riceve il messaggio e, tramite l’invocazione della primitiva Indication, lo passa al livello superiore, trasferendo quindi il PDU al livello N+1 del sistema ricevente. Se tutto è andato a buon fine, il livello superiore, cioè l’N+1, deve inviare una conferma alla macchina trasmittente e pertanto attiva la primitiva Response, con cui invia la conferma di ricezione al livello sottostante, che provvede ad inviarla al livello paritario. Quando questa conferma arriva al sistema trasmittente, il livello paritario N invoca la primitiva Confirm per confermare appunto al livello superiore che la trasmissione dell’informazione è avvenuta correttamente. |