Il livello Trasporto (livello 4 del modello OSI) offre alcune forme di comunicazione ai processi del livello applicazione, residenti su sistemi remoti, affidandosi al servizio di comunicazione tra sistemi terminali offerto dal livello Rete. Il livello Trasporto ignora il modo in cui il livello Rete realizza questo servizio.
Il livello Rete è implementato sia nei sistemi terminali sia nei router della rete. Esistono però due modelli del livello Rete: il modello a datagramma, usato nelle architetture di reti TCP/IP, e il modello a circuito virtuale, usato nelle architetture di reti ATM.
Il router è il dispositivo che svolge le funzioni di sistema intermedio. Si farà distinzione tra le operazioni di forwarding (inoltro di pacchetti) e quella di routing (instradamento di pacchetti). L'operazione di Forwarding è relativa al trasferimento di un pacchetto da un canale entrante ad un canale uscente di un router, L'operazione di Routing tiene in considerazione i costi per attraversare tutti i router che sono coinvolti nella consegna dei pacchetti da una sorgente ad una destinazione.
Per approfondire l'operazione di Forwarding di un pacchetto sarà necessario esaminare il funzionamento di un router e i suoi componenti interni. Quindi si vedrà il formato di un datagramma IPv4. Per comprendere l'operazione di Routing si esamineranno le due classi di algoritmi di instradamento che hanno lo scopo di determinare il percorso di costo minimo tra due host della rete.
Host sorgente H1 (Sistema terminale) | Host destinazione H2 (Sistema terminale) | |
Applicazione | Applicazione | |
Collegamento | Collegamento | |
Fisico | ———————————— | Fisico |
due sistemi terminali collegati direttamente, |
La rete presenta un insieme di punti di accesso. Gli host si collegano ad un punto di accesso e possono chiedere alla rete di usufruire di un servizio di comunicazione. Ad un host sorgente che vuole comunicare con un host destinazione, la rete concede un percorso, formato da canali e router. Si supponga che l'host sorgente H1 deve inviare dei messaggi all'host destinazione H2. Se i due host fossero collegati direttamente, basterebbe appoggiare il livello Applicazione direttamente sul livello Collegamento, ma i due host hanno bisogno di sistemi intermedi che collaborino alla consegna di pacchetti, quindi gli host devono implementare anche un livello Rete. I router, oltre ai livelli Collegamento e Fisico, devono possedere il livello Rete.
Host sorgente H1 (Sistema terminale) |
Host destinazione H2 (Sistema terminale) |
|||||
Applicazione | Applicazione | |||||
Trasporto | R1 | R2 | Trasporto | |||
Rete | Rete | Rete | Rete | |||
Collegamento | Collegamento | Collegamento | Collegamento | |||
Fisico | ———— | Fisico | ———— | Fisico | ———— | Fisico |
se due sistemi terminali sono separati da sistemi intermedi, |
Il livello Rete in H1 riceve richieste di servizio dal livello Trasporto, cioè il livello Trasporto consegna al livello Rete un segmento da consegnare ad un destinatario.
Il livello Rete incapsula ciascun segmento in un datagramma (o pacchetto).
L'operazione incapsulare deve essere interpretata come l'inserimento del segmento in una busta sulla quale vengono aggiunte le informazioni per la consegna.
Il datagramma viene consegnato al router R1 collegato alla rete. Il datagramma viaggia nella rete e giunge ad un router R2 a cui è collegato l'host destinazione.
Il livello Rete dell'host ricevitore H2 riceve il datagramma dal suo router R2, estrae il segmento e lo fornisce al livello Trasporto. In questo modo i due livelli Trasporto hanno comunicato tra loro.
Il compito dei router è stato quello di inoltrare i pacchetti dal canale di ingresso al canale di uscita. Nei router non sono implementati né il livello Applicazione, né il livello Trasporto.
Il ruolo del livello Rete è semplice: trasferire un pacchetto da un host sorgente ad un host destinazione. Il livello Rete realizza la consegna dei pacchetti con un'operazione di forwarding, la quale è ottimizzata dall'operazione di routing:
Forwarding. Quando un router riceve un pacchetto su un suo canale, deve smistarlo sul canale che consente di raggiungere il destinatario. Esistono tre tecniche di instradamento:
Routing by network address. Un host viene indirizzato scrivendo nel pacchetto il suo indirizzo, che deve essere univoco sulla rete. Ogni router che riceve il pacchetto cerca tale indirizzo nella sua tabella di instradamento e determina il canale di uscita su cui ritrasmettere il pacchetto. Tale tecnica è usata nelle reti con architettura TCP/IP, in cui il protocollo di rete è non orientato alla connessione.
Label swapping. È una tecnica usata nelle architetture di rete ATM, in cui i protocolli di rete sono orientati alla connessione (vedere circuito virtuale). In ogni pacchetto vi è un campo contenente una label che serve come indice di accesso ad una tabella di instradamento sul router. Il router, prima di ritrasmettere il pacchetto, sostituisce la label con una nuova label. Le label devono quindi essere univoche solo all'interno di un dato router. Una successione di label è un insieme di numeri che identificano una connessione.
Source routing. È una tecnica usata dai bridge Token Ring. Il mittente si occupa di scrivere nel pacchetto l'instradamento completo, cioè l'elenco dei router da attraversare
Routing. Il livello Rete deve determinare l'instradamento, o percorso, che devono seguire i pacchetti per andare dal mittente al destinatario. Gli algoritmi di instradamento determinano i percorsi più convenienti tra un host sorgente e gli altri host della rete. I percorsi trovati dall'algoritmo di instramento vengono riepilogati in una tabella di instradamento.
I due termini Forwarding e Routing sono spesso usati come sinonimi. Per comprendere la differenza si pensi di doversi recare dalla propria abitazione in una località molto distante. Prima di intraprendere il viaggio, si consulterà una mappa, ci si documenterà sugli orari dei mezzi pubblici. Il Routing è l'operazione preliminare, durante la quale si è calcolato il percorso ottimale (più economico o più veloce). Durante il viaggio si raggiungeranno stazioni, dove si scende da un treno per prenderne un altro, oppure si proseguirà con un autobus o un taxi. Il Forwarding è l'operazione di cambio del treno.
Un router ha una tabella di instradamento con tante righe quante sono le destinazioni che conosce. In ogni riga è specificata una destinazione e qual è il canale di uscita su cui smistare un pacchetto, nella cui intestazione è indicata quella destinazione. Per determinare la linea su cui smistare il pacchetto, il router legge l'intestazione del pacchetto entrante ed estrae un valore usato come indice di accesso alla tabella di instradamento. La riga della tabella di instradamento così trovata contiene un identificatore del canale su cui smistare il pacchetto. A seconda del protocollo del livello rete, il valore estratto dall'header del pacchetto potrebbe essere l'indirizzo del destinatario o un identificatore della sessione di comunicazione a cui appartiene il pacchetto.
La figura mostra un esempio:
un router riceve un pacchetto contenente il valore 0111 nell'appropriato campo dell'header riservato a specificare il destinatario.
Il router usa questo valore come indice di accesso alla tabella di instradamento e determina il canale di uscita collegato all'interfaccia 2 su cui smistare il pacchetto.
Il router trasferisce il pacchetto sull'interfaccia 2.
La figura evidenzia anche che la tabella di instradamento è stata prodotta da un algoritmo di instradamento.
Un algoritmo di instradamento può essere centralizzato, cioè calcolato da un unico calcolatore e distribuito ai router, oppure isolato, cioè ogni router calcola la propria tabella di instradamento. In ogni caso, un router riceve i messaggi di routing, cioè le informazioni necessarie per costruire la tabella di instradamento, con pacchetti di un apposito protocollo di servizio. Le tabelle di instradamento dei router possono anche essere inserite manualmente, in questo caso non vengono scambiati pacchetti del protocollo di routing. Una tabella di instradamento inserita manualmente, richiede che un operatore sia pronto a modificarla se si verifica una variazione nello stato dei canali.
In una rete a commutazione di pacchetto l'instradamento è svolto dai router o dai switch. I router svolgono funzioni di livello 3, cioè inoltrano i pacchetti ricevuti su un canale verso un altro canale sulla base del valore contenuto nell'apposito campo dell'header del pacchetto IP, quindi smistano pacchetti in ambito geografico. I Switch, invece, svolgono funzioni del livello 2, cioè inoltrano i pacchetti ricevuti su un canale verso un altro canale esaminando il valore dell'indirizzo MAC contenuto nell'header di un frame, quindi smistano pacchetti nell'ambito di una rete locale. Nei router sono implementati i livelli 1, 2 e 3, mentre nei switch sono implementati i livelli 1 e 2.
Ci si chiede quali servizi dovrebbe offrire un livello Rete. Quando il livello trasporto dal lato del mittente invia un pacchetto nella rete, cioè lo consegna al livello Rete sottostante, il livello Trasporto può essere sicuro che la rete consegni il pacchetto al destinatario? Quando vengono inviati più pacchetti in successione, la rete li consegna al livello Trasporto sull'host di destinazione nello stesso ordine di trasmissione? Il ritardo tra la trasmissione e la ricezione di pacchetti consecutivi resta sempre uguale? La rete fornisce qualche indicazione relativa allo stato di congestione della rete? Quali sono le proprietà del canale che connette due processi del livello Trasporto residenti su sistemi remoti?
Il livello Trasporto sull'host sorgente potrebbe chiedere al livello Rete uno dei seguenti servizi:
Consegna garantita. Questo servizio deve assicurare che il pacchetto giungerà a destinazione.
Consegna garantita in un tempo finito. Questo servizio, oltre ad assicurare che il pacchetto venga consegnato a destinazione, si impegna a rispettare un tempo massimo di percorrenza del pacchetto dalla sorgente alla destinazione (ad esempio 100 ms).
Inoltre, il livello Trasporto potrebbe richiedere ulteriori servizi quando si trasmette un flusso di pacchetti da sorgente a destinazione:
Consegna in ordine dei pacchetti. Questo servizio garantisce che i pacchetti arriveranno a destinazione nello stesso ordine di partenza.
Banda minima garantita. Questo servizio di rete emula il comportamento di un canale di trasmissione, assegnato per uso esclusivo a due host, avente una certa velocità (ad esempio 1 Mbps) Fintantoché l'host mittente invia i bit dei suoi pacchetti a velocità inferiore alla velocità specificata, non si perderà nessun pacchetto, ed ogni pacchetto arriverà entro il tempo massimo prestabilito (ad esempio 40 ms).
Garanzia della deviazione massima del ritardo tra due pacchetti consecutivi. Questo servizio garantisce che l'intervallo di tempo che separa due pacchetti consecutivi resti mediamente uguale ad un certo valore, o subisca una variazione massima ammissibile da questo valore medio.
Sicurezza del servizio. Usando una chiave segreta di sessione, nota solo ai due interlocutori, il livello rete nell'host sorgente dovrebbe criptare i messaggi contenuti in tutti i datagrammi che devono essere inviati all'host di destinazione. Il livello Rete nell'host di destinazione dovrebbe avere il compito di decriptare i messaggi. Con tale servizio, il protocollo del livello Trasporto (TCP o UDP) dovrebbe fornire la segretezza a tutti i segmenti inviati, il livello Rete dovrebbe assicurare l'integrità del messaggio e l'autenticazione del mittente.
Questi sono solo alcuni dei servizi che un livello Rete potrebbe offrire.
Alcune architetture di Rete, come ATM, offrono molti servizi, ma il livello Rete di Internet fornisce un solo servizio, noto come consegna best-effort, ovvero consegna con il minimo costo. Sembra un eufemismo per intendere che il livello Rete non offre alcun servizio. Il servizio best-effort non garantisce che l'intervallo di tempo tra la ricezione di un pacchetto e il successivo resti costante, non garantisce che i pacchetti vengano consegnati in ordine, non garantisce nemmeno che i pacchetti vengano consegnati. Se una rete non consegnasse nessun pacchetto, il servizio offerto soddisferebbe comunque la definizione consegna best-effort. Comunque la definizione del servizio ha una giustificazione per minimizzare i suoi servizi.
Nell'architettura di Rete TCP/IP il livello Trasporto offre uno tra due servizi ai processi del livello Applicazione in comunicazione:
con connessione (TCP)
senza connessione (UDP).
Anche il livello Rete potrebbe offrire i servizi con connessione o senza connessione tra due host. Questi servizi implementati a livello Trasporto sono simili ai servizi implementati a livello Rete. Ad esempio un servizio con connessione a livello Rete inizia con la fase di apertura connessione, un servizio senza connessione non ha bisogno di questa fase.
Le differenze tra i servizi orientati alla connessione del livello 3 rispetto ai servizi del livello 4 sono:
Il livello Rete offre i suoi servizi al livello Trasporto allo scopo di trasferire pacchetti tra i due host terminali. Il livello Trasporto offre i suoi servizi ai processi del livello applicazione allo scopo di realizzare una comunicazione tra due processi residenti sugli host remoti.
In tutte le principali architetture di Rete (Internet, ATM, frame relay, …) il livello Rete fornisce solo uno tra i due servizi (senza connessione tra due host o con connessione tra due host), ma non entrambi. Le reti che offrono solo il servizio con connessione sono dette reti a circuito virtuale, mentre le reti che offrono solo il servizio senza connessione sono dette reti a datagramma.
Le implementazioni del servizio orientato alla connessione nel livello Trasporto e nel livello Rete differiscono per il fatto che il livello Trasporto esiste solo nei sistemi terminali, mentre il livello Rete esiste sia nei sistemi terminali che nei router.
Internet è una rete a datagramma. Esistono architetture alternative che sono reti a circuito virtuale e usano le connessioni a livello Rete. Le connessioni del livello Rete sono dette Circuito Virtuale.
Un Circuito Virtuale è composto da (1) un percorso (cioè una serie di canali e router) tra gli host sorgente e destinazione, (2) un numero di canale logico (un identificatore associato ad ogni comunicazione) e (3) una tabella di transcodifica in ogni router situato sul percorso tra sorgente e destinazione. Un pacchetto che appartiene ad un Circuito Virtuale porta il numero di canale logico nella sua intestazione. Un Circuito virtuale è una successione di canali logici. Il router che riceve un pacchetto su un suo canale assegna un nuovo numero di canale logico al pacchetto prima di smistarlo in uscita su un altro canale. Questo numero viene ottenuto dalla tabella di transcodifica.
Esempio
Si consideri la rete mostrata in figura.
In corrispondenza dei canali del router R1 sono stati indicati dei numeri che identificano l'interfaccia. L'Host A genera una richiesta di creazione di un circuito virtuale tra sè stesso e l'Host B, generando un pacchetto CALL_REQUEST che specifica l'indirizzo del destinatario e l'indirizzo del mittente. Alla fine del processo di creazione, verrà individuato il circuito virtuale A-R1-R2-B. L'host A assegna un numero di canale logico uscente ai pacchetti della comunicazione, ad esempio 12, e lo scrive nell'header del pacchetto CALL_REQUEST, poi consegna questo pacchetto al router R1. Il router R1 che riceve questo pacchetto sul suo canale 1, consulta la tabella di instradamento e individua che l'interfaccia di uscita 3 consente di raggiungere il router R2. Prima di inviare il pacchetto, il router R1 assegna un numero di canale logico uscente al pacchetto, ad esempio 22, e lo sostituisce al precedente nell'intestazione. Il router R1 inserisce una riga nella sua tabella di transcodifica contenente l'associazione tra i pacchetti entranti e i pacchetti uscenti:
Tabella di transcodifica del router R1 | |||
pacchetti entranti | pacchetti uscenti | ||
Numero interfaccia | numero canale logico | Numero interfaccia | numero canale logico |
… | … | … | … |
1 | 12 | 2 | 22 |
… | … | … | … |
Il router R2 riceve il pacchetto CALL_REQUEST sulla sua linea numero 1, leggendo la destinazione determina, dalla tabella di instradamento, il canale di uscita numero 2. Assegna un nuovo numero di canale logico, ad esempio 32, e lo sostituisce a quello contenuto nel pacchetto. Anche R2 inserisce una nuova riga nella sua tabella di transcodifica:
Tabella di transcodifica del router R2 | |||
pacchetti entranti | pacchetti uscenti | ||
Numero interfaccia | numero canale logico | Numero interfaccia | numero canale logico |
… | … | … | … |
1 | 22 | 2 | 32 |
… | … | … | … |
Il router R2 consegna il pacchetto all'host B, il quale crea un buffer per memorizzare i pacchetti che arriveranno e risponde con un pacchetto per indicare l'accettazione della chiamata.
Dopo che l'host A ha ricevuto il pacchetto di conferma della creazione del circuito virtuale, quando l'host A invia un pacchetto dati all'host B, anziché specificare l'indirizzo di B, inserisce il valore del canale logico 12 nell'apposito campo dell'intestazione del pacchetto e consegna il pacchetto al router R1. Il router R1 consulta la tabella di transcodifica (non più la tabella di instradamento) e determina che il pacchetto giunto sulla linea 1 con canale logico 12 deve essere ritrasmesso sulla linea 2 con canale logico 22 nell'intestazione. Il pacchetto, uscendo dalla linea 2, giunge al router R2. Questo router leggendo in numero di canale logico contenuto nell'intestazione, in corrispondenza del canale dal quale l'ha ricevuto, sostituisce il canale logico con 32 e ripete il pacchetto sul suo canale 2.
Quando, in seguito un router riceverà un pacchetto CALL_REQUEST relativo ad un nuovo circuito virtuale, aggiunge una riga alla sua tabella di transcodifica. Quando una connessione viene rilasciata, le righe nella tabella di instradamento vengono liberate.
Il gestore della rete può assegnare dei circuiti virtuali permanenti agli utenti che ne fanno richiesta. In questo modo si evita la fase di apertura connessione, che potrebbe anche fallire se una tabella di transcodifica diventa satura. Ma se il circuito virtuale fosse permanente per tutte le comunicazioni, ci sarebbero due problemi: primo, il numero di canali logici è determinato dalla lunghezza del campo nell'header del pacchetto, quindi risulta conveniente riutilizzare i numeri per altre comunicazioni; secondo, un host può aprire più connessioni.
In una rete a circuito virtuale i router mantengono le informazioni sullo stato della connessione, mentre nella rete Internet i router non mantengono nessuna informazione sullo stato della connessione.
Un circuito virtuale consiste di tre fasi:
Apertura connessione. Il protocollo del livello trasporto dal lato mittente specifica l'indirizzo del destinatario, chiede al livello Rete di aprire una connessione, e resta in attesa della conferma, da parte del ricevitore, dell'avvenuta creazione del circuito virtuale. Il livello Rete determina il percorso tra il mittente e il destinatario, cioè la successione di canali e router attraverso cui dovranno passare i pacchetti della comunicazione. Il livello Rete, in ogni router, determina anche il numero di canale logico uscente. Infine, il livello Rete, in ogni router, provvede ad inserire una riga nella tabella di transcodifica. Il livello Rete potrebbe assegnare anche altre risorse (ad esempio una larghezza di Banda).
Trasferimento dati. Dopo che il circuito virtuale è stato creato, i pacchetti dati viaggeranno lungo il percorso individuato dal pacchetto di chiamata.
Rilascio della connessione. Questa fase avviene quando il mittente, o il ricevitore, informa il livello Rete che non ci sono altri dati da trasferire. Il livello Rete consegna il pacchetto contenente la richiesta di chiusura connessione all'altro Host e tutti i router che vedono transitare questo pacchetto rimuovono la riga dalla tabella di transcodifica.
La fase di apertura connessione, realizzata dal livello di Trasporto nelle architetture TCP/IP, coinvolge solo i due sistemi terminali, i quali determinano i parametri per controllare il flusso della comunicazione o prevenire la congestione della rete. In una rete TCP/IP i router ignorano l'esistenza di una connessione.
I messaggi che i sistemi terminali si scambiano attraverso la rete per aprire o chiudere una connessione e quelli scambiati tra i router per realizzare il circuito virtuale sono denominati "primitive di servizio" e i protocolli sono denominati "di servizio".
La figura seguente riepiloga il funzionamento del circuito virtuale.
Seguendo la numerazione dei flussi, si individuano i seguenti tipi di pacchetti: (1) l'host che intende avviare una comunicazione genera un pacchetto CALL_REQUEST e i router che vedono passare questo pacchetto assegnano i numeri di canale logico, (2) il pacchetto giunge al destinatario come CALL_INDICATION, (3) il destinatario, se è disponibile ad avviare una comunicazione, risponde con un pacchetto CALL_ACCEPTED. (4) Il pacchetto giungerà al mittente come CALL_CONFIRM. (5) Il mittente genera il flusso dei pacchetti da inviare al destinatario, (6) i pacchetti dati verranno smistati lungo il circuito virtuale e verranno consegnati al destinatario.
In una rete a datagramma, un sistema terminale che deve inviare un pacchetto inserisce l'indirizzo del destinatario nell'intestazione e trasmette il pacchetto. Non viene creato un circuito virtuale e i router non mantengono nessuna informazione di stato. Un pacchetto che viaggia dalla sorgente al destinatario attraversa una serie di router, ognuno di essi usa l'indirizzo di destinazione del pacchetto per smistarlo sull'appropriata linea di uscita. Più precisamente, ogni router dispone di una tabella di instradamento che associa l'indirizzo di destinazione all'interfaccia che consente di raggiungere quell'host; Quando un router riceve un pacchetto legge l'intestazione ed estrae l'indirizzo del destinatario. Con questo indirizzo il router accede alla tabella di instradamento e determina l'interfaccia a cui consegnare il pacchetto.
L'operazione di consultazione della tabella di instradamento è la ricerca di un indirizzo. Si consideri ad esempio che l'indirizzo di un host è specificato con un numero di 32 bit (come in un datagramma IP). Il numero di indirizzi, ognuno lungo 4 byte, che si possono formare è 232. Se si volessero memorizzare tutti i possibili indirizzi occorrerebbero 16 GB di memoria in ogni router e la ricerca richiederebbe tempi elevati.
Si supponga di avere un router dotato di 4 interfacce, numerate da 0 a 3, e che i pacchetti vengano smistati secondo la seguente tabella di instradamento:
Intervallo di indirizzi destinazione | numero interfaccia | |
da | 11001000 00010111 00010000 00000000 | 0 |
da | 11001000 00010111 00011000 00000000 | 1 |
da | 11001000 00010111 00011001 00000000 | 2 |
Qualsiasi altro indirizzo | 3 |
Avendo assegnato ai computer collegati sulle interfacce di un router gli indirizzi come nell'esempio sopra, non è necessario che la tabella di instradamento del router abbia 4 miliardi di righe. La tabella di instradamento si può ridurre a 4 righe, una per ogni interfaccia, come segue:
Prefisso di rete | numero interfaccia |
11001000 00010111 00010 | 0 |
11001000 00010111 00011000 | 1 |
11001000 00010111 00011 | 2 |
Qualsiasi altro indirizzo | 3 |
Con questa tabella di instradamento, il router cerca il prefisso dell'indirizzo della sottorete destinazione del pacchetto; Quando trova una riga con tale corrispondenza, inoltra il pacchetto sul canale indicato nella seconda colonna. Ad esempio si supponga che l'indirizzo destinazione del pacchetto sia 11001000 00010111 00010110 10100001; poiché i primi 21 bit sono uguali al prefisso di rete indicato nella prima riga della tabella di instradamento, il router smista il pacchetto sull'interfaccia 0. Se il prefisso dell'indirizzo destinazione di un pacchetto non è presente nelle prime tre righe della tabella di instradamento il router smista il pacchetto sull'interfaccia numero 3.
C'è ancora un problema. Il prefisso di un indirizzo destinazione potrebbe essere trovato su più righe. Ad esempio i primi 24 bit dell'indirizzo 11001000 00010111 00011000 10101010 sono uguali al prefisso specificato nella seconda riga della tabella e i primi 21 bit sono uguali al prefisso specificato sulla terza riga della tabella. Quando ci sono più righe, come in questo caso, il router applica la regola del prefisso più lungo, cioè instrada il pacchetto sull'interfaccia associata al prefisso che ha il maggior numero di bit in comune con i bit più significativi dell'indirizzo contenuto nel pacchetto. In una rete a datagramma, i router non mantengono informazioni sullo stato della connessione ma mantengono le informazioni per l'instradamento. Le tabelle di instradamento hanno una validità limitata nel tempo. Vengono aggiornate periodicamente dagli algoritmi di instradamento. In una rete a circuito virtuale, la tabella di transcodifica viene modificata ogni volta che attraverso il router passa un pacchetto di apertura connessione o un pacchetto di chiusura della connessione. Poiché le tabelle di instradamento di un router possono essere modificate periodicamente, i pacchetti di una comunicazione che viaggiano da un sistema terminale ad un altro potrebbero seguire percorsi diversi e potrebbero giungere fuori ordine.