Posts Tagged ‘routing’

Funzionamento del protocollo OSPF

L’Open Shortest Path First (in seguito, OSPF) è un protocollo di routing link state pubblico e non proprietario.

I router che utilizzano protocolli link state identificano i propri vicini e comunicano con essi. L’OSPF raccoglie le informazioni dai router vicini circa lo stato dei link di ognuno di essi e invia i suoi dati agli altri. Questo scambio di informazioni sullo stato dei link permette ai router di creare la topology table o (link state database). Ogni router nella stessa area OSPF ha la stessa topology table e viene usata per calcolare la rotta migliore fino a una destinazione applicando l’algoritmo SPF (Shortest Path First). L’algoritmo SPF si basa sul costo che è principalmente basato sulla larghezza di banda; il percorso a costo più basso viene inserito nella routing table (o forwarding database).
Ogni router mantiene una lista di router vicini chiamata adjacency database. Tale lista è formata da tutti i router vicini con cui un router stabilisce una comunicazione bidirezionale ed è unica per ogni router. Per ridurre il numero di informazioni di routing scambiate tra i vicini all’interno della stessa rete, i router OSPF eleggono un designated router (DR) e un backup designated router (BDR) che vengono utilizzati come punti focali per lo scambio di informazioni di routing.

L’OSPF è un protocollo da utilizzare in reti estese e scalabili dove i limiti dei protocolli distance vector rendono improponibile utilizzarli, sia per utilizzo di metriche non basate sulla larghezza di banda che per la lenta convergenza del protocollo (in reti estese il RIP può avere la convergenza di alcuni minuti). Le principali differenze sono state già trattate in altri articoli.

OSPF si interfaccia con le reti broadcast multi-access (come l’Ethernet), pont-to-point e Nonbroadcast multi-access (NBMA, come il Frame Relay). Le reti di tipo point-to-multipoint possono essere configurate manualmente su un’interfaccia dall’amministratore.
In una rete multi-access non si conosce il numero di router a cui si è connessi, mentre nel collegamento point-to-point solo due router possono essere connessi. In una rete broadcast multi-access il numero di adiacenti può essere elevato e varia in base al numero di router della rete. In generale se N è il numero di router il numero di potenziali adiacenti sarà dato dalla formula

N*(N-1)/2

e ciò provocherebbe molto overhead. La soluzione di questa problematica sta nell’eleggere un DR che diventa adiacente di tutti gli altri router nel segmento di broadcast, quindi tutti i router inviano i LSA al DR ed esso invierà le informazioni  a tutti i router del segmento usando l’indirizzo multicast 224.0.0.5. Questa soluzione è efficiente ma presenta lo svantaggio che il DR funge come centro stella, quindi con problemi per la rete in caso di rottura. Per questo viene eletto un BDR tra i designated router. Per garantire la sincronizzazione delle informazioni tra DR e BDR vengono inviate le informazioni all’indirizzo 224.0.0.6.
Ovviamente in una rete point-to-point ci sono solo due nodi e non esistono né DR né BDR: entrambi i router hanno le complete adiacenze con l’altro.

Quando viene avviato un processo di routing OSPF su di un’interfaccia, il router manda pacchetti “hello” a intervalli regolari (Hello protocol) attraverso l’indirizzo 224.0.0.5 che invia il pacchetto a tutti i router OSPF. Tali pacchetti (molto piccoli, hanno solo un OSPF header) vengono inviati ogni 10 secondi di default, ogni 30 per reti NBMA e sono importanti poiché attraverso essi vengono eletti il DR e il BDR.

Funzionamento

Come già accennato, l’avvio di un processo OSPF su di un’interfaccia fa si che il router invii pacchetti hello a intervalli regolari; le regole che governano lo scambio di pacchetti hello viene chiamato hello protocol. In una rete multi-access l’hello protocol fa si di eleggere un DR e un BDR. I pacchetti hello trasportano le informazioni e tutti i vicini devono essere sincronizzati per formare adiacenze e scambio di informazioni sullo stato dei link. In reti multi-access sono il DR e il BDR a dover mantenere le adiacenze con tutti gli altri router OSPF.

