Introduzione
Questo protocollo è basato sull’idea di Link State, ovvero il costo associato al link (collegamento), in particolare:
- indica un collegamento inesistente o interrotto
- Ogni nodo deve conoscere i costi di tutti i collegamenti della rete
Per la memorizzazione di queste informazioni è utilizzato un Link State Database (LSDB).
oss: è un alternativa al distance vector (DC) utilizzato in RIP.
Link State Database (LSDB)
Il link state database mantiene la mappa completa della rete, ogni nodo ne mantiene una copia e deve essere univoco (uguale) tra tutti i nodi della rete.
Rappresentazione
É rappresentato attraverso una matrice dove
M[x][y]
contiene il costo del collegamento tra il nodox
e il nodoy
.
Creazione (flooding)
Ogni nodo della rete deve innanzitutto conoscere i propri vicini e i costi dei collegamenti verso di loro, per fare ciò:
- ogni nodo invia un messaggio di
hello
a tutti i suoi vicini.- ogni nodo riceve gli
hello
dei vicini e crea la lista dei vicini chiamata LS Packet (LSP) contenente tuple(vicino, costo)
.Ogni nodo esegue un flooding, ovvero:
- Invia a tutti i vicini il proprio LSP.
- Quando riceve LSP da un vicino, se è nuovo allora, aggiorna il suo LSP e lo inoltra a tutti suoi vicini, eccetto quello da cui lo ha ricevuto.
- In questo modo aggiorniamo tutta la rete.
Una volta terminato questo processo abbiamo costruito l’LSDB.
Algoritmo Link State (LS)
Per costruire il suo albero a costo minimo utilizzando il LSDB ogni nodo deve eseguire l’algoritmo di Dijkstra, in modo indipendente, scegliendo se stesso come nodo radice.
Definiamo la seguente notazione:
- : insieme di nodi della rete.
- : costo collegamento dal nodo
x
al nodoy
. - : costo del cammino minimo dal nodo origine alla destinazione
v
(nel iterazione corrente). - : immediato predecessore del nodo
v
lungo il cammino minimo. - : sottoinsieme dei nodi per cui il cammino a costo minimo dall’origine è definitivamente noto.
Inizializzazione
Prima di utilizzare l’algoritmo di Dijkstra, dobbiamo inizializzare il sottoinsieme di nodi adiacenti alla radice:
N' = {r} for all nodi n in N: se n è adiacente a r allora D(n) = c(r,n) altrimenti D(n) = inf
Ciclo
Una volta inizializzato il sottoinsieme con i nodi adiacenti alla radice, possiamo far partire il ciclo:
determina un `n` non in N' tale che D(n) sia minimo aggiungi `n` a N' per ogni nodo `a` adiacente a `n` e non in N' aggiorna D(a): D(a) = min(D(a), D(n) + c(n, a)) Termina quando N' = N
Possiamo applicare Dijkstra per risolvere esercizi in modo “grafico”:
Quindi ad ogni step aggiorniamo i costi per ogni nodo e allo step successivo aggiungiamo in N'
il nodo con costo minimo.
Al termine della procedura otteniamo, l’albero dei percorsi minimi che collega il nodo radice a tutti i nodi della rete.
Confronto tra algoritmi LS e DV
Complessità
Velocità di convergenza
Con algoritmi LS abbiamo complessità di , dato che procede prima
n
nodi, poin-1
,n-2
, etc , quindin(n+1)/2
.Con algoritmi DV abbiamo una convergenza più lenta, dato che:
- può presentare cicli d’instradamento
- può presentare il problema del conteggio all’infinito (lo scambio di aggiornamenti infinito)
Robustezza
In generale l’OSPF (LS) è più robusto di RIP (DV), infatti cosa succede se un router funziona male?
Con OSPF che si basa su LS, se un router comunica a tutti un costo sbagliato per uno dei suoi collegamenti non compromette l’intera rete dato che ogni nodo calcola la tabella localmente.
Com RIP che si basa su DV, se un router comunica cammini errati significa che questa informazioni si diffonde su tutta la rete portando a calcoli errati.
Approfondimento Protocollo OSPF (Open Shortest Path First)
Fino ad ora abbiamo visto un algoritmo, ma un protocollo è composto da molto altro, infatti deve definire
- il suo ambito di funzionamento
- i messaggi che vengono scambiati
- la comunicazione tra router
- l’interazione con gli altri protocolli.
In particolare vediamo il protocollo OSPF (Open Shortest Path First) basato su Algoritmo Link State (LS).
Nota: si dice open perché le sue specifiche sono pubblicamente disponibili.
Questo è un protocollo a stato del collegamento, ovvero:
- Utilizza il flooding di informazioni di stato del collegamento.
- Utilizza Dijkstra (algoritmo LS) per la determinazione del percorso a costo minimo.
Flooding in OSPF
Messaggi OSPF
Hello - Usato dai router per annunciare la loro esistenza ai vicini
Database Description - Risposta ad hello, di solito per inviare il LSDB ai nuovi router
Link State Request - Usato per richiedere specifiche informazioni su un collegamento
Link State Update - Messaggio principale usato da OSPF per la costruzione del LSDB
Link State ACK - Riscontro al link state update (offre più affidabilità)
Nota: I messaggi OSPF vengono trasportati direttamente in datagrammi IP usando il numero di protocollo 89 nel campo IP protocol.