Sei sulla pagina 1di 32

Reti di Calcolatori, A.A. 2005/06 M. Cesati / E.

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

Il livello Data Link (1)


Il livello Data Link si occupa della comunicazione tra calcolatori fisicamente adiacenti

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

A tale scopo può:

• gestire gli errori di trasmissione


• gestire la congestione del canale
• ottimizzare la trasmissione prendendo in considerazione il ritardo di propagazio-
ne dei bit

La chiave di volta: organizzare le sequenze di bit in frame


Lez. 6 — 3 M. Cesati / E. Betti

Il livello Data Link (2)


Il livello Data Link offre come servizi il trasferimento dei dati dal livello Network della
macchina di origine al livello Network della macchina di destinazione

Il livello Data Link generalmente offre uno dei seguenti tipi di servizi:

• Servizio connectionless non affidabile


• Servizio connectionless affidabile
• Servizio connection-oriented affidabile

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

Il servizio connectionless non affidabile

• non si stabilisce alcuna connessione

• ogni frame è inviato indipendentemente dagli altri

• non vi è conferma di ricezione dei frame

• i frame persi non sono recuperati

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

Il servizio connectionless affidabile

• non si stabilisce alcuna connessione

• ogni frame è inviato indipendentemente dagli altri

• vi è conferma di ricezione dei frame

• 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

Il servizio connection-oriented affidabile

• si stabilisce una connessione prima dell’invio di tutti i frame corrispondenti alla


sequenza di bit da inviare

• si chiude la connessione al termine dell’invio di tutti i frame

• vi è conferma di ricezione di ciascun frame

• 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

Livello Data Link — Trasmissione

Quando il livello Network richiede la trasmissione di un certo pacchetto o flusso di


dati, il livello Data Link:

• incapsula il flusso di bit in unità chiamate frame

• calcola il valore di una apposita funzione (checksum) per ciascun frame

• inserisce il checksum nel frame

• invoca il servizio di livello 1 (Fisico) per inviare il frame al calcolatore adiacente


Lez. 6 — 8 M. Cesati / E. Betti

Livello Data Link — Ricezione

In ricezione, il livello Data Link:

• riceve una sequenza di bit dal livello 1 (Fisico)

• ricostruisce dalla sequenza di bit i vari frame

• per ciascun frame:


– estrae il valore del checksum
– ricalcola il valore del checksum
– se i due valori coincidono, accetta il frame
– se i due valori differiscono, scarta il frame
Lez. 6 — 9 M. Cesati / E. Betti

Framing

L’operazione di frammentazione del flusso di bit proveniente dal livello Network è


detta 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

Esistono cinque diverse strategie per il framing:

1. Temporizzazione

2. Conteggio dei caratteri

3. Caratteri di inizio e fine

4. Bit di inizio e fine

5. Violazioni della codifica dei bit del livello Fisico


Lez. 6 — 11 M. Cesati / E. Betti

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

Eccezione: reti sincrone (SONET/SDH)


Lez. 6 — 12 M. Cesati / E. Betti

Conteggio dei caratteri (1)

Ciascun frame ha una testata (header).

Un particolare campo di questa testata memorizza il numero di caratteri presenti nel


frame.

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

Conteggio dei caratteri (2)


Il difetto di questo sistema è la sua fragilità nei confronti degli errori di trasmissione

Se il valore di un contatore viene alterato nella trasmissione non è più possibile


stabilire il punto in cui termina il frame

Ancor peggio, non è possibile stabilire dove inizia il nuovo frame, e quindi non è
possibile leggere alcun frame successivo

Chiedere al trasmittente di ritrasmettere il frame cattivo è inutile perché il ricevente


non sa quanti caratteri del flusso già ricevuto deve scartare

⇒ questo metodo è praticamente abbandonato (eccetto che in combinazione con


altri metodi di framing)
Lez. 6 — 14 M. Cesati / E. Betti

Caratteri di inizio e fine (1)

Ciascun frame è considerato come una sequenza di caratteri ad 8 bit, ed è delimitato


da una sequenza di caratteri ASCII:

• 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

Caratteri di inizio e fine (2)


Si ha un problema quando le sequenze di caratteri DLE STX e DLE ETX occorrono
casualmente anche all’interno del frame

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 questo modo, ogni carattere DLE isolato precede immediatamente un carattere di


controllo del frame

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

Caratteri di inizio e fine (3)


La sequenza

FLAG X ESC FLAG Y ESC ESC FLAG

codifica un frame il cui contenuto è

X FLAG Y ESC

Svantaggi di questo metodo:

• si fonda sulla rappresentazione di ciascun carattere con 8 bit


(UNICODE utilizza 16 bit per carattere)
• la scelta dei caratteri di controllo (DLE, STX e ETX oppure FLAG e ESC) è
legata alla codifica dei caratteri (tipicamente ASCII), ed il metodo può avere un
overhead elevato se viene utilizzata una codifica differente
• il numero di bit del frame deve essere un multiplo di 8
Lez. 6 — 17 M. Cesati / E. Betti

Bit di inizio e fine


Ciascun frame è delimitato da una sequenza particolare di bit detta flag byte.

Esempio di flag byte: 01111110

Per evitare ambiguità con le sequenze di bit identiche all’interno del frame si adotta il
bit stuffing:

• in trasmissione, ad ogni sequenza di cinque bit “1” consecutivi si appende un


bit “0”

• 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

Violazione della codifica dei bit del livello Fisico (1)

Questo metodo può essere adottato soltanto se il livello Fisico codifica ciascun bit di
dati con una certa ridondanza

Ad esempio: Manchester encoding (IEEE 802.3)

