Lo stato di un link indica il costo associato al link.

  • quando un collegamento non esiste o è stato interrotto, il costo viene settato a

Ogni nodo deve conoscere i costi di tutti i collegamenti della rete, e la mappa completa di tutti i link della rete viene mantenuta dal link state database (LSDB).

Il link state database è unico per tutta la rete, e ogni nodo ne possiede una copia. Esso viene rappresentato con una matrice (come una matrice di adiacenza ma con i costi al posto di 0/1).

esempio

center

costruire il link state database

Per costruire il link state database, ogni nodo della rete deve innanzitutto conoscere i propri vicini e i costi dei collegamenti verso di loro

  • ogni nodo invia quindi un messaggio di hello a tutti i suoi vicini
  • ogni nodo riceve gli hello dei vicini e crea una lista, chiamata LS packet (LSP), con vicini e costi dei collegamenti
  • ogni nodo esegue un flooding degli LSP, ovvero invia a tutti i vicini il proprio LSP
    • quando riceve l’LSP di un vicino, se è nuovo lo inoltra a tutti i suoi vicini eccetto quello da cui lo ha ricevuto

center

Si utilizza l’algoritmo di Dijkstra [ trattato anche qui (progettazione di algoritmi) ] per calcolare il cammino di costo minimo da un nodo a tutti gli altri, creando una tabella di inoltro per quel nodo.

  • è iterativo: dopo la -esima iterazione, i cammini a costo minimo sono noti a nodi di destinazione
  • ogni nodo applica l’algoritmo indipendentemente

notazione

  • ⟶ insieme dei nodi della rete
  • ⟶ costo del collegamento dal nodo al nodo
  • ⟶ costo del cammino minimo dal nodo origine alla destinazione (all’iterazione corrente)
  • ⟶ immediato predecessore di lungo il cammino
  • ⟶ sottoinsieme di nodi per cui il cammino a costo minimo dall’origine è defnitivamente noto

implementazione:

inizializzazione:

  • (il nodo che esegue l’algoritmo)
  • per tutti i nodi :
    • se è adiacente a , allora
    • altrimenti

ciclo (while ):

  • determina un non in tale che sia minimo
  • aggiungi a
  • per ogni nodo adiacente a e non in , aggiorna :

protocollo OSPF

Open Shortest Path First è un protocollo di routing basato sull’algoritmo link state.

  • è open perché le specifiche del protocollo sono pubblicamente disponibili
  • utilizza il flooding e l’algoritmo di Dijkstra per determinare il percorso a costo minimo
    • ogni volta che si verifica un cambiamento nello stato di un collegamento, il router manda informazioni d’instradamento a tutti gli altri router
    • invia periodicamente (ogni 30 minuti) messaggi OSPF all’intero sistema autonomo, utilizzando il flooding

I messaggi OSPF vengono trasportati direttamente in datagrammi IP usando il numero di protocollo 89 nel campo IP protocol

messaggi OSPF

  • hello: usato da un router per annunciare la propria esistenza ai i vicini che conosce
  • database description: risposta ad hello, consente a chi si è appena connessodi ottenere il LSDB
  • link-state request: usato per richiedere specifiche informazioni su un collegamento
  • link-state update: messsaggio principale, usato da OSPF per la costruzione del LSDB
  • link-state ack: riscontro ai link-state update (per fornire affidabilità)
link statedistance vector
complessità dei messaggicon nodi, collegamenti, implica l’invio di messaggi (ogni nodo deve conoscere il costo degli link)richiede scambi tra nodi adiacenti (il tempo di convergenza può variare)
velocità di convergenzal’algoritmo ha complessità (prima nodi, poi , poi … (gauss))può convergere lentamente; può presentare cicli di instradamento e il problema del conteggio infinito
robustezzaOSPF è più robusto di RIP:
se un router funziona male, può comunicare via broadcast un costo sbagliato per uno dei suoi collegamenti connessi (ma non per altri); i nodi si occupano di calcolare soltanto le proprie tabelle
RIP è meno robusto di OSPF:
un nodo può comunicare cammini a costo minimo errati a tutte le destinazioni; la tabella di ciascun nodo può essere usata da altri (un calcolo errato si può diffondere per l’intera rete)