Posts Tagged ‘router’

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.

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.

Introduzione alle Access Control Lists su router Cisco e alle wildcard mask

Le Access Control Lists (nel seguito ACLs) sono una lista di condizioni utilizzate per “controllare” il traffico e si applicano alle porte del router che decide se far passare un determinato pacchetto oppure bloccarlo. I criteri decisionali si basano sull’indirizzo IP sorgente, quello di destinazione, sulle porte e sui protocolli. Le ACLs possono essere usate con qualsiasi protocollo routed di livello rete come IP e IPX. Elenchiamo alcuni aspetti positivi apportati dalle ACLs:

  • limitano il traffico della rete aumentando così le performance;
  • effettuano un controllo di flusso sul traffico;
  • offrono un livello base di sicurezza per l’accesso alla rete;
  • decidono quale tipo di traffico inoltrare e quale bloccare.

Se non vi è alcuna ACLs configurata sul router tutti i pacchetti vengono inoltrati senza distinzione.

Vediamo ora il funzionamento di un’ACLs. L’ordine in cui vengono immesse le ACLs è fondamentale in quanto l’IOS effettua un controllo sulle condizioni dall’alto verso il basso, ovvero dalla prima condizione immessa fino all’ultima. Se ad esempio la prima condizione permette l’inoltro di tutto il traffico tutte le altre verranno ignorate! Bisogna fare quindi molta attenzione.
Quando una condizione è verificata il pacchetto viene inoltrato o bloccato in base alla regola impostata nella ACLs; se nessuna delle condizioni nell’ACLs combacia,  implicitamente vi è un deny any in fondo alla lista, di default e, quindi, il pacchetto verrà scartato.

Le ACLs utilizzano le wildcard mask per impostare le condizioni. Una wildcard mask è formata da 32 bit suddivisa in 4 ottetti (esattamente come gli indirizzi IP) dove lo zero indica il bit nell’indirizzo da esaminare mentre l’1 il bit corrispondente nell’indirizzo da ignorare.  Vi sono 2 wildcard particolari che sono la 0.0.0.0 e la 255.255.255.255: la prima è sostituita dalla parola chiave host (verifica tutto l’IP) mentre la seconda dalla parola chiave any. Più avanti faremo un esempio pratico, prima però passiamo alla definizione delle ACLs sui ruoter Cisco.

Ci sono diversi tipi di ACLs: standard, extended e named. Quando una ACLs viene configurata gli viene assegnato un identificativo univoco che identifica anche il tipo di ACLs in base a un range di identificativi. I range disponibili sono:

  • standard IP: 1-99, 1300-1999
  • extended IP: 100-199, 2000-2699
  • AppleTalk: 600-699
  • IPX: 800-899
  • extended IPX: 900-999
  • IPX Service Advertising Protocol: 1000-1099

Per inserire le regole in una ACLs si utilizza il comando access-list seguito dai vari parametri mentre per associarla a un’interfaccia si utilizza il comando access-group. La regola generale è:

Router(config)#access-list access-list-number {permit deny} {test-conditions}

mentre sull’interfaccia:

Router(config-if)#{protocol} access-group access-list-number

Vediamo un esempio pratico mostrando il funzionamento della wildcard. Supponiamo di voler bloccare in ingresso all’interfaccia ethernet1 il traffico proveniente dalla rete 172.16.0.0/16 con una stardard ACLs con identificativo 2 mentre bisogna lasciar passare tutto il resto del traffico dalla rete 172.0.0.0/8, i comandi saranno:

Router(config)#access-list 2 deny 172.16.0.0 0.0.255.255
Router(config)#access-list 2 permit 172.0.0.0 0.255.255.255
Router(config)#interface e0
Router(config-if)# ip access-group 2 in

La prima condizione forma un valore di confronto (applicando la wildcard) che, se rispecchiato dall’indirizzo del pacchetto in ingresso, tale pacchetto sarà scartato.

