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