Archivi tag: dual

EIGRP – Parte Terza

In questo post vedremo come configurare correttamente L’EIGRP.

Per prima cosa occorre inizializzare il protocollo definendo l’AS all’interno del quale deve operare:

Router(config)# router eigrp <AS>

Successivamente è necessario definire le reti che tale protocollo deve pubblicare:

Router(config-router)# network <rete> [wildcard mask]

Nella fattispecie, la wildcard mask è facoltativa e rappresenta la classe della rete appena dichiarata. Ad esempio:

Router(config-router)# network 10.1.1.0 0.0.0.255

indica una rete di classe C, mentre:

Router(config-router)# network 192.168.1.0 0.0.255.255

indica una rete di classe B.

L’uso della wildcard mask consente di fornire al protocollo di routing in questione informazioni più dettagliate sulle reti che deve pubblicare, oltre a tenere sotto controllo gli effetti dell’auto summarization delle rotte.

Per configurare la default route che verrà utilizzata nell’ambito dell’EIGRP basta scivere:

Router(config)# ip default-network <rete>

(quest’ultima deve essere presente tra le network dichiarate all’EIGRP)

mentre per rimuoverla occorre usare il comando:

Router(config)# no ip route <rotta>

La default route così definita verrà redistribuita a tutti i router vicini. Ciò non accadrebbe se la default route venisse dichiarata con il comando:

Router(config)# ip route 0.0.0.0 0.0.0.0 <IP del router connesso direttamente>

Occorre notare, però, che nel caso in cui avessi dichiarato una rotta del tipo:

Router(config)# ip route 0.0.0.0 0.0.0.0 <interfaccia>

avrei potuto ottenere la ridistribuzione della stessa, previa dichiarazione della rete 0.0.0.0 all’EIGRP mediante il comando network, ovvero:

Router(config-router)# network 0.0.0.0

Summarization delle rotte

La summarization delle rotte consente di ridurre notevolmente le dimensioni delle tabelle di routing (con conseguente risparmio in termini di banda). In particolare, mediante questa caratteristica (abilitata per default nell’ambito dell’EIGRP), possono essere rappresentate più reti contemporaneamente mediante un unico indirizzo IP che le ingloba.

Per calcolare il numero di reti che possono essere aggregate nell’ambito di un unico indirizzo basta applicare la formula:

n = <numero di bit della subnet mask> – <numero di bit della summary mask>. 2^n mi darà il numero esatto delle reti che possono essere aggregate grazie alla summarization.

Facciamo un esempio. Supponiamo che si voglia aggregare le rotte 192.168.1.0/24, 192.168.2.0/24 e 192.168.3.0/24 mediante l’indirizzo 192.168.0.0/22. Apllico la formula sopra citata per individuare quante sono le subnet che posso rappresentare mediante questo indirizzo:

n = 24 – 22 = 2. Inoltre 2^2 = 4. Posso quindi rappresentare 4 subnet in tutto (le tre citate in precedenza e la 192.168.0.0/24).

Per disabilitare l’auto summarization basta digitare:

Router(config-router)# no auto-summary

mentre per impostare manualmente l’indirizzo di summarization occorre scrivere:

Router(config)# ip summary-address eigrp <AS> <indirizzo di summarization> <subnet mask relativa all'indirizzo di summarization> [distanza amministrativa]

In particolare, l’ultimo parametro ci consente di definire la distanza amministrativa per la rotta aggregata. Nel caso in cui non venisse definita dall’utente, EIGRP assegnerà alla rotta aggregata una distanza amministrativa pari a 5.

NB: affinchè il router che fa uso delle rotte aggregate non vada alla ricerca di rotte più specifiche (creando potenzialmente dei loop), le summarizated route punteranno ad un interfaccia software fittizia, ovvero Null0.

Load balancing

