Il blog sull'informatica

EIGRP – Parte Prima

L’EIGRP (Enhanced Interior Gateway Routing Protocol) è un protocollo proprietario Cisco e rappresenta la naturale evoluzione dell’IGRP. Sostanzialmente, abbiamo a che fare con un protocollo di tipo ibrido, il quale prevede alcune caratteristiche tipiche dei protocolli distance vector ed altre comuni ai protocolli link-state. Infatti, l’EIGRP per individuare il cammino migliore verso una certa destinazione, oltre a considerare il costo del cammino stesso (chiamato metrica), tiene conto anche dell’hop count (come avviene per il RIP ed il RIPv2), il cui valore massimo è pari a 100. Inoltre, l’invio delle tabelle di routing viene effettuato solo verso i router vicini (neighbors).

Le caratteristiche dell’EIGRP tipiche dei protocolli link-state sono 2: l’invio di update ai router vicini solo nel caso in cui vi siano dei cambiamenti nell’ambito della topologia (i quali fungono da trigger) e la presenza, all’interno degli update stessi, delle sole rotte che hanno subito una variazione (partial update).

E’ bene notare che l’EIGRP supporta le VLSM (è quindi un protocollo classless), è indipendente dai protocolli di livello 2 utilizzati (ad esempio Frame Relay, Ethernet, ecc.) ed è compatibile con diversi protocolli di livello 3, quali IP, IPX ed Appletalk. Nella fattispecie, l’EIGRP prevede una gestione separata e contemporanea di quest’ultimi, ad esempio mediante i moduli IP-EIGRP, IPX-EIGRP, ecc. Inoltre, la sua distanza amministrativa è pari a 90 se viene utilizzato nell’ambito di un unico AS (Autonomous System), mentre è 170 se impiegato tra AS diversi.

Detto ciò, possiamo introdurre la terminologia tipica del protocollo in questione.

Successor: è il router adiacente (vicino) che possiede il cammino di minor costo verso una certa destinazione (network) e che non può essere coinvolto in routing loop. Tale cammino viene detto successor route (SR) e possono esisterne diversi contemporaneamente riguardanti un’unica destinazione (per default sono 4 ma il loro numero può essere aumentato manualmente fino a 16).

Feasible Successor: è il router adiacente che possiede il cammino con il secondo minor costo (subito dopo quello relativo al successor) verso una certa destinazione.  Tale cammino prende il nome di feasible successor route (FSR) e può essere inteso come backup della successor route. Anche le feasible successor route verso una stessa destinazione possono essere più di una.

Advertised Distance (AD): rappresenta il costo del cammino esistente tra il router adiacente ed una certa destinazione (network).

Feasible Distance (FD): costo del link che connette il router ad un suo adiacente + costo del link esistente tra il router adiacente considerato e la rete di destinazione.

Affinchè una data rotta venga eletta a feasible successor route è necessario che la sua AD sia strettamente minore dell’FD relativa alla successor route (AD FSR < FD SR). Ciò è necessario per evitare la formazione di routing loop.

L’algoritmo utilizzato per il calcolo delle SR e delle FSR prende il nome di DUAL (Diffusing Update Algorithm). Esso garantisce tempi molto bassi di convergenza della rete, poco spreco di risorse locali (ad esempio CPU e RAM) e l’assenza di routing loop.

Inoltre, l’EIGRP utilizza ben 3 tabelle per svolgere le proprie mansioni, ovvero:

Neighbor table: in cui sono salvate le informazioni relative ai router vicini (adiacenti). Per visualizzarla basta digitare:

Router# sh ip eigrp neighbors

Per completezza, di seguito riporto uno stralcio dell’output relativo al comando sopra citato:

IP-EIGRP Neighbors for process 77

H Address                 Interface     Holdtime Uptime   Q      Seq  SRTT  RTO

1  (secs)   (h:m:s)  Count  Num  (ms)  (ms)

2 160.89.81.28            Ethernet1     13       0:00:41  0      11   4     20

3 160.89.80.28            Ethernet0     14       0:02:01  0      10   12    24

4 160.89.80.31            Ethernet0     12       0:02:02  0      4    5     20

