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