Una funzione molto interessante relativa all’EIGRP è il cosiddetto load balancing, ovvero il bilanciamento del carico. Tale caratteristica permette di instradare il traffico lungo più cammini aventi la stessa metrica (costo). Per default il bilanciamento del carico viene effettuato utilizzando un massimo di 4 cammini. Posso comunque definire manualmente il numero di cammini da utilizzare (fino ad un massimo di 16) attraverso il comando:

Router(config-router)# maximum-paths <numero di cammini>

NB: ponendo il parametro <numero di cammini> pari a 1 disabilito il load balancing. Inoltre, il load balancing viene applicato solo al traffico che passa attraverso il router e non a quello che viene generato dal router stesso.

E’ bene notare che il load balancing può essere applicato anche su cammini che non hanno la stessa metrica. In questo caso parliamo di unequal-cost load balancing. Posso implementarlo attraverso il comando:

Router(config-router)# variance <valore>

dove <valore> è un intero compreso tra 1 e 128 (1 indica l’equal-cost load balancing).

Per capire lungo quali rotte verrà bilanciato il traffico basta operare come segue:

1) considero la rotta avente metrica più bassa (ovvero la FD della successor route);

2) moltiplico la metrica (FD) per <valore>;

3) Una volta calcolato il prodotto, userò tutte le rotte aventi FD <= al prodotto stesso. Ad esempio:

RouterA FD 1100

RouterB FD 1100

RouterC FD 2000

RouterD FD 3000

Supponendo che il valore della varianza sia 2, otterrò:

1100 x 2 = 2200

Per il bilanciamento userò quindi le rotte che coinvolgono il router A, il router B ed il router C, ma non il router D. Tali rotte verrano salvate nell’ambito della tabella di routing.

Per controllare il bilanciamento del carico su rotte aventi metrica (FD) differente, occorre digitare:

Router(config-router)# traffic-share [balanced | min across-interfaces]

Con la keyword balanced distribuisco il carico proporzionalmente alla metrica (FD) dei cammini. Invece, mediante la keyword min across-interfaces effetto il bilanciamento solo lungo i cammini aventi metrica (FD) più bassa.

EIGRP e WAN

L’EIGRP lavora efficientemente nell’ambito delle WAN, sia per ciò che concerne i collegamenti point-to-point che per quanto riguarda le reti NBMA (point-to-point e multipoint).

Per default, l’EIGRP usa il 50% della banda dichiarata (mediante il comando bandwidth) su un’interfaccia fisica o su una sottointerfaccia virtuale, ma tale valore può essere modificato digitando:

Router(config-if)# ip bandwidth-percent eigrp 1 <percentuale>

dove <percentuale> può essere superiore al 100%, soprattutto se la banda dichiarata è inferiore all’effettiva capacità del canale.

Inoltre, per le reti Frame Relay, nel caso in cui la banda non venisse impostata in modo esplicito mediante l’apposito comando, essa verrà considerata uguale a quella tipica delle reti T1 (1544 Kbps).

Per quanto riguarda le topologie multipoint, la banda dichiarata deve essere suddivisa per il numero di vicini affinchè si possa calcolare la banda presente su ogni collegamento. Nel caso in cui vengano utilizzati link con capacità differente (CIR diversi tra loro), la banda da settare dovrà essere calcolata moltiplicando il CIR più basso per il numero di circuiti virtuali (VC).

NB: il CIR (Committed Information Rate) è un parametro usato nelle reti Frame Relay, il quale indica la banda minima garantita dal provider.

Autenticazione EIGRP

L’autenticazione EIGRP è disabilitata per default. Esistono, inoltre, due tipi di autenticazione:

Simple password authentication (detta anche plain text authentication);

– MD5 authentication.

L’MD5 calcola il digest della password (key) concatenata al suo ID, ovvero H(key || key ID). Mediante l’autenticazione sarà possibile riconoscere la sorgente dei messaggi ed il digest verrà inserito all’interno di tutti i pacchetti inviati nell’ambito del protocollo di routing in questione.