I router adiacenti attraversano una sequenza di stati. Prima di formare la routing table i router adiacenti devono essere a conoscenza della topologia dell’intera rete. Ogni router invia LSA nei Link State Update (LSU) e tale LSA contiene al suo interno tutte le informazioni sui link del router; viceversa, ogni router riceve un LSA da ogni vicino per formare il topology database. Tale processo si ripete per ogni router della rete OSPF.

Quando il database è completo ogni router applica l’algoritmo SPF per calcolare una topologia logica esente da loop per ogni rete di destinazione da inserire nella routing table. Le informazioni di routing sono così fissate; quando vi è la variazione dello stato di un link, i routers usano un processo di flooding per notificare agli altri router della rete il cambiamento. Inoltre, per verificare se un adiacente è down, l’hello protocol impone un dead interval.

Link state routing protocol

Abbiamo già visto in un precedente articolo quali sono le principali differenze tra i protocolli di routing distance vector e i protocolli link state. In questo articolo continuiamo la trattazione e vedremo nel dettaglio le caratteristiche dei protocolli link state; prima, però, riprendiamo le differenze tra le due classi di protocolli di routing.

I protocolli distance vector (come RIP e IGRP) presentano le seguenti caratteristiche:

  • inviano l’intera tabella di routing ai router vicini;
  • aggiornamenti periodici frequenti;
  • metrica basata sui salti (solo il RIP);
  • vedono la rete dalla prospettiva dei vicini;
  • convergenza lenta;
  • possibili routing loops;
  • semplicità di configurazione;
  • alto consumo di banda.

Caratteristiche dei protocolli link state:

  • aggiornamenti al variare della topologia della rete;
  • uso dello Shortest Path;
  • invio di pacchetti link-state a tutta la rete (LSA, Link State Advertisement);
  • vista totale della rete in comune tra i router;
  • convergenza veloce;
  • non suscettibili di routing loops;
  • complessi da configurare;
  • richiedono molta memoria e potenza computazionale;
  • consumano poca banda.

Un router che utilizza protocolli link state colleziona le informazioni da tutti gli altri router nella rete e, successivamente, calcola il miglior percorso (SPF algorithm) per tutte le destinazioni della rete stessa. Le variazioni della rete vengono acquisite dai router in maniera veloce: le informazioni vengono inviate in maniera non periodica ma al variare della topologia (triggered updates). Inoltre, vengono inviati dei pacchetti “hello” per verificare la raggiungibilità dei vicini. Informazioni di “hello” e LSAs costituiscono lo strumento per conoscere la topologia della rete per poter creare la tabella di routing (routing table).

Quando vi è una rottura nella rete si ha un fooding di pacchetti LSAs a un indirizzo multicast dedicato; ogni router invia queste informazioni su tutte le porte tranne su quella in cui l’informazione è arrivata. Questo fa si che ogni router appartenente a una certa area debba ricalcolare le rotte, ecco perché il numero di router di un’area deve essere limitato.

Un link è un’interfaccia del router. Lo stato di un link è la descrizione dell’interfaccia e della relazione con i router vicini. La descrizione dell’interfaccia può includere l’indirizzo IP della stessa, la subnet mask, il tipo di rete a cui è connessa, i router connessi ecc. L’insieme di tali informazioni forma il database link state meglio conosciuto come database topologico (topological database). Applicando l’algoritmo di Dijkstra (SPF, Shortest Path First) si forma un albero SPF in cui il router che lo applica è la radice (root). Il percorso migliore calcolato viene inserito nella routing table.

Vediamo di riassumere i vantaggi e gli svantaggi dei protocolli link state. Vantaggi:

  • utilizzo del costo di un link come metrica che tiene conto della capacità del link;
  • utilizzo di LSAs per informare immediatamente gli altri router dei cambiamenti della topologia della rete così da avere un convergenza veloce;
  • vista completa della rete, i routing loops sono facilmente evitabili;
  • routing table sempre aggiornata in base alle ultime informazioni ricevute;
  • supporto a CIDR e VLSM.

Svantaggi dei protocolli link state:

  • richiedono maggiore memoria e potenza di calcolo rispetto ai protocolli distance vector. Questo può determinare un costo eccessivo per un’azienda con poco budget o con hardware datato;
  • richiedono una struttura gerarchica della rete per poterla suddividere in aree più piccole e gestibili riducendo la dimensione della topology table;
  • richiedono una buona conoscenza del protocollo da parte dell’amministratore di rete;
  • effettuano un flooding di LSAs durante il processo di discovery iniziale che può determinare un significativo calo della capacità della rete in questo periodo.

