Il collegamento dei dati

torna all'indice

Una volta definito il mezzo fisico di trasmissione di una rete e la modalità con cui avviene la trasmissione su quel mezzo, si passa ad un secondo ordine di problemi, consistente nella ricerca di una trasmissione/ricezione affidabile ed efficiente tra le macchine connesse fisicamente da quel mezzo. Questo problema è gestito nel secondo livello dello schema OSI, il livello di Collegamento dei Dati o Data Link.

Le funzioni principali che sono raggruppate in questo ambito riguardano i seguenti aspetti:  

Un funzionamento tipico che coinvolge questo livello è, ad esempio, la procedura eseguita da un router per lo smistamento di un pacchetto:

  1. al router arrivano i bit lungo un canale fisico, l'hardware apposito trasferisce i bit al software/hardware (d'ora in poi indicati con SW e HW) del livello due;
  2. il SH/HW del livello due, in genere contenuto in un chip della scheda di rete, fa qualche controllo sul framing (composizione, ordine nella sequenza) e su eventuali errori di trasmissione;
  3. se il controllo è andato a buon fine, il SW/HW di livello due genera un interrupt alla CPU per richiedere l'intervento del SW del livello tre (che tipicamente è un processo di sistema) il quale elabora il pacchetto contenuto nel frame e decide su quale linea in uscita dal router instradarlo;
  4. il SW di livello tre consegna il pacchetto al SW/HW del livello due che lo imbusta in un nuovo frame e a sua volta lo consegna al livello fisico della linea in uscita prescelta.

L'approccio usuale del livello due è, in generale, il seguente:

Un problema decisivo è dunque rappresentato dalla delimitazione dei frame. Le tecniche utilizzate per risolvere questo problema sono tutte legate ai caratteri o bit utilizzati (tecniche di natura temporale sarebbero molto rischiose):

 

Riconoscimento e correzione degli errori

Nella fase di codifica o durante la trasmissione dei dati si possono generare errori nei segnali, che quindi in fase di ricezione vengono interpretati in maniera non corretta. Questi errori sono generalmente dovuti a rumori di fondo, disturbi improvvisi (fulmini) e interferenze. Per riconoscere e correggere problemi di questo genere si possono implementare tecniche apposite, che consistono nell'utilizzazione di codici particolari. In generale esistono due tipologie di codici:

Nella realtà uno stesso codice è in grado di correggere e/o riconoscere gli errori a seconda del numero di errori di cui viene inficiata l'informazione durante la trasmissione, fino ad arrivare alla situazione in cui gli errori sono tanti (ma la probabilità che accada è molto bassa) ed il codice non è in grado di comprendere nulla o addirittura correggere in modo sbagliato (ved. esempio).

Esempio. Supponiamo di avere il codice binario formato dalle parole (o word) P={0000, 1111} ed una probabilità di errore uguale per entrambi i simboli binari 0 e 1. Allora:
a) se nella trasmissione si verifica un errore singolo, ovvero viene modificato il valore di un solo bit, il codice è in grado di correggere l'errore attraverso il seguente meccanismo
0001, 0010, 0100, 1000 sono corretti in 0000
1110, 1101, 1011, 0111 sono corretti in 1111
b) se si verificano due errori (probabilità molto più bassa del caso singolo), il codice è in grado solo di riconoscere che ci sono degli errori
0011, 0101, 0110, 1001, 1010, 1100 ---> 0000 oppure 1111 ? ---> nessuna correzione
c) se si verificano tre errori (probabilità bassissima), il codice è in grado di riconoscere la presenza dell'errore ed inoltre corregge in modo sbagliato, come si può evincere dal meccanismo illustrato nel caso a)
d) se si verificano quattro errori, il codice non è in grado di riconoscere alcun errore.

 

Gestione del flusso di dati

Assieme alle tecniche per comprendere la composizione dei frame e la presenza di errori, una fattore decisivo è dato dalla corretta gestione della sequenza di trasmissione e del flusso di dati dal mittente al destinatario. 

In primo luogo introduciamo il concetto di acknowledgement che è un messaggio inviato dal destinatario al mittente (che a questo scopo invertono i ruoli) per informarlo sull'arrivo del frame: si parla di ack positivo se il frame è arrivato correttamente, di ack negativo se invece il frame è errato.

In secondo luogo è importante controllare la velocità con cui i dati sono inviati per evitare che il mittente spedisca i dati ad una velocità troppo alta perché il destinatario sia in grado di gestirla. Questo problema viene genericamente indicato con il termine controllo di flusso.

In molti casi gli schemi di rilevazione degli errori implementano anche le richieste da inviare al trasmettitore per chiedere l'invio delle informazioni mancanti o per confermare il corretto arrivo a destinazione (nel caso di servizi con conferma). I meccanismi che vengono in genere combinati sono i seguenti:
- riconoscimento d'errore (error detection), per controllare le informazioni ricevute;
- acknowledgement positivo (positive ack), consistente in un messaggio di conferma al trasmettitore: "le informazioni sono corrette!"
- acknowledgement negativo (negative ack) e ri-trasmissione, che consiste in un messaggio di mancato riconoscimento dell'informazione al trasmettitore: "le informazioni sono sbagliate! (Invia di nuovo!)"
- ri-trasmissione a tempo, se il trasmettitore non riceve conferma dell'informazione entro un certo lasso di tempo (timeout) ripete la trasmissione automaticamente. 

L'insieme di questi metodi è detto ARQ (Automatic Repeat Request). 

Normale funzionamento. Perdita o danneggiamento 
di un frame.
Perdita o danneggiamento 
di un ack.

Per superare i problemi connessi alle procedure ARQ si usano i protocolli a finestra scorrevole (o sliding window). Prima dell'inizio della comunicazione viene assegnata al trasmettitore ed al ricevitore la dimensione della finestra, che supponiamo è di s pacchetti. Il trasmettitore confezione gli s frame e li invia al ricevitore senza attendere alcun messaggio di acknowledgement, quindi resta in attesa del messaggio di conferma da parte del ricevitore. Il messaggio di conferma del ricevitore contiene il numero di sequenza del successivo frame; ricevuto questo messaggio il trasmettitore invia i successivi s frame. Con questa tecnica il tempo necessario per trasmettere s frame è 2T, dove T è il tempo per inviare un frame in una sola direzione; se non si utilizzasse questa tecnica, invece, il tempo necessario per trasmettere gli s frame sarebbe 2sT (c'è un ritardo fra le trasmissioni dei singoli pacchetti ma, in un calcolo complessivo teorico, questo ritardo è trascurabile). 

In alcune implementazioni la dimensione della finestra è fissa, in altre è variabile. Alcuni aspetti sono comuni a tutti gli algoritmi:

In questi protocolli il livello Data Link non ha più libertà nell'ordine di trasmissione, fermo restando il fatto che i pacchetti sono riconsegnati al livello di Rete nell'ordine giusto e i frame arrivano a destinazione nell'ordine con cui sono stati spediti.

 

Alcuni protocolli Data Link

I protocolli ad oggi più diffusi sono i seguenti:

 

L'accesso multiplo (sottolivello MAC)

Nelle reti broadcast uno dei problemi principali è l'accesso al mezzo trasmissivo che le unità condividono. I protocolli che si occupano della gestione dell'accesso appartengono in un sottolivello del livello Data Link detto sottolivello MAC (Medium Access Control). Di questo aspetto abbiamo già parlato