# Optimized Link State Routing Protocol

OLSR (Optimized Link State Routing Protocol) è un protocollo realizzato presso l'Università di Oslo in Norvegia, per reti mobili dedicate. Il protocollo è pro-attivo, regolato da tabelle e usa una tecnica detta multi-point relaying per il message flooding. La prima versione è stata sviluppata per sistemi GNU/LINUX.
Esso è un protocollo di routing IP ottimizzato per le reti mobili ad hoc, che può essere utilizzato anche su altre reti wireless ad hoc. OLSR è un protocollo di routing link-state proattivo, che utilizza i messaggi di "hello" e di controllo della topologia (TC) per scoprire e poi diffondere informazioni sullo stato dei collegamenti in tutta la rete mobile ad hoc. I singoli nodi utilizzano queste informazioni sulla topologia per calcolare le destinazioni successive per tutti i nodi della rete, utilizzando i percorsi di inoltro più brevi.

## Caratteristiche

I protocolli di routing link-state, come Open Shortest Path First (OSPF) e Intermediate System to Intermediate System (IS-IS), eleggono un router designato su ogni collegamento per eseguire il flooding delle informazioni topologiche. Nelle reti ad hoc wireless, la nozione di collegamento è diversa, i pacchetti possono uscire dalla stessa interfaccia; di conseguenza, è necessario un approccio diverso per ottimizzare il processo di flooding. Utilizzando i messaggi Hello, il protocollo OLSR scopre in ogni nodo le informazioni sui vicini a 2-hop ed esegue un'elezione distribuita di un insieme di relay multipoint (MPR).
I nodi selezionano gli MPR (Multipoint Relays - trasmettono i messaggi tra i nodi. Hanno anche il ruolo principale di instradare e selezionare il percorso corretto da qualsiasi sorgente a qualsiasi nodo di destinazione desiderato) in modo tale che esista un percorso verso ciascuno dei suoi vicini a 2-hop attraverso un nodo selezionato come MPR. Questi nodi MPR inviano e inoltrano i messaggi TC che contengono i selettori MPR. Questo funzionamento degli MPR rende OLSR unico rispetto ad altri protocolli di instradamento allo stato di collegamento sotto diversi aspetti: Il percorso di inoltro dei messaggi TC non è condiviso tra tutti i nodi ma varia a seconda della sorgente, solo un sottoinsieme di nodi fornisce informazioni sullo stato dei collegamenti, non tutti i collegamenti di un nodo sono pubblicizzati ma solo quelli che rappresentano selezioni MPR.
Poiché l'instradamento allo stato di collegamento richiede che il database della topologia sia sincronizzato sulla rete, OSPF e IS-IS eseguono il flooding della topologia utilizzando un algoritmo affidabile. Un tale algoritmo è molto difficile da progettare per le reti wireless ad hoc, quindi OLSR non si preoccupa dell'affidabilità; si limita a inondare i dati topologici con una frequenza tale da garantire che il database non rimanga non sincronizzato per lunghi periodi di tempo.

## Benefici

Essendo un protocollo proattivo, i percorsi verso tutte le destinazioni all'interno della rete sono conosciuti e mantenuti prima dell'uso. Avere i percorsi disponibili all'interno della tabella di routing standard può essere utile per alcuni sistemi e applicazioni di rete, in quanto non vi è alcun ritardo nella scoperta del percorso associato alla ricerca di un nuovo percorso.
L'overhead generato dal routing, pur essendo generalmente maggiore rispetto a quello di un protocollo reattivo, non aumenta con il numero di rotte create.
Le rotte predefinite e di rete possono essere iniettate nel sistema tramite messaggi di Host and Network Association (HNA) che consentono la connessione a Internet o ad altre reti all'interno della nuvola OLSR MANET. Le rotte di rete sono qualcosa che i protocolli reattivi attualmente non eseguono bene.
I valori di timeout e le informazioni sulla validità sono contenuti nei messaggi che trasmettono informazioni che consentono di utilizzare valori di timer diversi nei vari nodi.

## Criticità

La definizione originale di OLSR non include alcuna disposizione per il rilevamento della qualità del collegamento; assume semplicemente che un collegamento è attivo se sono stati ricevuti di recente un certo numero di pacchetti hello. Questo presuppone che i collegamenti siano bimodali (o funzionanti o falliti), il che non è necessariamente il caso delle reti wireless, dove i collegamenti presentano spesso tassi intermedi di perdita di pacchetti. Implementazioni come l'open source OLSRd (comunemente usato nei router mesh basati su Linux) sono state estese (a partire dalla versione 0.4.8) con il rilevamento della qualità dei collegamenti.
Essendo un protocollo proattivo, OLSR utilizza energia e risorse di rete per propagare i dati sui percorsi eventualmente inutilizzati. Sebbene questo non sia un problema per i punti di accesso cablati e i computer portatili, rende OLSR inadatto alle reti di sensori che cercano di dormire per la maggior parte del tempo.
Essendo un protocollo link-state, OLSR richiede una quantità ragionevolmente grande di larghezza di banda e di potenza della CPU per calcolare i percorsi ottimali nella rete. Nelle reti tipiche in cui viene utilizzato OLSR (che raramente superano qualche centinaio di nodi), questo non sembra essere un problema.
Utilizzando solo gli MPR per trasmettere informazioni sulla topologia, OLSR elimina una parte della ridondanza del processo di flooding, che potrebbe essere un problema nelle reti con tassi di perdita di pacchetti moderati o elevati.

## Altri approcci

OLSR è una delle varie soluzioni al problema. Un'altra è AODV, più semplice e richiedente meno memoria, ma ha bisogno di più tempo di delay. Un'altra è il Dynamic Source Routing, che sostanzialmente ottimizza il traffico di rete. Tra le più importanti figura anche Hazy Sighted Link State Routing Protocol.