Controllo a ridondanza ciclica

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.

Come operano i codici CRC
...

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.
Pasted image 20230331195142.png
La formula matematica è: .
Dove, come dovrebbe già essere noto, l'operatore è lo XOR.
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 ha un resto diverso da 0, ovvero ha un resto diverso da 0, il ricevente sa che si è verificato un errore; altrimenti i dati sono accettati come corretti.

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: ) sui bit degli operandi.

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 corrisponde allo shift a sinistra di k posizioni. Quindi dati R e D, la quantità fornisce come risultato la stringa di d + r bit mostrata nella figura sopra. Di seguito analizzeremo questa caratterizzazione algebrica dello schema d + r bit della figura sopra.

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 senza resto. Se eseguiamo l'operazione di XOR di R con entrambi i membri dell'espressione sopra indicata, otteniamo:

(si veda l'esempio sotto per comprendere i passaggi logico-algebrici)

Questa espressione ci mostra che se dividiamo per G, il valore del resto è precisamente R che possiamo definire come:
R = resto di ()

Esempio di calcolo di CRC
...

Vogliamo un R tale che:

perché il test sullo 0 è un'operazione velocissima

Lo ricavo così:
aggiungo R () ad entrambi i membri

questo restituisce come risultato:

Perché?

Il motivo è che nel primo membro restituisce , in quanto ogni bit di R viene confrontato con lo stesso bit dato che , di conseguenza

resto di

La figura illustra questo calcolo per:

  • D = 101110,
  • d = 6,
  • G = 1001,
  • r = lunghezza di () dove l'1 sottratto è bit più a sinistra che è sempre 1, il tutto

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:
Pasted image 20230420113953.png
ecco invece la versione del libro:
Pasted image 20230331195106.png

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 è . Inoltre CRC può rilevare un qualunque numero di errori (pari e dispari).

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?
Pasted image 20230420115256.png