RIP v2 e default routes su router cisco

In questo articolo terminiamo la trattazione sul RIP iniziata nei precedenti articoli, RIP e configurazione sui router cisco e RIP: load balancing e integrazione delle rotte statiche, fornendo una comparazione tra il RIPv1 e il RIPv2.

Entrambe le versioni di RIP sono dei protocolli distance vector, sono facili da configurare e usano l’hop count come metrica (dopo 15 hop la rete viene posta come irraggiungibile), usano l’holddown timers e lo split horizon per evitare i routing loops. I router hanno conoscenza delle sottoreti direttamente connesse e gli aggiornamenti includono informazioni sulla topologia (almeno la metrica); tali aggiornamenti avvengono in maniera periodica.

Il RIPv2 apporta dei vantaggi rispetto alla prima versione del protocollo. In particolare il RIPv2:

  • supporta il classless routing;
  • include nei routing updates le subnet mask;
  • ha un meccanismo di autenticazione negli updates (utilizza la criptatura MD5);
  • invia gli aggiornamenti in multicast (indirizzo 224.0.0.9) anziché in broadcast;
  • usa un routing tag con VLSM.

La configurazione del RIPv2 è identica a quella del RIPv1, l’unica differenza sta nell’inserire il comando version 2, come da esempio sotto:

Router(config)#router rip
Router(config-router)#version 2
Router(config-router)#network network-number

Per la verifica della configurazione si possono utilizzare i comandi show ip protocols, show ip route e show ip interface brief oltre, ovviamente, a show running-config. Il troubleshooting del RIPv2 può avvenire con il comando debug ip rip mentre per disattivare il debug basta inserire no debug all oppure undebug all.

Prima di concludere parliamo della rotta di default (default route). In generale, un router apprende il percorso verso una data destinazione in tre modi: attraverso una rotta statica (l’amministratore inserisce manualmente la rotta), con una rotta dinamica (grazie agli aggiornamenti inviati secondo un protocollo di routing) oppure per mezzo di una default route.
L’amministratore di rete può definire manualmente una rotta di default, cioè il percorso da seguire nel caso in cui non conosca alcuna rotta per raggiungere la destinazione. La rotta di default porta come vantaggio l’avere una ridotta tabella di routing e un percorso di default per destinazioni non conosciute.
La default route può essere impostata dal comando ip default-network in reti che utilizzano routing dinamico:

Router(config)#ip default-network rete

ad es.:

Router(config)#ip default-network 192.168.10.0

oppure attraverso una rotta statica, ad es.:

Router(config)#ip route 0.0.0.0 0.0.0.0 s0/0

dove gli zeri sia nel campo ip che nella subnek mask indicano ogni rete di destinazione con qualsiasi maschera. L’s0/0 è interfaccia su cui inviare i pacchetti (nell’esempio la seriale 0, dovete modificarla in base alle vostre esigenze).

VLSM, CIDR e aggregazione delle rotte

La Variable-length subnet mask (VLSM) è una tecnica utilizzata dagli amministratori di rete per usare in maniera più efficiente gli indirizzi IP. Con la VLSM si offre una maschera più lunga a reti con molti host e una maschera più corta per reti con pochi host, ovvero la maschera varia a seconda del numero di indirizzi necessari a quella rete.
Per implementare la VLSM bisogna, ovviamente, utilizzare un protocollo di routing che supporta il classless routing (un protocollo che, invece, non supporta le VLSM viene detto classful). I protocolli di routing classless su cui utilizzare la VLSM nei router cisco sono:

  • OSPF
  • Integrated IS-IS
  • EIGRP
  • RIP v2
  • BGP v4
  • Routing statico

I protocolli di routing classful sono, invece:

  • RIP v1
  • IGRP
  • EGP
  • BGP v3

Il classless routing nasce per il problema della carenza di indirizzi IP dovuto al veloce aumento delle dimensioni delle tabelle di routing di Internet. Le soluzioni a questo problema sono state il subnetting, la VLSM appunto, il Classless Interdomain Routing (CIDR), l’utilizzo di indirizzi IP privati e il Network Address Translation (NAT). La soluzione definitiva sarà l’utilizzo del protocollo IPv6 che avrà un’astensione di 128bit per gli indirizzi di rete (quindi uno spazio di indirizzamento enorme).

