Lezione 11 · Canale 2 · lunedì 26 ottobre 2026
CRC e trasferimento affidabile
FCI · Reti
Lezione 11 · Canale 2 · lunedì 26 ottobre 2026
FCI · Reti
Il livello di collegamento offre al livello di rete quattro servizi. Il framing trasforma il datagramma, la SDU, nel frame, la PDU del livello, con un'intestazione e, in Ethernet, un trailer. Il duplexing usa il collegamento in una direzione (half-duplex) o in due (full-duplex). Gli errori si rivelano o correggono con parità, codici di Hamming, checksum e CRC, e si recuperano con la consegna affidabile.
Il CRC (Cyclic Redundancy Check, codice a ridondanza ciclica) è il codice usato per esempio in Internet. Tratta una stringa binaria come un polinomio e calcola in algebra modulo 2.
Modulo significa prendere il resto della divisione per : . Con i coefficienti valgono 0 o 1, e somma e sottrazione coincidono: sono lo XOR bit a bit.
Una stringa di bit corrisponde a un polinomio di grado al più , i cui coefficienti, dal grado più alto a , sono i bit. Per esempio è .
Trasmettitore e ricevitore conoscono un polinomio generatore di grado , cioè una stringa di bit. Il trasmettitore divide per e ottiene un quoziente e un resto di grado minore di :
La parola di codice è . Modulo 2 somma e sottrazione sono uguali, quindi sommare due volte lo cancella:
Ogni parola di codice è divisibile per . Il ricevitore divide per ciò che riceve: con resto diverso da 0 c'è un errore; con resto 0 la stringa è una parola di codice, ma non è detto che sia quella trasmessa, perché un errore potrebbe averla trasformata in un'altra.
Moltiplicare per aggiunge zeri in coda al messaggio. Il resto, di grado al più , si scrive su bit e occupa il posto di quegli zeri: la parola trasmessa è il messaggio seguito dal resto. La divisione si esegue durante la trasmissione con un circuito efficiente, in tempi dell'ordine dei nanosecondi.
Con , cioè e , si divide . A ogni passo si sceglie la potenza di che porta al grado del dividendo e si somma (XOR):
Il quoziente è e il resto è : ci si ferma quando il grado scende sotto .
Per il messaggio , cioè , con lo stesso generatore, si ha e il resto è . Su tre bit è , quindi la parola trasmessa è , cioè .
Dopo aver rivelato un errore si può scartare il frame, provare a correggerlo, con il rischio di correggere male, o recuperarlo con un trasferimento dati affidabile (RDT, reliable data transfer). Il collegamento può introdurre errori sui bit, perdite, duplicati e frame fuori sequenza: l'RDT consegna i dati senza errori, una sola volta e nell'ordine di invio.
Il recupero può essere end-to-end, fra i sistemi terminali, o hop-by-hop, su ogni collegamento. Il primo spetta al livello di trasporto: lo offre TCP, e per questo HTTP viaggia su TCP. Il secondo è un servizio del livello di collegamento.
Il recupero end-to-end serve comunque, perché chi progetta un'applicazione non conosce i collegamenti attraversati. Quello sul collegamento conviene dove gli errori sono frequenti, come sul primo tratto wireless: si corregge subito, mentre end-to-end passano decine di millisecondi. Ethernet non lo realizza, una cella 5G sì: ripeterlo a più livelli costa prestazioni.
Lo stop and wait è il più semplice dei protocolli ARQ (Automatic Repeat Request). Il trasmettitore A invia un frame protetto da un codice di rivelazione e aspetta. Se B verifica che è una parola di codice lo accetta e invia un riscontro positivo, l'ACK: A può proseguire. Se il frame si perde B non risponde e A resterebbe bloccato, quindi A fa partire un timeout a ogni trasmissione, l'RTO (retransmission timeout): se scade senza ACK ritrasmette.
Se l'ACK si perde o arriva tardi, A ritrasmette un frame che B ha già accettato. Per riconoscerlo ogni frame ha un numero di sequenza: B scarta la copia, senza consegnarla al livello superiore, e invia di nuovo l'ACK, che sblocca A. Anche l'ACK è numerato, con il numero atteso, cioè quello del prossimo frame. C'è al più un frame «in volo», quindi bastano 0 e 1: se B riceve 0, 1 e di nuovo 0, sa che comincia un nuovo ciclo.
La macchina a stati descrive la logica con l'ultimo numero di sequenza e quello atteso, e parte da . Senza errori percorre il ciclo , un passo per ogni frame corretto con il numero atteso e uno per il suo ACK. Un frame errato, o con un altro numero, lascia lo stato com'è e B invia di nuovo l'ACK del numero atteso.
Un frame con un ritardo eccezionale può arrivare quando B attende di nuovo lo 0 e venire accettato come nuovo. Numeri di sequenza più ampi riducono il rischio, ma costano memoria e bit di intestazione, cioè overhead.
Perdite, duplicati e ritardi
L'efficienza è il rapporto fra il tempo utile e il tempo totale. Il tempo utile è quello in cui si trasmette il frame, , con la lunghezza del frame in bit e la capacità in bit/s. Il tempo totale va dall'inizio della trasmissione alla ricezione dell'ACK: trasmissione, due propagazioni e trasmissione dell'ACK, di bit.
Moltiplicando numeratore e denominatore per :
L'ACK è breve rispetto ai dati, quindi si trascura. Con , il tempo di andata e ritorno:
Il prodotto , in bit, è il prodotto banda-ritardo. Il collegamento è come un tubo: la capacità è la sezione, il ritardo la lunghezza, e il prodotto dice quanti bit ci entrano. Lo stop and wait ne manda un frame per volta: se il prodotto supera molto , il tubo resta quasi vuoto.
Con Mbit/s, frame di 10 000 bit di cui 200 di intestazione, che non contano come utili, e ACK di 200 bit, un RTT di 1 ms, 10 ms, 100 ms e 1 s dà , , e bit e , , e . Con Gbit/s, come un accesso in fibra, il prodotto è mille volte più grande e vale 1 %, 0,1 %, 0,01 % e 0,001 %.
Lo stop and wait si ferma dopo ogni frame, quindi il tempo utile è un solo tempo di trasmissione. Frame più lunghi non bastano: non li sceglie chi trasmette e sono più esposti agli errori. Si lasciano invece più frame in volo, non ancora riscontrati: sono i protocolli con pipeline: Go-Back-N, che invia frame prima di attendere, e Selective Repeat.
Il tempo utile diventa , quindi l'efficienza è volte quella dello stop and wait, ma non supera il 100 %:
Per arrivare al 100 % servono almeno
frame.
Efficienza di una pipeline
Divisione
Parola di codice
Controllo in ricezione
Efficienza dello stop and wait
Con
Prodotto banda-ritardo
Pipeline con frame, dello stop and wait
Frame per il 100 %