Sei sulla pagina 1di 32

Reti di Calcolatori, A.A. 2005/06 M. Cesati / E.

Betti

Reti di calcolatori

Lezione 14
Lez. 14 — 1 M. Cesati / E. Betti

Il modello di riferimento

5 Application
4 Transport
3 Network
2 Data Link
1 Fisico
Lez. 14 — 2 M. Cesati / E. Betti

Compiti del livello Network

Il livello Network non si occupa più del singolo canale di comunicazione, ma di una
intera subnet di comunicazione

Deve quindi gestire:

• l’instradamento dei pacchetti (routing)

• la congestione della subnet (congestion control)

• le diverse tecnologie di rete (internetworking)


Lez. 14 — 3 M. Cesati / E. Betti

Tipo di servizio offerto dal livello Network

Esistono due scuole di pensiero sul tipo di servizi che il livello Network dovrebbe
offrire al livello Transport:

• la comunità di Internet difende un livello Network che offra


servizi connectionless (architettura TCP/IP)

• le compagnie telefoniche vogliono un livello Network che offra


servizi connection-oriented (architettura ATM)
Lez. 14 — 4 M. Cesati / E. Betti

La scuola “connectionless”

Le ragioni della scuola di pensiero che caldeggia un servizio connectionless:

• l’architettura di rete TCP/IP esiste e funziona bene da 30 anni

• la subnet di comunicazione è per sua natura inaffidabile, quindi:


– gli host devono comunque essere abbastanza sofisticati
(a livello Transport e superiori)
– è inutile duplicare gli sforzi, quindi limitarsi ad offrire un servizio connection-
less non affidabile

Dato che non esiste connessione, ciascun pacchetto deve contenere l’indirizzo del-
l’host destinazione, e viaggia indipendentemente dagli altri
Lez. 14 — 5 M. Cesati / E. Betti

La scuola “connection-oriented”
Le ragioni della scuola di pensiero che caldeggia un servizio connection-oriented:

• il sistema telefonico è anch’esso un buon modello e funziona da 100 anni


• un host (ossia un utente finale) è interessato solo ad avere un sistema per
trasmettere le informazioni ad un altro host:
– la gestione della comunicazione deve essere affidata ai router della commu-
nication subnet (a livello Network)
– è necessario offrire un servizio connection-oriented affidabile

Ogni connessione deve essere preparata dai due host coinvolti, assegnando un
identificatore e stabilendo i parametri

La communication subnet si prende cura di gestire gli errori e le ritrasmissioni, l’or-


dinamento dei pacchetti, il controllo del flusso della connessione e della congestione
della communication subnet
Lez. 14 — 6 M. Cesati / E. Betti

Organizzazione interna del livello Network

Un’altra scelta di progetto riguarda l’organizzazione interna della


communication subnet:

• basata su circuiti virtuali (preferita quando il servizio del livello Network offerto al
livello Transport è di tipo connection-oriented)

• basata su datagram (preferita quando il servizio del livello Network offerto al


livello Transport è di tipo connectionless)

Attenzione! L’organizzazione interna non dipende necessariamente dal tipo di ser-


vizio offerto. Ad esempio, è possibile che il livello Network di una certa architettura
offra un servizio connection-oriented, ma che l’organizzazione interna della commu-
nication subnet sia basata su datagram. Od anche il viceversa (IP su ATM).
Lez. 14 — 7 M. Cesati / E. Betti

Circuiti virtuali

Per ciascuna connessione di livello Network, la communication subnet stabilisce un


circuito virtuale, ossia un cammino fisico tra sorgente e destinazione

Ogni router mantiene una propria tabella: per ciascun circuito virtuale sono memo-
rizzati i router adiacenti nelle due direzioni

Ogni pacchetto contiene un identificatore per il circuito virtuale a cui appartiene, e


viene instradato consultando la tabella

Gli identificatori di circuito virtuale sono locali ai router: i router possono sostitui-
re il valore dell’identificatore nel pacchetto ritrasmesso per evitare sovrapposizioni
(commutazione di etichetta)

Tutti i pacchetti dello stesso circuito virtuale seguono lo stesso percorso fisico
(attraversano gli stessi router della communication subnet)
Lez. 14 — 8 M. Cesati / E. Betti

Datagram

