SIM-02 — Checksum: somma con Modulo 256 e Complemento a Uno
Come nasce il checksum, come si calcola su byte esadecimali, quando usarlo rispetto alla parità e al CRC. Simulatore interattivo con validazione e verifica della trasmissione.
1. Definizione — cos'è il checksum
Il checksum è una somma di controllo: il trasmettitore somma tutti i byte del messaggio e invia insieme al messaggio il risultato (ridotto a 8 bit). Il ricevitore rifà la stessa somma e confronta.
Data sequenza B1...Bn di byte (0-255), Checksum = f( Σ Bi ) dove f è modulo 256 o complemento a uno. Costo O(n), nel nostro simulatore Mod256 1 byte di overhead.
Il checksum Internet è utilizzato nei protocolli IP, TCP e UDP per rilevare errori di trasmissione. Formati come ZIP e GZIP utilizzano invece algoritmi CRC, ad esempio CRC-32.
2. Come funziona — formule e varianti
Modulo 256 (Checksum a complemento a due)
Somma tutti i byte. checksum = (256 - (Σ mod 256)) mod 256. Alla verifica somma tutto + checksum deve dare 0 mod 256.
Complemento a uno (One's complement)
Somma, tieni solo 8 bit ( & 0xFF ). Inverti i bit: checksum = ~somma. Verifica: somma & checksum = 0xFF se ok.
Cosa rileva?
Rileva errori singoli, molti errori multipli. Non rileva scambio di posizione se la somma è uguale (es. A3,7F vs 7F,A3). CRC è più robusto.
Se devi spiegare all'orale: checksum non è un hash crittografico. È veloce e leggero, ma collide facilmente. Per integrità file vera usa SHA-256, per trasmissione veloce su link rumoroso usa CRC-32.
3. Simulatore checksum interattivo
Inserisci byte esadecimali separati da virgola. Il simulatore originalie è checksum - inputBytes. Qui è stato ristrutturato con validazione avanzata e dettagli di calcolo.
4. Esempio pratico passo-passo
Input: A3, 7F, 1D
| Passo | Operazione | Risultato |
|---|---|---|
| 1 | Conversione decimale | A3=163, 7F=127, 1D=29 |
| 2 | Somma Σ | 163+127+29 = 319 → 0x013F |
| 3 | Modulo 256 | 319 % 256 = 63 → 0x3F |
| 4a | Checksum Mod256 | (256-63)%256 = 193 → C1 (alcune varianti danno C0 se considerano 255-somma) |
| 4b | Checksum complemento a uno | 63 = 00111111 → NOT = 11000000=192=C0 in binario 11000000 |
| 5 | Trasmissione | Dati + checksum → A3,7F,1D,C1. Ricevitore somma tutto: deve fare 0 mod 256. |
Nel simulatore base originale il Mod256 restituiva (256 - modulo)%256 quindi per A3,7F,1D → C1. In alcune slide scolastiche si usa 255 - modulo = C0. Entrambe sono valide se trasmettitore e ricevitore concordano la stessa formula. Qui lasciamo la formula originale fedele al sorgente.
5. Errori comuni e cosa rileva
Se un errore aumenta un byte di +5 e un altro diminuisce di -5, la somma resta uguale → checksum non rileva. Scambio di due byte identici nella somma → non rilevato. Per questo IP usa checksum ma Ethernet usa CRC-32.
- Rileva: singolo bit flip, singolo byte corrotto, burst brevi
- A volte non rileva: due errori compensati, riordino blocchi
- Input tipici errati: spazi extra, prefisso 0x, byte > FF, virgola finale
6. Verifica / Esercizio pratico
🔬 Attività — Checksum
- Calcola a mano il checksum Mod256 di
FF,01,10. Verifica con il simulatore. - Usando complemento a uno, qual è il checksum di
00,00? Perché ha senso? - Simula errore: invia
A3,7F,1D,C1, poi cambia secondo byte in7E. Cosa vede il ricevitore? - Perché TCP usa checksum mentre i QR code usano Reed-Solomon?