Cyclic Redundancy Check - Zanichelli online per la scuola

Capitolo A5
Cyclic Redundancy Check
Consideriamo una stringa di dati D, composta da d bit, che il nodo mittente vuole inviare al nodo destinatario.
Mittente e destinatario devono innanzitutto accordarsi su un tracciato
di r + 1 bit, chiamato generatore, che indichiamo con G: imponiamo che
il bit più significativo di G sia a 1.
Per una data stringa D, il mittente sceglie r bit aggiuntivi R, e li appende
a D, facendo in modo che la sequenza d + r, interpretata come un numero
binario, sia esattamente divisibile per G, ossia non abbia resto.
Il processo di rilevamento degli errori è semplice: il destinatario divide
i bit ricevuti d + r per G e, se c’è un resto, significa che si è verificato un
errore durante la trasmissione. Se non c’è resto, i dati sono accettati come
corretti.
Tutti i calcoli del CRC sono effettuati in aritmetica modulo 2, ossia
senza riporti. Ricordiamo che, nell’aritmetica modulo 2, addizioni e sottrazioni sono identiche, ed entrambe corrispondono allo XOR bit per bit
degli operandi.
Quindi, ad esempio, troviamo:
1011 XOR 0101 = 1110
1001 XOR 1101 = 0100
La formula matematica relativa è
.
D 2r XOR R
Moltiplicazione e divisione avvengono come nei calcoli in base 2, tranne che le somme e sottrazioni richieste sono fatte senza riporti: come nel
normale calcolo binario, la moltiplicazione per 2k sposta verso sinistra di
k posizioni una stringa di bit.
Facciamo un esempio: per moltiplicare un numero per 4 (pari a 2 • 2,
quindi k = 2), prendiamo la stringa che rappresenta il numero da moltiplicare e spostiamo tutti i suoi bit a sinistra di due posizioni, introducendo a
destra due zeri, per riempire le posizioni vacanti.
Quindi, dati D e R, la quantità D • 2r XOR R produce la stringa di bit
d + r mostrata in figura 1.
d bit
Figura 1
r bit
D: bit di dati da inviare
R: bit del CRC
Vediamo come il mittente calcola R.
Ricordiamo che vogliamo trovare un R divisibile per G, ossia
.
D 2r XOR R = nG
Se effettuiamo uno XOR su entrambi i termini dell’equazione, otteniamo:
Questo file è un’espansione online del corso di Addomine, Pons, Informatica © Zanichelli Editore S.p.A., 2014 [19974]
1
A5 Il livello connessione
Cyclic Redundancy Check
.
D 2r = nG XOR R
Questa equazione ci dice che, se dividiamo D . 2r per G, il valore del
resto è esattamente R.
G
1001
101011
101110000
1001
D
101
000
1010
1001
110
000
1100
1001
1010
1001
011
R
Figura 2
In altre parole, possiamo calcolare R come R = resto D . 2r/G.
La figura 2 illustra il processo di calcolo per D = 101110, d = 6, G = 1001
e r = 3.
I nove bit trasmessi sono quindi 101110011.
Esistono degli standard internazionali per generatori di 8, 12, 16 e 32
bit: quest’ultimo, chiamato CRC-32, è stato adottato da molti protocolli
IEEE a livello connessione, e utilizza il generatore
GCRC-32 = 100000100110000010001110110110111
Il metodo CRC consente di rilevare errori impulsivi minori di r + 1 bit:
ciò significa che vengono rilevati errori di dimensioni pari o inferiori a r
bit consecutivi.
Per una trattazione matematica più esaustiva del CRC, vedere la relativa
voce su Wikipedia al link:
http://it.wikipedia.org/wiki/Cyclic_redundancy_check
Questo file è un’espansione online del corso di Addomine, Pons, Informatica © Zanichelli Editore S.p.A., 2014 [19974]
2