Gli errori di trasmissione sono normalmente dovuti alla presenza di disturbi del canale di comunicazione che impediscono la corretta ricezione dei dati trasmessi.
Le sorgenti di segnali magnetici ed elettrici che un’onda elettromagnetica incontra durante la sua propagazione possono infatti modificarne le proprietà. Può accadere quindi che dei bit “0” vengano trasformati in “1” e viceversa.
A questo proposito si può riprendere la trattazione iniziale sul controllo degli errori.
Classificazione degli errori
Gli errori che possono verificarsi durante la comunicazione sono di tre tipi [HOL91]:
- Errori single-bit (a bit singolo): coinvolgono un solo bit dell’unità dati (per esempio un byte) il cui valore viene trasformato da “0” a “1” o viceversa. Questo tipo di errore è il più comune.
Errori multiple-bit (a bit multiplo): coinvolgono due o più bit non consecutivi dell’unità dati, il cui valore viene trasformato da “0” a “1” o viceversa . Questo tipo di errore è abbastanza comune.
Esempio di errore multiple-bit
- Errori burst (a raffica): coinvolgono due o più bit consecutivi dell’unità dati, il cui valore viene trasformato da “0” a “1” o viceversa Questo tipo di errore è il meno comune.
Esempio di errore burst
Tecniche di rilevamento degli errori
Un metodo molto semplice per l’individuazione degli errori è quello di attuare un doppio invio per ogni unità di dati. Il ricevente ha quindi il compito di confrontare bit per bit le due copie della stessa unità.
Questa tecnica renderebbe la trasmissione perfettamente affidabile, essendo infinitesima la probabilità di due errori sullo stesso bit, ma molto lenta. Il tempo di trasmissione verrebbe più che duplicato poiché alla durata della doppia trasmissione, infatti, andrebbe aggiunto il tempo necessario alla verifica da parte del ricevente.
Si preferiscono quindi altri metodi che si basano sull’aggiunta di pochi bit scelti in modo sapiente. La tecnica che viene utilizzata da questi metodi è nota come ridondanza : i bit supplementari, infatti, sono a tutti gli effetti ridondanti e vengono distrutti non appena il sistema ricevente si sia accertato di una trasmissione corretta [HOL91].
Rilevamento degli errori con tecnica di ridondanza
VRC (Vertical Redundancy Check)
Il VRC è il metodo più comune per il controllo d’errore: viene aggiunto un singolo bit supplementare all’unità dati in modo che il numero di bit uguali a “1” dell’intera unità, bit supplementare compreso, diventi pari o dispari. Nel primo caso si parla di parity check o controllo di parità ; nel secondo caso si parla di controllo di disparità.
Controllo di parità
L’algoritmo VRC è molto facile da implementare ma ha diversi limiti; se infatti una unità ha un numero pari di bit invertiti, si ha una compensazione dell’errore, che quindi non viene rilevato [DES03].
LRC (Longitudinal Redundancy Check)
L’algoritmo LRC è una sorta di VCR bidimensionale. Come nel VCR si ha infatti l’aggiunta del bit di parità ad ogni unità dati. Ad ogni blocco viene però aggiunta una unità supplementare che contiene i bit di parità associati alle sequenze di bit corrispondenti del blocco
Algoritmo LRC
L’algoritmo LRC assicura maggiore affidabilità nell’individuazione degli errori di tipo multiple-bit e burst, ma ha ancora dei limiti poiché può essere tratto in inganno da trasposizioni di byte [HOL91].
CRC (Cyclic Redundancy Check)
Nel metodo CRC i dati che vengono aggiunti ad ogni unità corrispondono al resto ottenuto da una particolare divisione di un polinomio, detto generatrice, che dipende dalle dimensioni dell’unità. Per esempio, la generatrice di un’unità di 9 bit può essere “x8 + x4 + x3 + x2 +1” e corrisponde a “100011101”.
Questo algoritmo rappresenta il criterio più affidabile nella trasmissione dei dati ed è anche utilizzato nei sistemi di registrazione dei dati su hard disk [GIA].
Tutti i metodi riportati permettono il rilevamento di eventuali errori, ma purtroppo non permettono la correzione. In caso di errori si ha quindi la ritrasmissione totale o parziale dei dati, a seconda della complessità dell’algoritmo scelto e della gravità dell’errore.