IP addess 172.16.0.0 10101100 00010000 00000000 00000000
wildcard mask 00000000 00000000 xxxxxxxx xxxxxxxx
Valore di confronto 10101100 00010000 xxxxxxxx xxxxxxxx

Se in arrivo ho un pacchetto da un host con IP 172.16.4.64 avrò una situazione di questo tipo:

IP addess 172.16.4.64 10101100 00010000 00000100 01000000
wildcard mask 00000000 00000000 xxxxxxxx xxxxxxxx
Valore di confronto 10101100 00010000 xxxxxxxx xxxxxxxx

il valore di confronto combacia e quindi, per la regola impostata, il pacchetto verrà scartato. Viceversa, la seconda regola mi forma un valore di confronto del tipo:

IP addess 172.0.0.0 10101100 00000000 00000000 00000000
wildcard mask 00000000 xxxxxxxx xxxxxxxx xxxxxxxx
Valore di confronto 10101100 xxxxxxxx xxxxxxxx xxxxxxxx

Se ho un pacchetto in ingresso all’interfaccia da un host con IP 172.8.10.1:

IP addess 172.8.10.1 10101100 00001000 00001010 00000001
wildcard mask 00000000 xxxxxxxx xxxxxxxx xxxxxxxx
Valore di confronto 10101100 xxxxxxxx xxxxxxxx xxxxxxxx

tale pacchetto verrà inoltrato in quanto il valore di confronto coincide con la regola impostata nell’ACLs.

La verifica della configurazione delle ACLs si effettua attraverso i comandi show. Il comando show ip interface mostra le informazioni sulle ACLs impostate sulle interfacce. Il comando show access-list mostra, invece, il contenuto di tutte la ACLs programmate sul router.

Nel prossimo articolo vedremo la configurazione dei vari tipi di ACLs.

IGRP: caratteristiche, metrica e configurazione

L’Interior Gateway Routing Protocol (IGRP) è un protocollo distance vector proprietario cisco. Essendo un protocollo distance vector l’IGRP invia aggiornamenti periodici di routing per mantenere la consistenza delle informazioni al variare della rete (per l’inserimento di nuove destinazioni o per identificare reti irraggiungibili).

Gli update di routing dell’IGRP vengono inviati ogni 90 secondi ai router appartenenti allo stesso AS (ricordiamo che l’IGRP è un protocollo IGP). Le caratteristiche principali di tale protocollo sono:

  • adattamento automatico alle variazioni anche in reti con topologia complessa;
  • flessibilità nella gestione di reti con diverse caratteristiche di banda e latenza;
  • scalabilità necessaria per reti molto estese.

Di base l’IGRP sceglie il percorso su cui instradare un pacchetto in base a una metrica basata sulla banda disponibile e sul ritardo. Tuttavia, l’IGRP può essere configurato per tenere conto, oltre che della banda e del ritardo, anche del carico in quel momento e dell’affidabilità della rete.  Tale metrica è, ovviamente, più accurata dell’hop count utilizzato dal RIP per scegliere il percorso di un pacchetto fino a destinazione. Vediamo meglio i parametri principali utilizzati nella metrica per la scelta del percorso:

  • banda: si tiene conto della banda delle reti che si attraversano fino a destinazione;
  • ritardo: ritardo cumulativo calcolato sulle interfacce oltrepassate lungo il percorso;
  • affidabilità: l’affidabilità del collegamento fino a destinazione determinato con lo scambio di informazioni riguardo la raggiungibilità delle reti nel tempo;
  • carico: il carico di un link verso la destinazione misurato in bit/secondo.

L’IGRP implementa le funzioni di holddowns, split horizons e poison reverse updates (già trattati in un precedente articolo). Tale protocollo non supporta le VLSM, supportate invece da un altro protocollo proprietario cisco che è l’EIGRP.

