Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Betti
Reti di calcolatori
Lezione 6
Lez. 6 — 1 M. Cesati / E. Betti
Il modello di riferimento
5 Application
4 Transport
3 Network
2 Data Link
1 Fisico
Lez. 6 — 2 M. Cesati / E. Betti
Ogni canale di comunicazione ha capacità finita e introduce errori; il livello Data Link
cerca di gestire le limitazioni del canale di comunicazione, per mitigarne l’effetto sulla
trasmissione dei dati
Il livello Data Link generalmente offre uno dei seguenti tipi di servizi:
I servizi del livello Data Link devono essere accessibili tramite una interfaccia ben
definita ed ordinata
Il livello dialoga idealmente con l’entità di pari livello sulla macchina adiacente utiliz-
zando un determinato protocollo
Lez. 6 — 4 M. Cesati / E. Betti
Questo servizio può essere utilizzato per canali con tasso d’errore molto basso
In pratica, il livello Data Link della maggior parte delle LAN adotta questo tipo di
servizio
Lez. 6 — 5 M. Cesati / E. Betti
• se la conferma non arriva, il mittente può rispedire il frame (quindi bisogna anche
gestire i frame duplicati)
Questo tipo di servizio è molto utile con canali con alto tasso d’errore (ad esempio,
reti wireless)
Lez. 6 — 6 M. Cesati / E. Betti
• garantisce che ciascun frame sia ricevuto una sola volta e nell’ordine giusto
A livello Data Link, questo servizio è in genere utilizzato dai router di una communi-
cation subnet
Lez. 6 — 7 M. Cesati / E. Betti
Framing
È ben più difficile di quanto appaia a prima vista, perché il livello 1 (Fisico) non ga-
rantisce che il numero di bit trasmessi coincida con il numero di bit effettivamente
ricevuti
Invece il livello Data Link ha necessità di identificare ciascun frame senza possibilità
d’errore
Lez. 6 — 10 M. Cesati / E. Betti
Strategie di framing
1. Temporizzazione
Temporizzazione
In linea teorica, il modo più semplice per delimitare l’inizio e la fine di ciascun frame
consiste nell’inserire un ritardo temporale tra l’invio di un frame e l’altro
L’entità di pari livello del calcolatore ricevente potrebbe utilizzare l’assenza di rice-
zione per determinare la fine di un frame: ogni bit ricevuto da quel momento in poi
faranno parte del frame successivo
In pratica, questa strategia non può essere applicata, perché i mezzi trasmissivi
raramente forniscono garanzie sui tempi di trasmissione dei bit.
In altri termini, il livello Fisico non offre alcuna garanzia sulla temporizzazione dei
propri servizi offerti al livello Data Link
Questo contatore permette di stabilire quando termina il frame nel flusso di bit prove-
niente dal livello Fisico
Lez. 6 — 13 M. Cesati / E. Betti
Ancor peggio, non è possibile stabilire dove inizia il nuovo frame, e quindi non è
possibile leggere alcun frame successivo
• l’inizio del frame è indicato dai caratteri DLE STX (DLE=Data Link Escape, STX
= Start of Text)
• la fine del frame è indicata dai caratteri DLE ETX (ETX = End of Text)
In caso di errore di trasmissione di un frame, per trovare l’inizio del frame successivo
si monitorizza il flusso di bit in arrivo cercando la sequenza di bit corrispondente ai
caratteri DLE STX
DLE rappresenta un singolo carattere ASCII (8 bit); lo stesso vale per STX e per ETX
Lez. 6 — 15 M. Cesati / E. Betti
Si adotta perciò una tecnica chiamata character stuffing: ogni occorrenza del carat-
tere DLE all’interno del frame è preceduta da un altro carattere DLE
In protocolli più recenti, questa tecnica viene utilizzata con un singolo carattere di
inizio e fine (FLAG); le occorrenze di FLAG all’interno del frame vengono fatte prece-
dere da un altro carattere ESC (escape)
Le occorrenze di ESC all’interno del frame sono sempre raddoppiate, cosı̀ ogni carat-
tere ESC isolato è seguito da FLAG e questa sequenza non rappresenta un carattere
di controllo del frame
Lez. 6 — 16 M. Cesati / E. Betti
X FLAG Y ESC
Per evitare ambiguità con le sequenze di bit identiche all’interno del frame si adotta il
bit stuffing:
• in ricezione, per ogni sequenza di cinque bit “1” consecutivi si scarta il bit “0”
seguente
001111110010 ⇒ 01111110001111101001001111110
Per sincronizzarsi dopo un errore è sufficiente attendere due flag byte consecutivi
Lez. 6 — 18 M. Cesati / E. Betti
Questo metodo può essere adottato soltanto se il livello Fisico codifica ciascun bit di
dati con una certa ridondanza
Le coppie di bit fisici high/high e low/low sono disponibili per codificare l’inizio e la
fine di ciascun frame
Questo metodo può essere considerato simile al metodo basato sul flag byte, ma le
sequenze di bit delimitatori non possono mai presentarsi all’interno del frame
È possibile utilizzare il metodo solo se il livello Fisico offre primitive che consentano
di impostare i bit fisici della trasmissione
Lez. 6 — 20 M. Cesati / E. Betti
Ad esempio, combinando il metodo di conteggio dei caratteri con l’uso dei caratteri
di inizio e fine:
• guasti transienti
È compito del livello Data Link gestire gli errori del mezzo trasmissivo
(per quanto possibile)
Lez. 6 — 22 M. Cesati / E. Betti
Burst di errori
In molti casi la distribuzione degli errori non è uniforme: la probabilità che un certo
bit sia errato è maggiore se uno dei bit vicini è errato
Per gestire l’errore il livello Data Link può adottare due approcci:
Nel secondo caso il frame dovrà essere codificato in modo più ridondante,
e dunque meno efficiente
⇒ è conveniente con canali con elevato tasso d’errore (ad es., wireless)
Lez. 6 — 24 M. Cesati / E. Betti
Codici
Distanza di Hamming
Rappresenta il numero di bit da invertire per trasformare una parola di codice nell’altra
Ad esempio, se
w1 10001001
w2 10110001
w1 XOR w2 00111000
Il numero di parole di codice è però strettamente minore di 2n, perché alcune se-
quenze di n bit devono essere non valide (sono quelle che segnalano un errore)
Se un codice deve rilevare d errori, la sua distanza di Hamming deve essere almeno
pari a d + 1
Un burst di d errori al peggio trasforma una parola di codice in una sequenza di bit a
distanza al più d dalla parola di codice corretta e a distanza almeno d + 1 da tutte le
altre parole di codice
Lez. 6 — 28 M. Cesati / E. Betti
Bit di parità
Ad esempio (m = 7):
00101101
10101100
È molto inefficiente: solo il 20% dei bit trasmessi è realmente significativo, gli altri
sono ridondanti
Lez. 6 — 30 M. Cesati / E. Betti
Un modo semplice per creare codici a correzione d’errore consiste nel replicare
l’informazione
1
Il codice non è efficiente: solo 2d+1 bit sono significativi (d = 2 ⇒ 20%)
Lez. 6 — 31 M. Cesati / E. Betti
Sia C un codice che corregge 1 errore con parole di codice con n bit, m bit di
messaggio e r bit di controllo
m ≤ 2r − r − 1