Open Shortest Path First

Descrizione e configurazione di OSPF

CCNA

2/11/2023

OSPF è un protocollo di routing open standard di tipo Link State.
Supporta grandi reti ed ha un tempo di convergenza molto veloce.
I messaggi vengono inviati tramite multicast ed utilizza l'algoritmo "Shortest Path First" di Dijkstra per determinare il percorso migliore.
Quando un'azienda deve scegliere il suo IGP, la scelta può ricadere solo su EIGRP e OSPF, in quanto RIP ha dei limiti di scalabilità ed è indicato solo per piccoli reti o per test.
OSPF è quello comunemente più utilizzato: supporta grandi reti ed è sempre stato open standard, quindi viene supportato da tutti i venditori.
Nei protocolli Link State, ogni router descrive se stesso e le sue interfacce ai suoi vicini connessi direttamente.
Queste informazioni rimangono invariate nel trasferimento da un router all'altro.
Ogni router viene a conoscenza dell'immagine completa della rete incluso ogni router, le sue interfacce e a cosa sono connessi.
I router OSPF usano Link State Advertisements (LSA) per scambiarsi informazioni.
Di seguito le operazioni che un router OPSF esegue:

  • Scoperta dei vicini

  • Formazione di adiacenze

  • Scambio di informazioni tra router tramite il "flooding" del Link State Database (LSDB)

  • Calcolo del percorso migliore

  • Installazione delle route migliori nella tabella di routing

  • Risposta ai cambiamenti della rete


I router OSPF hanno diversi pacchetti che gli permettono di comunicare tra loro:

  • Hello: Un router invia e rimane in ascolto di pacchetti Hello quando OSPF è attivo su di un'interfaccia, e forma adiacenze con altri router OSPF sul link.

  • DataBase Description (DBD): Questo pacchetto viene usato dai router adiacenti per scambiarsi informazioni riguardo alle reti che conoscono

  • Link State Request (LSR): Se ad un router mancano informazioni riguardo alle reti ricevute nel DBD, manda un LSR ad un router vicino

  • Link State Advertisement (LSA): Un aggiornamento di routing

  • Link State Update (LSU): Contiene una lista dei vari LSA che dovrebbero essere aggiornati, usato durante il flooding

  • LSAck: I router che ricevono le informazioni mandano indietro questi pacchetti per confermare la ricezione delle modifiche.

Configurazione

R1(config)#router ospf 1
R1(config-router)#network 10.0.0.0 0.0.255.255 area 0

Le differenti interfacce di un router possono essere eseguite in istanze diverse di OSPF: le diverse istanze hanno Link State Database differenti.
Di solito è configurata solo un'istanza sui router OSPF, ed i processi ID vengono raramente usati.
Il processo ID è importante solo localmente: non deve corrispondere ad un altro router vicino affinché questi formino un'adiacenza.
Il comando network usa una wildcard mask e si ottiene un errore nel caso non venga inserita (al contrario di EIGRP).
Vediamo ora il funzionamento del comando network:

  • Cerca le interfacce con un indirizzo IP che rientra nel range specificato

  • Attiva OSPF su quelle interfacce e comincia ad inviare pacchetti OSPF Hello per fare adiacenze con altri router OSPF

  • Pubblicizza la rete e la maschera di rete configurati su QUELLE interfacce.


Il primo comando da inserire dopo aver configurato OSPF serve a controllare che i router possano formare adiacenze con altri router OSPF:
show ip ospf neighbor

Per vedere che tutte le impostazioni siano state inserite con successo nella running-config possiamo usare il seguente comando:

R1#sh run | section ospf

ID Router OSPF

I router OSPF si identificano tramite l'ID router, che è sotto forma di indirizzo IP.
Di default questo è l'indirizzo IP più alto di una qualsiasi interfaccia di loopback configurata sul router, o il prossimo indirizzo IP più alto nel caso in cui non ci sia nessuna loopback.
Queste interfacce non vanno mai offline quindi l'ID del router non cambia mai.
Si può anche configurare manualmente l'ID tramite il comando:

R1(config-router)#router ospf 1
R1(config-router)#router-id 2.2.2.2
R1#clear ip ospf process

Interfacce Passive

Se si configurano delle interfacce passive, queste verranno pubblicizzae da OSPF, quindi altri router sapranno come arrivare a quella rete, ma le interfacce in sé non cercheranno di formare adiacenze e non invieranno nessun'informazione interna.

R1(config)#router ospf 1
R1(config-router)#passive-interface loopback 0
R1(config-router)#passive-interface f2/0