Passiamo adesso alla configurazione del protocollo. Il processo di routing si attiva con il comando router igrp in modalità configurazione (per disabilitarlo basta inserire il comando no router igrp). Perché il comando sia completo bisogna inserire anche un as-number, ovvero un identificativo per il processo IGRP; tutti i router che partecipano al processo di routing devono avere lo stesso as-number. Nel successivo menu bisogna inserire le reti direttamente connesse su cui inviare e ricevere gli update tramite il comando network (esattamente come accade per il RIP). Facciamo un esempio. Vogliamo inserire su un router 2 reti con identificativo di processo 101, i comandi saranno:

Router(config)# router igrp 101
Router(config-router)# network 192.168.10.0
Router(config-router)# network 192.168.11.0

RIP: load balancing e integrazione delle rotte statiche

Il load balancing (bilanciamento del carico) è il concetto che i router seguono per bilanciare il carico (traffico) in molteplici best path. Questi percorsi sono calcolati dinamicamente dal RIP e tale protocollo permette di indirizzare il traffico fino a un massimo di 6 best path utilizzati attraverso un meccanismo detto round robin. Tale meccanismo è ciclico, ovvero il router invierà il maniera ciclica il traffico sulle diverse interfacce su cui vi è un best path senza però tener conto della banda che vi si trova su ognuna di tali interfacce (il RIP non fa distinzioni sull’invio di pacchetti su un percorso PSTN a 56kbps o su una ATM a 155Mbps, calcola il best path tenendo in considerazione solamente il numero di hop da superare prima di arrivare a destinazione).
Le rotte con metrica uguale possono essere individuate usando il comando show ip route seguito dall’indirizzo della rete. Es.:

Router#show ip route 192.168.10.0

Per modificare il numero massimo di path bisogna digitare, in router configuration mode, il comando:

Router(config-router)#maximum-paths {number}

Parliamo adesso delle rotte statiche e al possibile utilizzo a fianco del RIP. La rotte statiche forzano l’instradamento dei pacchetti da una sorgente a una destinazione. Sono spesso utilizzate per definire una default route e, quindi, instradare un pacchetto anche quando la rete non è presente nella routing table.
Un router che usa RIP può ricevere una default route tramite update da un altro router che usa anch’esso RIP; un’altra opzione è che il router auto generi la sua default route.

Le rotte statiche hanno, ovviamente, prelazione su quelle dinamiche in virtù di una distanza amministrativa decisamente minore (per eliminare le default route basta digitare il comando no ip route in global configuration mode). Per ovviare a ciò basta impostare alla rotta statica una distanza amministrativa maggiore di quella del routing dinamico utilizzato. Così facendo si possono impostare rotte di backup nel caso in cui il processo di RIP non vada a buon fine.

Le rotte statiche saranno annunciate con gli update del RIP e propagate per tutta la rete: questo perché le rotte statiche sono contenute nella routing table ed il router non distingue tra rotte statiche e dinamiche. Quando un’interfaccia diviene indisponibile tutte le rotte statiche che la utilizzavano vengono rimosse dalla routing table. Quando il software non riesce più trovare un next-hop valido per l’indirizzo specificato nella static route, allora la rotte statica viene eliminata.

RIP e configurazione su router Cisco

Il Routing Information Protocol (RIP) è un protocollo distance vector che può essere utilizzato nella versione 1 (RIPv1 o Classful Routing Protocol) o nella versione 2  (RIPv2 o Classless Routing Protocol). Il RIPv2 apporta delle caratteristiche importanti alla precedente versione come la possibilità gestire informazioni addizionali di routing, introduce dei meccanismi di autenticazione per rendere sicuri gli update della routing table e supporta le subnet mask a lunghezza variabile (variable-length subnet mask o VLSM). Il RIP usa l’hop count come metrica per la scelta del percorso. Il numero massimo di hop nel percorso è di 15, poi la rete viene posta come irraggiungibile. Di default, i routing updates vengono inviati ogni 30 secondi in broadcast.

