12.06.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!