dove H (handle) è un numero utilizzato dalla IOS per identificare univocamente il router adiacente; Address rappresenta l’indirizzo di livello 3 del router adiacente; Interface è l’interfaccia locale a cui è connesso il router vicino; Uptime è tempo in ore, minuti e secondi trascorso da quando è stata formata l’adiacenza con il vicino; Smooth Round Trip Timer (SRTT) è il tempo medio in millisecondi impegato per l’invio di un pacchetto EIGRP ad un vicino e la successiva ricezione di un ACK. Viene usato per calcolare il tempo di ritrasmissione (RTO); RTO è l’intervallo di tempo in millisecondi durante il quale il router si aspetta di ricevere un ACK. Se allo scadere del suddetto intervallo l’ACK non viene ricevuto si procede con la ritrasmissione del pacchetto. La ristrasmissione può avvenire per un massimo di 16 volte (sempre entro i limiti dell’hold-time). Superati i 16 tentativi il router proverà a ricreare l’adiacenza. Occorre, inoltre, fare attenzione ai seguenti campi: Q Cnt (Queue Count), il quale rappresenta il numero di pacchetti in coda che devono essere trasmessi; Seq num, ovvero il numero di sequenza del pacchetto ricevuto dal vicino (solo se richiede ACK); Multicast flow timer, che indica il tempo massimo oltre al quale il pacchetto viene inviato in unicast anzichè in multicast. Potrebbe infatti accadere che uno dei vicini sia più lento a rispondere (con un ACK) rispetto agli altri. Quando ciò si verifica, per non posticipare troppo l’invio in multicast del pacchetto successivo, le informazioni vengono trasmesse nuovamente in unicast verso il router adiacente che ha ritardato nella risposta.

Topology table: in cui sono presenti tutte le rotte pubblicate dai router adiacenti (comprese le successor route e le feasible successor route). Per visualizzarla basta digitare:

Router# sh ip eigrp topology all-links

Digitando solo:

Router# sh ip eigrp topology

visualizzerei esclusivamente le successor route e le feasible successor route. In tal caso, avrei un output simile al seguente:

IP-EIGRP Topology Table for process 77

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,

r - Reply status

P 172.16.90.0 255.255.255.0, 2 successors, FD is 46251776

via 172.16.80.28 (46251776/46226176), Ethernet0

via 172.16.81.28 (46251776/46226176), Ethernet1

via 172.16.80.31 (46277376/45251776), Serial0

P 172.16.81.0 255.255.255.0, 1 successors, FD is 307200

via Connected, Ethernet1

via 172.16.81.28 (307200/281600), Ethernet1

via 172.16.80.28 (317200/281600), Ethernet0

NB: La parola chiave Passive (rappresentata dalla lettera P) indica che l’algoritmo DUAL non è in esecuzione, ovvero SR ed FSR verso quella specifica destinazione sono ancora up e disponibili. Inoltre, per la rete 172.16.90.0 255.255.255.0 abbiamo 2 successor route, la cui feasible distance (FD) è pari a 46251776 (primo valore tra parentesi), mentre la loro advertised distance (AD) vale 46226176 (secondo valore tra parentesi). La terza entry, invece, rappresenta la feasible successor route.

Per la rete 172.16.81.0 255.255.255.0 abbiamo una sola successor route (via 172.16.81.28) ed una sola feasible successor route (via 172.16.80.28).

Routing table: in cui sono presenti esclusivamente le successor route verso ciascuna destinazione. Posso visualizzarle mediante il comando:

Router# sh ip route eigrp

Per visualizzare tutte le rotte indiscriminatamente (anche quelle che non sono state imparate mendiante EIGRP), basta scrivere:

Router# sh ip route

L’output sarà simile al seguente:

Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 6 subnets
D       172.16.252.0 [90/2681856] via 172.16.250.2, 00:18:54, Ethernet0/0
C       172.16.250.0 is directly connected, Ethernet0/0
C       172.16.251.0 is directly connected, Ethernet0/1
D       172.16.50.0 [90/2195456] via 172.16.250.2, 00:18:54, Ethernet0/0
C       172.16.1.0 is directly connected, Loopback0
D       172.16.100.0 [90/2707456] via 172.16.250.2, 00:18:54, Ethernet0/0
C    192.168.1.0/24 is directly connected, Loopback1

dove le rotte imparate mediante EIGRP sono precedute dalla lettera D. Tra le parentesi quadre sono presenti 2 valori, ovvero la distanza amministrativa e la metrica. Inoltre, è presente il tempo trascoro da quando il router ha imparato quella determinata rotta attraverso l’EIGRP, ad esempio 00:18:54. Infine, abbiamo l’interfaccia attraverso la quale vengono instradate le informazioni verso la destinazione (ad esempio Ethernet0/0 per la rete 172.16.252.0).

Tecnologie EIGRP

Le teconologie supportate dall’EIGRP sono le seguenti:

– Scoperta dinamica dei vicini (attraverso l’invio e la ricezione dei pacchetti hello);

– Uso dell’RTP (Reliable Transfer Protocol) per l’invio di informazioni critiche, quali update, query e reply. La corretta ricezione di tali informazioni viene garantita attraverso gli ACK ed i numeri di sequenza.

