# CSMA

Nelle telecomunicazioni CSMA, (acronimo inglese di Carrier Sense Multiple Access traducibile come: protocollo ad accesso multiplo con rilevamento della portante) indica una tecnica di trasmissione dati che si basa sull'accesso multiplo tramite rilevamento della portante. È posto al secondo livello del modello ISO/OSI, nelle reti a bus per condividere tra più host la capacità della rete evitando che due dispositivi trasmettano contemporaneamente generando una collisione.

## Descrizione

Il protocollo implementa la direttiva: "Ascolta prima di trasmettere. Se trovi il canale occupato aspetta e riprova più tardi secondo una modalità di ritrasmissione stabilita".
Quando un calcolatore trasmette dati sul cavo è presente un segnale elettrico chiamato portante (da non confondere con l'onda portante utilizzata nelle telecomunicazioni per la modulazione; infatti, stiamo parlando di un protocollo per trasmissioni in banda base quindi senza modulazione); tutti i calcolatori connessi al mezzo trasmissivo sono in grado di rilevare la presenza di un segnale elettrico che si propaga sul mezzo in questione ovvero di rilevare una trasmissione in atto.
Sulla rete ci sono nodi multipli che possono trasmettere e ricevere in maniera concorrente (Multiple Access). Ogni dispositivo prima di avviare la trasmissione dei dati deve verificare se sul canale altri nodi stiano già trasmettendo, rilevando la portante (Carrier Sense). Se il canale è libero inizia la trasmissione, altrimenti aspetta per un tempo arbitrario prima di riprovare a trasmettere. Le diverse metodologie di attesa forniscono tre varianti di questa tecnica di attesa per la trasmissione:
* CSMA persistente (1-persistente): si controlla continuamente se il canale è libero, appena è libero si trasmette.
* CSMA non-persistente (0-persistente): è detto non persistente perché si controlla una prima volta se il canale è libero, se non lo è si attende un intervallo casuale (strettamente maggiore del tempo di trasmissione di una trama) prima di ricontrollare il canale.
* CSMA p-persistente: viene utilizzato nei canali divisi in intervalli temporali. Una volta controllato il canale:
* se è libero si trasmette subito con probabilità p, oppure rimanda la trasmissione all'intervallo successivo con probabilità q=1-p, se anche questo risultasse libero trasmette altrimenti rimanda, se invece è occupato si comporta come una collisione e attende un intervallo di tempo casuale per poi ritrasmettere;
* se è occupato fin dall'inizio attende fino all'intervallo successivo e si ripete l'algoritmo sopracitato;
* se viene rivelata una collisione, prima di ritentare la trasmissione, si attende un intervallo di tempo casuale.

## Vantaggi

Il CSMA rappresenta il protocollo più facilmente implementabile che consente l'accesso multiplo ad un canale di comunicazione condiviso tra più utenti ed allo stesso tempo anche molto efficiente/flessibile in funzione del numero di terminali cioè in termini di scalabilità della rete. Un protocollo a suddivisione di tempo (TDMA) ad esempio avrebbe lo svantaggio rispetto al CSMA di necessitare di un meccanismo di sincronizzazione nello slot temporale di competenza sia in trasmissione che in ricezione da parte delle stazioni ricetrasmittenti cioè dunque di un apparato ricetrasmittente più complesso e costoso da implementare. Un protocollo a suddivisione di frequenze (FDMA) avrebbe invece lo svantaggio di richiedere un'allocazione statica di banda per ciascuna stazione trasmittente, che di per sé si esaurirebbe molto rapidamente al crescere del numero dei terminali di rete, e anch'esso la necessità di un apparato molto più complesso in ricezione per poter ricevere su tutte le bande di trasmissione. Una situazione analoga di complessità dell'apparato ricetrasmittente e grossi problemi di scalabilità si avrebbero anche con il CDMA. Nel CSMA invece tutto ciò non è necessario: gli utenti possono trasmettere sull'intera banda del canale senza alcun tipo di sincronizzazione, ma col solo vincolo delle regole di accesso dettate dal protocollo stesso.

## Risoluzione dei conflitti

Da solo il protocollo CSMA non è sufficiente per impedire che si verifichino conflitti. Può capitare infatti che il ritardo di propagazione del segnale sul canale faccia sì che un dispositivo non riesca ad accorgersi che un altro terminale ha già avviato la trasmissione. In questo caso entrambi trasmettono dati, che inevitabilmente interferiranno quando raggiungeranno uno stesso punto del cavo. Tale interferenza è chiamata collisione. Essa non causa alcun danno ai dispositivi, ma rende impossibile la corretta ricezione dei dati.
Nel CSMA puro il trasmettitore non è in grado quindi di rilevare le collisioni durante una trasmissione, pertanto non è in grado di sapere se la trama inviata è stata ricevuta correttamente. Se le trame sono perse con una frequenza troppo elevata si può implementare un meccanismo di riscontro da parte del ricevitore. Se il riscontro non arriva entro un certo tempo (chiamato timeout), il trasmettitore tenta una nuova trasmissione della trama collisa.
In alcune reti si può usare la tecnica Collision Detection (CD) che permette al trasmettitore di rilevare rapidamente eventuali collisioni durante la trasmissione migliorando la tecnica di CSMA classico. In questo modo il trasmettitore sa che deve interrompere la trasmissione del frame colliso e che deve ritrasmetterlo senza aspettare il timeout. Perché si possa usare il protocollo CSMA/CD è necessario che:
* il trasmettitore possa ascoltare il canale su cui sta trasmettendo;
* il doppio del tempo di propagazione del segnale tra le due stazioni (RTT Round Trip time) più lontane sia inferiore al tempo di trasmissione di un frame.
Queste condizioni sono rispettate nelle reti locali (LAN) via cavo.
Se il canale non rispetta le condizioni per usare il CSMA/CD, si può comunque ridurre la frequenza delle collisioni usando tecniche come il Collision Avoidance (CA). Questo avviene, per esempio, nel canale radio, in cui il trasmettitore non può ascoltare il canale durante la trasmissione.

## Utilizzo di CSMA

* Ethernet IEEE 802.3x usa un Carrier Sense Multiple Access with Collision Detection (CSMA/CD)
* WI-FI IEEE 802.11x usa Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA)
* Controller Area Network usa Carrier Sense Multiple Access with Bitwise Arbitration (CSMA/BA)