In principio era stato deciso di non utilizzare né la prima (subnet zero) né l’ultima subnet (all-one subnet), successivamente è stato consentito l’uso anche di tali subnet, soprattutto in unione alle VLSM. Per non utilizzare la prima subnet sui router cisco basta digitare il comando no ip subnet-zero.

Le VLSM sono utilissime per utilizzare in maniera efficiente subnet con pochi host, in particolare per i collegamenti Point-to-Point con i WAN links in cui si può usare una maschera di 30 bit (/30) con 2 soli host utilizzabili.
Inoltre, l’uso di CIDR e VLSM permette di effettuare l’aggregazione delle rotte o summarization. Tale tecnica consiste nel fornire al router di uscita di una grande organizzazione (ad es. un ISP) un indirizzo che riepiloga le sottoreti raggiungibili da esso riducendo così il carico sul router. Per fare ciò è necessario che gli indirizzi vengano assegnati in maniera gerarchica in modo che gli indirizziriassuntivi” condividano lo stesso ordine superiore bit.

Distance vector e routing loop

Abbiamo visto nei precedenti articoli le caratteristiche principali dei protocolli che utilizzano l’algoritmo di routing distance vector e in particolare che ogni router invia periodicamente la sua intera tabella di routing ai router adiacenti compreso il costo totale del percorso (metrica) e l’indirizzo del primo router del cammino nel percorso (detto next hop). Tuttavia l’algoritmo distance vector soffre di una problematica: i loop.

I routing loop si possono verificare se le routing table non sono aggiornate o sono inconsistenti a causa di una lenta convergenza del protocollo. Facciamo un esempio con la figura di seguito riportata.

Distance vector routing loop

Distance vector routing loop

In questa situazione può capitare che se una tratta diventa isolati; quando la rete 1 si guasta il router E emette un updateverso A. Il router A blocca l’instradamento verso la rete 1, ma i router B, C e D continuano ad inviare pacchetti verso A perché ancora non sono aggiornati sul guasto della rete 1. Appena A emette gli updateverso B e D questi bloccano le emissioni verso la rete 1. In questa situazione, il router C ancora vede la rete 1 come raggiungibile attraverso il router B; il router C manda un update verso D indicando che il path verso la rete 1 è attraverso B. Il router D aggiorna la sua routing table e propaga questa informazione verso il router A. Il router A rilancerà l’update verso i router B ed E. A questo punto ogni pacchetto emesso da C destinato alla rete 1 seguirà un looptra i router C, B, A e D.

Gli update non validi relativi alla rete 1 continueranno fino a che un altro processo non fermerà il loop. Questa situazione, detta Count-to-Infinity, è creata dalla propagazione di informazioni di routing non valide. Per evitare il count-to-infinity, i protocolli distance vector definiscono “infinity” uno specifico numero massimo (self-correcting); con tale approccio il routing protocol permette al loop di continuare sino a che la metrica non eccede il massimo valore permesso. Quando il valore della metrica eccede il massimo valore la rete è considerata non raggiungibile.

In poche parole, i loop avvengono quando gli update non corretti contraddicono gli update corretti. Per evitare questa situazione si è implementato lo Split Horizon, ovvero le informazioni di rete irraggiungibile da parte di un router non possono tornare indietro allo stesso router da parte degli adiacenti. Con questa tecnica si riducono sia le informazioni errate che il tempo necessario alla convergenza della rete.
Un ulteriore metodo per aumentare la convergenza della rete è utilizzare il route poisoning, ovvero si fa in modo che il primo router (nella figura il router E) che identifica la rete come irraggiungibile modifica la metrica di tale rete al numero massimo (e quindi la pone subito come irraggiungibile anche per i router adiacenti). Un ulteriore passo di convergenza è l’invio di update appena si verifica l’irraggiungibilità (trigger update) senza aspettare l’update periodico. I triggered update, usati in congiunzione con il route poisoning, assicurano che tutti i router sappiano delle route indisponibili nel piùbreve tempo possibile.