– Algoritmo DUAL per l’individuazone del cammino più efficiente senza loop verso ciascuna destinazione (già accennato in precedenza);

– Moduli per la gestione dei protocolli di livello 3 (già mensionati in precedenza).

Pacchetti EIGRP

Esistono 5 tipi di pacchetti EIGRP:

– Hello: usati per la creazione dinamica delle adiacenze. Vengono inviati in multicast all’indirizzo 224.0.0.10 e non richiedono ACK. L’intervallo di tempo esistente tra l’invio di un hello packet e quello immediatamente successivo prende il nome di hello interval. Per i collegamenti con banda elevata tale lasso di tempo è pari a 5 secondi (per default), invece per i link più lenti (con banda <= T1) ammonta a 60 secondi. Inoltre, l’adiancenza viene rimossa allo scadere del cosiddetto hold time (per default pari a 3 volte l’hello interval), ovvero il numero di secondi di attesa senza ricezione di hello prima che il router dichiari il vicino irraggiungibile.

Per impostare l’hello interval occorre digitare:

Router(config-if)# ip hello-interval eigrp <AS> <secondi>

dove AS rappresenta il numero che identifica l’Autonomous System.

Per ciò che concerne, invece, la configurazione dell’hold time, basta scrivere:

Router(config-if)# ip hold-time eigrp <AS> <secondi>

NB: l’hello-interval e l’hold-time tra due router vicini può non coincidere. Ciò non causerà la mancata formazione dell’adiacenza (come invece avviene nell’ambito dell’OSPF).

– Update: servono ad aggiornare le informazioni relative alle rotte. Vengono inviati solo ai router interessati dalla rotta che ha subito il cambiamento e nel caso in cui venga scoperta una nuova route vengono inoltrati in multicast. Richiedono ACK e numero di sequenza.

– Query: tale tipologia di pacchetto viene inviato ai router vicini nel caso in cui non si conosca nè successor route nè feasible successor route verso una data destinazione. Richiedono ACK e numero di sequenza.

– Reply: rappresentano la risposta alle query. Vengono instradati in unicast verso il router che ha generato la query stessa.

– ACK: sono sostanzialmente dei pacchetti hello inviati in unicast (poichè, a loro volta, gli hello non richiedono ACK).

Metrica

Il calcolo della metrica utilizzata dall’EIGRP può tener conto di 5 variabili (solo 2 per default), ovvero:

– Banda (Bandwidth);

– Ritardo (Delay);

– Affidabilità (Reliability – parametro basato sui Keepalive);

– Carico presente sul collegamento (Loading);

– MTU (Maximum Transfer Unit), parametro che rappresenta la dimensione massima dei pacchetti che possono attraversare una data interfaccia.

La formula per calcolare la metrica è la seguente (nel caso in cui K5 è pari a 0):

(K1 * banda) + [(K2 * banda) / (256 – carico)] + (K3 * ritardo).

Per K5 diverso da 0 la metrica si calcola come:

{(K1 * banda) + [(K2 * banda) / (256 – carico)] + (K3 * ritardo)} * [K5 / (affidabilità + K4)]

Per default K1=K3=1 e K2=K4=K5=0, perciò la formula si riduce a:

banda + ritardo.

NB: la banda utilizzata dall’EIGRP nell’ambito delle due formule sopra riportate è differente da quella dichiarata mediante il comando bandwidth. Infatti, il suo valore può essere calcolato nel modo seguente:

banda EIGRP = (10^7 / banda settata mediante il comando bandwidth) * 256

Discorso simile vale per il ritardo (delay):

ritardo EIGRP = (somma dei ritardi di ciascun collegamento) * 256

NB: la metrica EIGRP non è altro che la Feasible Distance (FD).

Attenzione: i valori associati a K sono contenuti all’interno dei pacchetti hello ed una loro errata configurazione potrebbe causare la rimozione dell’adiacenza.

Ultima nota: la metrica EIGRP viene rappresentata attraverso 32 bit, contro i 24 dell’IGRP. Quindi per passare dalla metrica EIGRP a quella IGRP devo moltiplicare per 256 (viceversa devo dividere per 256). Naturale conseguenza è che la prima parte di ciascuna formula è ereditata dall’IGRP ed il prodotto per 256 fà in modo che il valore risultante non sia più espresso mediante 24 bit bensì attraverso 32 bit.

Il post termina qui. Prossimamente vedremo in dettaglio come funziona l’algoritmo DUAL. A presto.

EIGRP – Parte Primaultima modifica: 2009-12-13T16:11:15+01:00da
Reposta per primo quest’articolo