Il CRC è una tecnica di rilevazione degli errori. Il mittente calcola un resto a partire dai dati e da un generatore. Il resto viene aggiunto ai dati e trasmesso insieme al messaggio.
Il ricevente ripete il controllo: se il resto finale non è zero, il messaggio viene considerato alterato.
La divisione usata nel CRC non usa sottrazioni con prestito. Al posto della sottrazione si usa
l'operazione xor.
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
1011011101Il generatore ha 4 bit. Il resto sarà lungo 3 bit, quindi ai dati vengono aggiunti 3 zeri.
Dati estesi = 101101000
Divisione modulo 2
| dato esteso | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| resto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
010.
Il resto finale è 010. Questo valore viene accodato ai dati originali.
Dati originali = 101101
CRC = 010
Messaggio trasmesso = 101101010
Il ricevente divide l'intero messaggio ricevuto per lo stesso generatore. Se il messaggio è
101101010, la divisione produce resto nullo.
| ricevuto | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| resto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
000: controllo coerente;000: errore rilevato.Se durante la trasmissione un bit cambia, il controllo al ricevente non produce più resto nullo.
Messaggio corretto = 101101010
Messaggio alterato = 101111010
| ricevuto | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| dopo xor | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
| generatore | 1 | 1 | 0 | 1 | |||||
| resto | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
111 è diverso da 000: l'errore viene rilevato.
Nelle trame Ethernet il campo FCS usa un controllo basato su CRC. Se la verifica fallisce, la trama viene scartata. La correzione non avviene nel livello fisico: eventuali ritrasmissioni dipendono da protocolli superiori o da meccanismi specifici del collegamento.
Il CRC aggiunge ridondanza calcolata sui dati. Il controllo è robusto perché molti errori producono un resto diverso da zero. Il CRC rileva l'errore, ma normalmente non indica quale bit correggere.