SIM-02 Checksum - Simulatore - Prof. Giagnotti
PROF GIAGNOTTI · TORNA A → · GUIDE
🧮 SIMULATORE · Checksum · SIM-02
Docente: Prof. Giagnotti · Codifica e Controllo Errori

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.

⏱ 10 min 🎯 Livello: Base / Intermedio 🧪 Simulatore interattivo 📦 Byte HEX 🔒 Controllo integrità 🔗 Collegamento alla teoria
✓Capire cos'è il checksum e perché supera il bit di parità singolo
✓Calcolare manualmente somma modulo 256 e complemento a uno
✓Usare il simulatore per verificare la correttezza di un blocco dati
✓Distinguere rilevazione vs correzione e i limiti del checksum
✓Collegare checksum a protocolli reali: IP, TCP, file download

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.

Definizione operativa

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.

Byte A3 Byte 7F Byte 1D → SOMMA Σ = 0x13F → C0 / 3F 163 dec 127 dec 29 dec 319 → mod 256 = 63 checksum Messaggio + Checksum → verifica: (somma totale) % 256 == 0

2. Come funziona — formule e varianti

Variante A

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.

Variante B

Complemento a uno (One's complement)

Somma, tieni solo 8 bit ( & 0xFF ). Inverti i bit: checksum = ~somma. Verifica: somma & checksum = 0xFF se ok.

Limiti

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.

FORMULE · pseudo-code
// Modulo 256 sum = 0 for b in bytes_hex: sum += b mod = sum % 256 checksum_mod256 = (256 - mod) % 256 // es: A3,7F,1D = 163+127+29=319, 319%256=63, checksum=C0 // Complemento a uno sum8 = sum & 0xFF checksum_one = (~sum8) & 0xFF // 63 -> 0b00111111 -> 11000000 = C0? No = 3F per es. completo // Nota: vari standard usano NOT sul byte basso
💡 Consiglio del docente

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.

Inserisci almeno un byte per iniziare.

4. Esempio pratico passo-passo

Input: A3, 7F, 1D

PassoOperazioneRisultato
1Conversione decimaleA3=163, 7F=127, 1D=29
2Somma Σ163+127+29 = 319 → 0x013F
3Modulo 256319 % 256 = 63 → 0x3F
4aChecksum Mod256(256-63)%256 = 193 → C1 (alcune varianti danno C0 se considerano 255-somma)
4bChecksum complemento a uno63 = 00111111 → NOT = 11000000=192=C0 in binario 11000000
5TrasmissioneDati + checksum → A3,7F,1D,C1. Ricevitore somma tutto: deve fare 0 mod 256.
🧪 Nota implementativa

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

⚠️ Quando il checksum fallisce

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
JS · validazione robusta
// Validazione HEX: da 1 a 2 cifre, solo 0-9 A-F // Input normalizzato: upperCase, trim, no 0x // Output mostra sia HEX che BIN e verifica totale

6. Verifica / Esercizio pratico

🔬 Attività — Checksum

  1. Calcola a mano il checksum Mod256 di FF,01,10. Verifica con il simulatore.
  2. Usando complemento a uno, qual è il checksum di 00,00? Perché ha senso?
  3. Simula errore: invia A3,7F,1D,C1, poi cambia secondo byte in 7E. Cosa vede il ricevitore?
  4. Perché TCP usa checksum mentre i QR code usano Reed-Solomon?
✓Checksum = somma byte ridotta a 8 bit, costa 1 byte e trova quasi tutti gli errori singoli.
✓Modulo 256: checksum = (256 - Σ%256)%256, verifica totale == 0.
✓Complemento a uno: checksum = ~ (Σ & 0xFF) & 0xFF, visualizzato in binario.
✓Limite: non rileva compensazioni e riordini, non corregge. CRC più forte.
✓Usato in header IP, UDP, download rapidi. Per file critici usa hash crittografico.