L’ultima tecnica per evitare i routing loop è l’holddown timer, vediamone il funzionamento. Quando un router riceve un update da un vicino che gli indica che una rete prima accessibile adesso non lo è più, il router marca la rete come tale e fa partire un holddown timer. Se arriva un update prima che tale timer si esaurisca dallo stesso vicino indicando che la rete in questione è di nuovo accessibile allora il timer è rimosso e la rete marcata come accessibile. Se un update arriva da un router vicino diverso con una metrica migliore di quella originale allora il router marca la rete come accessibile e ferma l’holddown timer. Se prima che l’holddown timer scada si riceve un update da un router vicino diverso dal primo, con una metrica peggiore, l’update è ignorato; ignorare un update di tale tipo ha lo scopo di dare più tempo all’informazione di irrangiugibilità della rete di propagarsi.

CountGli updatenon validi relativi alla rete 1 continueranno fino a che un altro processo non fermeràil loopQuesta situazione, detta CounttoInfinity, ècreata dalla propagazione di informazioni di routingnon validePer evitare il counttoinfinity, i protocolli distancevectordefiniscono “infinity”uno specifico numero massimo (self-correcting)Con tale approccio il routingprotocolpermette al loopdi continuare sino a che la metrica non eccede il massimo valore permessoQuando il valore della metrica eccede il massimo valore la rete èconsiderata non raggiungibile

Introduzione ai protocolli di routing: AS, distance vector e link state

Un protocollo di routing è un processo di comunicazione tra router per scambiarsi informazioni; tali informazioni andranno a formare la tabella di routing (routing table). L’invio del traffico utente è affidato, invece, ai protocolli routed.I protocolli di routing stanno alla base del routing dinamico.

Esempi di protocolli di routing sono:

  • RIP (Routing Information Protocol)
  • IGRP (Interior Gateway Routing Protocol)
  • EIGRP (Enhanced Interior Gateway Routing Protocol)
  • OSPF (Open Shortest Path First)

Esempi di protocolli routed sono:

  • IP (Internet Protocol)
  • IPX (Internetwork Packet Exchange)

In questo articolo vedremo in maniera teorica la distinzione tra i protocolli di routing e in particolare tra 2 categorie di algoritmi utilizzabili: distance vectorlink state. Prima però diamo la definizione di sistema autonomo (autonomous system o AS). Un AS è un insieme di reti che stanno sotto la supervisione di uno stesso amministratore di rete e che condividono strategie di routing comuni.
Lo scopo dei protocolli di routing è mantenere aggiornata la tabella di routing in base alle variazioni della topologia della rete. Una convergenza veloce delle rete a informazioni aggiornate nella routing è senza dubbio desiderabile in quanto si riduce il periodo di tempo in cui i router prendono decisioni di routing non corrette. In questo ambito si inseriscono gli AS che dividono l’internetwork globale in piccole reti che sono così molto più gestibili.

Passiamo ora ad esaminare l’algoritmo distance vector. L’algoritmo di routing distance vector invia periodicamente copie della propria tabella di routing da un router ad un altro per comunicare le variazioni sulla topologia della rete;  gli invii avvengono tra router adiacenti direttamente connessi. L’algoritmo utilizzato è anche conosciuto come algoritmo di Bellman-Ford.
Ogni router confronta la tabella di router che gli è stata inviata con la sua, se vi sono variazioni nella topologia della rete la propria viene aggiornata. Ogni router invia interamente la propria tabella di routing ai router adiacenti. La tabella di routing include informazioni circa la metrica (costo totale del percorso). Non si conoscono con tale algoritmo informazioni riguardanti reti o router distanti.

L’algoritmo link state è anche chiamato algoritmo di Dijkstra o shortest path first (SPF). Tale algoritmo mantiene una complessa tabella con le informazioni sulla topologia della rete e ha conoscenza totale dei router distanti da esso e le reti a essi interconnesse.

Un protocollo link state ha le seguenti caratteristiche:

  • LSA (link state advertisement), un piccolo pacchetto contenente le informazioni di routing;
  • topological database, l’insieme delle informazioni raccolte tramite i LSA;
  • algoritmo SPF, effettua i calcoli in base alle informazioni contenute nel database;
  • routing table, la tabella contenente la lista dei percorsi e delle interfacce conosciute.

