GESTIONE ERRORI: CHECKSUM Livello 4 Trasporto La definizione di errore in un sistema di comunicazione a codifica binaria. Un errore in un sistema di comunicazione a codifica binaria si verifica quando viene trasmesso dal controllore del canale un bit e dal decodificatore del ricevitore lo stesso bit viene stimato con il valore opposto. Le tecniche a ridondanza di blocco Molto utilizzate perché facilmente implementabili sia via HW che via SW. Si basano sull’aggiunta di simboli calcolati valutando un blocco di parole. Si prefiggono l’obiettivo di ottenere la più alta probabilità di rilevare l’eventuale errore introducendo la minor ridondanza. La somma di controllo (checksum) La parola di controllo si calcola effettuando la somma algebrica modulo 2 di tutti i codici delle singole parole. Il gruppo originario viene trasmesso accodandovi la checksum. Il ricevitore ripete la stessa operazione del trasmettitore e confronta la parola di controllo ricevuta con quella calcolata. La costruzione della checksum La checksum è utilizzata per trasmissioni su brevi distanze. I byte da trasmettere vengono suddivisi in gruppi. Si calcola l’OR esclusivo (XOR) per ciascun gruppo di bit. Il risultato di questa operazione è un byte che viene trasmesso in coda. La rilevazione dell’errore Se la parola di controllo ricevuta e quella calcolata sono diverse allora è occorso un errore sicuramente. Se la parola di controllo ricevuta e quella calcolata sono uguali allora è probabile che nessun errore sia occorso. La non correzione dell’errore Se ogni carattere è costituito da n bit allora sarà trasmessa una ulteriore configurazione di n bit indipendentemente dalla lunghezza del messaggio. Questa tecnica non consente l’individuazione dell’errore. XOR a b a XOR b 1 1 0 1 0 1 0 1 1 0 0 0 Un primo esempio La checksum si ottiene applicando la tabella di verità dell’XOR (OR esclusivo) per cui risulta: 110101+ 000111= 110010 Un secondo esempio: nessun errore! Dati trasmessi 00110010 01010111 00001111 10110011 11110111 00000001 11001100 01101101 10001110 Dati ricevuti 00110010 01010111 00001111 10110011 11110111 00000001 11001100 01101101 10001110 Un terzo esempio: probabile errore! Dati trasmessi 00111100 01010101 01110000 11001100 00011111 11001010 00000010 01101001 01101011 Dati ricevuti 00111100 01010100 01111000 01001100 00011111 11001010 00000010 01101001 11100010 Un primo esercizio Verificare che la checksum del seguente blocco 10101010 00001111 00110011 01111110 11100111 00000001 01100110 vale 01101000. Un secondo esercizio Codificare la propria data di nascita in binario su otto bit (un byte) per ciascuna cifra decimale e aggiungere il byte di ridondanza secondo la tecnica della checksum. Suggerimento: consultare la tabella di conversione ASCII (American Standard Code Information Interchange). Codice ASCII Il codice ASCII viene rappresentato in una tabella Ascii con 128 caratteri (7bit). Il codice ASCII esteso e la sua relativa tabella estesa hanno una capacità di 256 caratteri (8bit). L'ASCII standard è un codice a 7bit che inserito in un byte, ne rappresenta la parte meno significativa, da 0 a 128 appunto, con l'ottavo bit sempre a zero. I 128 caratteri ASCII rappresentati sono suddivisi in caratteri di controllo (i vari NULL CR Lf e seguenti) e 96 caratteri stampabili ( i caratteri alfanumerici). L’ottavo bit (meno significativo) è il primo partendo da destra! Codice ASCII standard Dec Simbolo 32 Codice binario 48 0 0011 0000 0010 0000 49 1 0011 0001 33 ! 0010 0001 50 2 0011 0010 34 “ 0010 0010 51 3 0011 0011 35 # 0010 0011 52 4 0011 0100 36 $ 0010 0100 53 5 0011 0101 37 % 0010 0101 54 6 0011 0110 38 & 0010 0110 55 7 0011 0111 39 ‘ 0010 0111 56 8 0011 1000 40 ( 0010 1000 57 9 0011 1001 41 ) 0010 1001 58 : 0011 1010 42 * 0010 1010 59 ; 0011 1011 43 + 0010 1011 60 < 0011 1100 44 , 0010 1100 61 = 0011 1101 45 - 0010 1101 62 > 0011 1110 46 . 0010 1110 63 ? 0011 1111 47 / 0010 1111 64 @ 0100 0000 Codice ASCII standard Dec Simbolo 65 A 66 Codice binario Dec Simbolo Codice binario 0100 0001 78 N 0100 1110 B 0100 0010 79 O 0100 1111 67 C 0100 0011 80 P 0101 0000 68 D 0100 0100 81 Q 0101 0001 69 E 0100 0101 82 R 0101 0010 70 F 0100 0110 8 S 0101 0011 71 G 0100 0111 84 T 0101 0100 72 H 0100 1000 85 U 0101 0101 73 I 0100 1001 86 V 0101 0110 74 J 0100 1010 87 W 0101 0111 75 K 0100 1011 88 X 0101 1000 76 L 0100 1100 89 Y 0101 1001 77 M 0100 1101 90 Z 0101 1010 Codice ASCII standard Dec Simbolo Codice binario 91 [ 0101 1011 92 \ 0101 1100 93 ] 0101 1101 94 ^ 0101 1110 95 _ 0101 1111 96 ‘ 0110 0000 123 { 0111 1011 124 | 0111 1100 125 } 0111 1101 126 ~ 0111 1110 127 0111 1111 Codice ASCII standard Simbolo Codice binario Dec Simbolo Codice binario 97 a 0110 0001 110 n 0110 1110 98 b 0110 0010 111 o 0110 1111 99 c 0110 0011 112 p 0111 0000 100 d 0110 0100 113 q 0111 0001 101 e 0110 0101 114 r 0111 0010 102 f 0110 0110 115 s 0111 0011 103 g 0110 0111 116 t 0111 0100 104 h 0110 1000 117 u 0111 0101 105 i 0110 1001 118 v 0111 0110 106 j 0110 1010 119 w 0111 0111 107 k 0110 1011 120 x 0111 1000 108 l 0110 1100 121 y 0111 1001 109 m 0110 1101 122 z 0111 1010 Dec