# Mobile ad-hoc network

In telecomunicazioni una rete ad-hoc mobile (Mobile Ad-hoc NETwork) è definita come un sistema autonomo di terminali mobili connessi mediante collegamenti wireless di tipo ad-hoc. La definizione di rete ad hoc fornita dall'IETF è: “Una MANET è un sistema autonomo di router mobili e dei loro host associati, connessi con collegamenti di tipo wireless che sono uniti formando un grafo di forma arbitraria. Tali router sono liberi di muoversi casualmente e di auto organizzarsi arbitrariamente, sebbene la topologia wireless vari rapidamente ed in modo imprevedibile. Tale rete può operare da sola oppure essere connessa alla rete Internet.”
Vengono costruite all'occorrenza ed utilizzate in ambienti estremamente dinamici, non necessariamente con l'aiuto di un'infrastruttura già esistente, come ad esempio dopo catastrofi naturali, durante conflitti militari, o altre situazioni d'emergenza oppure eventi locali come conferenze ecc. Tutti i nodi del sistema collaborano con lo scopo di instradare i pacchetti nel modo corretto secondo la modalità di forwarding di tipo multihop.
Un particolare tipo di MANETs sono le Vehicular Ad-hoc Network (VANETs), create da veicoli dotate di dispositivi con tecnologie di comunicazione wireless a medio raggio (es. schede wireless IEEE 802.11 a/b/g, anche se lo standard di riferimento per le reti VANET è WAVE -Wireless Access in Vehicular Environments-/802.11p). La comunicazione è limitata a veicoli posti nello stesso raggio di trasmissione, oppure può coinvolgere veicoli posti a più hop di distanza mediante la presenza di infrastrutture fisse oppure di router mobili.

## Storia

Le prime MANET si chiamavano reti a "pacchetti radio" e venivano sviluppate con l'appoggio della DARPA nei primi anni settanta. Tra gli sviluppatori si trovano Jerry Burchfiel, Robert Kahn, e Ray Tomlinson, che più tardi avrebbero contribuito alla nascita di TENEX, Internet e dell'email. Tra gli esperimenti successivi della DARPA si annovera il progetto SURAN (Survivable Radio Network) che si svolse negli anni ottanta. Una terza ondata di attività accademica focalizzata sull'argomento si verificò a metà degli anni novanta, con la diffusione di moduli radio 802.11 a basso costo.

## Descrizione
### Al giorno d'oggi

Le attuali MANET sono sviluppate in particolare per il loro uso militare, per esempio le reti JTRS e NTDR.
Il popolare protocollo IEEE 802.11 (meglio conosciuto come "Wi-Fi") supporta una modalità ad-hoc in assenza di un access point. Tale protocollo permette l'invio di traffico attraverso una "nuvola" di apparecchi wireless, ognuno dei quali può trasmettere e ricevere dati, ma non concorre all'instradamento dei pacchetti. Sebbene il routing in reti ad-hoc non sia lo scopo primario del Wi-Fi, è in ogni modo possibile sfruttare protocolli di livello superiore per aggregare più reti 802.11 e formare dunque delle MANET più estese.

### Medium Access Control

La problematica del controllo di accesso al mezzo per le reti ad hoc è stata attaccato sfruttando l'esperienza acquisita nella creazione dello standard 802.11 (b e anche g), il quale sfrutta proprio la stessa banda delle ad hoc networks, e che si basa su un protocollo a contesa di tipo CSMA (Carrier Sense Multiple Access). Solamente in tempi più recenti si è iniziato a pensare a soluzioni diverse per l'accesso al mezzo, come, ad esempio, il CDMA (Code Division Multiple Access).

## Protocolli di Routing