In una organizzazione basata su datagram, ogni router possiede una tabella di


routing che elenca i collegamenti utilizzabili per arrivare a qualunque altro router nella
communication subnet

In ciascun pacchetto deve essere riportato l’indirizzo dell’host destinazione, e da tale


indirizzo deve essere possibile ricavare l’indirizzo del router ad esso più vicino

Ciascun pacchetto viaggia indipendentemente dagli altri (anche quando il livello


Network offre un servizio connection-oriented)
Lez. 14 — 9 M. Cesati / E. Betti

Confronto tra le due organizzazioni


circuito virtuale datagram

indirizzi nel pacchetto

spazio sui router

ritardo di setup

ritardo di routing

controllo congestione

vulnerabilità ai guasti
Lez. 14 — 10 M. Cesati / E. Betti

Il routing

Il routing dei pacchetti è il principale compito del livello Network:

• Se il livello è organizzato con datagram, il routing è necessario in quanto ciascun


pacchetto è instradato separatamente

• Se il livello è organizzato con circuiti virtuali, il routing è necessario nella fase di


preparazione del circuito (quando viene fissato il percorso fisico). In tal caso è
chiamato session routing
Lez. 14 — 11 M. Cesati / E. Betti

L’algoritmo di routing

L’algoritmo di routing dovrebbe essere:

• corretto (non deve fuorviare i pacchetti)

• semplice (facile da realizzare)

• robusto (deve funzionare anche in caso di guasti o cambio della topologia della
subnet)

• stabile (deve convergere verso una soluzione)

• equo (non deve favorire nessuno)

• ottimo (deve scegliere la soluzione migliore)


Lez. 14 — 12 M. Cesati / E. Betti

Equità e ottimalità

Equità e ottimalità dell’algoritmo di routing sono spesso in contraddizione.


Ad esempio:
Lez. 14 — 13 M. Cesati / E. Betti

Criteri di ottimizzazione

Cercando un compromesso tra equità ed ottimalità dell’algoritmo di routing, quale


parametro ottimizzare?

• minimizzare il ritardo medio dei pacchetti


• massimizzare il throughput totale
• minimizzare il numero di hop (salti attraverso i router)

Per migliorare il throughput si deve aumentare la dimensione delle


code d’attesa nei router, e quindi aumentare anche il ritardo medio, e viceversa

Diminuire il numero di hop tende a ridurre il ritardo medio e ad accrescere


l’utilizzazione della subnet
Lez. 14 — 14 M. Cesati / E. Betti

Algoritmi di routing statici ed adattivi

Una delle più importanti funzioni del livello Network è il routing

• Negli algoritmi di routing statici la scelta dei percorsi viene effettuata una volta
per tutte, e non dipende dall’andamento del traffico reale (può però dipendere da
una stima del traffico atteso).

• Negli algoritmi di routing adattivi la scelta del percorso è basata su una strategia
che può cambiare in funzione

– della mutata topologia della communication subnet

– dell’andamento del traffico reale


Lez. 14 — 15 M. Cesati / E. Betti

Tipi di algoritmi adattivi

Gli algoritmi adattivi si distinguono per:

• da dove ricevono le informazioni sullo stato della subnet (localmente, da router


adiacenti, da tutti i router, . . . )

• quando si “adattano” cambiando percorsi e/o strategia (ogni tot secondi, quando
cambia il carico, quando cambia la topologia, . . . )

• quale metrica è utilizzata per l’ottimizzazione (numero di hop, distanza tra i


router, tempo stimato di attraversamento, . . . )
Lez. 14 — 16 M. Cesati / E. Betti

Principio di ottimalità

Principio di ottimalità Se il router B è sul percorso ottimale tra i router A e C, allora il


percorso ottimale tra B e C segue la stessa strada

Corollario L’insieme dei percorsi ottimali tra tutti i router ed una fissata destinazione
costituisce un albero (sink tree)
Lez. 14 — 17 M. Cesati / E. Betti

Algoritmi di routing

• shortest path routing (statico)

• flooding (statico)

• flow-based routing (statico)

• distance vector routing (dinamico)

• link state routing (dinamico)


Lez. 14 — 18 M. Cesati / E. Betti

Shortest path routing


Si costruisce un grafo che rappresenta la communication subnet, con un nodo per
ciascun router e un arco per ciascuna linea di comunicazione

