Il mezzo fisico di trasmissione e' soggetto a rumore, che puo' causare errori. Un errore e' il cambiamento in un messaggio di uno o piu' bit. Il rumore fisico tende a essere in burst quindi gli errori tendono ad essere raggruppati in bit vicini.
Teoricamente gli errori si possono:
Al momento la norma e' di curare gli errori, vi sono pero' vantaggi e svantaggi ad entrambi i metodi.
Gli errori devono venire:
e cio' deve avvenire al livello piu' basso possibile del modello OSI. Quindi errori dovuti a fenomeni fisici devono essere recuperati a livelli fisici.
Questo metodo e' usato soprattutto con la trasmissione seriale asincrona. Si usi il codice ASCII puro a 7 bit per carattere. In tal caso l'ottavo bit non serve alla codifica di un carattere e puo' venire usato per il controllo di parita'.
Si concorda a priori tra il trasmittente e ricevente se la parita' debba essere pari o dispari, ovvero se la somma dei bit settati a 1 in un byte trasmesso debba sempre essere un numero pari o dispari.
Il trasmittente setta a 1 o 0 l'ottavo bit in modo da forzare la parita' concordata.
Il ricevente controlla che la parita' sia osservata in ogni byte. Se un byte e' di parita' sbagliata allora contiene almeno un bit errato.
Il problema e' che il controllo di parita' scopre 1 o 3 bit errati ma non 2 o 4 o un numero pari qualsiasi. Il controllo di parita' e' comunque estremamente semplice da implementare in hardware. Al momento anche su linee seriali asincrone non viene quasi piu' usato.
E' anche detto controllo di parita' longitudinale, ove quello precedente e' detto trasversale. Consiste nell'inserimento di un byte extra ogni blocco di n byte informativi.
Il primo bit del byte extra viene settato a 0 o 1 in modo da forzare la parita' pari o dispari di tutti i primi bit del blocco che precede; e in modo simile tutti gli altri bit del byte extra di parita'.
Per quanto piu' efficace del solo controllo di parita' trasversale, questo metodo non si accorge se quattro bit "agli angoli di un quadrato" sono errati.
Sono metodi di vario tipo che essenzialmente includono la somma di blocchi di bit della trama input da controllare, eventualmente pretrattando ogni blocco di bit addendo e/o post-trattando la somma.
Il risultato dell'algoritmo includente la somma viene apposto come sequenza di bit di una certa dimensione (tipiche 16 o 32) alla trama stessa. L'algoritmo viene eseguito sia dal trasmittente che dal ricevente sulla sola trama da controllare (escluso il checksum stesso). Il ricevente controlla che il checksum ottenuto corrisponda a quello inviato.
Per esempio i protocolli TCP/IP usano il seguente algoritmo di definizione del checksum, che e' un registro di 16 bit:
il complemento a 1 della somma di tutti i blocchi di 16 bit della trama, ciascuno complementato a 1 prima della somma
Questi vengono usati con schemi ditrasmissione a trame, orientati al bit.
La teoria matematica e' la seguente. Si prenda un polinomio generatore di un certo grado, basato sulle potenze del 2. Per esempio un protocollo raccomandato dalla International Telecommunications Union e:
216+ 212+ 25+ 20
ovvero espresso come numero binario
10001000000100001
Si prenda la trama di bit come dividendo di una divisione e il polinomio come divisore. Si esegua la divisione (che e' molto facilmente implementabile in hardware): il resto della divisione e' un numero binario di lunghezza uguale al grado del polinomio generatore.
Questo resto viene detto Frame Check Sequence (FCS - Controllo di Sequenza Trama) oppure Circular Redundancy Check (CRC - Controllo di Ridondanza Ciclica), e viene apposto alla fine della trama dal trasmittente.
Il ricevente compie la stessa divisione sul totale 'trama originale + CRC'. Secondo la teoria matemetica, in assenza di errori il resto deve essere 0.
Questo e' il metodo che, piu' di ogni altro e a seconda della complessita' del polinomio generatore, da' affidabilita' di detezione errori.