In una rete ad hoc è necessario affrontare con occhi nuovi il problema del routing: è proprio questo l'aspetto della rete sul quale ricadono le conseguenze maggiori della mobilità e delle limitate risorse energetiche. Affrontare questi due aspetti, oltretutto, richiede due opposti comportamenti: la mobilità, e quindi la topologia dinamica, richiede uno scambio di informazioni costante, che insegua tali variazioni, mentre la scarsità delle risorse richiede che tale scambio venga il più possibile limitato. I nodi, infatti, non hanno alcuna conoscenza a priori della topologia della rete nella quale si trovano, per cui devono scoprirla comunicando con gli altri nodi. Generalmente ogni nodo annuncia la sua presenza nella rete ed ascolta la comunicazione tra gli altri nodi, che dunque diventano conosciuti. Col passare del tempo ogni nodo acquisisce la conoscenza di tutti i nodi della rete e di uno o più modi per comunicare con loro.
Gli algoritmi di routing devono:
* Assicurarsi che le tabelle di routing siano ragionevolmente piccole, anche alla luce delle risorse ridotte delle quali spesso dispongono i nodi in una rete ad hoc,
* Riuscire a scegliere il miglior percorso per raggiungere gli altri nodi (in base a vari parametri, come la velocità, l'affidabilità e l'assenza di congestione),
* Tenere le proprie tabelle di routing aggiornate nel caso la topologia di rete cambi,
* Raggiungere il funzionamento ottimale in poco tempo e inviando un numero esiguo di pacchetti,
* Eventualmente offrire path multipli per raggiungere una destinazione, magari ordinando i path in ordine crescente di costo.
I protocolli possono essere generalmente classificati nelle seguenti categorie:

### Proactive

Questi protocolli sono table driven: ogni nodo possiede una tabella, aggiornata costantemente, con le informazioni sui collegamenti verso tutti gli altri nodi. In tali protocolli, dunque, lo stato delle tabelle deve rimanere il più aggiornato possibile, anche in mancanza di un effettivo utilizzo della rete. Si riesce così ad ottenere un forwarding immediato dei pacchetti, a discapito però di un overhead considerevole anche quando non vi è traffico da smaltire in rete.
* DSDV (Highly Dynamic Destination-Sequenced Distance Vector routing protocol)
* HSLS (Hazy Sighted Link State routing protocol)
* OLSR (Optimized Link State Routing Protocol, vedi RFC 3626)
* STAR (Source Tree Adaptive routing protocol)

### Reactive

Con questo approccio, invece, i nodi ignorano totalmente la posizione del destinatario fin quando non devono comunicarci, quindi il routing viene stabilito su richiesta (on demand). Quindi si garantisce che il traffico di controllo è assente se non vi sono delle sessioni dati in corso, ma nel momento in cui una sessione inizia si deve considerare una latenza iniziale per la fase di route discovery.
* AODV (Ad hoc On Demand Distance Vector routing protocol)
* Dynamic Source Routing (DSR, vedi RFC 3561)

### Ibridi

In questo caso si cerca di ottimizzare e sintetizzare i precedenti due, usando il primo per i nodi “vicini”, e il secondo per quelli “lontani”. In questo caso resta comunque da dare una soddisfacente definizione della caratteristica vicino/lontano.
* Zone Routing Protocol (ZRP)

### Hierarchical

Questi protocolli riducono l'overhead di segnalazione dei protocolli puramente proactive (O(n)), suddividendo i nodi in classi e mantenendo nelle tabelle una entry per ogni classe. In tal modo è possibile ridurre significativamente l'overhead di segnalazione.
In dettaglio, si suddivide la rete in cluster, in cui viene eletto un capo cluster, analogamente a quanto avviene per la Base Station nelle reti cellulari: si sacrifica così parte della flessibilità della rete ad hoc, ma si ottiene una struttura centralizzata, che rende più semplice la gestione dei vari aspetti della comunicazione e che consente inoltre di implementare protocolli maggiormente scalabili. All'interno del cluster, per avere dei percorsi sempre disponibili, si usano tecniche proactive, mentre per le comunicazioni inter-cluster si usano tecniche reactive, in cui i pacchetti passano da un capo cluster all'altro sino a raggiungere il cluster destinatario.
* DART (Dynamic Addressing RouTing)
* Augmented Tree-based Routing (ATR)
* Hierarchical State Routing (HSR)
* Global State Routine (GSR)

### Location Based (Geografici)

Altri protocolli di routing possono essere progettati in modo tale da organizzare il routing in funzione della posizione del nodo cercato (che può essere nota con l'uso della tecnologia GPS). Il routing è ottimizzato affinché avvenga in una determinata area (Routing Zone) che contiene la Expected Zone, che è la zona in cui si pensa di trovare il nodo destinazione.
* Location Aided Routing (LAR)
* Zone Routing Protocol (ZRP)

### Power-Aware

In questo caso i nodi sono coscienti della limitatezza delle loro risorse energetiche e questa consapevolezza permette loro di decidere quando stare accesi, cioè idle oppure spenti, oppure di scegliere il percorso meno dispendioso da un punto di vista della potenza.
* PARO (Power-Aware Routing Optimized)