Reti di Telecomunicazione
Lezione 16
Corso di reti per le telecomunicazioni
Programma della lezione
• Algoritmo di instradamento distance vector
– algoritmo di base
– variazioni nei costi e guasti
– poisoned reverse
• Confronto tra gli algoritmi di instradamento
– complessità
– velocità di convergenza
– robustezza
• Instradamento gerarchico
– autonomous system
Algoritmo distance vector
• L’algoritmo distance vector è iterativo, asincrono e distribuito
– ogni nodo è provvisto di una tabella delle distanze
• una riga per ogni destinazione di rete
• una colonna per ciascuno dei vicini direttamente collegati al nodo
– l’algoritmo riempie la tabella di ogni nodo con le distanze minime per
raggiungere dal nodo la destinazione in riga passando per il nodo in
colonna
– ogni nodo esegue una computazione, usando le informazioni provenienti
dai vicini, e le varie esecuzioni cooperano (algoritmo distribuito)
– le esecuzioni delle computazioni da parte dei vari nodi non avvengono
tutte contemporaneamente, ma concorrentemente (algoritmo asincrono)
– il processo complessivo converge, terminando nel momento in cui tutti i
nodi hanno una corretta tabella delle distanze (algoritmo iterativo)
• l’arresto dell’algoritmo è automatico: quando nessuno è più in grado di
aggiornare la propria tabella, l’algoritmo è concluso
Algoritmo distance vector
•
L’elemento alla riga X e colonna Y
della tabella delle distanze del
nodo E, DE(X,Y), denota la
distanza da E a X, passando per Y
B
1
7
8
A
1
•
•
E
Inizialmente, ogni nodo E conosce
la distanza dai propri vicini ed
assume che gli altri nodi siano
inaccessibili
– DE(X,X) = c(E,X)
– tutti gli altri elementi sono 
Successivamente, la tabella viene
aggiornata come
DE(X,Y) = c(E,Y) +
+ min{DZ(X,w) | w vicino di X}
C
DE()
A
B
C
D
A
1
7
6
4
2
2
D
B
14
8
9
11
D
5
5
4
2
Algoritmo distance vector
•
Quando l’algoritmo raggiunge la
stabilità, il percorso minimo da E a
C si ottiene cercando il valore
minimo nella riga C della tabella
DE(C,x)
B
•
A tale valore corrisponde la
colonna D
Il datagram verrà indirizzato al
router D, il quale procederà nello
stesso modo di E
– il percorso è individuato in modo
distribuito: ogni router contiene il
miglior prossimo passo
1
7
8
A
1
– a stabilità raggiunta, ogni tabella
contiene la lunghezza del
percorso minimo da E a C
passando per x
•
C
E
DE()
A
B
C
D
A
1
7
6
4
2
2
D
B
14
8
9
11
D
5
5
4
2
Algoritmo distance vector
// Al nodo X
for ( V adiacente ad X ) {
DX(V,V) = c(X,V);
for (Y diverso da V) DX(Y,V) = ; }
for ( Y possibile destinazione )
for ( V adiacente a X )
send “D(X,Y) = min{DX(Y,w) | w vicino di X}” a V;
while( true ) {
wait( messaggio da un vicino V );
if ( messaggio == “c(X,V) = c(X,V) + d” )
// variazione costo link
DX(Y,V) = DX(Y,V) + d;
else
// messaggio == “D(V,Y) = newval”
DX(Y,V) = c(X,V) + newval;
if (il valore di min{DX(Y,w) | w vicino di X} è cambiato )
for ( V adiacente a X )
send “D(X,Y) = min{DX(Y,w) | w vicino di X}” a V;
}
Esempio
Y
2
X
1
Z
7
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2


7
X
Z
2


1
X
Y
7


1
Esempio
Y
2
X
1
Z
7
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2


7
X
Z
2


1
X
Y
7


1
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2
3
8
7
X
Z
2
9
8
1
X
Y
7
9
3
1
Esempio
Y
2
X
1
Z
7
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2


7
X
Z
2


