Un nodo che esegue questo tipo di protocolli non prenota le risorse a priori: nel momento in cui deve trasmettere un pacchetto, contende il canale con gli altri nodi sender vicini per l'accesso ad esso. Questi protocolli non possono garantire una QoS (Quality of Service) poiché i nodi non hanno garantito un accesso regolare al canale.
La trasmissione dei pacchetti viene iniziata dal sender.
In questi protocolli viene utilizzata l'intera larghezza di banda, senza che venga divisa. Un nodo che vince la contesa al canale può far uso dell'intera larghezza di banda (bandwith).
Questo protocollo si basa sul protocollo ad accesso multiplo con prevenzione delle collisioni (MACA), proposto per risolvere alcuni problemi dei protocolli CSMA quando vengono utilizzati nelle reti wireless.
Il protocollo CSMA prevede il sensing del canale solo presso il sender e non risolve il problema del terminale nascosto. In un tipico scenario di rete wireless sender e receiver non sempre si rilevano l'un l'altro. In queste situazioni la trasmissione di pacchetti da parte di un nodo è soggetta a collisioni presso il receiver, a causa di trasmissioni simultanee da parte di nodi nascosti. Inoltre, l'utilizzo della banda nei protocolli CSMA è basso a causa del problema del terminale esposto.
Quando un nodo deve trasmettere, invia prima un RTS. Il receiver, se è pronto a ricevere il pacchetto, invia un CTS. Se il sender riceve corretamente il CTS, inizia a trasmettere il pacchetto dati.
Se un pacchetto trasmesso da un nodo viene perso, questo utilizza l'algoritmo BEB (binary exponential back-off) per attendere un intervallo random prima di riprovare. Secondo questo algoritmo, ogni volta che viene rilevata una collisione, il nodo raddoppia la sua finestra di back-off.
I nodi vicini al sender che rilevano l'RTS non trasmettono per un periodo di tempo sufficiente a far ricevere il CTS al sender. Sia l'RTS che il CTS contengono il campo duration che indica la durata prevista per lo scambio dei pacchetti di dati. I nodi vicini al receiver che rilevano il CTS rimandano la loro trasmissione per un periodo di tempo sufficiente a far ricevere i pacchetti di dati al receiver. In questo modo il protocollo MACA risolve il problema del terminale nascosto.
Come già descritto, un nodo che rileva un pacchetto RTS rimanda la sua trasmissione per un periodo di tempo sufficiente a far arrivare il CTS al sender; se il CTS non viene rilevato durante questo periodo di attesa, il nodo è libero di trasmettere una volta scaduto il tempo. Pertanto, un nodo che rileva solo l'RTS è libero di trasmettere simultaneamente al sender dell'RTS che sta trasmettendo pacchetti di dati. In questo modo il MACA risolve il problema del terminale esposto.
Ad esempio si consideri uno scenario in cui vi siano 2 sender (S1 ed S2) ed un receiver (R2). Tutti e 2 i sender generano un alto volume di traffico. Il nodo che accede per primo al canale (ad esempio S1) inizia a trasmettere i pacchetti. I pacchetti spediti da S2 collidono presso il receiver R2, pertanto S2 incrementa la sua finestra di back-off seguendo l'algoritmo BEB. A causa di questo, la probabilità che S2 acceda al canale decresce sempre più e, dopo un pò, il nodo risulta completamente bloccato. Per risolvere il problema il protocollo MACAW utilizza un algoritmo di back-off modificato.
L'header del pacchetto contiene un campo aggiuntivo contenente il valore corrente del timer di back-off del sender. Un nodo che riceve il pacchetto copia questo valore nel suo timer di back-off. Ciò assicura un accesso equo al canale da parte di tutti i sender. Un altro problema dell'algoritmo BEB è che esso modifica molto rapidamente il valore del timer di back-off, sia quando il nodo trasmette con successo, sia quando viene rilevata una collisione. Il timer di back-off viene settato al valore minimo ad ogni trasmissione con successo. Per ovviare a queste grandi variazioni del valore del timer di back-off il MACAW utilizza l'algoritmo MILD (multiplicative increase linear decrease). Secondo quest'ultimo algoritmo, dopo una collisione, il back-off è incrementato di un fattore moltiplicativo (1,5) e, dopo una trasmissione con successo, decrementato di 1. Questo permette di eliminare la contesa e quindi i lunghi periodi di contesa dopo ogni trasmissione con successo e, allo stesso tempo, consente un'incremento ragionevole dei valori di back-off quando la contesa è alta.
Un'altra modifica introdotta con il MACAW consiste nell'equità dei flussi, anziché l'equità dei nodi come nel MACA. Ogni nodo mantiene diverse code, ognuna per un flusso di dati, ed utilizza un timer di back-off diverso per ognuna di esse. Un nodo che deve trasmettere, deve prima determinare quanto tempo deve attendere prima di spedire un RTS ad ogni nodo di destinazione corrispondente ai primi pacchetti nelle code del nodo. Viene scelto pacchetto per il quale questo tempo di attesa è minore di tutti gli altri.
Oltre ai pacchetti RTS/CTS utilizzati in MACA, MACAW utilizza un altro pacchetto di controllo: ACK. Nel MACA, la correzione degli errori di trasmissione è demamndata al livello trasporto; questo implica ulteriori ritardi nel recupero degli errori. MACAW, invece, gestisce gli errori di trasmissione direttamente a livello Data-Link, tramite l'uso dei riscontri (ACK). Nel MACAW, dopo la ricezione con successo di un pacchetto, il receiver trasmette un ACK. Se il sender non riceve l'ACK, rischedula la trasmissione del pacchetto precedentemente inviato ed incrementa il timer di back-off. Se l'ACK viene perso nella trasmissione, il sender riproverà a trasmettere un RTS per lo stesso pacchetto, ma questa volta il receiver manderà un ACK invece del CTS.
Nel MACA un nodo esposto, che riceve solo l'RTS e non il CTS, è libero di trasmettere contemporaneamente all'altro sender. Nello scenario in figura, durante la trasmissione di B ad A, il nodo C è libero di trasmettere, in quanto non rileva il CTS di A. C, quindi, invia un RTS a D e quest'ultimo restituisce un CTS che, però, non verrà ricevuto correttamente da C in quanto colliderà con i pacchetti della trasmissione tra B ed A. Per questo motivo, C incrementerà inultimente il suo timer di back-off. Un nodo esposto, quindi, non dovrebbe trasmettere.
Il problema consiste nel fatto che un nodo esposto non è a conoscenza se lo scambio RTS/CTS è andato a buon fine (il nodo esposto non riceve il CTS). Il MACAW risolve questo problema utilizzando un ulteriore pacchetto di controllo (DS); questo pacchetto (Data-Send) contiene informazioni sulla durata della trasmissione dati. In questo modo un nodo esposto che rileva un DS è a conoscenza che uno scambio RTS/CTS è andato a buon fine e può ritardare la sua trasmissione di un periodo sufficiente a far terminare la trasmissione DATA-ACK.
Il MACAW utilizza un altro pacchetto di controllo: l'RRTS. Si consideri lo scenario in figura: S1 sta trasmettendo ad R1. Il nodo S2 vuole trasmettere ad R2, che, essendo vicino di R1, riceve il CTS da esso e quindi ritarderà le sue trasmissioni. Il nodo S2 non è a conoscenza del periodo durante il quale esso può contendere il canale e quindi riproverà ad accedere al canale aumentando il suo timer di back-off ad ogni tentativo fallito. Il problema consiste nel fatto che S2 non ha informazioni aggiornate riguardo lo stato delle trasmissioni in corso.
Il protocollo MACAW risolve questo problema usando il pacchetto RRTS. Se il nodo R2 ha già ricevuto un RTS da S2, ma non ha risposto con un CTS per via della trasmissione in corso tra S1 ed R1, attenderà il prossimo periodo di contesa ed invierà ad S2 un RRTS (Request-for-Request-To-Send). I nodi vicini a R2 che ricevono un RRTS (incluso R1) dovranno attendere per due slot successivi (per far in modo che avvenga lo scambio RTS/CTS). Il sender S2, che riceve l'RRTS da R2, trasmetterà un regolare RTS a R2 e si continuerà con il normale scambio di pacchetti (RTS/CTS/Data/ACK).
Nella figura seguente viene riportato l'intero schema di funzionamento del protocollo MACAW:
Per riassumere, il protocollo MACAW si basa sulle seguenti osservazioni:
I protocolli FAMA sono basati su una disciplina di accesso al canale che consiste di carrier-sensing e di un dialogo tra il sender ed il receiver per la prevenzione delle collisioni. "Floor acquisition" si referisce al processo di acquisizione del canale. Ad ogni istante di tempo prefissato, il controllo del canale è assegnato ad un solo nodo a cui è garantita la trasmissione di uno o più pacchetti verso diverse destinazioni, senza avere collisioni. Il carrier-sensing effettuato dal sender, insieme allo scambio di pacchetti RTS/CTS, risolve il problema del terminale nascosto come nel MACA, ed è efficiente come il CSMA in altre situazioni. Il protocollo FAMA richiede che un nodo che abbia da trasmettere debba prima acquisire il canale tramite lo scambio di pacchetti di controllo. Sebbene questi pacchetti possano collidere con altri, una volta che il nodo ha acquisito il canale viene garantito che la trasmissione dati avvenga senza nessuna collisione. Due versioni di FAMA verranno descritte in questa sezione:
1 Il sender ascolta il canale e, se questo è occupato, riprova l'ascolto dopo un tempo casuale. Se invece il canale è libero il nodo trasmette subito.
Dopo aver inviato l'RTS, il sender ascolta il canale per un round-trip-time oltre al tempo richiesto dal receiver per inviare un CTS. Se non riceve il CTS durante questo periodo di tempo o se il CTS ricevuto è corrotto, il sender attende un periodo di tempo random prima di riprovare. Una volta ricevuto correttamente il CTS, il sender può trasmettere un burst di pacchetti di dati. Il burst è limitato da un numero massimo di pacchetti di dati, superato il quale il sender deve rilasciare il canale e contenderselo nuovamente con gli altri nodi.
La banda disponibile è divisa in diversi canali. In questo modo diversi nodi hanno la possibilità di trasmettere simultaneamente, ognuno utilizzando un differente canale. Alcuni di questi protocolli riservano uno specifico canale per la trasmissione di informazioni di controllo.
Il BTMA è uno dei più recenti protocolli proposti per risolvere il problema del terminale nascosto, tipico degli ambienti wireless. Il canale di trasmissione è suddiviso in due:
Quando un nodo è pronto a trasmettere, ascolta il canale per vedere se è il segnale busy tone è attivo:
Ogni altro nodo che ascolta la trasmissione dati sul canale attiva il segnale busy tone sul canale di controllo. In questo modo, quando un nodo sta trasmettendo, a nessun altro nodo, che si trova all'interno di una distanza di 2 hop dal sender, è permesso di trasmettere contemporaneamente. Quindi, sebbene la probabilità di collisione nel BTMA è molto bassa, l'utilizzo della banda è molto bassa.
Questo protocollo è un'estensione del BTMA. Anche qui il canale è suddiviso in:
DBTMA fa uso di 2 busy tone:
I due busy tone sono due onde sinusoidali con frequenze differenti e ben separate.
Quando un nodo è pronto a trasmettere un pacchetto di dati, prima ascolta il canale per determinare se BTr è attivo. Un BTr attivo indica che un nodo nelle vicinanze sta ricevendo pacchetti di dati. Se il nodo non rileva nessun BTr, trasmette un RTS sul canale di controllo. Alla ricezione dell'RTS, il receiver controlla se il segnale BTt è attivo. Se cosí fosse, significa che qualche altro nodo nelle vicinanze sta trasmettendo e quindi, per il momento, esso non può ricevere pacchetti. Se il BTt non è attivo, il receiver risponde inviando un CTS e attivando il segnale BTr (che informa gli altri nodi nelle vicinanze che esso sta ricevendo). Il sender, una volta ricevuto il CTS, attiva il segnale BTt (informando i nodi nelle vicinanze che esso sta trasmettendo) ed inizia a trasmettere i dati. A trasmissione conclusa, il sender disattiva il segnale BTt ed il receiver il segnale BTr.
Se confrontato con gli altri protocolli basati sullo scambio RTS/CTS (come il MACA ed il MACAW), il DBTMA presenta un migliore utilizzo della banda. Questo poiché gli altri protocolli bloccano sia la trasmissione in avanti, sia quella all'indietro sul canale dati, quando "prenotano" il canale con gli RTS ed i CTS. Ma nel DBTMA, quando un nodo sta trasmettendo o ricevendo, sono bloccati rispettivamente solo i canali inverso (ricezione) o diretto (trasmissione). Per questo motivo, l'utilizzo della banda del DBTMA è circa il doppio di quella utilizzata dagli altri protocolli basati su RTS/CTS.
E' il receiver ad iniziare il protocollo di risoluzione della contesa.
Similmente al BTMA, anche nel RI-BTMA il canale è suddiviso in due parti:
Un nodo può trasmettere sul canale dati solo se il busy tone è assente sul canale di controllo.
Il pacchetto dati è diviso in due parti:
Sia il canale dati che quello di controllo sono divisi in slot di dimensione pari alla lunghezza del preambolo. La trasmissione dati consiste di due fasi:
Un sender che deve inviare un pacchetto di dati attende prima uno slot libero, cioè uno slot nel quale il segnale busy tone risulta assente sul canale di controllo. Se il receiver riceve il preambolo senza errori, attiva il segnale busy tone sul canale di controllo e continua a mantenerlo attivo per tutto il periodo di ricezione dei dati dal sender. Se la trasmissione del preambolo fallisce, il receiver non attiva il busy tone ed il sender attende il prossimo slot libero prima di riprovare.
Il busy tone viene quindi utilizzato per 2 scopi:
Il MACA-BI è un protocollo receiver-initiated e riduce il numero di pacchetti di controllo utilizzati dal MACA. Quest'ultimo, che è un protocollo sender-initiated, utilizza un handshake a 3 vie (prima viene inviato un RTS ed un CTS e poi avviene la trasmissione dati). Il MACA-BI elimina l'utilizzo dell'RTS.
Nel MACA-BI il receiver inizia la trasmissione inviando il pacchetto RTR (Ready-To-Receive) al sender. Se quest'ultimo è pronto a trasmettere invierà i pacchetti di dati. In questo modo, la trasmissione nel MACA-BI avviene attraverso un handshake a 2 vie.
Il receiver potrebbe non avere un'esatta conoscenza riguardo i rate di arrivo del traffico ai sender vicini; per questo motivo, deve stimare il rate medio di arrivo dei pacchetti. Per fornire le informazioni necessarie al receiver in modo da consentire il calcolo della media, i pacchetti dati sono modificati per includere informazioni di controllo riguardanti i flussi arretrati del nodo sender, il numero di pacchetti in coda e la lunghezza dei pacchetti. Una volta ricevute queste informazioni, il receiver può calcolare facilmente il rate medio di arrivo dei flussi. Supponendo che la stima effettuata dal receiver sia sbagliata o che non sia realizzabile (quando sta per essere trasmesso il primo pacchetto di dati della sessione), il MACA-BI può essere esteso per consentire al sender di inserire queste informazioni in un pacchetto RTS, se un RTR non viene ricevuto entro un certo periodo di tempo.
Nel MACA il pacchetto CTS viene utilizzato per informare i terminali nascosti di una imminente trasmissione dati, in modo da non farli trasmettere contemporaneamente, generando collisioni. Questo ruolo nel MACA-BI viene coperto dal pacchetto RTR, che contiene informazioni sulla durata della trasmissione dati. Quando un nodo rileva un RTR può ottenere informazioni sulla durata della trasmissione dati dei nodi distanti uno o due hop da esso (terminali nascosti). Dato che esso possiede informazioni circa la trasmissione dati dei terminali nascosti, si astiene dal trasmettere durante questo periodo. In questo modo il protocollo MACA-BI risolve il problema del terminale nascosto: le collisioni tra pacchetti di dati sono impossibili.
Il problema del terminale nascosto, comunque, influisce sulle trasmissioni dei pacchetti di controllo: in alcuni casi i pacchetti RTR possono collidere con pacchetti di dati. Ad esempio, nello scenario nella figura seguente, i receiver R1 ed R2 inviano i pacchetti RTR1 ed RTR2 che collidono presso A, e siccome quest'ultimo non è a conoscenza delle imminenti trasmissioni dati, potrebbe inviare anch'esso un RTR che colliderebbe con i pacchetti di dati presso R1 ed R2. L'efficienza del MACA-BI dipende principalmente sull'abilità del receiver di predire accuratamente i rate di arrivo del traffico ai nodi sender.
MARCH è un protocollo receiver-initiated che, al contrario del MACA-BI, non richiede nessun meccanismo di predizione del traffico. Questo protocollo sfrutta la natura broadcast del traffico delle antenne omnidirezionali per ridurre il numero di handshake coinvolti nella trasmissione dati. Nel MACA, prima della trasmissione di ogni pacchetto di dati vengono inviati i pacchetti di controllo RTS/CTS, mentre in MARCH l'RTS è utilizzato solo per il primo pacchetto dello stream. Dal secondo pacchetto in poi, viene utilizzato solo il CTS.
Ascoltando i pacchetti CTS trasmessi dai nodi vicini, un nodo può ottenere le informazioni riguardanti l'arrivo dei pacchetti presso di questi. Successivamente esso invia un CTS ai nodi vicini coinvolti per effettuare il relaying dei dati da quel nodo. Questo meccanismo è illustrato nella figura seguente: nel MACA vengono scambiati due pacchetti di controllo RTS/CTS per ogni pacchetto dati trasmesso. Il nodo C, ad esempio, può ricevere sia il CTS1 che l'RTS2 trasmesso da B. Il protocollo MARCH utilizza questa caratteristica del canale broadcast per ridurre l'handshake a 2 vie in un singolo handshake CTS. Nella figura a destra (handshaking in MARCH), quando il nodo B trasmette il CTS1, questo viene ricevuto anche da C. Ricordando che un pacchetto CTS contiene informazioni riguardanti la durata della successiva trasmissione di un pacchetto dati, il nodo C può quindi sapere in che istante il prossimo pacchetto dati sarà disponibile presso il nodo B. C, pertanto, invia un CTS2 in quell'istante di tempo. Dopo la ricezione del CTS2, il nodo B trasmette il pacchetto direttamente al nodo C.
Il pacchetto CTS contiene il MAC address del sender e del receiver ed il numero identificativo della rotta (RTid) per quel flusso. Il campo RTid viene utilizzato dai nodi per evitare un'interpretazione errata del CTS e l'inizio di falsi CTS-handshake. Nella figura seguente sono visualizzate due rotte:
Quando il nodo C ascolta il CTS trasmesso da B, attraverso il campo RTid comprende che il CTS è stato trasmesso dal suo nodo predecessore1 sulla rotta 1. Il nodo C, quindi, inizializza un timer che durerà per il tempo che occorre al nodo B per ricevere il pacchetto dal nodo sorgente A. Una volta scaduto il timer, il nodo C invierà un pacchetto CTS. Quest'ultimo CTS verrà ricevuto anche dal nodo Y, ma, essendo l'RTid del CTS diverso dall'RTid corrispondente alla rotta 2, il nodo Y non risponderà.
1 Il nodo predecessore coincide col next-hop vicino, lungo il percorso dal nodo corrente al nodo sorgente della trasmissione dati.
Il throughput del protocollo MARCH è significativamente alto se confrontato con quello del MACA, mentre l'overhead di controllo è molto minore. In condizioni di rete quasi satura, il ritardo medio end-to-end di inoltro dei pacchetti per il protocollo MARCH è molto basso rispetto a quello ottenuto col MACA. I vantaggi appena descritti sono principalmente dovuti al minor numero di pacchetti di controllo di handshake del MARCH rispetto al MACA. Il minor numero di pacchetti di controllo trasmessi riduce l'overhead migliorando il throughput, dato che viene utilizzata minor banda per il traffico di controllo.
In alcune situazioni una rete wirelss ad-hoc deve consentire la trasmissione di traffico real-time, pertando deve essere garantita la QoS. Nei protocolli basati su contesa, i nodi non hanno un accesso periodico garantito al canale, pertanto non sono in grado di supportare tale tipologia di traffico.
Richiedono la sincronizzazione temporale di tutti i nodi della rete, in modo che una prenotazione effettuata da un nodo sia nota a tutti i suoi vicini. Una sincronizzazione globale del tempo, tuttavia, è difficile da ottenere.
Non richiedono nessuna sincronizzazione temporale. Fanno uso di indicazioni temporali relative (non assolute) per le prenotazioni effettive.
Questi protocolli effettuano lo scheduling dei pacchetti nei vari nodi ed, inoltre, effettuano lo scheduling dell'accesso al canale da parte dei nodi. Lo scheduling dei nodi viene effettuato in maniera tale da garantire l'equità. Vengono utilizzati schemi basati sullo scheduling per imporre le priorità tra i flussi dei pacchetti che sono in coda nei nodi.
| protocollo | metodo di sensing | terminale nascosto/esposto | canale singolo/multiplo | 802.11 compatibile | antenna direzionale/omni | vantaggi | svantaggi |
|---|---|---|---|---|---|---|---|
| CSMA | fisico | principalmente nascosto | singolo | no | omni | semplicità | terminale nascosto |
| MACA/MACAW | virtuale (RTS/CTS) | principalmente esposto | singolo | no | omni | semplicità | terminale esposto |
| FAMA-NTR | fisico e virtuale | esposto | singolo | modifiche necessarie | omni | risolve il problema del term. nascosto | effetto false CTS-dominance |
| 802.11/802.11e | fisico e virtuale | entrambi | singolo | si | omni | semplicità, supporto alla QoS | terminale nascosto/esposto, sensing range problematico |
| DBTMA | fisico e virtuale | no | multiplo | modifiche necessarie | omni | risolve il problema del term. nascosto/esposto, migliori performance tra i protocolli omni, nessuna contesa tra pacchetti dati/controllo | richiede hardware/software aggiuntivo |
Data: 2008-09-10 17:52:09 CEST
HTML generated by org-mode 6.06b in emacs 22