# CSMA/CA

`CSMA/CA` (*Carrier Sense Multiple Access with Collision Avoidance* ovvero accesso multiplo tramite rilevamento della portante con prevenzione delle collisioni) è un meccanismo che, mediante il rilevamento della portante (o mezzo trasmissivo), previene le collisioni nelle trasmissioni wireless.

Nelle reti wireless, i dati vengono trasmessi tramite onde radio che viaggiano nell'aria. Poiché l'aria è un mezzo condiviso da più stazioni, le trasmissioni simultanee possono causare collisioni e perdita di informazioni. Il meccanismo di Collision Avoidance (prevenzione delle collisioni) cerca di ridurre tale rischio. Infatti, le stazioni wireless utilizzano la tecnica del Carrier Sense per ascoltare il canale trasmissivo - verificare quindi se ci sono attività sulla portante - prima di trasmettere i dati.

Uno dei problemi intrinseci nelle reti wireless è l'effetto dell'*hidden terminal*. Questo fenomeno si verifica quando un host può rilevare l'attività solo nel proprio raggio d'azione, ignorando le trasmissioni di altri host situati fuori dalla sua portata.

## Componenti e Tempi di Attesa

Nel meccanismo CSMA/CA intervengono alcuni intervalli temporali fondamentali:

- **DIFS** (Distributed Interframe Space): in questo intervallo di tempo la stazione attende per assicurarsi che il canale sia libero prima di trasmettere
- **SIFS** (Short Interframe Space): é un intervallo di attesa più breve rispetto al DIFS

Durante questi intervalli, le stazioni effettuano il Carrier Sense per verificare l'assenza di trasmissioni attive prima di iniziare la propria trasmissione.

## Frame di Controllo

Oltre a trasmettere dati, le stazioni utilizzano specifici frame di controllo per coordinare le trasmissioni e ridurre le collisioni:

- **RTS** (Request to Send): il mittente invia questo frame per richiedere l'autorizzazione a trasmettere
- **CTS** (Clear to Send): il destinatario risponde col frame CTS, confermando la ricezione dell'RTS e notificando alle altre stazioni di sospendere le trasmissioni per un periodo definito, evitando così interferenze
- **ACK** (Acknowledge): una volta ricevuti correttamente i dati, il destinatario invia un frame ACK per confermare la ricezione

Questi frame contengono un campo chiamato "duration", che imposta il timer **NAV** (Network Allocation Vector). Il NAV è un ulteriore meccanismo di controllo che indica alle altre stazioni per quanto tempo il canale risulterà occupato.

## Sequenza di Trasmissione

1. La stazione A attende un intervallo DIFS durante il quale ascolta il canale (Carrier Sense) per verificare che non ci siano trasmissioni in corso
2. Se il canale risulta libero, A invia un frame RTS per richiedere la trasmissione
3. La stazione B, destinataria, attende un breve intervallo SIFS e risponde con un frame CTS, confermando la disponibilità a ricevere e notificando agli altri dispositivi di non interferire per un tempo prestabilito (impostato dal NAV)
4. Dopo un ulteriore intervallo SIFS, la stazione A procede con l'invio dei dati
5. Al termine della trasmissione, B attende ancora un tempo SIFS e invia un frame ACK a tutte le stazioni per segnalare la corretta ricezione dei dati e la fine della trasmissione

Questa procedura consente di ridurre al minimo le collisioni, garantendo una trasmissione più ordinata ed efficiente nel mezzo condiviso.