E’ possibile definire la durata (lifetime) relativa all’uso della password. Ciò conviene quando sono definite delle key-chains, le quali prevedono l’uso a rotazione delle password stesse. A tal proposito è necessario fare attenzione che non vi siano dei lassi di tempo in cui nessuna password risulta attiva (in questo caso i routing update falliranno sistematicamente). Inoltre, le password verranno utilizzate a partire da quella recante key ID più basso (a parità di lifetime).

NB: i router devono essere sincronizzati (mediante NTP – Network Time Protocol) affinchè usino la stessa password della key-chain per lo stesso lasso di tempo.

Per configurare l’autenticazione MD5 occorre digitare:

Router(config-if)# ip authentication mode eigrp <AS> md5

Creo dunque la key-chain:

Router(config-if)# ip authentication key-chain eigrp <as> <nome della chain>

Entro nella modalità di configurazione della chain:

Router(config)# key chain <nome della chain>

Router(config-key-chain)# key <key ID>

Setto la password vera a propria:

Router(config-key-chain)# key key-string <password>

(il primo carattere della password non deve essere un numero).

Posso definire opzionalmente il lasso di tempo durante il quale tale password viene accettata per gli update in ingresso:

Router(config-key-chain)# accept-lifetime <inizio> {infinite | <fine> | duration <secondi>}

Il formato di <inizio> e <fine> è il seguente:

hh:mm:ss giorno (1-31) mese (prime 3 lettere del mese in inglese) anno (4 cifre)

Per l’invio dei pacchetti contenenti il digest occorre digitare:

Router(config-key-chain)# send-lifetime <inizio> {infinite | <fine> | duration <secondi>}

NB: la key-string (password) viene salvata in chiaro se non viene digitato il comando service password-encryption.

Inoltre, se sia la key1 che la key2 per l’accept-lifetime hanno durata infinita, il router accetterà sempre sia i pacchetti contenenti il digest della key1 che quelli contenenti il digest della key2.

Viceversa, se il send-lifetime di una key è infinito (e tale chiave possiede l’ID più basso), verrà usata solo quella key durante l’invio dei pacchetti EIGRP.

Toubleshooting dell’autenticazione MD5

Il comando da utilizzare è il seguente:

Router# debug eigrp packets

l’output mostrerà il key ID e nel caso in cui le chiavi settate sui due router non coincidono, verrà visualizzata la dicitura “authentication mismatch”. In tal caso l’adiacenza verrà formata solo per un lasso di tempo molto breve. (“retry limit exceeded” e ” new-adjacency” come output).

Query EIGRP e stuck-in-active (SIA)

Se un router si accorge che la sua successor è down e che non esiste FSR, esso unvierà una query ai router vicini per individuare un percorso alternativo verso quella specifica destinazione. Se i router vicini non conoscono la risposta, propagheranno la query ai loro adiacenti e così via. Durante questo lasso di tempo la rotta rimarrà nello stato ACTIVE e non tornerà allo stato PASSIVE finchè alla query non seguirà una risposta (reply). Se tale risposta non viene ricevuta entro 3 minuti dall’invio della query, la rotta entra nello stato stuck-in-active (SIA).

NB: si può modificare il tempo limite oltre il quale viene dichiarato lo stuck-in-active della rotta digitando:

Router(config-router)# timers active-time <limite in minuti> oppure disabled

Appena il router identificherà lo stuck-in-active resetterà tutte le adiacenze con i vicini che non hanno risposto alla query.

Contromisure allo stuck-in-active

Esistono diverse contromisure allo stuck-in-active. Una di queste prende il nome di Active Process Enhancement. Per capire il funzionamento di tale meccanismo facciamo un esempio: il router A invia al router B una query che a sua volta verrà instradata verso il router C. Poichè vi è un problema relativo al collegamento tra il router B ed il router C, quest’ultimo non risponderà alla query, e di conseguenza B tarderà nell’invio della risposta ad A. Il router A crederà quindi che è il router B a presentare dei problemi e quindi rimuoverà l’adiacenza con lo stesso. Proprio per evitare una situazione del genere, a partire dalla IOS 12.1(5), è stato introdotto l’Active Process Enhancement. Grazie a tale meccanismo, il router B prima di inoltrare la query a C risponderà ad A attraverso un pacchetto SIA-reply, proprio per indicare il suo corretto funzionamento.

