Esercizi Routing.pdf - the Netgroup at Politecnico di Torino
Esercizi Routing.pdf - the Netgroup at Politecnico di Torino
Esercizi Routing.pdf - the Netgroup at Politecnico di Torino
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Politecnico</strong> <strong>di</strong> <strong>Torino</strong><br />
Corso <strong>di</strong> Tecnologie per Reti <strong>di</strong> Calcol<strong>at</strong>ori<br />
<strong>Esercizi</strong> <strong>di</strong> riepilogo: <strong>Routing</strong><br />
Fulvio Risso<br />
October 18, 2010
Contents<br />
I. <strong>Esercizi</strong> 4<br />
1. Distance Vector 5<br />
1.1. Distance Vector con e senza Split Horizon . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
1.2. Distance Vector e Triggered Upd<strong>at</strong>es . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.3. Convergenza del Distance Vector (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
1.4. Convergenza del Distance Vector (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.5. Convergenza del Distance Vector (3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
1.6. Convergenza del Distance Vector (4) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2. Link St<strong>at</strong>e 12<br />
2.1. Convergenza del Link St<strong>at</strong>e (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.2. Convergenza del Link St<strong>at</strong>e (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.3. Determinazione del Link St<strong>at</strong>e D<strong>at</strong>abase con OSPF in area singola . . . . . . . . . . . 14<br />
2.4. OSPF con area multipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3. Domande <strong>di</strong> teoria 16<br />
3.1. Algoritmi <strong>di</strong> Forwar<strong>di</strong>ng e <strong>Routing</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
3.2. RIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
3.3. Link St<strong>at</strong>e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3.4. OSPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
II. Soluzioni 20<br />
4. Distance Vector 21<br />
4.1. Distance Vector con e senza Split Horizon . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4.1.1. Split Horizon <strong>di</strong>sabilit<strong>at</strong>o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4.1.2. Split Horizon abilit<strong>at</strong>o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4.2. Distance Vector e Triggered Upd<strong>at</strong>es . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
4.3. Convergenza del Distance Vector (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.3.1. Fault 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.3.2. Fault 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.4. Convergenza del Distance Vector (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
4.5. Convergenza del Distance Vector (3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.1. Partenza a freddo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.2. Tempo <strong>di</strong> convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.3. Guasto (route poisoning non abilit<strong>at</strong>o) . . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.5.4. Guasto (route poisoning abilit<strong>at</strong>o) . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
4.6. Convergenza del Distance Vector (4) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
4.6.1. Partenza a freddo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
2
4.6.2. Guasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4.6.3. Guasto con hold-down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
4.6.4. Tempo <strong>di</strong> convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
5. Link St<strong>at</strong>e 34<br />
5.1. Convergenza del Link St<strong>at</strong>e (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
5.1.1. Accensione <strong>di</strong> R1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
5.1.2. Guasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
5.2. Convergenza del Link St<strong>at</strong>e (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5.2.1. Accensione <strong>di</strong> R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5.2.2. Shortest P<strong>at</strong>h Spanning Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5.2.3. Guasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
5.3. Determinazione del Link St<strong>at</strong>e D<strong>at</strong>abase con OSPF in area singola . . . . . . . . . . . 39<br />
5.3.1. Albero <strong>di</strong> instradamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
5.3.2. <strong>Routing</strong> Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
5.3.3. Link St<strong>at</strong>e D<strong>at</strong>abase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
5.3.4. Design<strong>at</strong>ed e Backup Design<strong>at</strong>ed Router . . . . . . . . . . . . . . . . . . . . . . 41<br />
5.4. OSPF con area multipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
6. Domande <strong>di</strong> teoria 43<br />
6.1. Algoritmi <strong>di</strong> Forwar<strong>di</strong>ng e <strong>Routing</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
6.2. RIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
6.3. Link St<strong>at</strong>e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
6.4. OSPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
3
Part I.<br />
<strong>Esercizi</strong><br />
4
1. Distance Vector<br />
1.1. Distance Vector con e senza Split Horizon<br />
Sia d<strong>at</strong>a le rete sottostante, nella quale ogni router scambia informazioni <strong>di</strong> routing <strong>at</strong>traverso un<br />
protocollo <strong>di</strong> tipo <strong>di</strong>stance vector che segue fedelmente l’algoritmo teorico. Si scrivano i <strong>di</strong>stance<br />
vector gener<strong>at</strong>i da R2 non appena questo router rileva il guasto, <strong>di</strong>fferenziandone il comportamento a<br />
seconda che l’algoritmo <strong>di</strong> split horizon sia <strong>di</strong>sabilit<strong>at</strong>o oppure abilit<strong>at</strong>o.<br />
192.168.2.1/24<br />
R1 R2 R3<br />
192.168.1.1/30<br />
5<br />
192.168.1.6/30<br />
R4<br />
192.168.3.1/24<br />
192.168.1.9/30<br />
192.168.4.1/24
1.2. Distance Vector e Triggered Upd<strong>at</strong>es<br />
Sia d<strong>at</strong>a le rete sottostante, nella quale ogni router scambia informazioni <strong>di</strong> routing <strong>at</strong>traverso un<br />
protocollo <strong>di</strong> tipo <strong>di</strong>stance vector che segue fedelmente l’algoritmo teorico con l’aggiunta delle Triggered<br />
Upd<strong>at</strong>es.<br />
Si scrivano i <strong>di</strong>stance vector scambi<strong>at</strong>i tra R2 ed R4 a fronte del rilevamento del guasto da parte <strong>di</strong><br />
R2, supponendo che i router abbiano l’algoritmo <strong>di</strong> Split Horizon with Poisonous Reverse abilit<strong>at</strong>o.<br />
192.168.2.1/24<br />
R1 R2 R3<br />
192.168.1.1/30<br />
6<br />
192.168.1.6/30<br />
R4<br />
192.168.3.1/24<br />
192.168.1.9/30<br />
192.168.4.1/24
1.3. Convergenza del Distance Vector (1)<br />
Sia d<strong>at</strong>a le rete sottostante, nella quale ogni router scambia informazioni <strong>di</strong> routing <strong>at</strong>traverso un<br />
protocollo <strong>di</strong> tipo <strong>di</strong>stance vector che segue fedelmente l’algoritmo teorico.<br />
Supponga che nella rete si possano verificare due guasti, identific<strong>at</strong>i nel <strong>di</strong>segno come Fault1 e<br />
Fault2.<br />
Si calcoli dopo quanto tempo il router R4 vedrà sparire dalla sua routing table la rete 192.168.2.0/24<br />
nei due casi, supponendo che:<br />
• i router non facciano uso <strong>di</strong> Triggered Upd<strong>at</strong>es<br />
• i router abbiano un Route Invalid Timer <strong>di</strong> 180s e un Route Flush Timer <strong>di</strong> 240s<br />
• l’algoritmo <strong>di</strong> Route Poisoning sia <strong>di</strong>sabilit<strong>at</strong>o<br />
• l’algoritmo <strong>di</strong> Split Horizon sia abilit<strong>at</strong>o su tutti i router.<br />
R1 S1<br />
R2 R3 R4<br />
192.168.2.0/24<br />
Fault1 Fault2<br />
7
1.4. Convergenza del Distance Vector (2)<br />
Sia d<strong>at</strong>a le rete sottostante, nella quale ogni router scambia informazioni <strong>di</strong> routing <strong>at</strong>traverso un<br />
protocollo <strong>di</strong> tipo <strong>di</strong>stance vector che segue fedelmente l’algoritmo teorico, e che si verifichi ad un<br />
certo punto un guasto come in<strong>di</strong>c<strong>at</strong>o nella figura.<br />
Si calcoli dopo quanto tempo il router R4 vedrà sparire dalla sua routing table la rete 192.168.2.0/24,<br />
supponendo che:<br />
• i router facciano uso <strong>di</strong> Triggered Upd<strong>at</strong>es, che sono ritard<strong>at</strong>e <strong>di</strong> 5s<br />
• i router abbiano un Route Invalid Timer <strong>di</strong> 180s e un Route Flush Timer <strong>di</strong> 240s<br />
• l’algoritmo <strong>di</strong> Route Poisoning sia abilit<strong>at</strong>o<br />
• l’algoritmo <strong>di</strong> Split Horizon sia abilit<strong>at</strong>o su tutti i router.<br />
R1 R2 R3 R4<br />
192.168.2.0/24<br />
8
1.5. Convergenza del Distance Vector (3)<br />
D<strong>at</strong>a la rete rappresent<strong>at</strong>a in figura, ipotizzando che su ogni router sia configur<strong>at</strong>o un protocollo <strong>di</strong><br />
routing bas<strong>at</strong>o su <strong>di</strong>stance vector che non implementi alcun accorgimento per incrementare la stabilità<br />
e la velocità <strong>di</strong> convergenza:<br />
1. Simulare la partenza a freddo <strong>di</strong> tale protocollo, elencando i <strong>di</strong>stance vector scambi<strong>at</strong>i fino al<br />
raggiungimento <strong>di</strong> una situazione stabile.<br />
2. Ipotizzando che i messaggi <strong>di</strong> upd<strong>at</strong>e siano scambi<strong>at</strong>i in modo sincrono, con una cadenza <strong>di</strong> 30s<br />
(upd<strong>at</strong>e timer), qual è il tempo <strong>di</strong> convergenza della rete?<br />
3. D<strong>at</strong>a la rete a regime, simulare un guasto sul link C tra R1 ed R3, sia nel caso in cui non sia<br />
presente un meccanismo <strong>di</strong> route poisoning, sia nel caso in cui questo sia presente. Che <strong>di</strong>fferenze<br />
<strong>di</strong> comportamento si rilevano tra i due casi?<br />
9
R1<br />
Link A<br />
Net E<br />
R2<br />
Link C<br />
Link B<br />
Net D Net F<br />
1.6. Convergenza del Distance Vector (4)<br />
H G<br />
C<br />
R4 R3<br />
D B<br />
A<br />
R1 R2<br />
E<br />
D<strong>at</strong>a la rete rappresent<strong>at</strong>a in figura, ipotizzando che su ogni router sia configur<strong>at</strong>o il protocollo RIP<br />
con split horizon:<br />
1. Simulare la partenza a freddo, elencando i <strong>di</strong>stance vector scambi<strong>at</strong>i fino al raggiungimento <strong>di</strong><br />
una situazione stabile.<br />
10<br />
R3<br />
F
2. D<strong>at</strong>a la rete a regime, simulare un guasto sull’interfaccia <strong>di</strong> R2 <strong>at</strong>test<strong>at</strong>a sulla rete F.<br />
3. Ripetere il punto 2, ipotizzando che sia implement<strong>at</strong>o un meccanismo <strong>di</strong> route hold-down (holddown<br />
timer = 180s).<br />
4. D<strong>at</strong>a la rete <strong>di</strong> Figura 2 a regime simulare l’inserimento <strong>di</strong> un router RIP (R5) sulla rete E (il<br />
router R5 ha due interfacce: una si affaccia sulla rete E e l’altra si affaccia sulla rete I).<br />
5. Ipotizzando che i messaggi <strong>di</strong> upd<strong>at</strong>e siano scambi<strong>at</strong>i in modo sincrono, con una cadenza <strong>di</strong> 30s<br />
(upd<strong>at</strong>e timer), qual è il tempo <strong>di</strong> convergenza della rete nel caso proposto nel punto 4?<br />
11
2. Link St<strong>at</strong>e<br />
2.1. Convergenza del Link St<strong>at</strong>e (1)<br />
D<strong>at</strong>a la rete rappresent<strong>at</strong>a in figura, ipotizzando che su ogni router sia configur<strong>at</strong>o un protocollo<br />
link-st<strong>at</strong>e (si supponga inoltre che il costo <strong>di</strong> tutti i link sia unitario):<br />
1. Simulare le operazioni effettu<strong>at</strong>e dal protocollo quando R1 viene acceso, descrivendo i messaggi<br />
scambi<strong>at</strong>i sulla rete (supporre che R2 e R3 siano già oper<strong>at</strong>ivi che la rete sia in una situazione<br />
stabile e che il meccanismo us<strong>at</strong>o dall’algoritmo sia lo stesso <strong>di</strong> OSPF).<br />
2. Supponendo la rete in una situazione stabile, simulare un guasto sul link C tra R1 e R3 (si ipotizzi<br />
che il meccanismo us<strong>at</strong>o dall’algoritmo sia lo stesso <strong>di</strong> OSPF).<br />
R1<br />
Link A<br />
Net E<br />
R2<br />
Link C<br />
Link B<br />
Net D Net F<br />
12<br />
R3
2.2. Convergenza del Link St<strong>at</strong>e (2)<br />
D<strong>at</strong>a la rete rappresent<strong>at</strong>a in figura, ipotizzando che su ogni router sia configur<strong>at</strong>o un protocollo<br />
link-st<strong>at</strong>e (i costi dei link sono in<strong>di</strong>c<strong>at</strong>i nell’immagine):<br />
1. Simulare le operazioni effettu<strong>at</strong>e dal protocollo quando R3 viene acceso, descrivendo i messaggi<br />
scambi<strong>at</strong>i sulla rete (supporre che R1, R2 e R4 siano già oper<strong>at</strong>ivi, che la rete sia in una situazione<br />
stabile e che il meccanismo us<strong>at</strong>o dall’algoritmo sia lo stesso <strong>di</strong> OSPF).<br />
2. Calcolare lo shortest p<strong>at</strong>h spanning tree per ogni router.<br />
3. Supponendo la rete in una situazione stabile, simulare un guasto sul link C tra R1 e R3 (si ipotizzi<br />
che il meccanismo us<strong>at</strong>o dall’algoritmo sia lo stesso <strong>di</strong> OSPF).<br />
4. Il guasto sul link sc<strong>at</strong>ena qualche cambiamento nelle routing table?<br />
1<br />
H 1 G<br />
C<br />
R4 R3<br />
3<br />
D B<br />
A<br />
R1<br />
4<br />
R2<br />
1<br />
2<br />
E<br />
13<br />
1<br />
F<br />
2
2.3. Determinazione del Link St<strong>at</strong>e D<strong>at</strong>abase con OSPF in area singola<br />
D<strong>at</strong>a la rete sottostante composta da un insieme <strong>di</strong> router e <strong>di</strong> links i cui costi <strong>di</strong> <strong>at</strong>traversamento<br />
sono in<strong>di</strong>c<strong>at</strong>i in blu, determinare:<br />
• l’albero <strong>di</strong> instradamento dei vari router<br />
• la routing table dei vari router<br />
• il link st<strong>at</strong>e d<strong>at</strong>abase presente sui router.<br />
In<strong>di</strong>care infine se dalla lettura del d<strong>at</strong>abase sia possibile stabilire gli in<strong>di</strong>rizzi del Design<strong>at</strong>ed Router<br />
e del Backup Design<strong>at</strong>ed Router per quanto riguarda la rete NetL.<br />
NetA NetB<br />
1 1<br />
3<br />
NetL<br />
R1<br />
NetF<br />
4<br />
R2<br />
R5<br />
2<br />
NetM<br />
NetI<br />
3<br />
1 1<br />
NetE NetD<br />
R4<br />
NetG<br />
NetH<br />
Si supponga che l’intera rete appartenga ad un solo dominio <strong>di</strong> tipo Link St<strong>at</strong>e (es. OSPF in area<br />
0).<br />
14<br />
2<br />
2<br />
R3<br />
1<br />
NetC
2.4. OSPF con area multipla<br />
Si consideri la rete in figura dove sono in<strong>di</strong>c<strong>at</strong>i router, reti e costi associ<strong>at</strong>i alle interfacce dei router.<br />
Nell’ipotesi <strong>di</strong> usare il protocollo <strong>di</strong> routing OSPF e <strong>di</strong> sud<strong>di</strong>videre la rete in 3 aree come in<strong>di</strong>c<strong>at</strong>o,<br />
<strong>di</strong>segnare la rete vista dal Router R1.<br />
R1 R2<br />
N2 (1) N3 (1)<br />
N4 (1)<br />
R5 R6<br />
R7<br />
N6 (2)<br />
N1 (1)<br />
N7 (2)<br />
N5 (2)<br />
R3<br />
R4<br />
15<br />
N8 (2)<br />
Network (cost)<br />
N9 (1) N10 (2)<br />
R8 R9 R10<br />
N11 (1)
3. Domande <strong>di</strong> teoria<br />
3.1. Algoritmi <strong>di</strong> Forwar<strong>di</strong>ng e <strong>Routing</strong><br />
1. Quali sono le principali <strong>di</strong>fferenze tra le tecniche denomin<strong>at</strong>e “forwar<strong>di</strong>ng by network address”<br />
e “label swapping”?<br />
2. A cosa serve un algoritmo <strong>di</strong> routing?<br />
3. A cosa serve un algoritmo <strong>di</strong> forwar<strong>di</strong>ng?<br />
4. In cosa consiste un routing loop? In quali circostanze può verificarsi?<br />
5. Che cos’è un black-hole? In quali circostanze può verificarsi?<br />
6. Il routing <strong>di</strong>namico è sempre preferibile al routing st<strong>at</strong>ico? Argomentare.<br />
7. In cosa consiste il “selective floo<strong>di</strong>ng”? Quali accorgimenti richiede rispetto al “floo<strong>di</strong>ng” puro?<br />
8. Comparare il routing centralizz<strong>at</strong>o col routing isol<strong>at</strong>o, evidenziando vantaggi e svantaggi delle<br />
due tecniche.<br />
9. Quali informazioni vengono scambi<strong>at</strong>e tra i no<strong>di</strong> <strong>di</strong> rete che utilizzano un algoritmo <strong>di</strong> routing<br />
<strong>di</strong> tipo <strong>di</strong>stance vector?<br />
10. Cos’è un “triggered upd<strong>at</strong>e”?<br />
11. Quali miglioramenti apporta la tecnica dello split-horizon ad un algoritmo <strong>di</strong> tipo <strong>di</strong>stance vector?<br />
Che tipo <strong>di</strong> problemi non è in grado <strong>di</strong> risolvere?<br />
12. A cosa serve l’hold-down timer?<br />
16
3.2. RIP<br />
1. Che cos’è il RIP?<br />
2. Quale tipo <strong>di</strong> metrica utilizza? Qual è la metrica che in<strong>di</strong>ca una rete irraggiungibile?<br />
3. Descrivere il funzionamento dei timer del protocollo RIP<br />
4. Dopo quanti upd<strong>at</strong>e manc<strong>at</strong>i una route viene etichett<strong>at</strong>a come irraggiungibile?<br />
5. A cosa servono i messaggi <strong>di</strong> tipo “request” nel RIP?<br />
6. Qual è la maggiore <strong>di</strong>fferenza tra le due versioni del protocollo RIP?<br />
7. Che cos’è e a cosa serve il route poisoning?<br />
17
3.3. Link St<strong>at</strong>e<br />
1. Quali sono le informazioni trasport<strong>at</strong>e nei pacchetti link st<strong>at</strong>e?<br />
2. A che cosa servono i pacchetti <strong>di</strong> Hello?<br />
3. Descrivere il meccanismo us<strong>at</strong>o dai routers per sincronizzare i rispettivi link st<strong>at</strong>e d<strong>at</strong>abase<br />
4. Come vengono calcol<strong>at</strong>e le tabelle <strong>di</strong> routing in un algoritmo link st<strong>at</strong>e?<br />
5. In quale modo gli algoritmi link st<strong>at</strong>e garantiscono la coerenza della rete?<br />
6. Perchè le reti che utilizzano un protocollo link st<strong>at</strong>e convergono più velocemente rispetto a quelle<br />
che fanno uso <strong>di</strong> protocolli <strong>di</strong>stance vector?<br />
7. Perchè i numeri <strong>di</strong> sequenza sono importanti nei protocolli link st<strong>at</strong>e?<br />
8. Illustrare come le reti broadcast (es. LAN E<strong>the</strong>rnet) vengono viste e gestite negli algoritmi <strong>di</strong><br />
routing link st<strong>at</strong>e<br />
18
3.4. OSPF<br />
1. Che cos’è OSPF?<br />
2. Che cos’è un’area stub?<br />
3. Per quale motivo in OSPF viene utilizz<strong>at</strong>o il concetto <strong>di</strong> “area”?<br />
4. Che cos’è un area border router?<br />
5. Che cos’è un network link st<strong>at</strong>e?<br />
6. Che cos’è un router link st<strong>at</strong>e?<br />
7. Perchè la sommarizzazione è importante in OSPF?<br />
19
Part II.<br />
Soluzioni<br />
20
4. Distance Vector<br />
4.1. Distance Vector con e senza Split Horizon<br />
4.1.1. Split Horizon <strong>di</strong>sabilit<strong>at</strong>o<br />
Quando il router R2 rileva il guasto in<strong>di</strong>c<strong>at</strong>o in figura, l’algoritmo del <strong>di</strong>stance vector prevede che<br />
vengano eseguiti i seguenti passi:<br />
1. Cancellazione dei <strong>di</strong>stance vector provenienti dal link non più funzionante (che sono memorizz<strong>at</strong>i<br />
all’interno del router); in questo caso viene elimin<strong>at</strong>o il vettore gener<strong>at</strong>o da R1;<br />
2. Fusione dei <strong>di</strong>stance vector rimanenti;<br />
3. Calcolo della nuova tabella <strong>di</strong> routing, e se questa cambia rispetto alla versione precedente, viene<br />
inoltr<strong>at</strong>o un nuovo <strong>di</strong>stance vector; in questo caso la tabella varia, poichè, subito dopo il guasto,<br />
R2 tenterà <strong>di</strong> utilizzare R4 oppure R3 per raggiungere, ad esempio, la rete 192.168.2.0/24.<br />
Questo comportamento è n<strong>at</strong>uralmente err<strong>at</strong>o, ma i router R3 e R4 non sono in grado <strong>di</strong> riconoscere<br />
il guasto verific<strong>at</strong>osi, pertanto nelle loro routing table compare ancora quella rete,<br />
avente come next hop R2 (che viene creduto ancora valido), e quin<strong>di</strong> la rete viene annunci<strong>at</strong>a<br />
nei loro <strong>di</strong>stance vector.<br />
Pertanto, uno dei possibili <strong>di</strong>stance vector gener<strong>at</strong>i da R2 subito dopo aver rilev<strong>at</strong>o il guasto è:<br />
4.1.2. Split Horizon abilit<strong>at</strong>o<br />
DV(R2)<br />
Rete annunci<strong>at</strong>a Costo<br />
192.168.1.0/30 3<br />
192.168.1.4/30 1<br />
192.168.1.8/30 1<br />
192.168.2.0/24 4<br />
192.168.3.0/24 2<br />
192.168.4.0/24 2<br />
Nel caso in cui l’algoritmo <strong>di</strong> split horizon sia abilit<strong>at</strong>o, la situazione è totalmente <strong>di</strong>fferente. In<br />
questo caso inf<strong>at</strong>ti, i router R3 e R4, nei <strong>di</strong>stance vector gener<strong>at</strong>i verso R2, non annunciano più la<br />
rete 192.168.2.0/24, perchè i due router utilizzano proprio R2 come next hop per quella route. Di<br />
conseguenza, i <strong>di</strong>stance vector invi<strong>at</strong>i da R2 verso i link ai quali si trovano connessi R3 e R4 sono,<br />
rispettivamente:<br />
DV(R2) verso R3<br />
Rete annunci<strong>at</strong>a Costo<br />
192.168.1.4/30 1<br />
192.168.3.0/24 2<br />
21<br />
DV(R2) verso R4<br />
Rete annunci<strong>at</strong>a Costo<br />
192.168.1.8/30 1<br />
192.168.4.0/24 2
4.2. Distance Vector e Triggered Upd<strong>at</strong>es<br />
Nel momento in cui R2 rileva il guasto, il meccanismo delle triggered upd<strong>at</strong>es prevede che si <strong>at</strong>tenda<br />
un tempo casuale (per evitare intasamenti nella rete e accumulare altre possibili rilevazioni <strong>di</strong> guasto).<br />
Dopo questa <strong>at</strong>tesa, il router invia sui suoi link (e quin<strong>di</strong> anche verso R4) un pacchetto <strong>di</strong> triggered<br />
upd<strong>at</strong>e, contenente le informazioni sulle sole route che sono cambi<strong>at</strong>e in seguito alla variazione <strong>di</strong><br />
connettività; in questo caso quin<strong>di</strong>, in questo pacchetto verranno annunci<strong>at</strong>e le reti 192.168.2.0/24<br />
e 192.168.1.0/30 a costo infinito. Di conseguenza, R4, dopo aver ricevuto il triggered upd<strong>at</strong>e da<br />
R2, rileverà a sua volta una variazione delle route nella routing table (poichè una rete è <strong>di</strong>vent<strong>at</strong>a<br />
irraggiungibile), e quin<strong>di</strong> genererà anche lui un triggered upd<strong>at</strong>e, contenente le stesse informazioni <strong>di</strong><br />
quello precedente.<br />
Inoltre, utilizzando l’algoritmo <strong>di</strong> split horizon con l’opzione Poisonous Reverse abilit<strong>at</strong>a, due possibili<br />
<strong>di</strong>stance vector scambi<strong>at</strong>i tra R2 e R4 dopo il guasto sono:<br />
DV(R2) verso R4<br />
Rete annunci<strong>at</strong>a Costo<br />
192.168.1.4/30 infinito<br />
192.168.1.8/30 1<br />
192.168.3.0/24 infinito<br />
192.168.4.0/24 2<br />
22<br />
DV(R4) verso R2<br />
Rete annunci<strong>at</strong>a Costo<br />
192.168.1.4/30 infinito<br />
192.168.1.8/30 infinito<br />
192.168.3.0/24 1<br />
192.168.4.0/24 infinito
4.3. Convergenza del Distance Vector (1)<br />
4.3.1. Fault 1<br />
• Istante 0 (secon<strong>di</strong>): Si verifica il guasto; R2 non lo rileva (poichè non gli arriva il segnale <strong>di</strong> link<br />
down, essendo il guasto “oltre” lo switch) e continua a annunciare la rete;<br />
• Istante 180: R2, essendo scaduto il route invalid timer, rileva il guasto, e inizia a inviare i <strong>di</strong>stance<br />
vector senza la rete; R3 non rileva comunque il guasto e continua a annunciare la rete;<br />
• Istante 360: R3, essendo scaduto il route invalid timer, rileva il guasto, e inizia a inviare i <strong>di</strong>stance<br />
vector senza la rete; R4 non rileva comunque il guasto e continua a annunciare la rete;<br />
• Istante 540: R4, essendo scaduto il route invalid timer, rileva il guasto, e inizia a inviare i <strong>di</strong>stance<br />
vector senza la rete; La rete è comunque ancora presente nella sua routing table;<br />
• Istante 780: R4, essendo scaduto il route flush timer, rimuove la rete dalla sua routing table;<br />
Tutte queste tempistiche possono essere soggette ad un “offset” che va da 0 a 30 secon<strong>di</strong>, in base<br />
all’istante in cui si verifica il guasto rispetto all’ultimo <strong>di</strong>stance vector invi<strong>at</strong>o da R1 e ricevuto da R2.<br />
4.3.2. Fault 2<br />
• Istante 0 (secon<strong>di</strong>): Si verifica il guasto; R2 lo rileva (essendo il guasto “prima” del collegamento<br />
con lo switch) e non annuncia più la rete 192.168.2.0/24;<br />
• Istante 180: R3, essendo scaduto il route invalid timer, rileva il guasto, e inizia a inviare i <strong>di</strong>stance<br />
vector senza la rete; R4 non rileva comunque il guasto e continua a annunciare la rete;<br />
• Istante 360: R4, essendo scaduto il route invalid timer, rileva il guasto, e inizia a inviare i <strong>di</strong>stance<br />
vector senza la rete; La rete è comunque ancora presente nella sua routing table;<br />
• Istante 600: R4, essendo scaduto il route flush timer, rimuove la rete dalla sua routing table;<br />
Tutte queste tempistiche possono essere soggette ad un “offset” che va da 0 a 30 secon<strong>di</strong>, in base<br />
all’istante in cui si verifica il guasto rispetto all’ultimo <strong>di</strong>stance vector invi<strong>at</strong>o da R2 e ricevuto da R3.<br />
23
4.4. Convergenza del Distance Vector (2)<br />
• Istante 0 (secon<strong>di</strong>): Si verifica il guasto; R2 lo rileva e riconosce come irraggiungibile la rete<br />
192.168.2.0/24;<br />
• Istante 5: R2 invia un triggered upd<strong>at</strong>e su tutte le interfacce, annunciando la rete a costo infinito<br />
(essendo il route poisoning abilit<strong>at</strong>o); R3 rileva quin<strong>di</strong> il guasto e riconosce come irraggiungibile<br />
la rete;<br />
• Istante 10: R3 invia un triggered upd<strong>at</strong>e su tutte le interfacce, annunciando la rete a costo infinito<br />
(essendo il route poisoning abilit<strong>at</strong>o); R4 rileva quin<strong>di</strong> il guasto e riconosce come irraggiungibile<br />
la rete;<br />
• Istante 250: R4, essendo scaduto il route flush timer, rimuove la rete dalla sua routing table;<br />
24
4.5. Convergenza del Distance Vector (3)<br />
4.5.1. Partenza a freddo<br />
Siccome in questo specifico caso non viene implement<strong>at</strong>a nessuna particolare opzione (come lo split<br />
horizon), ogni router invierà lo stesso <strong>di</strong>stance vector su tutte le sue interfacce. Per simulare la<br />
partenza a freddo, si suppone <strong>di</strong> inizializzare la rete alimentando tutti i no<strong>di</strong> contemporaneamente. In<br />
questo st<strong>at</strong>o, ciascuno dei no<strong>di</strong> è car<strong>at</strong>terizz<strong>at</strong>o unicamente da una conoscenza locale, e dopo un certo<br />
numero <strong>di</strong> passi (corrispondenti a scambi <strong>di</strong> <strong>di</strong>stance vector), la rete raggiunge una situazione stabile:<br />
DV(R1)<br />
Rete Costo<br />
A 1<br />
C 1<br />
D 1<br />
DV(R1)<br />
Rete Costo<br />
A 1<br />
B 2<br />
C 1<br />
D 1<br />
E 2<br />
F 2<br />
4.5.2. Tempo <strong>di</strong> convergenza<br />
Passo 1<br />
DV(R2)<br />
Rete Costo<br />
A 1<br />
B 1<br />
E 1<br />
Passo 2<br />
DV(R2)<br />
Rete Costo<br />
A 1<br />
B 1<br />
C 2<br />
D 2<br />
E 1<br />
F 2<br />
DV(R3)<br />
Rete Costo<br />
B 1<br />
C 1<br />
F 1<br />
DV(R3)<br />
Rete Costo<br />
A 2<br />
B 1<br />
C 1<br />
D 2<br />
E 2<br />
F 1<br />
Se si suppone che i messaggi scambi<strong>at</strong>i siano sincroni, si può osservare, dal passo precedente, che dopo<br />
il primo scambio <strong>di</strong> <strong>di</strong>stance vector tutti i router conoscono tutte le reti (quin<strong>di</strong> i vettori annunci<strong>at</strong>i<br />
non cambiano più). Il tempo necessario affinchè si verifichi questa situazione è pari al route upd<strong>at</strong>e<br />
timer; in questo caso quin<strong>di</strong>, 30 secon<strong>di</strong>.<br />
4.5.3. Guasto (route poisoning non abilit<strong>at</strong>o)<br />
Nel caso in cui il route poisoning non sia abilit<strong>at</strong>o, una possibile simulazione della rete dopo il guasto<br />
è:<br />
1. R1 e R3 rilevano imme<strong>di</strong><strong>at</strong>amente il guasto; entrambi da questo momento in poi utilizzano come<br />
next hop R2 per le route che prima erano raggiungibili <strong>at</strong>traverso il link ora guasto (C, D e F); i<br />
<strong>di</strong>stance vector invi<strong>at</strong>i da R1 e R3 sono pertanto:<br />
25
DV(R1)<br />
Rete Costo<br />
A 1<br />
B 2<br />
C 3<br />
D 1<br />
E 2<br />
F 3<br />
DV(R3)<br />
Rete Costo<br />
A 2<br />
B 1<br />
C 3<br />
D 3<br />
E 2<br />
F 1<br />
2. R2, ricevendo i nuovi <strong>di</strong>stance vector da R1 e R3 rileva che il costo per la rete C è aument<strong>at</strong>o, e<br />
<strong>di</strong> conseguenza il suo <strong>di</strong>stance vector cambia in:<br />
DV(R2)<br />
Rete Costo<br />
A 1<br />
B 1<br />
C 4<br />
D 2<br />
E 1<br />
F 2<br />
Si verifica chiaramente un fenomeno <strong>di</strong> count to infinity, in cui ad ogni scambio <strong>di</strong> <strong>di</strong>stance vector<br />
aumenta <strong>di</strong> un’unità il costo verso la destinazione C.<br />
4.5.4. Guasto (route poisoning abilit<strong>at</strong>o)<br />
Nel caso in cui il route poisoning sia abilit<strong>at</strong>o, una possibile simulazione della rete dopo il guasto è:<br />
1. R1 e R3 rilevano imme<strong>di</strong><strong>at</strong>amente il guasto; quando inviano i rispettivi <strong>di</strong>stance vector, annunciano<br />
la rete C a costo infinito, poichè è <strong>di</strong>venuta irraggiungibile; inoltre, entrambi da questo<br />
momento in poi utilizzano come next hop R2 per le route che prima erano raggiungibili <strong>at</strong>traverso<br />
il link ora guasto (D e F); i <strong>di</strong>stance vector invi<strong>at</strong>i da R1 e R3 sono pertanto:<br />
DV(R1)<br />
Rete Costo<br />
A 1<br />
B 2<br />
C infinito<br />
D 1<br />
E 2<br />
F 3<br />
DV(R3)<br />
Rete Costo<br />
A 2<br />
B 1<br />
C infinito<br />
D 3<br />
E 2<br />
F 1<br />
2. R2, ricevendo i nuovi <strong>di</strong>stance vector da R1 e R3 rileva che la rete C è <strong>di</strong>vent<strong>at</strong>a irraggiungibile<br />
da entrambe le <strong>di</strong>rezioni, e <strong>di</strong> conseguenza il suo <strong>di</strong>stance vector cambia in:<br />
26
DV(R2)<br />
Rete Costo<br />
A 1<br />
B 1<br />
C infinito<br />
D 2<br />
E 1<br />
F 2<br />
In questo caso, siccome il route poisoning è abilit<strong>at</strong>o, e quin<strong>di</strong> le route irraggiungibili vengono annunci<strong>at</strong>e<br />
a costo infinito, non si ha nessun fenomeno <strong>di</strong> instabilità sulla rete.<br />
27
4.6. Convergenza del Distance Vector (4)<br />
4.6.1. Partenza a freddo<br />
Siccome in questo specifico caso è <strong>at</strong>tivo il meccanismo dello split horizon, ogni router invierà un<br />
<strong>di</strong>stance vector <strong>di</strong>verso a seconda dell’interfaccia sulla quale questo viene inoltr<strong>at</strong>o. Per simulare la<br />
partenza a freddo, si suppone <strong>di</strong> inizializzare la rete alimentando tutti i no<strong>di</strong> contemporaneamente. In<br />
questo st<strong>at</strong>o, ciascuno dei no<strong>di</strong> è car<strong>at</strong>terizz<strong>at</strong>o unicamente da una conoscenza locale, e dopo un certo<br />
numero <strong>di</strong> passi (corrispondenti a scambi <strong>di</strong> <strong>di</strong>stance vector), la rete raggiunge una situazione stabile:<br />
DV(R1) su A<br />
Rete Costo<br />
D 1<br />
E 1<br />
DV(R2) su A<br />
Rete Costo<br />
B 1<br />
F 1<br />
DV(R3) su B<br />
Rete Costo<br />
C 1<br />
G 1<br />
DV(R4) su C<br />
Rete Costo<br />
D 1<br />
H 1<br />
Passo 1<br />
DV(R1) su D<br />
Rete Costo<br />
A 1<br />
E 1<br />
DV(R2) su B<br />
Rete Costo<br />
A 1<br />
F 1<br />
DV(R3) su C<br />
Rete Costo<br />
B 1<br />
G 1<br />
DV(R4) su D<br />
Rete Costo<br />
C 1<br />
H 1<br />
28<br />
DV(R1) su E<br />
Rete Costo<br />
A 1<br />
D 1<br />
DV(R2) su F<br />
Rete Costo<br />
A 1<br />
B 1<br />
DV(R3) su G<br />
Rete Costo<br />
B 1<br />
C 1<br />
DV(R4) su H<br />
Rete Costo<br />
C 1<br />
D 1
DV(R1) su A<br />
Rete Costo<br />
C 2<br />
D 1<br />
E 1<br />
H 2<br />
DV(R2) su A<br />
Rete Costo<br />
B 1<br />
C 2<br />
F 1<br />
G 2<br />
DV(R3) su B<br />
Rete Costo<br />
C 1<br />
D 2<br />
G 1<br />
H 2<br />
DV(R4) su C<br />
Rete Costo<br />
A 2<br />
D 1<br />
E 2<br />
H 1<br />
Passo 2<br />
DV(R1) su D<br />
Rete Costo<br />
A 1<br />
B 2<br />
E 1<br />
F 2<br />
DV(R2) su B<br />
Rete Costo<br />
A 1<br />
D 2<br />
E 2<br />
F 1<br />
DV(R3) su C<br />
Rete Costo<br />
A 2<br />
B 1<br />
F 2<br />
G 1<br />
DV(R4) su D<br />
Rete Costo<br />
B 2<br />
C 1<br />
G 2<br />
H 1<br />
29<br />
DV(R1) su E<br />
Rete Costo<br />
A 1<br />
B 2<br />
C 2<br />
D 1<br />
F 2<br />
H 2<br />
DV(R2) su F<br />
Rete Costo<br />
A 1<br />
B 1<br />
C 2<br />
D 2<br />
E 2<br />
G 2<br />
DV(R3) su G<br />
Rete Costo<br />
A 2<br />
B 1<br />
C 1<br />
D 2<br />
F 2<br />
H 2<br />
DV(R4) su H<br />
Rete Costo<br />
A 2<br />
B 2<br />
C 1<br />
D 1<br />
E 2<br />
G 2
DV(R1) su A<br />
Rete Costo<br />
C 2<br />
D 1<br />
E 1<br />
H 2<br />
G 3<br />
DV(R2) su A<br />
Rete Costo<br />
B 1<br />
C 2<br />
F 1<br />
G 2<br />
DV(R3) su B<br />
Rete Costo<br />
C 1<br />
D 2<br />
G 1<br />
H 2<br />
DV(R4) su C<br />
Rete Costo<br />
A 2<br />
D 1<br />
E 2<br />
H 1<br />
4.6.2. Guasto<br />
Passo 3<br />
DV(R1) su D<br />
Rete Costo<br />
A 1<br />
B 2<br />
E 1<br />
F 2<br />
DV(R2) su B<br />
Rete Costo<br />
A 1<br />
D 2<br />
E 2<br />
F 1<br />
H 3<br />
DV(R3) su C<br />
Rete Costo<br />
A 2<br />
B 1<br />
E 3<br />
F 2<br />
G 1<br />
DV(R4) su D<br />
Rete Costo<br />
B 2<br />
C 1<br />
F 3<br />
G 2<br />
H 1<br />
Dall’istante in cui si verifica il guasto, uno dei possibili scenari sulla rete è:<br />
30<br />
DV(R1) su E<br />
Rete Costo<br />
A 1<br />
B 2<br />
C 2<br />
D 1<br />
F 2<br />
G 3<br />
H 2<br />
DV(R2) su F<br />
Rete Costo<br />
A 1<br />
B 1<br />
C 2<br />
D 2<br />
E 2<br />
G 2<br />
H 3<br />
DV(R3) su G<br />
Rete Costo<br />
A 2<br />
B 1<br />
C 1<br />
D 2<br />
E 3<br />
F 2<br />
H 2<br />
DV(R4) su H<br />
Rete Costo<br />
A 2<br />
B 2<br />
C 1<br />
D 1<br />
E 2<br />
F 3<br />
G 2
1. R2 rileva imme<strong>di</strong><strong>at</strong>amente il guasto (ma supponendo i triggered upd<strong>at</strong>es <strong>di</strong>sabilit<strong>at</strong>i, non invia<br />
comunque nessuna informazione in rete);<br />
2. Allo scadere dell’upd<strong>at</strong>e timer, R2 invia i suoi <strong>di</strong>stance vector, simili a quelli del passo precedente,<br />
tranne per il f<strong>at</strong>to che la rete F non viene più annunci<strong>at</strong>a, poichè è <strong>di</strong>vent<strong>at</strong>a irraggiungibile (e<br />
si suppone <strong>di</strong>sabilit<strong>at</strong>o il route poisoning):<br />
DV(R2) su A<br />
Rete Costo<br />
B 1<br />
C 2<br />
G 2<br />
DV(R2) su B<br />
Rete Costo<br />
A 1<br />
D 2<br />
E 2<br />
H 3<br />
3. R3 non riceve più nessun annuncio della rete F (da ogni <strong>di</strong>rezione), ma continua ad annunciarla<br />
fino allo scadere del suo route invalid timer nel suo <strong>di</strong>stance vector verso R4:<br />
DV(R3) su C<br />
Rete Costo<br />
A 2<br />
B 1<br />
E 3<br />
F 2<br />
G 1<br />
4. Dal punto <strong>di</strong> vista <strong>di</strong> R4, nulla è cambi<strong>at</strong>o per ora, poichè R3 non ha ancora invalid<strong>at</strong>o la route,<br />
quin<strong>di</strong> il suo <strong>di</strong>stance vector verso R1 è:<br />
DV(R4) su D<br />
Rete Costo<br />
B 2<br />
C 1<br />
F 3<br />
G 2<br />
H 1<br />
5. R1 non riceve più l’annuncio della rete F da R2, ma continua a ricevere quello da R4 (a costo 3).<br />
Allo scadere del suo route invalid timer, assumerà come next hop proprio R4 per la rete F, e la<br />
annuncierà nel suo <strong>di</strong>stance vector verso R2:<br />
DV(R1) su A<br />
Rete Costo<br />
C 2<br />
D 1<br />
E 1<br />
F 4<br />
H 2<br />
G 3<br />
31
A questo punto, si può verificare il fenomeno del count to infinity, in cui R2 annuncierà la rete F a<br />
costo 5 verso R3 e così via, poi R3 la annuncierà a costo 6 verso R4, ...<br />
4.6.3. Guasto con hold-down<br />
Dall’istante in cui si verifica il guasto, uno dei possibili scenari sulla rete è:<br />
1. R2 rileva imme<strong>di</strong><strong>at</strong>amente il guasto (ma supponendo i triggered upd<strong>at</strong>es <strong>di</strong>sabilit<strong>at</strong>i, non invia<br />
comunque nessuna informazione in rete);<br />
2. Allo scadere dell’upd<strong>at</strong>e timer, R2 invia i suoi <strong>di</strong>stance vector, simili a quelli in caso <strong>di</strong> rete stabile,<br />
tranne per il f<strong>at</strong>to che la rete F non viene più annunci<strong>at</strong>a, poichè è <strong>di</strong>vent<strong>at</strong>a irraggiungibile (e<br />
si suppone <strong>di</strong>sabilit<strong>at</strong>o il route poisoning):<br />
DV(R2) su A<br />
Rete Costo<br />
B 1<br />
C 2<br />
G 2<br />
DV(R2) su B<br />
Rete Costo<br />
A 1<br />
D 2<br />
E 2<br />
H 3<br />
3. R3 non riceve più nessun annuncio della rete F (da ogni <strong>di</strong>rezione), ma continua ad annunciarla<br />
fino allo scadere del suo route invalid timer nel suo <strong>di</strong>stance vector verso R4:<br />
DV(R3) su C<br />
Rete Costo<br />
A 2<br />
B 1<br />
E 3<br />
F 2<br />
G 1<br />
4. R1 non riceve più l’annuncio della rete F da R2, ma continua a ricevere quello da R4 (a costo 3).<br />
Allo scadere del suo route invalid timer tuttavia, la precedente route viene <strong>di</strong>chiar<strong>at</strong>a irraggiungibile<br />
e questo sc<strong>at</strong>ena l’<strong>at</strong>tivarsi dell’hold-down timer, che blocca la route per 180 secon<strong>di</strong>; in<br />
questo intervallo <strong>di</strong> tempo, il suo <strong>di</strong>stance vector verso R2 non conterrà la rete F (a <strong>di</strong>fferenza<br />
del caso precedente, in cui l’assenza dell’hold-down permetteva al router <strong>di</strong> cambiare imme<strong>di</strong><strong>at</strong>amente<br />
la route):<br />
DV(R1) su A<br />
Rete Costo<br />
C 2<br />
D 1<br />
E 1<br />
H 2<br />
G 3<br />
32
In questo caso, il fenomeno del count to infinity può quin<strong>di</strong> essere evit<strong>at</strong>o, perchè R1 ha congel<strong>at</strong>o la<br />
route rel<strong>at</strong>iva a F (nel caso precedente invece, alla scadenza del route invalid timer veniva imme<strong>di</strong><strong>at</strong>amente<br />
preso come next hop R4, e questo comportava l’inizio del count to infinity). In questa situazione<br />
quin<strong>di</strong>, tutta la rete ha il tempo <strong>di</strong> accorgersi del guasto. Si noti comunque che non si ha la certezza<br />
<strong>di</strong> evitare il count to infinity: tutto <strong>di</strong>pende dalle tempistiche con le quali vengono mand<strong>at</strong>i gli upd<strong>at</strong>e<br />
dai router; potrebbe capitare inf<strong>at</strong>ti, che nel momento in cui R1 termina l’hold-down, R4 stia ancora<br />
inviando gli annunci per la rete F a costo 3; questo potrebbe nuovamente portare al verificarsi del<br />
fenomeno.<br />
4.6.4. Tempo <strong>di</strong> convergenza<br />
Se si ipotizza che la fase in cui vengono scambi<strong>at</strong>i i messaggi <strong>di</strong> RIP Upd<strong>at</strong>e e RIP Request tra R1 e<br />
R5 avvenga in un tempo trascurabile e che i messaggi <strong>di</strong> upd<strong>at</strong>e siano scambi<strong>at</strong>i in modo sincrono tra<br />
i router, è necessario <strong>at</strong>tendere 60 secon<strong>di</strong> affinchè la rete riconverga:<br />
• Istante 0 (secon<strong>di</strong>): solo R1 e R5 sono a conoscenza della rete I;<br />
• Istante 30: R1 invia il <strong>di</strong>stance vector aggiorn<strong>at</strong>o sulle sue interfacce, quin<strong>di</strong> anche R2 e R4<br />
rilevano I;<br />
• Istante 60: R2 e R4 inviano il <strong>di</strong>stance vector aggiorn<strong>at</strong>o, quin<strong>di</strong> anche R3 rileva I; la rete<br />
converge.<br />
Si noti che questo tempo <strong>di</strong> convergenza può essere notevolmente <strong>di</strong>minuito se si abilitano i triggered<br />
upd<strong>at</strong>es.<br />
33
5. Link St<strong>at</strong>e<br />
5.1. Convergenza del Link St<strong>at</strong>e (1)<br />
5.1.1. Accensione <strong>di</strong> R1<br />
Quando viene acceso R1, si verificano due fasi:<br />
• Neighbor <strong>di</strong>scovery: permette a R1 <strong>di</strong> rilevare i router ad esso a<strong>di</strong>acenti, in questo caso R2 e R3;<br />
• D<strong>at</strong>abase Synchroniz<strong>at</strong>ion: il processo permette ai router <strong>di</strong> sincronizzare i d<strong>at</strong>abase, scambiandosi<br />
messaggi fino a quando tutti i router non avranno le stesse informazioni a <strong>di</strong>sposizione;<br />
Più in dettaglio, i seguenti passi avvengono sia sul link A tra R1 e R2 che sul link C tra R1 e R3; per<br />
semplicità viene analizz<strong>at</strong>o il comportamento e il traffico sul solo link A:<br />
1. R1 <strong>di</strong>venta <strong>at</strong>tivo e invia un pacchetto <strong>di</strong> Hello sull’interfaccia connessa al link A; questo pacchetto<br />
non conterrà nessuna informazione (mentre in situazioni <strong>di</strong> rete stabile contiene l’elenco dei vicini<br />
già conosciuti e identific<strong>at</strong>i dal router mittente);<br />
2. Dopo aver ricevuto il pacchetto <strong>di</strong> Hello <strong>di</strong> R1, R2 identifica il nuovo vicino, e nei suoi successivi<br />
pacchetti <strong>di</strong> Hello, invia questa informazione (aggiungendo R1 alla lista dei router a<strong>di</strong>acenti<br />
conosciuti);<br />
3. Dopo aver ricevuto il primo pacchetto <strong>di</strong> Hello da R2, R1 ha la conferma <strong>di</strong> essere st<strong>at</strong>o identific<strong>at</strong>o<br />
correttamente dal suo vicino (poichè il suo ID compare nei pacchetti appena ricevuti); <strong>di</strong><br />
conseguenza, genera un pacchetto D<strong>at</strong>abase Description vuoto (senza LSA summary) per iniziare<br />
la fase <strong>di</strong> negoziazione del master/slave sul link (necessaria per la procedura <strong>di</strong> sincronizzazione);<br />
4. R2 risponde al precedente pacchetto con un altro D<strong>at</strong>abase Description, sempre necessario per<br />
la negoziazione master/slave; viene eletto master il router che ha l’ID maggiore (in questo caso<br />
si suppone R2);<br />
5. Dopo aver rilev<strong>at</strong>o che R2 è il master, R1 invia un D<strong>at</strong>abase Description in<strong>di</strong>cando che durante<br />
questa fase è lo slave; questo pacchetto viene popol<strong>at</strong>o con gli header LSA contenuti nel suo<br />
Link St<strong>at</strong>e Summary List;<br />
6. R2 invia un altro D<strong>at</strong>abase Description, contenente gli header LSA ricav<strong>at</strong>i dal rispettivo Link<br />
St<strong>at</strong>e Summary List;<br />
7. R1 invia un pacchetto <strong>di</strong> acknowledgment in risposta al D<strong>at</strong>abase Description appena ricevuto.<br />
Questo processo continua, con R2 che invia D<strong>at</strong>abase Description e poi aspetta la conferma<br />
<strong>di</strong> ricezione, fino a quando R2 invia l’ultimo D<strong>at</strong>abase Description (contenente l’ultimo LSA<br />
Summary);<br />
8. Dopo aver ricevuto l’ultimo D<strong>at</strong>abase Description, R1 controlla la sua Link St<strong>at</strong>e Request List, e<br />
vede che ovviamente non è vuota, poichè contiene tutti i LSA header che gli sono st<strong>at</strong>i comunic<strong>at</strong>i<br />
da R2 e che prima non erano conosciuti (perchè il router è st<strong>at</strong>o appena acceso);<br />
34
9. Anche R2 ha degli LSA header pendenti nella sua Link St<strong>at</strong>e Request List, in quanto il router<br />
R1 ha invi<strong>at</strong>o l’LSA header rel<strong>at</strong>ivo alla rete I;<br />
10. R1 invia pacchetti <strong>di</strong> Link St<strong>at</strong>e Request esplicitando gli LSA a lui mancanti, e R2 comunica le<br />
informazioni richieste nei pacchetti <strong>di</strong> Link St<strong>at</strong>e Upd<strong>at</strong>e; questo avviene fino a quando la Link<br />
St<strong>at</strong>e Request List <strong>di</strong> R1 non è vuota; ovviamente avviene lo stesso anche nell’altra <strong>di</strong>rezione, in<br />
quanto R2 deve poter ottenere l’LSA rel<strong>at</strong>ivo alla rete I;<br />
5.1.2. Guasto<br />
Nel caso si verifichi un guasto sul link C, entrambi i router R1 e R3 rilevano imme<strong>di</strong><strong>at</strong>amente il problema<br />
(grazie al segnale <strong>di</strong> link down) ed effettuano i seguenti passi:<br />
1. Ricalcolo della tabella <strong>di</strong> routing, poichè l’informazione topologica in loro possesso è cambi<strong>at</strong>a;<br />
2. Invio <strong>di</strong> un Link St<strong>at</strong>e Upd<strong>at</strong>e “speciale”, contenente l’informazione che invalida la rete <strong>di</strong>venuta<br />
irraggiungibile (ad esempio nell’implementazione cisco questo viene f<strong>at</strong>to assegnando all’opzione<br />
“age“ il valore 3600); questo pacchetto è invi<strong>at</strong>o in floo<strong>di</strong>ng su tutta la rete; <strong>at</strong>traverso il suo<br />
invio si comunica agli altri router che dovranno imme<strong>di</strong><strong>at</strong>amente cancellare le informazioni memorizz<strong>at</strong>e<br />
precedentemente e ricalcolare la tabella <strong>di</strong> routing;<br />
3. Viene <strong>at</strong>tesa la ricezione dei rispettivi acknowledgment, per confermare la corretta ricezione del<br />
precedente upd<strong>at</strong>e; se non viene ricevuto l’acknowledgment da un particolare router, il pacchetto<br />
<strong>di</strong> link st<strong>at</strong>e upd<strong>at</strong>e viene <strong>di</strong> nuovo inoltr<strong>at</strong>o, ma questa volta in unicast (prima era invi<strong>at</strong>o in<br />
multicast) <strong>di</strong>rettamente al router che non ha conferm<strong>at</strong>o la ricezione;<br />
35
5.2. Convergenza del Link St<strong>at</strong>e (2)<br />
5.2.1. Accensione <strong>di</strong> R3<br />
Questa fase è sostanzialmente uguale a quella dell’esercizio precedente; la negoziazione master/slave,<br />
lo scambio <strong>di</strong> d<strong>at</strong>abase description e la sequenza <strong>di</strong> pacchetti link st<strong>at</strong>e request/upd<strong>at</strong>e avviene sia tra<br />
R3 e R2 che tra R3 e R4.<br />
5.2.2. Shortest P<strong>at</strong>h Spanning Tree<br />
1<br />
Router R1<br />
H 1 G<br />
C<br />
R4 R3<br />
3<br />
2<br />
D B<br />
A<br />
R1<br />
4<br />
R2<br />
1<br />
1<br />
E<br />
Router R2<br />
C<br />
R4 R3<br />
3<br />
D B<br />
A<br />
R1<br />
4<br />
R2<br />
1<br />
2<br />
H 1 G<br />
E<br />
36<br />
1<br />
1<br />
F<br />
F<br />
2<br />
2
5.2.3. Guasto<br />
1<br />
Router R3<br />
H 1 G<br />
C<br />
R4 R3<br />
3<br />
2<br />
D B<br />
A<br />
R1<br />
4<br />
R2<br />
1<br />
1<br />
E<br />
Router R4<br />
H 1 G<br />
C<br />
R4 R3<br />
3<br />
D B<br />
A<br />
R1<br />
4<br />
R2<br />
1<br />
2<br />
E<br />
Al verificarsi del guasto, i router R1 e R3 eseguiranno gli stessi passi elenc<strong>at</strong>i nell’esercizio precedente.<br />
In questo caso, i cambiamenti nelle tabelle <strong>di</strong> routing sono:<br />
• Tutti i router eliminano l’informazione rel<strong>at</strong>iva alla rete C;<br />
• Nel ricalcolo della nuova topologia, i router che utilizzavano il link C per raggiungere altre<br />
destinazioni avranno uno shortest p<strong>at</strong>h spanning tree <strong>di</strong>verso rispetto a quello precedente, ed<br />
37<br />
1<br />
1<br />
F<br />
F<br />
2<br />
2
eseguendo l’algoritmo per il calcolo della tabella <strong>di</strong> routing, otterranno route con next hop<br />
<strong>di</strong>fferenti rispetto a prima.<br />
38
5.3. Determinazione del Link St<strong>at</strong>e D<strong>at</strong>abase con OSPF in area singola<br />
L’esercizio include tre domande, le cui soluzioni vengono present<strong>at</strong>e singolarmente.<br />
5.3.1. Albero <strong>di</strong> instradamento<br />
L’albero <strong>di</strong> instradamento si ottiene calcolando l’albero dei cammini minimi da ogni router verso la<br />
ogni possibile destinazione (le reti NetX ) utilizzando l’algoritmo <strong>di</strong> Dijkstra.<br />
Nel <strong>di</strong>segno si riportano le soluzioni per quanto riguardano i router R1 ed R5.<br />
NetA NetB<br />
1 1<br />
R1<br />
NetF<br />
4<br />
R2<br />
3<br />
NetL<br />
R5<br />
2<br />
NetM<br />
NetI<br />
3<br />
1 1<br />
NetE NetD<br />
NetG<br />
2<br />
2<br />
R4<br />
NetH<br />
R3<br />
1<br />
NetC<br />
NetA NetB<br />
1 1<br />
R1<br />
NetF<br />
4<br />
R2<br />
R5<br />
NetM<br />
NetI<br />
3<br />
NetE NetD<br />
Per quanto riguarda gli altri router, gli alberi <strong>di</strong> instradamento si ricavano in modo analogo.<br />
5.3.2. <strong>Routing</strong> Table<br />
La routing table si ricava seguendo, per ogni possibile destinazione, il next hop in<strong>di</strong>c<strong>at</strong>o dall’albero <strong>di</strong><br />
instradamento minimo (ricav<strong>at</strong>o al punto precedente).<br />
In questa soluzione vengono adott<strong>at</strong>i le seguenti convenzioni in quanto utilizz<strong>at</strong>e dal protocollo IP:<br />
• Il costo per raggiungere una certa rete include il costo <strong>di</strong> <strong>at</strong>traversamento della rete stessa. Ad<br />
esempio, il costo <strong>di</strong> raggiungere la rete NetA da R1 è pari a 1 e non 0. In altre parole, il costo<br />
<strong>di</strong> <strong>at</strong>traversamento è inteso come un costo <strong>di</strong> <strong>at</strong>traversamento dell’interfaccia del router anzichè<br />
come un costo <strong>di</strong> <strong>at</strong>traversamento della rete.<br />
• Le reti connesse ad un router hanno come Next Hop il router stesso. Ad esempio il next hop per<br />
raggiungere la rete NetA da R1 è il router R1 stesso.<br />
La figura seguente riporta (in forma letterale) gli in<strong>di</strong>rizzi <strong>di</strong> tutte le interfacce del router che sono<br />
necessarie ai fini della compilazione della routing table.<br />
39<br />
3<br />
NetL<br />
1<br />
2<br />
1<br />
NetG<br />
2<br />
2<br />
R4<br />
NetH<br />
R3<br />
1<br />
NetC
NetA NetB<br />
1 1<br />
R1<br />
R1_F NetF<br />
4<br />
R2_B<br />
R2_F<br />
R2<br />
R1_A<br />
R1_L<br />
3<br />
NetL<br />
R5_L<br />
R5_E<br />
1<br />
R1_M<br />
R5<br />
R5_I<br />
2<br />
NetM<br />
NetI<br />
3<br />
R4<br />
1<br />
NetE NetD<br />
R2_G<br />
2<br />
2<br />
NetG<br />
R3<br />
NetH<br />
R3_G R3_C<br />
La routing table risultante è riport<strong>at</strong>a nella seguente tabella (la seconda e la terza colonna sono<br />
riferite rispettivamente ai router R1 ed R5):<br />
Destinazione Next hop (R1) Cost (R1) Next hop (R5) Cost (R5)<br />
NetA R1 A 1 R1 L 4<br />
NetB R2 F 5 R1 L,R4 I 8<br />
NetC R4 M 5 R4 I 6<br />
NetD R4 M 3 R4 I 4<br />
NetE R5 l 4 R5 E 1<br />
NetF R1 F 4 R1 L 7<br />
NetG R2 F,R4 M 6 R4 I 7<br />
NetH R4 M 4 R4 I 5<br />
NetI R4 M 5 R5 I 3<br />
NetL R1 L 3 R5 L 3<br />
NetM R1 M 2 R1 L,R4 I 5<br />
Si noti come per raggiungere la rete NetF da R5 il percorso più conveniente passi <strong>at</strong>traverso il next<br />
hop R1. Tuttavia, la rete NetF non viene utilizz<strong>at</strong>a per raggiungere la rete NetB: in questo caso il<br />
percorso più conveniente passa <strong>at</strong>traverso il next hop R4. Per quanto riguarda la rete NetM, invece,<br />
esistono due percorso equivalenti a partire da R5, che può pertanto scegliere in<strong>di</strong>fferentemente o R1 o<br />
R4 come next hop.<br />
40<br />
R4_I<br />
R4_M<br />
R4_D<br />
R4_H<br />
R3_H<br />
1<br />
NetC
5.3.3. Link St<strong>at</strong>e D<strong>at</strong>abase<br />
Il Link St<strong>at</strong>e D<strong>at</strong>abase include solamente LSA <strong>di</strong> tipo Router Link e Network Link, in quanto (a) la rete<br />
include solamente un’area OSPF, che (b) non connessa è ad altri domini. I Router Link riporteranno<br />
le a<strong>di</strong>acenze dei vari router con (a) le reti IP presenti, (b) i router a<strong>di</strong>acenti, (c) le eventuali reti <strong>di</strong><br />
transito gener<strong>at</strong>e dall’OSPF per gestire le LAN con più <strong>di</strong> 2 routers. I Network Link riporteranno i<br />
d<strong>at</strong>i rel<strong>at</strong>ivi alle reti <strong>di</strong> transito; in questo caso sarà presente un solo Network Link rel<strong>at</strong>ivo alla rete<br />
NetL che è l’unica rete <strong>di</strong> transito presente nella topologia in<strong>di</strong>c<strong>at</strong>a.<br />
La soluzione per quanto riguarda i router R1, R4 ed R5 è riport<strong>at</strong>a in figura. La soluzione per quanto<br />
riguarda i router R2 ed R3 viene omessa per brevità.<br />
Router LSA (Router R1, #items: 6)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router Link (Link to a transit network)<br />
Router LSA (Router R4, #items: 7)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router LSA (Router R5, #items: 5)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Link to a stub network)<br />
Router Link (Point-to-point link to ano<strong>the</strong>r router)<br />
Router Link (Link to a transit network)<br />
Network Link St<strong>at</strong>e (Router R5, #items: 1)<br />
Netmask: MaskL Attached Routers: R1, R5<br />
5.3.4. Design<strong>at</strong>ed e Backup Design<strong>at</strong>ed Router<br />
Link ID (Network): NetA<br />
Link ID (Network): NetF<br />
Link ID (Network): NetM<br />
Link ID (Network): NetL<br />
Link ID (Neighbor RouterID): R2<br />
Link ID (Neighbor RouterID): R4<br />
Link ID (DR IP address): R5_L<br />
Link ID (Network): NetM<br />
Link ID (Network): NetH<br />
Link ID (Network): NetI<br />
Link ID (Network): NetD<br />
Link ID (Neighbor RouterID): R1<br />
Link ID (Neighbor RouterID): R3<br />
Link ID (Neighbor RouterID): R5<br />
Link ID (Network): NetL<br />
Link ID (Network): NetI<br />
Link ID (Network): NetE<br />
Link ID (Neighbor RouterID): R4<br />
Link ID (DR IP address): R5_L<br />
Link D<strong>at</strong>a (Netmask): MaskA<br />
Link D<strong>at</strong>a (Netmask): MaskF<br />
Link D<strong>at</strong>a (Netmask): MaskM<br />
Link D<strong>at</strong>a (Netmask): MaskL<br />
Link D<strong>at</strong>a (Router If. Addr.): R1_F<br />
Link D<strong>at</strong>a (Router If. Addr.): R1_M<br />
Link D<strong>at</strong>a (Router If. Addr.) R1_L<br />
Link D<strong>at</strong>a (Netmask): MaskM<br />
Link D<strong>at</strong>a (Netmask): MaskH<br />
Link D<strong>at</strong>a (Netmask): MaskI<br />
Link D<strong>at</strong>a (Netmask): MaskD<br />
Link D<strong>at</strong>a (Router If. Addr.): R4_M<br />
Link D<strong>at</strong>a (Router If. Addr.): R4_H<br />
Link D<strong>at</strong>a (Router If. Addr.): R4_I<br />
Link D<strong>at</strong>a (Netmask): MaskL<br />
Link D<strong>at</strong>a (Netmask): MaskI<br />
Link D<strong>at</strong>a (Netmask): MaskE<br />
Link D<strong>at</strong>a (Router If. Addr.): R5_I<br />
Link D<strong>at</strong>a (Router If. Addr.) R5_L<br />
L’in<strong>di</strong>rizzo IP del Design<strong>at</strong>ed Router si può ricavare dal LSA rel<strong>at</strong>ivo al Router Link verso la rete <strong>di</strong><br />
transito (ad es. il sesto LSA contenuto nel RouterLSA <strong>di</strong> R1), ed è riport<strong>at</strong>o nel campo Link ID.<br />
Per quanto riguarda il Backup Design<strong>at</strong>ed Router non è specific<strong>at</strong>o esplicitamente nel d<strong>at</strong>abase<br />
OSPF. In questo caso è facilmente ricavabile considerando che sulla rete NetL vi sono solamente 2<br />
router e che essendo R5 il Design<strong>at</strong>ed Router, R1 dovrà per forza essere il Backup (a meno che il campo<br />
Priority ne impe<strong>di</strong>sca la sua elezione).<br />
In generale, l’identità del Backup Design<strong>at</strong>ed Router è ricavabile qualora si sia in grado <strong>di</strong> intercettare<br />
un pacchetto OSPF Hello sulla LAN <strong>di</strong> transito, in quanto questi pacchetti riportano sia<br />
l’in<strong>di</strong>rizzo IP del Design<strong>at</strong>ed Router che quello del Backup Design<strong>at</strong>ed Router.<br />
41
5.4. OSPF con area multipla<br />
La vista della rete da parte del router R1 è la seguente:<br />
1<br />
R1 R2<br />
1 1<br />
1<br />
N2 N3<br />
N4<br />
N1<br />
5<br />
1<br />
R3<br />
2 4<br />
N5 N6<br />
6<br />
42<br />
1<br />
N7<br />
N8<br />
2<br />
4 5<br />
R4<br />
N9 N10<br />
3<br />
N11
6. Domande <strong>di</strong> teoria<br />
6.1. Algoritmi <strong>di</strong> Forwar<strong>di</strong>ng e <strong>Routing</strong><br />
1. Nella tecnica <strong>di</strong> forwar<strong>di</strong>ng by network address ogni pacchetto deve contenere l’in<strong>di</strong>rizzo del<br />
nodo destin<strong>at</strong>ario della comunicazione, il quale viene us<strong>at</strong>o come chiave <strong>di</strong> accesso alla tabella<br />
<strong>di</strong> routing. Nel Label Swapping invece, viene inserita una particolare informazione detta “label”<br />
all’interno <strong>di</strong> ogni pacchetto in transito, la quale contribuisce ad identificare univocamente il<br />
percorso che verrà effettu<strong>at</strong>o dal pacchetto. Le due tecnologie sono profondamente <strong>di</strong>verse sotto<br />
vari aspetti:<br />
• Semplicità: il primo non richiede nessuna fase <strong>di</strong> setup, nè il mantenimento <strong>di</strong> alcun st<strong>at</strong>o;<br />
nel secondo è necessario preparare il percorso e mantenere lo st<strong>at</strong>o <strong>di</strong> ogni sessione;<br />
• Scalabilità del processo <strong>di</strong> forwar<strong>di</strong>ng: il primo è decisamente più scalabile del secondo,<br />
grazie al f<strong>at</strong>to che non è necessario mantenere nessuno st<strong>at</strong>o per le sessioni;<br />
• Scalabilità del processo <strong>di</strong> routing: il primo può portare ad avere tabelle <strong>di</strong> routing estremamente<br />
gran<strong>di</strong>; nel secondo le tabelle sono più piccole;<br />
• Efficienza: nel primo gli header possono essere <strong>di</strong> <strong>di</strong>mensioni abbastanza notevoli; nel secondo<br />
sono senza dubbio più “snelli”;<br />
• Multip<strong>at</strong>h: il primo non supporta percorsi multipli tra due destinazioni; il secondo offre<br />
n<strong>at</strong>ivamente questa possibilità;<br />
2. Un algoritmo <strong>di</strong> routing ha lo scopo <strong>di</strong> trovare quale è il percorso migliore all’interno <strong>di</strong> una rete<br />
d<strong>at</strong>a per tutti i no<strong>di</strong> della rete. Più formalmente, è un processo che, in autom<strong>at</strong>ico, è in grado <strong>di</strong><br />
procedere alla <strong>di</strong>sseminazione delle informazioni <strong>di</strong> routing in una rete. Un generico algoritmo <strong>di</strong><br />
routing può essere classific<strong>at</strong>o sulla base delle sue car<strong>at</strong>teristiche, tra cui semplicità, robustezza,<br />
ottimalità, stabilità, equità.<br />
3. Lo scopo <strong>di</strong> un algoritmo <strong>di</strong> forwar<strong>di</strong>ng è quello <strong>di</strong> determinare qual è la migliore porta <strong>di</strong> uscita<br />
verso una destinazione, a fronte <strong>di</strong> un pacchetto entrante in un nodo <strong>di</strong> rete. In generale un<br />
algoritmo <strong>di</strong> forwar<strong>di</strong>ng opera in<strong>di</strong>pendentemente su ogni nodo della rete, non ha una conoscenza<br />
globale della rete e utilizza informazioni locali al nodo per l’inoltro dei pacchetti.<br />
4. Il fenomeno del routing loop avviene quando un pacchetto viene rimpall<strong>at</strong>o ciclicamente su un<br />
insieme <strong>di</strong> più no<strong>di</strong>. Si verifica quando alcune route della rete innescano un percorso circolare.<br />
Rappresenta una situazione particolarmente pericolosa perché i pacchetti all’interno del loop<br />
circolano nella rete finché non sono scart<strong>at</strong>i per eccessivo “time to live”, situazione che può<br />
portare al progressivo intasamento della rete.<br />
5. Un black-hole è un fenomeno che si verifica quando i pacchetti verso una d<strong>at</strong>a destinazione sono<br />
invi<strong>at</strong>i ad un router il quale, non <strong>di</strong>sponendo <strong>di</strong> un percorso per la destinazione, li scarta.<br />
6. Sebbene il routing st<strong>at</strong>ico, essendo un algoritmo non ad<strong>at</strong>t<strong>at</strong>ivo, presenti numerosi svantaggi,<br />
tra cui l’incapacità <strong>di</strong> mo<strong>di</strong>ficare i percorsi a fronte <strong>di</strong> un guasto, rappresenta una tecnologia<br />
estremamente semplice che permette al gestore <strong>di</strong> controllare con estrema precisione i percorsi<br />
43
del traffico sulla rete (anche se è necessario un suo intervento manuale per il loro reinstradamento<br />
in presenza <strong>di</strong> variazioni topologiche). Può quin<strong>di</strong> essere una buona scelta in un ambiente poco<br />
<strong>di</strong>namico (ad esempio una rete periferica) e <strong>di</strong> piccole <strong>di</strong>mensioni, in cui non si ha un’alta<br />
frequenza <strong>di</strong> variazione delle route e della topologia.<br />
7. Il selective floo<strong>di</strong>ng è un algoritmo che cerca <strong>di</strong> limitare i problemi del floo<strong>di</strong>ng tra<strong>di</strong>zionale<br />
(principalmente l’altissimo carico indotto sulla rete) senza perderne i vantaggi (cioè l’altissima<br />
probabilità che il pacchetto giunga a destinazione). Per far si che questo sia possibile, è necessario<br />
che ogni nodo emetta i pacchetti con un numero <strong>di</strong> sequenza crescente ed univoco, che permetta<br />
ad ogni router <strong>di</strong> riconoscere se un pacchetto è già st<strong>at</strong>o ricevuto (e quin<strong>di</strong> evitare <strong>di</strong> trasmetterlo)<br />
oppure no (e quin<strong>di</strong> inviarlo in tutte le <strong>di</strong>rezioni tranne quella da cui è arriv<strong>at</strong>o). Bisogna inoltre<br />
riservare una quantità <strong>di</strong> memoria aggiuntiva nei no<strong>di</strong>, poichè vanno memorizz<strong>at</strong>i i numeri <strong>di</strong><br />
sequenza <strong>di</strong> tutti i pacchetti, per poter verificare se sono già pass<strong>at</strong>i.<br />
8. Vantaggi routing centralizz<strong>at</strong>o: gestione della rete molto accur<strong>at</strong>a; facilità nell’eseguire il debugging<br />
della rete; Svantaggi routing centralizz<strong>at</strong>o: introduce un single point of failure (il nodo<br />
centrale) nella rete; poco ad<strong>at</strong>to in reti con elev<strong>at</strong>a frequenza <strong>di</strong> variazione delle route<br />
9. Nel <strong>di</strong>stance vector, ogni nodo comunica tutte le informazioni <strong>di</strong> connettività in suo possesso a<br />
tutti i router a<strong>di</strong>acenti. Le informazioni sono trasport<strong>at</strong>e in una unità chiam<strong>at</strong>a appunto <strong>di</strong>stance<br />
vector, che contiene:<br />
• la lista delle destinazioni raggiungibili;<br />
• la <strong>di</strong>rezione che si può utilizzare per raggiungere le destinazioni;<br />
• il costo per raggiungimento delle destinazioni;<br />
10. Un triggered upd<strong>at</strong>e è una tecnica per migliorare il tempo <strong>di</strong> convergenza in una rete che utilizza<br />
un protocollo <strong>di</strong> routing <strong>di</strong> tipo <strong>di</strong>stance vector, come il RIP, al prezzo <strong>di</strong> generare traffico<br />
ad<strong>di</strong>zionale. Un triggered upd<strong>at</strong>e permette ad un router <strong>di</strong> annunciare un cambiamento <strong>di</strong> metrica<br />
in una entry della sua routing table quasi imme<strong>di</strong><strong>at</strong>amente, invece <strong>di</strong> aspettare il prossimo<br />
aggiornamento perio<strong>di</strong>co, come previsto dalla “teoria” dell’algoritmo. I triggered upd<strong>at</strong>e sono<br />
invi<strong>at</strong>i dopo un piccolo intervallo <strong>di</strong> tempo (casuale) rispetto alla rilevazione del cambiamento,<br />
per impe<strong>di</strong>re intasamenti della rete.<br />
11. Lo split horizon mo<strong>di</strong>fica il principio base <strong>di</strong> funzionamento <strong>di</strong> un algoritmo <strong>di</strong> tipo <strong>di</strong>stance<br />
vector, permettendo <strong>di</strong> <strong>di</strong>fferenziare i vari vettori invi<strong>at</strong>i sulle linee <strong>di</strong> un router (che secondo<br />
l’algoritmo classico dovrebbero essere tutti uguali). Questo permette <strong>di</strong> ottenere una serie <strong>di</strong><br />
vantaggi, tra cui impe<strong>di</strong>re il loop tra due no<strong>di</strong> e rendere la convergenza della rete più veloce.<br />
Tuttavia non è in grado <strong>di</strong> far fronte a loop che investono maglie composte da più no<strong>di</strong>, in quanto<br />
ha una visione locale della rete.<br />
12. L’hold-down timer impe<strong>di</strong>sce ad un router <strong>di</strong> mo<strong>di</strong>ficare le route che fanno riferimento ad un<br />
link sul quale si è rilev<strong>at</strong>o un guasto, così da lasciare un intervallo <strong>di</strong> tempo in cui gli altri no<strong>di</strong><br />
possono riconfigurarsi, ed evitare un routing loop.<br />
44
6.2. RIP<br />
1. Il <strong>Routing</strong> Inform<strong>at</strong>ion Protocol (RIP) è un protocollo <strong>di</strong> routing tra i più us<strong>at</strong>i su reti locali ed<br />
aiuta i router ad ad<strong>at</strong>tarsi <strong>di</strong>namicamente ai cambiamenti dei collegamenti <strong>di</strong> rete, scambiandosi<br />
informazioni riguardo a quali reti ogni router può raggiungere e quanto siano lontane. RIP è<br />
un protocollo <strong>di</strong> tipo <strong>di</strong>stance-vector e usa l’algoritmo Bellman-Ford. In molti ambienti <strong>di</strong> rete<br />
RIP non è la prima scelta tra i protocolli <strong>di</strong> routing poiché il tempo <strong>di</strong> convergenza è lungo e ha<br />
una scalabilità della rete modesta se confront<strong>at</strong>o con le altern<strong>at</strong>ive <strong>di</strong>sponibili, inoltre il basso<br />
numero <strong>di</strong> hop support<strong>at</strong>i limita severamente la grandezza della rete. D’altra parte, è molto<br />
facile da configurare ed è implement<strong>at</strong>o anche nei router <strong>di</strong> fascia bassa.<br />
2. Di default, RIP utilizza una metrica bas<strong>at</strong>a sul numero <strong>di</strong> links che vengono <strong>at</strong>travers<strong>at</strong>i per<br />
raggiungere la destinazione. Questa <strong>di</strong>stanza è espressa come un numero intero variabile tra 1 e<br />
15; 16 rappresenta una <strong>di</strong>stanza infinita, cioè una rete irraggiungibile.<br />
3. Il protocollo RIP prevede l’utilizzo <strong>di</strong> vari tipi <strong>di</strong> timers:<br />
• <strong>Routing</strong> upd<strong>at</strong>e timer (default 30 s): intervallo <strong>di</strong> tempo per l’invio degli annunci<br />
• Route invalid timer (default 90 s): intervallo <strong>di</strong> tempo dopo il quale una route è <strong>di</strong>chiar<strong>at</strong>a<br />
irraggiungibile (<strong>di</strong>stanza posta ad infinito)<br />
• Route flush timer (default 270 s): intervallo <strong>di</strong> tempo dopo il quale la route è cancell<strong>at</strong>a<br />
dalla routing table<br />
• Timer per i triggered upd<strong>at</strong>es: sono invi<strong>at</strong>i con un ritardo casuale compreso tra 1 e 5<br />
secon<strong>di</strong>, per evitare intasamenti della rete e per far sì <strong>di</strong> poter eventualmente comunicare<br />
più cambi <strong>di</strong> route con un messaggio solo.<br />
4. In assenza <strong>di</strong> guasti, ogni 30 secon<strong>di</strong> un router x manda il proprio <strong>di</strong>stance vector a tutti i suoi<br />
vicini. Ognuno <strong>di</strong> essi a sua volta manderà al router x il proprio <strong>di</strong>stance vector. Il router x<br />
riceve quin<strong>di</strong> ogni 30 secon<strong>di</strong> <strong>di</strong>versi <strong>di</strong>stance vector che userà per aggiornare la propria tabella <strong>di</strong><br />
routing e calcolare quin<strong>di</strong> una nuova stima del suo vettore. Se uno dei vicini non invia il proprio<br />
<strong>di</strong>stance vector per 90 secon<strong>di</strong> (la dur<strong>at</strong>a <strong>di</strong> default del route invalid timer), lo si considera<br />
irraggiungibile e si assegna <strong>di</strong>stanza infinita. Con i valori <strong>di</strong> default, questo avviene quin<strong>di</strong> dopo<br />
3 upd<strong>at</strong>e manc<strong>at</strong>i.<br />
5. I messaggi <strong>di</strong> request vengono normalmente invi<strong>at</strong>i da un router appena acceso per venire a<br />
conoscenza delle route della rete; questo permette <strong>di</strong> velocizzare il tempo <strong>di</strong> convergenza della<br />
rete, senza dover <strong>at</strong>tendere lo scadere del routing upd<strong>at</strong>e timer.<br />
6. La versione 2 del RIP ingloba <strong>di</strong>versi miglioramenti rispetto all’originale. Tale protocollo, per<br />
mantenere la retrocomp<strong>at</strong>ibilità con il suo predecessore, usa una metrica bas<strong>at</strong>a sugli hop (massimo<br />
15). Nell’ambito degli upd<strong>at</strong>e, però, invia informazioni rel<strong>at</strong>ive alle subnet (permettendo<br />
<strong>di</strong> trasferire quin<strong>di</strong> le maschere <strong>di</strong> rete) e prevede un meccanismo <strong>di</strong> autenticazione bas<strong>at</strong>o su<br />
password. Inoltre, a <strong>di</strong>fferenza della versione 1, invia gli upd<strong>at</strong>e in multicast.<br />
7. Il route poisoning è un meccanismo utilizz<strong>at</strong>o dai router per comunicare l’irraggiungibilità <strong>di</strong><br />
alcune route. In particolare, una route irraggiungibile (ad esempio un’interfaccia fisica che si<br />
scollega dalla rete) viene annunci<strong>at</strong>a a costo infinito, mentre secon<strong>di</strong> l’algoritmo classico questa<br />
non dovrebbe essere più annunci<strong>at</strong>a. Permette <strong>di</strong> aumentare la velocità <strong>di</strong> convergenza della<br />
rete, e quin<strong>di</strong> evitare i problemi che si possono verificare durante il transitorio.<br />
45
6.3. Link St<strong>at</strong>e<br />
1. Il Link St<strong>at</strong>e memorizza la coppia link-costo per ogni nodo a<strong>di</strong>acente conosciuto dal nodo in<br />
esame. Di conseguenza, ogni riga del LS conterrà le informazioni rel<strong>at</strong>ive alla destinazione (il<br />
nome del nodo a<strong>di</strong>acente sul quale il link termina) e al costo rel<strong>at</strong>ivo. Se, ad esempio, un nodo<br />
ha qu<strong>at</strong>tro no<strong>di</strong> a<strong>di</strong>acenti, esso propagherà un pacchetto contenente qu<strong>at</strong>tro righe corrispondenti<br />
alle qu<strong>at</strong>tro a<strong>di</strong>acenze.<br />
2. I pacchetti <strong>di</strong> Hello permettono <strong>di</strong> implementare il riconoscimento delle a<strong>di</strong>acenze. Attraverso lo<br />
scambio <strong>di</strong> questi messaggi, l’algoritmo è in grado <strong>di</strong> accorgersi autonomamente della presenza /<br />
mancanza dei no<strong>di</strong> a<strong>di</strong>acenti senza fare affidamento a meccanismi esterni quali il segnale link-up.<br />
3. Il meccanismo è implement<strong>at</strong>o nell’algoritmo <strong>di</strong> bringing up adjiacencies. Questo componente<br />
permette ad un nodo <strong>di</strong> evitare <strong>di</strong> <strong>at</strong>tendere l’invio del LS da parte <strong>di</strong> tutti i no<strong>di</strong> e prevede che<br />
il nodo si <strong>at</strong>tivi facendo un’apposita query ai suoi no<strong>di</strong> vicini richiedendo loro il d<strong>at</strong>abase. Ogni<br />
qualvolta un nodo rileva <strong>di</strong> avere una nuova a<strong>di</strong>acenza, effettuera una fase <strong>di</strong> sincronizzazione del<br />
proprio d<strong>at</strong>abase con il nodo a<strong>di</strong>acente in modo da essere oper<strong>at</strong>ivo prima possibile e velocizzare<br />
la convergenza della rete.<br />
4. Il Link St<strong>at</strong>e ingloba l’algoritmo SPF (che è in grado <strong>di</strong> calcolare il cammino migliore tra due<br />
no<strong>di</strong>) per il calcolo della routing table. A partire dal d<strong>at</strong>abase topologico (che ogni nodo si<br />
è calcol<strong>at</strong>o nelle fasi precedenti dell’algoritmo), è possibile, me<strong>di</strong>ante semplici passi, ottenere<br />
l’albero <strong>di</strong> instradamento, e quin<strong>di</strong> la routing table.<br />
5. L’idea dei protocolli <strong>di</strong> routing “link st<strong>at</strong>e” è <strong>di</strong> mantenere una copia sincronizz<strong>at</strong>a del d<strong>at</strong>abase<br />
sullo st<strong>at</strong>o dei link in tutti i no<strong>di</strong> della rete. In questo modo, se tutti i no<strong>di</strong> contengono lo stesso<br />
d<strong>at</strong>abase ed eseguono lo stesso algoritmo per la creazione delle tabelle <strong>di</strong> routing, i percorsi sono<br />
coerenti e non si verificano loops.<br />
6. Le reti che utilizzano algoritmi link st<strong>at</strong>e hanno una convergenza estremamente rapida grazie<br />
al f<strong>at</strong>to che i pacchetti contenenti i link st<strong>at</strong>e si propagano molto velocemente sulla rete. A<br />
<strong>di</strong>fferenza dei link st<strong>at</strong>e, inf<strong>at</strong>ti, i <strong>di</strong>stance vector vengono ricav<strong>at</strong>i dalla tabella <strong>di</strong> routing,<br />
pertanto ogni nodo deve prima ricavare la tabella <strong>di</strong> routing, poi generare il proprio vettore e<br />
propagarlo. Tutto questo richiede molto più tempo rispetto al primo caso.<br />
7. A seguito <strong>di</strong> frequenti variazioni <strong>di</strong> topologia un router può ricevere un pacchetto link st<strong>at</strong>e<br />
vecchio dopo uno nuovo, quin<strong>di</strong> deve essere in grado <strong>di</strong> valutare il più recente. Pertanto, quando<br />
un nodo riceve un pacchetto link st<strong>at</strong>e confronta il numero <strong>di</strong> sequenza del pacchetto con quello<br />
dell’ultimo pacchetto ricevuto da quel nodo, e se il numero <strong>di</strong> sequenza in<strong>di</strong>ca che il pacchetto<br />
è più recente <strong>di</strong> quello memorizz<strong>at</strong>o, allora viene memorizz<strong>at</strong>o e inoltr<strong>at</strong>o a tutti i no<strong>di</strong> colleg<strong>at</strong>i<br />
(eccetto quello da cui è st<strong>at</strong>o ricevuto); in caso contrario il pacchetto viene scart<strong>at</strong>o.<br />
8. Per gestire le reti broadcast, viene introdotta l’idea dello pseudo-nodo, o nodo fittizio, che<br />
trasforma la rete da magli<strong>at</strong>a a stellare. Ogni router della rete, inf<strong>at</strong>ti, rileverà una sola a<strong>di</strong>acenza<br />
con lo pseudo-nodo stesso il quale farà da transito per il calcolo della topologia. Lo pseudo-nodo<br />
non è un nodo aggiuntivo inserito in sostituzione della rete broadcast, ma i protocolli reali<br />
selezionano un particolare router e lo designano come pseudo-nodo. Questa mo<strong>di</strong>fica “virtuale”<br />
<strong>di</strong> topologia non influenza tuttavia il computo delle route per i router partecipanti alla rete<br />
broadcast.<br />
46
6.4. OSPF<br />
1. Il protocollo OSPF (Open Shortest P<strong>at</strong>h First) è uno dei protocolli <strong>di</strong> instradamento più <strong>di</strong>ffusi,<br />
che gestisce le tabelle <strong>di</strong> instradamento <strong>di</strong> una rete IP con il metodo del Link St<strong>at</strong>e. Il protocollo<br />
implementa i classici algoritmi previsti dalla teoria del link st<strong>at</strong>e, e aggiunge altre funzionalità<br />
particolarmente sfrutt<strong>at</strong>e in situazioni reali, come l’aggiunta <strong>di</strong> ulteriori gra<strong>di</strong> nella gerarchia dei<br />
domini <strong>di</strong> routing.<br />
2. Per Stub Area si intendono quei tipi <strong>di</strong> area che non ricevono route esterne. Le route esterne<br />
saranno poi definite e <strong>di</strong>stribuite da un altro protocollo <strong>di</strong> <strong>Routing</strong>. Quin<strong>di</strong>, le stub area necessitano<br />
<strong>di</strong> relegare ad una route <strong>di</strong> default lo scambio per il traffico con quelle esterne al dominio<br />
<strong>di</strong> appartenenza.<br />
3. L’introduzione del concetto <strong>di</strong> area permetta la creazione <strong>di</strong> gruppi logici non sovrapposti <strong>di</strong><br />
router le cui informazioni posso essere sommarizz<strong>at</strong>e rispetto al resto della rete. Questo è molto<br />
importante in quanto garantisce al protocollo la car<strong>at</strong>teristica <strong>di</strong> scalabilità, f<strong>at</strong>tore fondamentale<br />
se si vuole utilizzare OSPF in reti piuttosto ampie e/o complesse. Attraverso l’uso delle aree, è<br />
inf<strong>at</strong>ti possibile ridurre il consumo in termini <strong>di</strong> memoria, CPU e utilizzo <strong>di</strong> rete dei router che<br />
utilizzano il protocollo.<br />
4. Un area border router è un particolare router che connette una o più aree OSPF all’area <strong>di</strong><br />
backbone. È membro <strong>di</strong> tutte le aree alle quali è connesso. Inoltre mantiene in memoria copie<br />
multiple del d<strong>at</strong>abase link st<strong>at</strong>e, uno per ciascuna area alla quale appartiene.<br />
5. Un network link st<strong>at</strong>e è un record che si trova all’interno <strong>di</strong> un d<strong>at</strong>abase OSPF. Insieme agli<br />
altri tipi <strong>di</strong> record, fornisce le informazioni necessarie al calcolo della topologia della rete. In<br />
particolare, questo record è gener<strong>at</strong>o dal design<strong>at</strong>ed router per le reti <strong>di</strong> transito, ed elenca tutti<br />
i router presenti sulla LAN; viene propag<strong>at</strong>o sul backbone dai backbone router.<br />
6. Un router link st<strong>at</strong>e è un record che si trova all’interno <strong>di</strong> un d<strong>at</strong>abase OSPF. Insieme agli<br />
altri tipi <strong>di</strong> record, fornisce le informazioni necessarie al calcolo della topologia della rete. In<br />
particolare, questo record riporta le informazioni su tutti i link connessi al router che sta facendo<br />
l’advertising. Le informazioni riport<strong>at</strong>e comprendono quin<strong>di</strong> tutti i router a<strong>di</strong>acenti e tutte le<br />
LAN colleg<strong>at</strong>e; viene propag<strong>at</strong>o solo all’interno dell’area (sia per le aree non backbone che per<br />
il backbone).<br />
7. La corretta sommarizzazione delle route porta alla creazione <strong>di</strong> routing table concise e <strong>di</strong> <strong>di</strong>mensioni<br />
rel<strong>at</strong>ivamente piccole, che sono tuttavia in grado <strong>di</strong> instradare correttamente i pacchetti.<br />
Pertanto la sommarizzazione è molto importante in qualsiasi protocollo progett<strong>at</strong>o per avere la<br />
car<strong>at</strong>teristica <strong>di</strong> scalabilità, come OSPF.<br />
47