Una tecnica di rilevazione dell'errore largamente utilizzata nelle più recenti reti di calcolatori è basata sui codici di controllo a ridondanza ciclica. I codici di CRC sono anche detti codici polinomiali, in quanto è possibile vedere la stringa di bit da trasmettere come un polinomio i cui coefficienti sono i bit della stringa, con le operazioni sulla stringa di bit interpretate come aritmetica polinomiale.
Consideriamo i d bit costituenti i dati D da trasmettere e supponiamo che sorgente e destinazione si siano accordate su una stringa di r + 1 bit, conosciuta come un generatore, che indicheremo con G. É necessario che il bit più significativo (più a sinistra) di G sia 1. L'idea alla base del codice CRC è illustrata nella figura in basso.
La formula matematica è:
Dove, come dovrebbe già essere noto, l'operatore
Dato quindi un blocco di dati D (cui appartengono d bit), il mittente sceglierà r bit addizionali, R, e li unirà a D in modo da ottenere una stringa di d + r bit che, interpretata come numero binario, sia esattamente divisibile per G (nell'aritmetica modulo 2). Il processo di controllo del CRC è semplice. se la divisione
Tutti i calcoli di CRC sono eseguiti in modulo 2, senza riporti nelle addizioni e prestiti nelle sottrazioni. Questo significa che addizione e sottrazione sono operazioni identiche e che entrambe equivalgono a un'operazione di OR esclusivo (XOR:
Per esempio:
o analogamente:
Moltiplicazioni e divisioni sono eseguite come normalmente vengono eseguite in base 2, ma sottrazioni e addizioni non hanno riporti/prestiti. Come nella normale aritmetica binaria, la moltiplicazione di una stringa per
Torniamo alla questione cruciale di come il trasmittente calcoli R e ricordiamo che vogliamo trovare R in modo che esista un valore di n tale che:
Vale a dire, si vuole scegliere R in modo che G sia divisibile per
(si veda l'esempio sotto per comprendere i passaggi logico-algebrici)
Questa espressione ci mostra che se dividiamo
R = resto di (
Vogliamo un R tale che:
perché il test sullo 0 è un'operazione velocissima
Lo ricavo così:
aggiungo R (
questo restituisce come risultato:
Il motivo è che
La figura illustra questo calcolo per:
I tre bit pari a 0 che sono stati aggiunti al messaggio D, sono detti bit di padding (bit di riempimento), e sono uguali a r.
ecco una versione effettuata con carta e penna dell'esercizio:
ecco invece la versione del libro:
Sono stati definiti dei generatori standard di 8, 12, 16 e 32 bit. Nelle celle ATM si utilizza una CRC a 8 bit per proteggere i 5 byte dell'intestazione. Lo standard CRC-32 a 32 bit, in numerosi protocolli IEEE del livello di collegamento, usa il generatore
CRC può rilevare errori a raffica inferiori a r + 1 bit: ovvero tutti gli errori consecutivi di non oltre r bit saranno rilevati. Inoltre, in conformità con le appropriate assunzioni, la probabilità di avere un burst (raffica) più lungo di r + 1 bit è
Esercizio: considerate un CRC con un generatore a cinque bit G = 10011 e supponete che D abbia il valore 1010101010. Qual è il valore di R?