Un’altra contromisura allo stuck-in-active è rappresentata dal query range, detto anche query scoping. Esso limita la propagazione della query nell’ambito della rete, attraverso una route summarization oppure mediante l’uso di uno stub. Ad esempio, nel primo caso il router A invierà al router B una query richiedendo la rotta verso una specifica rete. Il router B, però, conosce la summarization di alcune rotte in cui è presente la rete cercata da A, ma non possiede nella propria tabella di routing l’indirizzo vero e proprio di quel network. Perciò, B risponderà ad A affermando che non conosce la rotta verso la rete che gli è stata richiesta.

Pe quanto riguarda lo stub, esso rappresenta un router che non può nè ricevere nè inviare le query EIGRP. Inoltre, a seconda dei casi, esso non può inviare alcuna rotta ai vicini, oppure può inoltrare solo le rotte direttamente connesse, le rotte statiche o le rotte aggregate. Per configurarlo occorre digitare:

Router(config-router)# eigrp stub [receive only | connected | static | summary]

Se invece viene specificato il comando:

Router(config-router)# eigrp stub

senza alcun parametro opzionale, lo stub inoltrerà solo le rotte direttamente connesse (previa loro esplicita dichiarazione mediante il comando network) e le summary route. Un altro modo per redistribuire le rotte direttamente connesse è quello di digitare il comando:

Router(config-router)# redistribuite connected

In questo modo, però, le rotte redistribuite verranno marcate come esterne dai router vicini che le hanno ricevute (flag EX) e quindi la loro distanza amministrativa non sarà 90 bensì 170.

Infine, è bene notare che uno stub deve essere necessariamente un router remoto ed in particolare, nelle topologie hub-n-spoke, uno stub è necessariamente uno spoke (per questo motivo può avere come vicini solo uno o più hub).

Graceful shutdown

Mediante il graceful shutdown un messaggio di disconnessione viene inviato dal router su cui non è più attivo il processo EIGRP. In questo modo si evita che l’adiacenza con i router vicini venga rimossa solo allo scadere dell’hold-timer, con conseguente spreco di banda.

Alcuni comandi utili

Di seguito riporto alcuni comandi utili per verificare il corretto funzionamento dell’EIGRP:

Router# sh eigrp neighbors

Router# sh ip route

Router# sh ip route eigrp

Router# sh ip protocols

Quest’ultimo mostra alcune informazioni riguardanti l’EIGRP quali il numero di AS, le summarization, l’hold-timer, il valore di K, la varianza, la distanza amministrativa, l’hop count e le filter list per il traffico in ingresso ed in uscita.

Abbiamo inoltre i seguenti comandi:

Router# sh ip eigrp int

che mostra le interfacce utilizzate dall’EIGRP

Router# sh ip eigrp topology

Router# sh ip eigrp topolgy all-links

Router# sh ip eigrp traffic

quest’ultimo mostra il numero di pacchetti EIGRP inviati e ricevuti. Inoltre, permette di visualizzare le statistiche relative a tutte e 5 le tipologie di pacchetti usati nell’ambito del protocollo in questione.

Router# debug ip eigrp

il cui output contiene informazioni sul calcolo della metrica

Router# debug ip eigrp summary

il quale mostra informazioni meno dispersive rispetto al comando debug ip eigrp

Router# debug eigrp neighbors

che permette di visualizzare il processo di individuazione dei vicini ed il contenuto dei pacchetti hello.

Router# debug ip eigrp packets

