Reti di Telecomunicazione Lezione 18

Transcript

Reti di Telecomunicazione Lezione 18
Reti di Telecomunicazione
Lezione 18
Marco Benini
Corso di Laurea in Informatica
[email protected]
Programma della lezione
• Livello di collegamento
– funzionalità, servizi
– verso l’hardware
– adattatori
• Rilevazione e correzione degli errori
– controllo di parità
– metodi di checksum
– controllo a ridondanza ciclica
Livello di collegamento
Host
application
transport
network
data link
physical
Router
network
data link
physical
Host
application
transport
network
data link
physical
Router
network
data link
physical
Livello di collegamento
Host
application
transport
network
data link
physical
• due apparati connessi fisicamente
• unità dati trasferita: il frame
Router
network
data link
physical
flusso di dati
Router
network
data link
physical
Host
application
transport
network
data link
physical
Livello di collegamento
• Lo scopo del livello di collegamento è quello di trasportare frame
da un nodo all’altro della medesima rete
– i nodi sono fisicamente connessi
• I protocolli usati nello strato di collegamento dipendono dal link
che deve essere percorso
– esempi di protocolli dello strato di collegamento sono
•
•
•
•
Ethernet
LAN wireless 802.11
Token Ring
PPP
Livello di collegamento
• I servizi offerti dal livello di collegamento sono:
– framing: un datagram viene incapsulato in un frame, la cui struttura
dipende dal protocollo di collegamento utilizzato
• usualmente il frame contiene almeno gli indirizzi sorgente e destinatario del
frame, codificati secondo il protocollo di collegamento
• gli indirizzi del livello di collegamento sono detti indirizzi fisici
– accesso al link: un protocollo di accesso al mezzo fisico (MAC, Media
Access Control) specifica le regole di trasmissione di un frame sul link
• Questi servizi sono offerti da tutti i protocolli del livello di
collegamento
– in certi casi, il framing e l’accesso al link sono minimali, in altri casi molto
complessi
• ad esempio, in un link punto-punto i servizi sono minimali, mentre nel caso di
una rete wireless i servizi sono decisamente complessi
Livello di collegamento
• I servizi offerti dal livello di collegamento possono avere le
seguenti caratteristiche:
– recapito affidabile: un protocollo garantisce di muovere senza errori
attraverso il link ciascun datagram dello strato di rete
• esempio: i protocolli su rete senza fili tipicamente offrono questo servizio
– controllo di flusso: come per TCP, i buffer di trasmissione e ricezione
usati nei protocolli possono subire degli overflow, ed il controllo di flusso
previene questo fenomeno deleterio
– ricerca di errori: verificare che i frame ricevuti siano esenti da errori di
trasmissione è un servizio molto comune
• gli errori di trasmissione sono dovuti ad interferenze elettromagnetiche e
assumono la forma di un cambiamento del valore di uno o più bit
• solitamente si può garantire la quantità di errori che possono essere introdotti
in condizioni operative normali
• esistono tecniche per codificare i dati in modo da rilevare errori fino ad un
numero fissato di bit, al costo di aumentare la dimensione dei dati trasmessi
Livello di collegamento
• I servizi offerti dal livello di collegamento possono avere le
seguenti caratteristiche:
– correzione di errori: è possibile, attraverso l’adozione di opportune
codifiche dei dati, rilevare se vi sono stati errori e su quali bit, e quindi
correggerli
• la capacità di correzione si basa sulla ridondanza, ovvero sul fatto che i dati
codificati duplicano, in un certo senso, l’informazione presente nei dati
originali
– half-duplex e full-duplex: un protocollo di collegamento può consentire
la contemporanea ricezione e trasmissione di frame (full-duplex), oppure
un nodo può effettuare una sola di queste due operazioni alla volta (halfduplex)
• Queste caratteristiche servono per classificare i protocolli di
collegamento e darne una veloce descrizione qualitativa
Livello di collegamento
• I protocolli del livello di collegamento sono al confine tra software
ed hardware
– infatti, spesso sono implementati come software specializzato che sfrutta
dispositivi hardware ad hoc
– di fatto, alcuni servizi sono spesso realizzati con dispositivi elettronici e
solo le parti dei servizi di livello più alto sono realizzate come software
– molta parte del software che implementa i protocolli di collegamento è
codificata nei device driver dei dispositivi fisici
• Il livello fisico è realizzato totalmente in hardware
– i protocolli del livello fisico descrivono le caratteristiche elettriche ed
elettroniche dei mezzi trasmissivi, la modalità di codifica del segnale
elettromagnetico che attraversa il canale, ...
• In questo corso non parleremo del livello fisico e dei suoi protocolli
Adattatori
• Il dispositivo che collega il software al link fisico è detto
adattatore
– un adattatore è usualmente composto da memoria RAM, un processore di
segnali digitale (DSP), un’interfaccia verso il bus di sistema dell’host ed
una interfaccia analogico-digitale verso il link
• un esempio di adattatore è una scheda di rete
• un altro esempio è un modem
– usualmente, un adattatore si preoccupa di fornire
• il servizio di framing, almeno parzialmente
• il servizio di accesso al link, determinando se il servizio è half o full-duplex
• i servizi di recapito affidabile, rilevazione e correzione degli errori
– il software si limita a controllare i parametri programmabili dell’adattatore
ed a fornire il contenuto da trasmettere, oltre all’indirizzo fisico del
destinatario
• tra i parametri considerati, ricordiamo la velocità di trasmissione, ...
Ricerca e correzione degli errori
• Le tecniche di rilevazione e correzione degli errori sono basate
su una codifica opportuna dei dati
– la codifica può consistere nell’aggiungere ai dati un valore di controllo
– oppure nel trasformare i dati per aggiungere dell’informazione di controllo
ad ogni bit o gruppo di bit
• Le tecniche sono intrinsecamente limitate
– non è possibile rilevare e correggere errori oltre un limite predeterminato
• ma questo limite può essere arbitrariamente grande, a patto di accettare un
proporzionale aumento nella dimensione dell’insieme di dati da trasmettere
• il corso di Teoria dell’Informazione e della Trasmissione illustra la teoria che
consente a queste tecniche di funzionare
– rilevare è più facile che correggere
• rilevare la presenza di un errore richiede meno informazione che sapere
anche in quale punto della sequenza di dati l’errore si è verificato
Ricerca e correzione degli errori
• Le tecniche che noi illustriamo sono le più usate
– è opportuno conoscerle per capire quanto siano affidabili e per sfruttare al
meglio il tipo di garanzie che offrono
• Le tecniche in uso sono
– controllo di parità: è una tecnica di rilevamento di errore molto limitata,
senza possibilità di correzione, ma estremamente semplice ed economica
da implementare
– metodi di checksum: sono una tecnica di rilevamento di errore, senza
possibilità di correzione
• richiede maggiore calcolo rispetto al controllo di parità, ma offre maggiori
garanzie
– controlli a ridondanza ciclica: consentono rilevazioni di errori su un
numero fissato di bit consecutivi, senza correzione
Parity check
• Si supponga di voler spedire un blocco D di bit, di dimensione d
– Il controllo di parità aggiunge un bit p al blocco D, ottenendo un blocco di
dimensione d + 1
• Un controllo di parità può essere
– pari: se vi sono k bit a 1 in D e k è dispari, allora p = 1
– dispari: se vi sono k bit a 1 in D e k è dispari, allora p = 0
• Il trasmittente invia lungo il link il blocco di dimensione d + 1
• Il ricevente, ottenuto il blocco, conta il numero di bit a 1 in esso
presenti e divide il risultato per 2, ottenendo il valore del resto
– se il controllo è pari, allora tale valore deve essere 0
– se il controllo è dispari, allora tale valore deve essere 1
Parity check
• Se il valore rilevato non coincide, allora si è verificato almeno un
errore
– se la probabilità di avere al più un errore ogni d bit è bassa, il controllo di
parità è efficace (consente di rilevare una trasmissione errata la cui
probabilità è bassa)
– se la probabilità di errori multipli in d bit è praticamente trascurabile, il
controllo di parità è praticamente perfetto come metodo di rilevazione
• Se si verifica un numero pari di errori nei bit, il controllo di parità
fallisce
– segnala come corretto un blocco di dati errato
– questo problema è serio, in quanto spesso gli errori avvengono a raffica,
ovvero un intero gruppo di bit all’interno del blocco è errato
• in questo caso, il controllo di parità può sbagliare nel 50% delle volte in cui si
verifica un errore, ovvero, è praticamente inefficace
Parity check
• Una estensione del parity check consiste nell’organizzare il
blocco di dati come un array bidimensionale di bit e calcolare i bit
di parità per ogni riga e per ogni colonna
– al blocco, inteso come matrice, vengono aggiunte una riga e una colonna
• In questo modo, non solo è possibile rilevare un errore, ma
anche correggerlo
– tuttavia, se nei dati trasmessi sono presenti due errori, allora è possibile
rilevare la presenza degli errori, ma non correggerli
– se sono presenti più di due errori, è possibile che essi non siano rilevati
Parity check
• Esempio di parity check bidimensionale con correzione di errore
1 0 1 0 1
1 1 1 1 0
0 1 1 1 0
Blocco di dati
Parity check
• Esempio di parity check bidimensionale con correzione di errore
1 0 1 0 1
1 1 1 1 0
0 1 1 1 0
Blocco di dati
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
con bit di parità
Parity check
• Esempio di parity check bidimensionale con correzione di errore
1 0 1 0 1
1 1 1 1 0
0 1 1 1 0
Blocco di dati
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
con bit di parità
1
1
0
0
0
0
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
come ricevuto
Parity check
• Esempio di parity check bidimensionale con correzione di errore
1 0 1 0 1
1 1 1 1 0
0 1 1 1 0
Blocco di dati
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
con bit di parità
ERRORE
1
1
0
0
0
0
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
come ricevuto
Parity check
• Esempio di parity check bidimensionale con correzione di errore
1 0 1 0 1
1 1 1 1 0
0 1 1 1 0
Blocco di dati
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
con bit di parità
ERRORE
1
1
0
0
0
0
1
0
1
1
1
1
0
1
1
0
1
0
0
1
1
0
1
0
Blocco di dati
come ricevuto
correzione
Metodi di checksum
• Si supponga di voler spedire un blocco D di bit, di dimensione d
– i metodi di checksum considerano il blocco D come composto da n unità,
ad esempio parole da 16 bit
– sulla sequenza di n valori viene calcolata una funzione cumulativa, il cui
risultato viene aggiunto al blocco dati
• Quindi il trasmittente invia il blocco D con il risultato del calcolo
del checksum
• Il ricevente ricalcola il checksum e rileva un errore se il risultato
non coincide con il valore inviato
• La funzione cumulativa più usata è la somma, come visto, ad
esempio, nel caso del protocollo UDP
Metodi di checksum
• In protocolli di livello applicativo è diventato comune usare
metodi di checksum basati su funzioni hash come MD5
• Il vantaggio principale dei metodi di checksum è la semplicità
• Il loro difetto è triplice
– la loro qualità dipende molto dalla scelta della funzione cumulativa
impiegata
• intuitivamente, è facile convincersi che le funzioni migliori sono le funzioni
hash, che sparpagliano molto dati vicini
– non è facile stabilire in quali condizioni rilevano un errore
• quanti bit di errore rilevano, se rilevano raffiche, ...
– non consentono correzione
• essendo il checksum un riassunto dei dati, non contiene informazione
sufficiente a localizzare gli errori
Controllo a ridondanza ciclica
• I codici di controllo a ridondanza ciclica (CRC) sono anche
conosciuti come codici polinomiali
• Si supponga di voler spedire un blocco D di bit, di dimensione d
– la matematica che presiede al funzionamento dei codici polinomiali
assume che i bit in D siano i coefficienti di un polinomio sull’anello
booleano con operazioni XOR (somma) e AND (moltiplicazione)
– la nostra presentazione è operativa, ed evita di spiegare perché i codici
CRC funzionano
• questo implica che enunceremo, ma non dimostreremo, la capacità di
rilevazione di un codice CRC
– supponiamo che i due terminali utilizzino entrambi lo stesso numero G di
dimensione pari a r + 1 bit, ed il cui bit più significativo sia 1
• il numero G è detto generatore
Controllo a ridondanza ciclica
• Il trasmittente aggiungerà al blocco D un numero R di r bit
– interpretando D come un numero a d bit, R deve essere tale che
((D · 2r) XOR R) mod G = 0
– il primo operando del modulo è la giustapposizione del blocco D con il
valore R
– questa equazione, nella variabile R, ha come soluzione
R = (D · 2r) mod G
• Il ricevente si limiterà ad effettuare gli stessi conti del trasmittente
e a verificare il valore di R trasmesso con quello calcolato
Controllo a ridondanza ciclica
• Scegliendo opportunamente il valore del generatore G è
possibile
– rilevare errori a raffica fino ad r bit
– con alcune assunzioni, si può dimostrare che la probabilità di rilevare
errori a raffica di lunghezza superiore a r bit è pari a 1 - 1/2r
– rilevare qualsiasi numero dispari di errori nei bit
• Esistono valori standard per i generatori di dimensione 8, 12, 16
e 32 bit che hanno le caratteristiche sopra riportate
Conclusione
• Questa lezione è tratta da:
– Kurose, cap. 5.1 e 5.2
• Esercizi:
– Provate ad estendere il controllo di parità bidimensionale usando una
matrice quadridimensionale: rilevate e correggete più errori?
– Provate a scrivere una libreria di funzioni in C che implementi i controlli di
errore spiegati in questa lezione