Trasferimento dati: meccanismi di base dell'affidabilità

Benvenuto in questa sesta lezione del corso Sistemi e Reti 5. In questo capitolo esploreremo i principi fondamentali che garantiscono un trasferimento dati sicuro e coerente tra i nodi di una rete.

Analizzeremo i meccanismi di base dell'affidabilità, includendo le tecniche di controllo degli errori, la gestione dei pacchetti e i protocolli essenziali per assicurare l'integrità delle comunicazioni nelle moderne architetture di rete.

  • shape
  • shape


Trasferimento dati: meccanismi di base dell'affidabilità

Nei moduli dedicati al Livello di Rete (Livello 3), abbiamo più volte ribadito un concetto brutale: Internet è un ambiente ostile. I router scartano (drop) inesorabilmente i pacchetti quando le loro code di memoria sono piene, i cavi in rame subiscono interferenze elettromagnetiche che alterano i bit in transito (da 1 a 0 e viceversa), e gli algoritmi di routing dinamico possono far compiere ai pacchetti percorsi talmente stravaganti da farli arrivare a destinazione nell'ordine sbagliato.

Il protocollo IP è definito tecnicamente "Best-Effort": fa letteralmente del suo meglio per recapitare il pacchetto, ma non offre alcuna garanzia. Se un pacchetto muore, l'IP non avvisa nessuno. Come è possibile, su queste premesse disastrose, scaricare un estratto conto bancario o un eseguibile di sistema senza che vi sia il minimo errore o corruzione dei dati? La risposta risiede negli algoritmi di Affidabilità (Reliability) implementati al Livello Trasporto. In questa lezione dissezioneremo l'architettura logica nota come ARQ, che trasforma magicamente un canale inaffidabile in un canale perfetto.

L'architettura ARQ (Automatic Repeat reQuest)

Per costringere una rete caotica a comportarsi in modo affidabile, gli ingegneri informatici hanno ideato una famiglia di protocolli denominata ARQ (Automatic Repeat reQuest). L'implementazione dell'ARQ non richiede modifiche ai cavi o ai router (che continuano a perdere pacchetti beatamente), ma si basa su un patto rigoroso tra il software del Mittente e il software del Destinatario.

Questo paradigma si poggia su quattro pilastri algoritmici interdipendenti: il Rilevamento degli Errori, i Messaggi di Riscontro (ACK), i Timer di Ritrasmissione e i Numeri di Sequenza. Analizziamoli uno per volta scendendo nei dettagli del Kernel.

1. Rilevamento degli errori: L'implacabile Checksum

Il primo passo per garantire l'affidabilità è capire se il pacchetto arrivato a destinazione è integro o è stato corrotto fisicamente. Questo compito è affidato al Checksum (Somma di Controllo) inserito nell'header di Trasporto.

[tooltip]L'algoritmo di Checksum standard (usato da TCP e UDP) è brutalmente efficiente. Il mittente raggruppa tutti i dati del segmento in blocchi da 16 bit, li somma in aritmetica binaria, esegue il Complemento a Uno (inverte tutti gli zero in uno e viceversa) e scrive questo valore nell'header.[/tooltip]

Quando il destinatario riceve il segmento, esegue la stessa esatta somma includendo anche il campo checksum. Se il risultato binario non è composto interamente da "1" continui, l'hardware sa matematicamente che almeno un bit è stato alterato durante il viaggio. La regola d'oro dell'affidabilità entra in gioco qui: un pacchetto corrotto viene scartato istantaneamente in silenzio  . Per il Livello Trasporto, ricevere un pacchetto corrotto equivale esattamente a non averlo mai ricevuto.

2. Il battito vitale: Gli Acknowledgement (ACK)

Se il checksum è corretto e i dati sono integri, il ricevitore ha l'obbligo di notificare il successo al mittente. Lo fa generando un pacchetto di controllo speciale chiamato ACK (Acknowledgement - Riscontro)  .

Senza l'ACK, il mittente resterebbe in un limbo, non sapendo mai se i dati hanno raggiunto il server estero o se sono finiti nel "cestino" di un router congestionato.