1
X
Y
7


1
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2
3
8
7
X
Z
2
9
8
1
X
Y
7
9
3
1
DX
Y
Z
Dy
Y
Z
Dz
Y
Z
Y
Z
2
3
8
7
X
Z
2
9
8
1
X
Y
7
9
3
1
Variazione di costo dei link
• Quando avviene una variazione di costo in un link, l’algoritmo
distance vector
– aggiorna la propria tabella delle distanze
– se questa variazione è significativa, ovvero se modifica una qualche
distanza minima, invia un messaggio ai vicini
– per l’asincronia dell’algoritmo, esso inizierà a convergere verso un nuovo
insieme di percorsi minimo
• Se un link si guasta, si può usare un trucco:
– basta segnalare un cambiamento nel costo del link guasto: dal valore
precedente a infinito
Poisoned reverse
• Studiando il tempo di propagazione di una variazione di costo di
un link, si scopre che:
– le buone notizie (riduzioni dei costi) viaggiano velocemente
– le cattive notizie (aumento dei costi) viaggiano lentamente
• il problema nasce dal fatto che l’algoritmo considera anche percorsi ciclici,
ovviamente inutili; tuttavia, si può dimostrare che, solo quando i dati sono
stabili, i percorsi ciclici vengono sicuramente eliminati
• Per evitare il problema di propagazione lenta, si usa una tecnica
nota come poisoned reverse:
– se Z instrada i datagram attraverso Y per raggiungere X, allora Z
informerà Y che la distanza da Z a X è infinita
• questa tecnica previene i percorsi ciclici tra due nodi, ma non i cicli che
coinvolgono più di due nodi
Confronto
• I parametri di confronto tra gli algoritmi di instradamento visti
sono:
– efficienza (in termini di scambio di messaggi):
• l’algoritmo di Dijkstra richiede O(n·E) messaggi, con n numero di nodi ed E
numero di link, in modo che ciascun nodo della rete conosca il costo di
ciascun link
• in Distance Vector, ogni nodo invia messaggi solo ai propri vicini, quindi il
costo di comunicazione dipende dal numero di iterazioni dell’algoritmo e dalla
topologia della rete
• tuttavia, in pratica, Distance Vector, su reti ragionevoli come topologia e con
un range di costi piccolo, tende a non scambiare molti messaggi
• quindi, nessuno dei due algoritmi è definitivamente migliore dell’altro, in
questo senso
Confronto
• I parametri di confronto tra gli algoritmi di instradamento visti
sono:
– efficienza (in termini di velocità di convergenza)
• nel caso dell’algoritmo di Dijkstra, si può mostrare che, con una opportuna
codifica, esso richiede O(n2) passi di computazione, con n numero di nodi
• nel caso dell’algoritmo Distance Vector, il costo in termini di passi di calcolo è
difficile da valutare, dipendendo dal valore dei costi dei link
• tuttavia, in pratica, Distance Vector, su reti ragionevoli come topologia e con
un range di costi piccolo, tende a convergere abbastanza in fretta
• quindi, ancora una volta, nessuno dei due algoritmi è certamente superiore
all’altro
Confronto
• I parametri di confronto tra gli algoritmi di instradamento visti
sono:
– robustezza
• in caso di guasti a nodi o a link, l’algoritmo di Dijkstra, essenzialmente,
richiede di ricomputare tutti i percorsi minimi
• invece, l’algoritmo Distance Vector può gestire la situazione, a patto di
considerare il problema dei percorsi ciclici
• nel caso di informazioni errate sul costo di un link, per entrambi gli algoritmi,
queste influenzeranno solo i percorsi ottimi che contengono quel link
• nel caso dell’algoritmo di Dijkstra, questa informazione tenderà a restare
confinata nei nodi più vicini al link sbagliato, risparmiando gli altri
• nel caso di Distance Vector, invece, questa informazione verrà propagata, in
un certo qual senso, per tutta la rete
Confronto
• Complessivamente, possiamo dire che nessuno dei due algoritmi
è vincente sull’altro
– l’algoritmo di Dijkstra è più controllabile, più robusto rispetto alle
informazioni mantenute
– l’algoritmo di Distance Vector è più flessibile, spesso più efficiente e
genera spesso meno traffico
• Quindi la scelta tra i due algoritmi dipende dal tipo di
instradamento che stiamo cercando
– se vogliamo un instradamento su una rete con molta variabilità sulla
topologia, ma in cui le informazioni sono date correttamente, la scelta è
Distance Vector, che sopporta variazioni di topologia e di costi
– se vogliamo un routing efficiente su una rete abbastanza stabile, allora
l’algoritmo di Dijkstra è superiore, dal momento che effettua tutto il lavoro
una volta sola
Instradamento gerarchico
• Se una rete è formata da molte sottoreti, gli algoritmi di
instradamento visti sono inesorabilmente inefficienti
– essi computano la distanza minima tra due router della rete, per ogni
coppia di router
– quindi ogni router deve mantenere una tabella che ha un grande numero
di percorsi
• per entrambi gli algoritmi, la tabella finale contiene tante righe quanti sono i
percorsi
• Tuttavia, se la destinazione fosse una intera sottorete, allora
avrei un instradamento tra reti
– posso definire un router come interno o di frontiera
– i router di frontiera definiscono la rete, mentre i router interni fanno parte
delle sottoreti
Instradamento gerarchico
•
La divisione in router interni e di
frontiera rende scalabile il
problema dell’instradamento
– ogni sottorete risolve il problema
dell’instradamento al suo interno,
considerando i propri router di
frontiera come tutte le altre
destinazioni
– la rete delle reti risolve il problema
di instradamento solo tra i router
di frontiera, considerando questi
come la somma delle destinazioni
della sottorete
•
La divisione in sottoreti è comoda
per definire i confini amministrativi
delle organizzazioni
router interno
router di frontiera
Autonomous System
• Su Internet, una sottorete che sia visibile all’esterno come una
singola entità dal punto di vista dell’instradamento, è detta
Autonomous System (AS)
• In effetti, Internet è una rete di Autonomous System, almeno per
quanto riguarda i problemi di instradamento
• Esistono quindi protocolli di routing
– intra-autonomous system: si occupano di instradare i datagram tra nodi
dello stesso sistema, eventualmente delegando ai router di frontiera il
problema dell’instradamento se la destinazione è esterna
– inter-autonomous system: si occupano di instradare i datagram tra
sistemi, ovvero tra i loro router di frontiera
Autonomous System
•
L’instradamento di un datagram
avviene per parti:
– all’interno dell’autonomous system
di origine
– tra autonomous system intermedi
– all’interno dell’autonomous system
di destinazione
•
La rotta seguita può non essere
ottimale
– anzi, non è nemmeno garantito
che funzioni, potrebbe risultare
ciclica!
•
L’architettura risultante è
estremamente complessa, ma il
procedimento è scalabile
rotta inter-AS
rotta intra-AS
Autonomous System
• I protocolli di instradamento usati su Internet sono
– RIP (Routing Internet Protocol)
• intra-AS, basato su Distance Vector
– OSPF
• intra-AS, basato su Dijkstra
– BGP
• inter-AS, basato su Distance Vector
• Un protocollo di instradamento è un ibrido:
– agisce sul livello di rete
• le tabelle usate per l’instradamento sono strutture dati di questo livello
– computa sul livello applicazione
• i messaggi atti al suo funzionamento sono trasportati da UDP o TCP
Conclusione
• Questa lezione è tratta da:
– Kurose, cap. 4.2 e 4.3
• Esercizi:
– Provate l’algoritmo distance vector sulla rete a cinque elementi di queste
slide
– Provate a costruire un esempio che mostri come la propagazione di
cattive notizie in distance vector sia lenta
– Provate a costruire un esempio in cui la tecnica di poisoned reverse non
funzioni
– Discutete cosa si intende per destinazione in una rete con sottoreti. Come
è possibile indirizzare un insieme di nodi?
Scarica

qui