• il bit di dati “1” è rappresentato con i due bit fisici low/high

• il bit di dati “0” è rappresentato con i due bit fisici high/low

Questa codifica ridondante dimezza la capacità del mezzo trasmissivo!


Lez. 6 — 19 M. Cesati / E. Betti

Violazione della codifica dei bit del livello Fisico (2)

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

Il metodo si basa su di una particolare modalità di funzionamento del mezzo trasmis-


sivo: questa caratteristica è definita dal livello Fisico, non dal livello Data Link

È 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

Combinazione di più metodi di framing


Spesso si utilizza il metodo di conteggio dei caratteri con uno degli altri metodi per
aumentarne l’efficienza e la robustezza

Ad esempio, combinando il metodo di conteggio dei caratteri con l’uso dei caratteri
di inizio e fine:

• in trasmissione, il frame viene delimitato dalle sequenze DLE STX e


DLE ETX, e la lunghezza del frame viene scritta nella testata
• in ricezione, il frame viene ricostruito velocemente sulla base della lunghezza
riportata nella testata, e si controlla che il frame termini correttamente con la
sequenza di caratteri DLE ETX
• in caso di errore, il flusso di caratteri viene analizzato per cercare la successiva
sequenza DLE STX
Lez. 6 — 21 M. Cesati / E. Betti

Gestione degli errori di trasmissione

Gli errori di trasmissione sono dovuti a

• rumore di fondo del mezzo trasmissivo

• disturbi naturali (es., fulmini)

• interferenze con dispositivi elettrici

• 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

Gli errori tendono a concentrarsi in burst

Esempio: reti wireless basate su onde radio

rilevazione e correzione degli errori sono più difficili

il numero di frame con errore è minore


Lez. 6 — 23 M. Cesati / E. Betti

Rilevazione e correzione dell’errore

Per gestire l’errore il livello Data Link può adottare due approcci:

• Rilevazione dell’errore: è possibile solo determinare l’esistenza di bit erronei


all’interno di un frame

• Correzione dell’errore: è possibile determinare l’errore e ricostruire il contenuto


del frame originario

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

Supponiamo che un frame composto da n bit sia costituito da

• m bit di dati (l’informazione da trasmettere)

• r bit di controllo (bit ridondanti)

Una sequenza di n = m + r bit è definita una parola di codice (codeword) se gli m


bit del messaggio sono in accordo con gli r bit di controllo
Lez. 6 — 25 M. Cesati / E. Betti

Distanza di Hamming

La distanza di Hamming dH (w1, w2) di due parole di codice w1 e w2 è il numero di


bit “1” in w1 XOR w2

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

la distanza di Hamming tra w1 e w2 è pari a 3


Lez. 6 — 26 M. Cesati / E. Betti

Distanza di Hamming di un codice (1)


Un codice è un algoritmo che dati m bit di dati produce r bit di controllo

Ogni frame con n = m + r bit può contenere 2m messaggi differenti

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)

Si definisce la distanza di Hamming di un codice C la minima distanza esistente tra


due parole del codice:

dH (C) := min dH (u, v)


u, v ∈ C
u 6= v
Lez. 6 — 27 M. Cesati / E. Betti

Distanza di Hamming di un codice (2)

Se un codice deve rilevare d errori, la sua distanza di Hamming deve essere almeno
pari a d + 1

Se la distanza fosse minore, un burst di d errori potrebbe trasformare una parola di


codice in un’altra parola di codice: l’errore non sarebbe rilevato

Se un codice deve correggere d errori, la sua distanza di Hamming deve essere


almeno pari a 2d + 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à

Un semplice codice per la rilevazione di 1 errore è costituito dal bit di parità

Data la sequenza di m bit che costituiscono il messaggio, si aggiunge un bit di con-


trollo (r = 1) in modo tale che la somma di tutti i bit “1” della parola di codice sia pari
(o dispari)

Ad esempio (m = 7):

00101101
10101100

Il codice a bit di parità ha distanza di Hamming pari a 2


Lez. 6 — 29 M. Cesati / E. Betti

Correzione di 2 errori (non efficiente)

Il seguente codice ha distanza di Hamming pari a 5:

C = { 0000000000, 0000011111, 1111100000, 1111111111 }

Consente di rilevare 4 errori e di correggere 2 errori

Poiché ha solo 4 parole di codice, ciascuna parola di codice “rappresenta” 2 bit di


dati: n = 10, r = 8, m = 2

È molto inefficiente: solo il 20% dei bit trasmessi è realmente significativo, gli altri
sono ridondanti
Lez. 6 — 30 M. Cesati / E. Betti

Replicare i bit di controllo

Un modo semplice per creare codici a correzione d’errore consiste nel replicare
l’informazione

Dato un messaggio di m bit si costruisce una parola di codice con 2d copie di


ciascuno dei bit del messaggio (r = 2d · m)

La distanza di Hamming del codice è 2d + 1, quindi può correggere d errori

1
Il codice non è efficiente: solo 2d+1 bit sono significativi (d = 2 ⇒ 20%)
Lez. 6 — 31 M. Cesati / E. Betti

Numero minimo dei bit di controllo

Sia C un codice che corregge 1 errore con parole di codice con n bit, m bit di
messaggio e r bit di controllo

Ciascuna parola di codice ha n sequenze di bit illegali a distanza 1, costruite inver-


tendo un bit della parola di codice

Ciascuno dei 2m messaggi richiede n + 1 sequenze di bit: (n + 1) · 2m ≤ 2n

m ≤ 2r − r − 1

Esempio: Se m = 128, allora r ≥ 8

Potrebbero piacerti anche