Vediamo adesso come si configura il RIP sui router Cisco. Il primo comando da utilizzare è router rip e, successivamente, si utilizza il comando network per indicare al router le interfacce sulle quali inviare e ricevere i routing updates. Tali reti sono direttamente connesse al router. Facciamo un esempio con un router che è direttamente connesso alle reti 10.0.0.0 e 192.168.10.0, i comandi saranno:

Router(config)#router rip
Router(config-router)#network 10.0.0.0
Router(config-router)#network 192.168.10.0

Cosa accade se si inviano pacchetti verso una subnet sconosciuta? Il pacchetto viene scartato; per ovviare a ciò sui Cisco è abilitato di default il comando ip classless che inoltra il pacchetto di una subnet sconosciuta alla migliore supernet route. La supernet route è una rotta che copre un ampio range di subnet con una singola entry (per disabilitarlo bisogna inserire il comando no ip classless in configuration mode).

Come indicato nel precedente articolo, il RIP è un protocollo distance vector che soffre dei problemi di routing loops e count-to-infinity che portano a inconsistenza delle tabelle di routing dovute e una lenta convergenza del protocollo. Per ovviare a ciò il RIP utilizza le seguenti tecniche:

  • Split horizon
  • Poison reverse
  • Holddown counters
  • Triggered updates

Alcuni di questi servizi possono richiedere configurazione. Il RIP permette un massimo di 15 hop, quindi l’utilizzo del RIP è limitato nelle reti di grosse dimensioni. Inoltre, in alcuni casi, è necessario poter disabilitare lo split horizon; tale operazione va fatta direttamente sull’interfaccia interessata tramite il comando:

Router(config-if)#no ip split-horizon

E’ possibile modificare l’holddown timer che di default è di 180 secondi, per farlo basta digitare il comando:

Router(config-router)#timers basic update invalid holddown flush [sleeptime]

l’impostazione di default è

Router(config-router)#timers basic 30 180 180 240

Il valore del timer può essere diminuito, ma ciò va effettuato con cautela. Il valore ideale per il timer è leggermente maggiore del tempo massimo possibile per l’update sulla rete. L’intervallo di update può essere aumentato, rispetto al default pari a 30 secondi, per risparmiare banda o diminuito per migliorare la convergenza. E’ inoltre possibile disabilitare l’invio degli update su una specifica interfaccia tramite il comando:

Router(config-router)#passive-interface interface

La scelta di disabilitare gli update su talune interfacce risiede nel fatto che il RIP invia gli update in broadcast ed è necessario disabilitarli quando bisogna inviare degli update a reti non broadcast come ad esempio il Frame Relay.

Il tipo RIP da utilizzare si imposta con il comando:

Router(config-router)#version {1|2}

Di default i router cisco ricevono gli update sia del RIPv1 che del RIPv2, ma inviano solamente update di RIPv1. Il tipo di invio può essere settato con comandi appositi per inviare update di RIPv1, RIPv2 o di entrambi i tipi direttamente sull’interfaccia d’uscita:

Router(config-if)#ip rip send version {1 | 2 | 1 2}

la medesima cosa può essere fatta con la ricezione veicolando la ricezione di update RIP di una o entrambe le versioni:

Router(config-if)#ip rip receive version {1 | 2 | 1 2}

Abbiamo così concluso la trattazione sulla configurazione del RIP su Router Cisco, per effettuare la verifica della configurazione ci avvaliamo di 2 comandi: show ip route e show ip protocols. Il primo viene utilizzato in particolare per verificare che vengano ricevuti gli update degli altri router e che le route ricevute dai router vicini siano installate nella routing table; il secondo da molte informazioni sulla configurazione, ovvero se il RIP è attivo, se le interfacce inviano e ricevono correttamente gli update e se il router emette gli aggiornamenti verso le reti giuste.

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.