Nel caso in cui un router abbia più interfacce passive che attive, possiamo impostare di default tutte le interfacce come passive, per poi impostare attive solo quelle interfacce che ci servono:

R1(config)#router ospf 1
R1(config-router)#passive-interface default
R1(config-router)#no passive-interface f0/0
R1(config-router)#no passive-interface f1/0

Iniezione di Route di Default

Le impostazioni sono come quelle di EIGRP:

R1(config)#ip route 0.0.0.0 0.0.0.0 203.0.113.2
R1(config)#router ospf 1
R1(config-router)#default-information originate

Aree OSPF

Ricordiamo che nei protocolli Link State tutti i router imparano l'immagine completa della rete, incluso ogni router, le sue interfacce e a cosa sono connessi.
Ciò può portare a problemi nelle grandi reti:

  1. Troppe route usano troppa memoria del router

  2. I cambiamenti nella rete causano la riconvergenza di tutti i router che ha bisogno di tempo e risorse della CPU.


Per risolvere il problema, OSPF usa un design gerarchico che segmenta grandi rete in aree più piccole.
Ogni router ha tutte le informazioni complete riguardo alla sua area, ma solo informazioni riassuntive per le altre aree.
La gerarchia è composta da due aree:

  • Area di transito (chiamata anche backbone o area 0) che, solitamente, non contiene end-users.

  • Aree regolari (chiamate "nonbackbone areas) che vengono usate per collegare gli end-users all'area di transito. Di default, tutto il traffico di transito passa attraverso l'area di transito.


Nelle piccole reti non c'è la necessità di usare varie aree e quindi tutti i router possono trovarsi nell'area 0.
L'area viene configurata al livello interfaccia con il comando network.
Affinché i router possano formare adiacenze, si devono trovare nella stessa area.

Tipi di Router OSPF - Router Backbone

Tutti i router che hanno le loro interfacce OSPF nell'area 0 vengono definiti "backbone routers".
Questi mantengono un LSDB completo degli altri router e collegamenti nella loro area.

Area Border Routers - ABRs

I router che hanno le interfacce in più aree vengono chiamati Area Border Routers (ABRs).
Le caratteristiche principali di questi router sono:

  • Separano la rete in aree più piccole

  • Diventano il punto primario per l'aggregazione degli indirizzi della rete

  • Funzionano regolarmente come fonte delle route di default

  • Mantengono l'LSDB per ogni area a cui sono connessi


Il design ideale è di avere ogni ABR connesso a solo due aree, una di backbone e un'altra area, e al massimo si può aggiungere un'altra area.

Gli ABR non eseguono automaticamente l'aggregazione e se non la si configura, tutte le route vengono inviate ovunque.

R1(config)#router ospf 1
R1(config-router)#network 10.1.0.0 0.0.255.255 area 0
R1(config-router)#network 10.0.0.0 0.0.255.255 area 1
R1(config-router)#area 0 range 10.1.0.0 255.255.0.0
R1(config-router)#area 1 range 10.0.0.0 255.255.0.0

Router Normali nell'Area

I router mantengono un LSDB completo degli altri router e collegamenti nella loro area, ed imparano le route inter-area verso altre aree dal loro ABR.

Autonomous System Boundary Routers - ASBRs

Quest'ultimo tipo di router OSPF sono router su cui si trova OSPF e su cui distribuiamo route da un'altra fonte (ad esempio su quel router si trovano sia OSPF sia EIGRP, oppure stiamo inserendo una route statica in OSPF).
Le route così ridistribuite vengono mostrate come route esterne, ma non significa che questa route sia fuori dall'azienda, ma solo che è stata ridistribuita in OSPF e, guardando la tabella di routing, possiamo vedere che il tipo è O*E, E1 o E2 per una rete esterna.

Bandwidth vs Clock Rate e Speed

Il rateo a cui le interfacce fisiche Ethernet trasmettono è impostato dal comando "speed".
Le interfacce GigabitEthernet trasmettono a 1000 Mbps di default, mentre le interfacce FastEthernet trasmettono a 100 Mbps. Se si usa il comando "speed 10" su di un'interfaccia FastEthernet, questa trasmetterà a 10 Mbps.

Il rateo a cui trasmettono le interfacce Seriali viene impostato con il comando "clock rate".
Queste interfacce trasmettono a 1.544 Mbps di default e se si usa il comando "clock rate 64000", l'interfaccia trasmetterà a 64 Kbps.

Le interfacce hanno anche una larghezza di banda predefinita (bandwidth), con 100 Mbps per le interfacce FastEthernet e 1.544 Mbps per le interfacce Seriali.
La bandwidth di solito combacia con il rateo di trasmissione fisico dell'interfaccia, tuttavia l'impostazione bandwidth non influenza il rateo di trasmissione, che è influenzato solo da speed o clock rate.
Se impostiamo una bandwidth di 50 Mbps su di un'interfaccia FastEthernet, questa continuerà comunque a trasmettere a 100 Mbps.
Il comando bandwidth influenza la politica del software sul router, come quali percorsi verranno scelti da EIGRP o OSPF, o quanta larghezza di banda viene garantita ad un determinato tipo di traffico con QoS (Quality of Service).

Calcolo della Metrica in OSPF

Siccome OSPF è un protocollo di routing di tipo Link State, il router viene a conoscenza di tutte le destinazioni nella sua area, dei collegamenti e il loro costo.
Il router sceglie quindi le route in base al loro costo minore.
All'interno di una rete con più aree OSPF, gli ABR conoscono le informazioni di ogni area a cui sono collegati.
Quando vengono usate più aree, ogni router ha route individuali per ogni sottorete IP della sua area, e route d'aggregazione per le altre aree che passano attraverso un ABR.
Per le destinazioni all'interno della sua area, il router considera tutti i percorsi per arrivare a destinazione e sceglie il percorso con il costo totale minore.
Per le destinazioni che si trovano in altre aree, il router guarda tutti i collegamenti disponibili per arrivare all'ABR e sceglie il percorso con il costo totale minore verso quell' ABR. Da qui, sta all'ABR scegliere il percorso migliore.
L'algoritmo SPF (Shortest Path First) calcola il costo totale dei percorsi disponibili e seleziona quello con il costo minore e bisogna assicurarsi di avere impostato lo stesso costo sulle interfacce dello stesso collegamento per evitare di ottenere un routing asimmetrico.
Il costo è derivato automaticamente dalla larghezza di banda dell'interfaccia:
costo = Larghezza di banda di riferimento / larghezza di banda dell'interfaccia
La larghezza di banda di riferimento predefinita è 100 Mbps.
Il costo dei collegamenti FastEthernet è 1 (100/100), mentre quella dei collegamenti T1 è 64 (100/1.544).
OSPF tratta tutte le interfacce con larghezza di banda superiore o uguale a 100 Mbps come uguali, quindi per questo protocollo il costo delle interfacce FastEthernet, GigabitEthernet e 10 GigabitEthernet è sempre 1.
Ciò può portare ad un routing indesiderato, ma per risolvere questo problema possiamo semplicemente cambiare la larghezza di banda di riferimento sui router con:

R1(config)#router ospf 1
R1(config-router)#auto-cost reference-bandwidth 10000

OSPF prende in considerazione la larghezza di banda di un'interfaccia quando calcola la metrica, quindi i percorsi con una larghezza di banda maggiore verranno preferiti.
Il percorso migliore viene selezionato automaticamente, ma se si vuole usare un percorso diverso è possibile cambiare manualmente la larghezza di banda o il costo OSPF sulle interfacce.
Si consiglia di cambiare il costo perché l'impostazione bandwidth potrebbe influenzare altre caratteristiche del router oltre ad OSPF (come ad esempio il Quality of Service).
Quando si modifica manualmente il costo OSPF questo andrà a sovrascrivere quello derivato automaticamente dalla bandwidth.

R1(config)#interface FastEthernet 1/0
R1(config-if)#ip ospf cost 50

Pacchetto OSPF

Vediamo i vari campi che formano un pacchetto OSPF:

  • Version: Indica la versione di OSPF utilizzata, che può essere OSPFv2 oppure OSPFv3

  • Type: Indica il tipo di pacchetto. 1 - Hello, 2 - Database Descriptor (DBD), 3 - Link State Request (LSR), 4 - Link State Update (LSU), 5 - Link State Acknowledgement (i Link State Advertisements sono contenuti negli LSU)

  • Router ID e Area ID: Riguardano il router (e la sua interfaccia) da cui parte il pacchetto

  • Checksum: Utilizzato per il controllo degli errori

  • Authentication (Type): 0 - Nessuna password, 1 - Password in plain-text, 2 - Autenticazione MD5

  • Authentication: Questo è il campo in cui si trova la password, se configurata.

  • Data: Il payload in sé, ossia gli aggiornamenti di routing inclusi nel pacchetto.

Pacchetti Hello

I router OSPF trovano altri router OSPF e formano adiacenze tramite i pacchetti Hello, inviando questi pacchetti su ogni interfaccia su cui OSPF è attivo (tranne le interfacce passive).
Usano il traffico di multicast all'indirizzo 224.0.0.5 che significa "tutti i router OSPF" e vengono inviati ogni 10 secondi secondo l'impostazione predefinita.
Vediamo ora cosa contengono questi pacchetti:

  • ID Router: Numero a 32 bit che identifica ogni router OSPF

  • Hello Interval: Ogni quanti secondi il router invia i pacchetti Hello (di default è 10 secondi)

  • Dead Interval: Quanto tempo un router deve aspettare una risposta da un router OSPF vicino prima che lo segni come "fuori servizio". Di default questo tempo è 4 volte l'Hello interval

  • Neighbors: Una lista dei router OSPF adiacenti che hanno inviato un pacchetto Hello a questo router

  • ID Area: L'area configurata su quell'interfaccia

  • Router Priority: Un numero ad 8 bit usato per selezionare il DR e il BDR

  • Indirizzi IPv4 del DR e BDR: Se conosciuti

  • Authentication Flag: Dettagli di autenticazione se configurati

  • Stub Area Flag: Se l'area è un di tipo "stub". Queste aree hanno una route di default per il loro ABR piuttosto che imparare route fuori dalla loro area

Ora che abbiamo visto come è composto un pacchetto Hello, vediamo le impostazioni che devono combaciare su due router OSPF affinché formino un'adiacenza:

  • Devono trovarsi l'un l'altro nella lista dei Neighbor

  • Intervalli Hello e Dead

  • ID Area

  • Sottorete IP

  • Authentication Flag

  • Stub Area Flag

Se l'impostazione MTU (Maximum Transmission Unit) non combacia su due router, questi formano comunque un'adiacenza, ma non sono in grado di scambiarsi le route.
Quest'impostazione è configurata al livello interfaccia e, per default, è pari a 1500 bytes.
Si può impostare l'MTU dell'interfaccia (che influenza tutti i pacchetti) e/o l'MTU dell'interfaccia IP (che influenza solo i pacchetti IP).

Router(config)#interface GigabitEthernet 0/0
Router(config-if)#mtu 1480
Router(config-if)#ip mtu 1460

Ora vediamo i passaggi che eseguono due router OSPF per formare un'adiacenza:

  • Down: Nessun vicino attivo scoperto

  • INIT: E' stato ricevuto un pacchetto Hello dal vicino

  • 2-WAY: ID router ricevuto nell'Hello

  • Exstart: Scelta dei ruoli primario e secondario

  • Exchange: Invio dei pacchetti di Database Description (DBD)

  • Loading: Scambio di LSR e LSU

  • Full: Adiacenze completate

DR e BDR

Nei collegamenti punto a punto, le coppie di router OSPF formano un'adiacenza completa.
Tuttavia, nei segmenti ad accesso multiplo (come Ethernet) dove ci possono essere più router, sarebbe inefficiente per loro formare adiacenze complete tra tutti loro.
Per questo motivo vengono "eletti" due router per gestire il tutto: il Designated Router (DR, il capo) e il Backup Designated Router (BDR, il vice-capo).
Il router con la priorità più alta diventa il DR, mentre il router con la seconda priorità più alta diventa il BDR.
La priorità di default è 1 fino ad un massimo di 255 (il range è 0 - 255 e maggiore è la priorità meglio è).
Nel caso ci sia un pareggio sulle priorità di due router, viene usato l'ID router maggiore.
Nei segmenti ad accesso multiplo come Ethernet, i router eleggono il DR e il BDR al passaggio 2-Way, mentre non c'è nessuna "elezione" nei collegamenti punto a punto.

R1(config)#interface FastEthernet 0/0
R1(config-if)#ip ospf priority 100

R2(config)#interface FastEthernet 0/0
R2(config-if)#ip ospf priority 0

Si esegue un riavvio di OSPF sulle interfacce affinché le modifiche prendano effetto (attenzione a non riavviare i router se ci si trova in un ambiente di produzione).
Il DR e il BDR stabiliscono state neighbor completi con tutti i router presenti nel segmento di rete, mentre il state neighbor degli altri vicini rimangono nello stato 2-Way e non scambiano direttamente route l'uno con l'altro.
Quando lo stato di un collegamento cambia su di un router connesso ad un segmento ad accesso multiplo, questo manda un pacchetto multicast LSU a 224.0.0.6 (che significa "tutti i router designati") e il DR invia l'aggiornamento in multicast all'indirizzo 224.0.0.5 ("tutti i router OSPF").