dove la dicitura nbr indica il vicino (neighbor), rely 1/0 indica che il pacchetto rappresenta la risposta ad un altro pacchetto che prevedeva la ricezione di un ACK (ad esempio un update), serno numero intero – numero intero indica il numero di cambiamenti che i due vicini hanno subito nell’ambito della loro tabella di routing, Seq 5/4 indica che il il vicino ha trasmesso un pacchetto con numero di sequenza pari a 5 e a tale pacchetto il router locale ha assegnato numero di sequenza pari a 4. La risposta al vicino dovrà contenere numero di sequenza pari a 5 (altrimenti il pacchetto verrà scartato). Inoltre, gli ACK avranno il primo valore del numero di sequenza uguale a 0 (ad esempio Seq 0/5), a testimonianza del fatto che essi non prevedono l’invio di un ulteriore ACK come conferma di avvenuta ricezione.

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 Seconda

In questo post mi soffermerò sull’algoritmo DUAL, il quale sta alla base del funzionamento dell’EIGRP. In particolare, tale algoritmo entra in funzione se si verificano le seguenti situazioni:

– Viene creata una rete ex novo su cui è attivo l’EIGRP. In questo caso DUAL si occupa di far convergere il network, altrimenti i vari router non potrebbero comunicare tra loro.

– Viene aggiunto un nuovo router alla rete, anch’esso con EIGRP in esecuzione.

– Successor route e feasible successor route di uno o più router non sono più praticabili. In tal caso DUAL si occuperà di identificare le nuove SR e le nuove FSR.

Per capire bene come si articola il funzionamento dell’algoritmo in questione possiamo fare un esempio. Supponiamo che vi siano 4 router con EIGRP attivo e che tutti i collegamenti siano funzionanti. In tal caso DUAL non è in esecuzione e tutte le successor route (ma anche le feasible successor route) sono marcate con la lettera P (passive).

 

DUAL.JPG

 

Ipotizziamo ora che il link tra il router D ed il router B subisca un guasto. D si accorge di quanto avvenuto e marca la rotta verso il network 10.1.1.0/24 mediante il router B come irraggiungibile (proprio grazie a DUAL). Successivamente, DUAL invierà ai router adiacenti a D, ovvero C ed E, un aggiornamento in cui si dichiara l’impossibilità di raggiungere la rete 10.1.1.0/24 attraverso il router D. Inoltre, poichè L’EIGRP usa lo split-horizon, C ed E non inviaranno a D le loro rotte verso la rete 10.1.1.0/24 che coinvolgono quest’ultimo.

 

DUAL2.JPG

 

A questo punto DUAL si accorge che il cammino tra B e D rappresentava proprio la successor route per D e che tale router non possiede alcuna feasible successor route. Occorre dunque calcolare per il router D una nuova SR ed una nuova FSR. Quindi, DUAL invia una query ai router C ed E chiedendogli una nuova rotta verso la rete 10.1.1.0/24 e marca entrambi con una query flag (q).

C risponde a D affermando che la sua SR verso la rete 10.1.1.0/24 non ha subito alcun cambiamento (in quanto sfrutta il collegamento diretto col il router B) ed invia tale rotta a D.

D riceve la risposta di C, rimuove la query flag da C ma lascia attivo (Active) lo stato della rotta verso il network 10.1.1.0/24, in quanto sta ancora aspettando la reply di E.

E risponde a D proponendogli la propria SR verso la rete 10.1.1.0/24. A questo punto D rimuove la query flag da E, calcola la FD delle due rotte che gli sono state inviate rispettivamente da C e da E e quella avente FD minore verrà utilizzata da D come SR. L’altra, invece, se la sua AD è inferiore rispetto alla FD della SR, verrà utilizzata come feasible successor route.

A questo punto DUAL mercherà in D la rotta verso il network 10.1.1.0/24 con la lettera P (Passive). Ciò significa che finalmente si è raggiunta la convergenza.

Prossimamente vedremo come configurare correttamente l’EIGRP. A presto.