La tecnica del Piggybacking (Inoltro a cavalluccio): Inviare pacchetti sulla rete che contengono solo l'ACK e zero dati applicativi è uno spreco enorme di banda. Per ovviare a questo, i protocolli ARQ utilizzano il "Piggybacking". Se il Server B riceve un pacchetto dal Client A e deve a sua volta rispondere con dei dati web, il Server B ritarda l'ACK di qualche millisecondo, aspettando che i dati web siano pronti. Non appena sono pronti, il Server B "aggancia" (piggyback) l'ACK direttamente nell'header del suo pacchetto dati in uscita, risparmiando di fatto un intero invio sulla rete.

3. L'orologio inesorabile: Timeout e Ritrasmissione (RTO)

Cosa accade se il pacchetto dati viene distrutto da un router (quindi l'ACK non viene mai generato), oppure se il pacchetto arriva, l'ACK viene generato ma è l'ACK stesso a perdersi sulla via del ritorno? In entrambi i casi, il mittente non riceve nulla.

Per prevenire un blocco infinito (Deadlock), il mittente affianca a ogni segmento spedito un timer hardware chiamato RTO (Retransmission Timeout). Non appena il pacchetto esce dalla scheda di rete, il timer fa partire il conto alla rovescia (calcolato dinamicamente in base alla latenza della rete). Se l'orologio scade a zero e l'ACK non è ancora arrivato, il mittente deduce che si è verificato un disastro ed esegue l'operazione che dà il nome al protocollo ARQ: la Ritrasmissione Automatica della copia del segmento originario conservata nella RAM.

4. Il Paradosso dell'ACK perso: i Numeri di Sequenza

L'introduzione del Timeout risolve la perdita di dati, ma introduce un bug logico devastante (il Paradosso dell'ACK perso).

Il Paradosso del Duplicato: Immagina questo scenario. Il tuo PC invia l'ordine bancario "Paga 100 Euro". Il server della banca riceve l'ordine perfettamente intatto, scala i soldi e invia l'ACK. Tragicamente, l'ACK del server viene distrutto da un router per strada. Il tuo PC non riceve l'ACK. Il timer del tuo PC scade (Timeout). Il tuo PC obbedisce alle regole ARQ e ritrasmette "Paga 100 Euro". Il server della banca riceve di nuovo il pacchetto: senza un meccanismo di controllo, ti scalerebbe altri 100 Euro!

Per neutralizzare i "pacchetti fantasma" causati dalle ritrasmissioni, l'ultimo pilastro dell'ARQ è l'uso tassativo dei Numeri di Sequenza (Sequence Number). Se il tuo PC ha inviato l'ordine originario con Sequence Number "10", la ritrasmissione automatica avrà anch'essa Sequence Number "10". Quando il server della banca riceve per la seconda volta il pacchetto "10", la sua memoria gli dice: "Ho già processato il pacchetto 10!". Il server, quindi, scarta i dati duplicati per non scalare i soldi due volte, ma si premura di rinviare l'ACK, perché sa che l'unico motivo per cui il client ha inviato un duplicato è che non ha mai ricevuto il primo ACK.

Sintesi applicativa e autoverifica

L'intera infrastruttura di affidabilità di Internet (come il protocollo TCP) si poggia sulla sinergia di questi quattro micro-meccanismi. Il Checksum garantisce che i bit non siano corrotti. L'ACK avvisa del successo. Il Timeout (RTO) previene i blocchi infiniti in caso di silenzi della rete. I Numeri di Sequenza prevengono il disastro dei pacchetti duplicati generati dalle ritrasmissioni.

Per fissare questa affascinante coreografia logica, risolviamo un caso estremo di troubleshooting logico: un mittente invia un grosso pacchetto (Sequence Number 500). Un picco elettromagnetico (rumore) altera tre bit a metà del pacchetto mentre attraversa un cavo non schermato. Il pacchetto arriva al ricevitore. Descrivi in ordine cronologico esatto cosa farà il Livello Trasporto del ricevitore (calcolo matematico ed eventuale ACK) e, soprattutto, come farà il mittente a rendersi conto che deve inviare nuovamente il pacchetto 500, pur non avendo mai ricevuto alcun messaggio di errore.

Paragrafi letti

 

    
0%
       Salva

Esercizi su "6. Trasferimento dati: meccanismi di base dell'affidabilita'"

0%

Statistics