Questo grafo è in genere su un calcolatore centrale.

Quando si ha necessità di ricalcolare le tabelle di routing, il calcolatore:

• esegue un algoritmo per determinare il cammino minimo tra ciascuna coppia di


nodi (router)

• invia le informazioni ricavate a tutti gli altri router

Vi sono diversi algoritmi per calcolare i cammini minimi, ad esempio il semplice


algoritmo di Dijkstra (1959).
Lez. 14 — 19 M. Cesati / E. Betti

Cammino minimo

Non esiste una unica misura della “bontà” di un cammino

È possibile utilizzare una qualunque metrica basata su di una combinazione di para-


metri quali:

• numero di hop (archi da attraversare)

• lunghezza fisica dei collegamenti

• tempo medio (sperimentale) di accodamento e trasmissione

• capacità del collegamento

• il traffico medio del collegamento


Lez. 14 — 20 M. Cesati / E. Betti

Flooding (1)

Quando un router riceve un pacchetto, lo instrada su tutte le linee eccetto quella dal
quale il pacchetto è arrivato

Questo algoritmo produce un numero potenzialmente infinito di pacchetti, e dunque


si utilizzano tecniche per limitarne il numero:

• inserire un contatore in ciascun pacchetto inizializzato con la massima distanza


tra due router nella subnet e decrementato ad ogni hop
• inserire la coppia (source router ID, sequence number) in ogni pacchetto; quando
un router riceve per la seconda volta un pacchetto, lo ignora
• inviare i pacchetti solo nella direzione approssimativa in cui è il router di
destinazione (selective flooding)
Lez. 14 — 21 M. Cesati / E. Betti

Flooding (2)

L’algoritmo flooding è

• estremamente inefficiente (per un singolo pacchetto da inviare, ne viaggiano


molti)
• estremamente robusto (qualsiasi sia la sequenza di guasti, se esiste un percorso
verso la destinazione il pacchetto arriverà)
• estremamente preciso (il primo pacchetto arriva sempre a destinazione seguen-
do il percorso migliore)

È utilizzato in ambito militare e come componente di algoritmi di routing più sofisticati


Lez. 14 — 22 M. Cesati / E. Betti

Flow-based routing (1)

L’algoritmo flow-based routing può essere applicato quando:

• è nota la topologia della subnet


• è nota la capacità di ciascuna linea di comunicazione
• è nota la quantità di traffico stimata tra ciascuna coppia di router (stabile nel
tempo)

Il ritardo su ciascuna linea aumenta all’aumentare del traffico e diminuisce all’au-


mentare della velocità della linea secondo una formula ben precisa di Teoria delle
Code.
Lez. 14 — 23 M. Cesati / E. Betti

Flow-based routing (2)

L’algoritmo flow-based routing:

• prende in considerazione un certo algoritmo di routing


• sulla base di esso calcola i percorsi tra ciascuna coppia di router
• calcola il traffico su ciascuna linea
• calcola il ritardo di ciascuna linea
• calcola il ritardo medio della subnet

Ripete questo procedimento per vari algoritmi di routing, ed alla fine sceglie quello
che minimizza il ritardo medio della subnet
Lez. 14 — 24 M. Cesati / E. Betti

Distance vector routing


L’algoritmo distance vector routing è anche chiamato distributed Bellman-Ford
routing, algoritmo di Ford-Fulkerson, Routing Information Protocol (RIP), . . .

Ogni router mantiene una tabella di routing con un record per ciascun altro router
nella subnet

Ciascun record contiene una stima della “distanza” dal router e la linea da utilizzare
per il percorso migliore conosciuto (la stima non è necessariamente accurata)

Ciascun router conosce la “distanza” tra se ed i suoi adiacenti (se la “distanza” è


il ritardo medio, viene misurata periodicamente ad intervalli di tempo regolari utiliz-
zando particolari pacchetti ECHO)

Ciascun router non conosce la topologia della subnet, conosce solo quali sono i
propri vicini, la distanza tra se ed i vicini, ed una stima della distanza tra ciascun
vicino e gli altri router nella subnet.
Lez. 14 — 25 M. Cesati / E. Betti

Aggiornamento delle tabelle

A intervalli regolari (tipicamente 30 secondi) ciascun router:

• manda le sue distanze a ciascun vicino

• riceve le distanze di ciascun vicino

• ricalcola la propria tabella di routing:

per ciascun router, sceglie il vicino che minimizza la somma della propria distanza
dal vicino e della distanza comunicata dal vicino verso il router
Lez. 14 — 26 M. Cesati / E. Betti

Count-to-Infinity (1)

L’algoritmo distance vector routing è molto rapido ad adattarsi alle buone notizie (una
linea di comunicazione migliora)

È invece pessimo nell’adattarsi alle cattive notizie, in quanto i router non conoscono
realmente la topologia della subnet, ma solo la distanza tra se e i propri vicini

In particolari casi, ciascun router può impiegare un numero di passi arbitrariamente


alto per adattarsi ad una cattiva notizia (fenomeno detto count-to-infinity)

Molti rimedi sono stati proposti, ma ciascuno dei rimedi non funziona in qualche
configurazione particolare oppure introduce altri problemi
Lez. 14 — 27 M. Cesati / E. Betti

Count-to-Infinity (2)
A B C D E
~
X ~ ~ ~ ~

1 2 3 4 inizialmente

3 2 3 4 dopo uno scambio

3 4 3 4 dopo due scambi

5 4 5 4 dopo tre scambi

5 6 5 6 dopo quattro scambi

7 6 7 6 dopo cinque scambi

7 8 7 8 dopo sei scambi


... ... ... ...
∞ ∞ ∞ ∞ dopo ∞ scambi
Lez. 14 — 28 M. Cesati / E. Betti

Link State Routing

Nell’architettura TCP/IP, il distance vector routing è stato sostituito da un algoritmo di


tipo link state routing nel 1979

L’idea di base consiste nell’utilizzare le misurazioni della qualità dei collegamenti con
i vicini per ricostruire la topologia dell’intera subnet

Lo scambio di informazioni sulle rispettive metriche dei router non è più limitato ai
vicini, ma è generale

In questo modo si evita il problema del count-to-infinity, al costo di un maggior


overhead
Lez. 14 — 29 M. Cesati / E. Betti

Funzionamento del link state routing

Ad intervalli di tempo regolari, ciascun router deve:

1. scoprire i propri vicini e identificarli (con pacchetti HELLO)


2. misurare il costo delle relative linee (con pacchetti ECHO)
3. costruire un pacchetto con tali informazioni (pacchetto Link State)
4. inviare il pacchetto Link State a tutti gli altri router
5. con tutti i pacchetti Link State ricevuti dagli altri router, ricostruire la topologia
della subnet
6. calcolare il cammino minimo verso ogni altro router (Dijkstra)
Lez. 14 — 30 M. Cesati / E. Betti

Distribuzione dei pacchetti Link State


La parte più critica del link state routing consiste nella fase di invio dei pacchetti Link
State contenenti le informazioni sulla metrica dei vicini di ciascun router

Poiché non sarebbe saggio basarsi sulle tabelle di routing precedenti, si adotta il
flooding, inserendo in ciascun pacchetto:

• la coppia (source router ID, sequence number)


(i numeri di sequenza sono a 32 bit)
• un campo che indica l’età del pacchetto in secondi, con due utilizzi:
– è un contatore decrementato durante il flooding, scartando i pacchetti con
età uguale a zero
– inizializza un timer associato all’informazione nella tabella di routing: quando
il timer scade, l’informazione viene rimossa

Il protocollo è in realtà molto sofisticato: si cerca di limitare il numero di pacchetti Link


State che viaggiano sulla subnet
Lez. 14 — 31 M. Cesati / E. Betti

Routing gerarchico
Quando una internetwork cresce oltre un certo numero di nodi, qualunque strategia
di routing globale diventa inefficace

Si ricorre perciò al routing gerarchico:

• la internetwork viene suddivisa in varie regioni


• all’interno di ogni regione si applica una strategia di routing globale (i normali
router sono detti interni)
• quando si deve spedire un pacchetto in un’altra regione, lo si invia ad un router
di confine specializzato per la regione di destinazione
• il router di confine possiede le informazioni necessarie a far arrivare il pacchetto
ad un altro router di confine nella regione destinazione

Generalmente due livelli di gerarchia non bastano, e se ne usano diversi