I router che utilizzano protocolli basati su link state hanno bisogno di maggiore memoria e potenza di calcolo di altri che utilizzano protocolli basati su distance vector. La maggiore memoria è dovuta al fatto di dover immagazzinare informazioni sui vari database, sulla topologia della rete e i dati della routing table.
Vediamo in breve il funzionamento.  Inizialmente avviene il processo di scoperta (discovery process) attraverso il flooding (letteralmente, inondazione) di pacchetti link state tramite pacchetti LSA a tutti gli altri router. Questo processo inonda la rete di pacchetti LSA riducendone temporaneamente la banda disponibile per il traffico utente. Dopo questa fase iniziale, però, i protocolli link state richiedono generalmente poca banda per inviare i LSA che verranno inviati solo quando vi saranno delle variazioni della topologia della rete.

Concludiamo dicendo che i router hanno 2 funzioni di base:

  • determinazione del percorso;
  • funzioni di switching.

A livello rete vi è la funzione di calcolo del percorso, che consente al router di calcolare il percorso di un pacchetto fino a destinazione e stabilisce quale sia la via migliore. Per effettuare tali scelte viene utilizzata la tabella di routing.
La funzione di switching è una funzione interna del router che ha il compito di inviare un pacchetto ricevuto su una interfaccia ad un’altra interfaccia dello stesso. Il compito principale dello switching è quello di incapsulare in maniera appropriata il pacchetto in base alla rete che ci si trova sulla porta di uscita.

Routing e rotte statiche

Il Routing è il processo usato da un router per inviare i pacchetti fino a destinazione e utilizza come metodo decisionale l’indirizzo IP di destinazione. La decisione per l’invio di pacchetti a una rete remota può avvenire in maniera statica o in maniera dinamica. In questo articolo vedremo come configurare sui router cisco le rotte in maniera statica (static routing) ovvero configurando manualmente le informazioni sulle reti remote. Ovviamente, essendo configurate manualmente, l’amministratore di rete deve aggiungere o rimuovere rotte statiche ogni volta ci sia una variazione della topologia della rete.

Sui router cisco il comando da utilizzare per inserire una rotta statica è il comando ip route seguito da 3 parametri obbligatori che sono: rete remota, maschera della rete e ip d’uscita (o l’interfaccia d’uscita). Facciamo un esempio. Si voglia inserire la rotta statica alla rete 192.168.10.0 con maschera 255.255.255.0 da un router che ha come interfaccia d’uscita una seriale (ipotizziamo la seriale1) che ha IP 192.168.4.1; possiamo definirla tramite 2 comandi equivalenti:

- Router(config)#ip route 192.168.10.0 255.255.255.0 s1

oppure

- Router(config)#ip route 192.168.10.0 255.255.255.0 192.168.4.1

poiché basta indicare o l’interfaccia d’uscita o il suo IP.

Un parametro opzionale è la distanza amministrativa (o administrative distance) che indica l’affidabilità di una rotta: una distanza amministrativa minore indica un’affidabilità maggiore. Essa può assumere un valore compreso tra 0 e 255; nelle rotte statiche, se non esplicitamente indicato, il valore della distanza amministrativa è 1.
Spesso la distanza amministrativa viene modificata per creare delle rotte statiche di backup nel caso in cui le rotte dinamiche (o dynamic routing) falliscano l’apprendimento. In questo caso bisogna indicare la rotta statica con un valore della distanza amministrativa più alta di quella del dynamic routing utilizzato. Ad esempio:

- Router(config)#ip route 192.168.10.0 255.255.255.0 s1 150

La default route è la rotta utilizzata per instradare i pacchetti che hanno una destinazione che non coincide con nessuna delle rotte che si trovano nella routing table. La default route è un tipo speciale di rotta statica che si scrive nel seguente modo:

- Router(config)#ip route 0.0.0.0 0.0.0.0 s1
oppure
- Router(config)#ip route 0.0.0.0 0.0.0.0 192.168.4.1

ovvero inserendo come ip e maschera di destinazione a 0 e inserendo alla fine l’interfaccia d’uscita.

La verifica della configurazione avviene tramite i comandi show running-config e show ip route in modalità privilegiata. Ovviamente, per ritrovarsi la configurazione dopo il riavvio del router bisogna salvare la configurazione sulla configurazione d’avvio con il comando show running-config startup-config.