Trasmissione dei dati. Sincronizzazione
La trasmissione tra i nodi avviene tramite l'invio di segnali elettrici attraverso un canale di trasmissione.Un elemento molto importante nella scelta e nella valutazione dei sistemi trasmissivi è la velocità di trasmissione.Risulta comodo definire anche la velocità massima di trasmissione lungo il canale (max. data rate), detta anche capacità di canale, che dipende dal sistema di codifica utilizzato e dalle caratteristiche del canale stesso, in particolare dalla sua larghezza di banda.Poiché durante la trasmissione i segnali subiscono inevitabilmente distorsioni di ampiezza e fase e sono inquinati da rumore di varia natura, vengono spesso applicati metodi anche sofisticati per la rilevazione e l'eventuale correzione degli errori.
A questo scopo viene aggiunto al messaggio un campo di ridondanza. Al momento della trasmissione, il trasmettitore calcola il valore da porre nel campo di ridondanza applicando un certo algoritmo alle informazioni che compongono il messaggio. Il ricevitore applica lo stesso algoritmo alle informazioni che riceve, l'uguaglianza fra la ridondanza inviata e quella adesso calcolata asserisce la correttezza della trasmissione.
La necessità fondamentale di riconoscere, in ricezione, la sequenza di bit che compongono ciascun carattere trasmesso e di individuare esattamente il livello logico di ciascun bit impone che il trasmettitore comunichi al terminale ricevente qual è il primo bit di ogni carattere e con quale cadenza si presenteranno i bit successivi. Ciò può essere attuato in due modalità differenti: asincrona e sincrona. Si illustrano ora in maggior dettaglio tutti questi aspetti.
Velocità di trasmissione
Un elemento molto importante nella scelta e nella valutazione dei sistemi trasmissivi è la velocità di trasmissione. Per misurare la quantità di informazione trasmessa nel tempo vengono utilizzate due unità di misura:
- baud rate: misura quante volte in un secondo il segnale trasmesso può cambiare di stato sulla linea (modificando la propria ampiezza in tensione, la propria fase o la propria frequenza). Valori comuni sono 300, 600, 1.200 e 2.400 baud.
- bps rate: (bit per secondo) misura il numero di bit trasmessi in un secondo, esclusi eventuali bit di servizio e di sincronismo trasmessi contestualmente, è cioè la quantità di informazione effettivamente trasmessa.
Con la tecniche di modulazione, in particolare la tecnica QAM (Quadrature Amplitude Modulation) tipica dei protocolli V.22bis e successivi (inclusi V.32bis e V.34), è possibile associare più di un bit a una singola variazione del segnale. In pratica ogni oscillazione dell'onda portante che corrisponde a una variazione di segnale può essere ulteriormente modificata in ampiezza e in fase. Combinando tutte le possibili variazioni di ampiezza e di fase, si hanno 2, 4, 6, 8 o 16 valori binari che possono essere inviati ad ogni singolo ciclo del segnale.
Sapendo che sulle linee telefoniche non è possibile superare i 3.000 Hz, i modem modulano sempre a 2.400 baud (2.400 variazioni di segnale al secondo, corrispondenti grosso modo a 2.400 Hz). Però usando la tecnica QAM si riescono ad abbinare più bit a ogni variazione: 2 (4.800 bps), 4 (9.600 bps), 6 (14.400 bps), 8 (19.200 bps) oppure 12 (28.800 bps).Quindi soltanto nel caso in cui si trasmetta un solo bit per ogni oscillazione del segnale e non vi siano bit di servizio trasmessi (bit che non vengono conteggiati nel bps rate), si ha che il baud rate coincide con il bps rate (bit per secondo).Un'altra tecnica di modulazione, usata solo nei modem a bassa velocità, è la FSK (Frequency Shift Keying) che, come dice il nome, modifica la frequenza della portante per indicare la presenza del valore digitale 0 (aumento della frequenza) o 1 (diminuzione della frequenza).
L'ultima possibilità per incrementare ulteriormente le prestazioni è comprimere i dati da trasmettere prima della trasmissione stessa usando particolari algoritmi e quindi decomprimerli alla ricezione. In questo caso l'effettivo miglioramento dipende sensibilmente dalla possibilità di compressione offerta dal particolare tipo di dati da trasferire (ad esempio un file di testo Ascii è comprimibile fino all'80%, mentre un file già compattato non lo è per nulla).
E' chiaro che in condizioni di disturbo sulla linea bisogna ridurre il numero di bit per segnale trasmessi, altrimenti molte delle informazioni che giungono a destinazione non saranno corrette e dovranno essere rispedite in continuazione. In questo senso risultano molto importanti le funzioni fall back e fall forward, che consistono nella capacità di adattare la velocità di trasmissione, riducendola e incrementandola, in base alle condizioni della linea telefonica. Altrettanto importante è la presenza e l'efficienza dei protocolli di controllo e correzione degli errori.
Modulazione di ampiezza
Viene ora presentata velocemente una tecnica di modulazione basata sulla modificazione dell'ampiezza del segnale. Precedentemente è stato illustrato che, a causa della ridotta ampiezza di banda del segnale vocale (circa 3.000 Hz), le linee telefoniche che sono basate su di esso non permettono di superare i 2.400 baud, così per migliorare le prestazioni si è cercato di associare più di un bit a una singola variazione del segnale.
Se per trasferire un bit per oscillazione sono necessarie due livelli di ampiezza del segnale (basso per il bit 0 e alto per il bit 1), per trasferire N bit per oscillazione sono necessari 2N livelli di ampiezza (ad ogni livello viene associata una delle 2N possibili sequenze di bit).
Chiaramente, maggiore è il numero dei livelli di tensione (e conseguentemente minore il gap che li separa), maggiore è la difficoltà di riconoscere il corretto livello in ricezione.Un modem che lavora a 14.400 bps su una linea a 2.400 baud significa che trasmette sequenze di 6 bit per oscillazione (14.400/2.400=6), utilizzando 26=64 livelli differenti.
Rappresentazione di un segnale digitale che codifica più bit contemporaneamente
Cenni di modulazione digitale
La modulazione modifica un parametro della portante in modo che al bit 1 e al bit 0 corrispondano rispettivamente due diverse ampiezze, frequenze o fase della portante.
Modulazione di Ampiezza |
ON/OFF Keying |
bit 1 ->
A× cos(2p ft+q
) |
Phase Reversal | bit 1 -> A× cos(2p ft+q ) | |
Keying (PRK) | bit 0 -> -A× cos(2p ft+q ) | |
|
|
|
Modulazione di Frequenza |
Frequency Shift Keying (FSK) |
bit 1 ->
A× cos(2p f1t+q
) |
|
||
Modulazione
di Fase
|
Phase Shift
Keying (PSK)
|
bit
1 -> A× cos(2p
ft+q 1) bit 0 -> -A× cos(2p ft+q 2) |
|
Differential Shift Keying (DPSK) |
bit 1 ->
A× cos(2p ft+D
q 1) |
Esempi di modulazioni digitali
Maximum Data Rate (Teorema di Nyquist)
Il teorema di Nyquist definisce il maximum data rate per un segnale consistente di N livelli discreti su un canale di semibanda B come:
(bps)
Ad esempio per un segnale su linea telefonica (2× B=3.000 Hz) a 2 livelli si ottiene 3.000 bps (ed in questo caso anche 3.000 baud dato che con due livelli si trasmette un bit per baud). Questo valore è superiore al limite pratico di 2.400 baud imposto dalle attuali linee telefoniche.
Rilevazione degli errori
Per rilevare eventuali errori durante la trasmissione, dovuti alle inevitabili distorsioni di varia natura presenti sulla linea, vengono utilizzati diversi metodi.Si illustrano brevemente gli algoritmi più diffusi.
Controllo di ridondanza verticale
Il controllo di ridondanza verticale (Vertical Redundancy Check, VRC) è utilizzato nei protocolli orientati al carattere. Il suo nome ha origine dal fatto che era inizialmente utilizzato sulla codifica dei caratteri su nastro perforato; caratteri che erano rappresentati verticalmente rispetto al nastro stesso.
Ai bit che rappresentano un carattere viene aggiunto un altro bit detto bit di parità. Il controllo di parità può essere pari o dispari. Nel controllo di tipo pari viene aggiunto un bit con valore tale da rendere pari il numero totale (carattere più bit di parità) di bit uguale a 1. In modo analogo viene effettuato il controllo di tipo dispari: il numero totale dei bit uguali a 1 deve essere dispari.
Con questa tecnica non si può comunque rilevare se nella trasmissione di un carattere ci sono stati due bit errati.
Controllo di ridondanza longitudinale
Il controllo di ridondanza longitudinale (Longitudinal Redundancy Check, LRC) è anch'esso orientato al carattere. Viene eseguita una operazione di OR esclusivo fra tutti i caratteri che formano il messaggio. Se nel valore risultante il bit in prima posizione è 1 vuol dire che globalmente (considerando tutta la sequenza di caratteri più il carattere di parità LRC) c'è un numero dispari di bit uguali a 1 in prima posizione. Analogamente per gli altri bit.Anche questo tipo di controllo non rileva errori verificatisi su un numero pari di bit nella stessa posizione. I controlli VRC e LRC vengono usualmente utilizzati insieme in modo da diminuire i margini di fallimento di rilevazione degli errori.
Controllo di ridondanza ciclica
Il controllo di ridondanza ciclica (Cyclic Redundancy Code, CRC) è orientato al bit.I codici ciclici associano stringhe di bit a polinomi con coefficienti 0 e 1. Una sequenza di K bit viene interpretata come un polinomio di K coefficienti di grado minore o uguale a K-1. Ad esempio:
110001 -> x5+x4+x0
L'aritmetica su cui è basato il calcolo è modulo 2, senza riporti né prestiti.Innanzitutto trasmettitore e ricevitore devono scegliere su un polinomio G(x) comune, detto polinomio generatore. L'idea è quella di giustapporre alla sequenza un checksum tale che il polinomio corrispondente sia divisibile per G(x).Si illustra brevemente un algoritmo per il calcolo del checksum:
- si giustappongono r bit 0 al frame ottenendo un sequenza di m+r bit che corrisponde al polinomio xr× M(x), dove r è il grado di G(x), M(x) è il polinomio corrispondente al frame e m il numero di bit di quest'ultimo.
- si divide xr× M(x) per G(x) usando la divisione modulo 2:
xr× M(x)=G(x)× Q(x)+R(x)la sequenza dei coefficienti di R(x) è la sequenza dei bit che costituisce il checksum.
- si somma, modulo 2, il resto R(x) della divisione precedente a xr× M(x) e si ottiene il nuovo frame da trasmettere completo di checksum.
Il polinomio generatore di codici ciclici non può essere un polinomio qualunque. Infatti possiamo ottenere lo stesso polinomio R(x) a partire da polinomi dividendi M(x) diversi.Tutti i polinomi che danno lo stesso resto R(x) una volta divisi per il polinomio generatore G(x) si dicono congrui modulo G(x). Questa tecnica non rileva gli errori che trasformano la sequenza dei bit trasmessi (come coefficienti) in un'altra che dà i coefficienti di un polinomio ad essa congruo.Restano comunque un metodo molto efficiente per la rilevazione degli errori.
Trasmissione asincrona
Nel sistema asincrono i caratteri vengono trasmessi con cadenza non necessariamente regolare; durante i tempi di inattività la linea viene mantenuta in stato di riposo o idle (viene costantemente trasmesso il segnale corrispondente al bit 1); il trasmettitore, prima di inviare il primo bit di ciascun carattere, deve portare la linea in stato di lavoro; questa commutazione costituisce lo start-bit e ha l'obiettivo di "rifasare" ricevitore e trasmettitore.
Il ricevitore, all'arrivo del bit di start, si predispone alla ricezione della sequenza di bit associato ad un carattere attivando un suo clock interno (che necessariamente deve avere una frequenza di oscillazione nominale uguale a quella del segnale trasmesso). E' sufficiente che il clock del ricevitore mantenga il sincronismo solo per la durata del carattere. Trasmesso l'ultimo bit, il trasmettitore riporta la linea in stato di riposo e così la mantiene per un tempo pari alla durata di uno o due bit (stop-bit), a seconda della convenzione adottata. Dopo la segnalazione di stop, se non vi sono altri caratteri da trasmettere, la linea rimane in stato di riposo, altrimenti viene emesso un nuovo start-bit e così di seguito.
La trasmissione asincrona è possibile se la lunghezza dei blocchi di bit in ricezione e la differenza (parassita) delle frequenze di oscillazione dei due clock sono tali da non consentire né la perdita di un bit né la doppia ricezione di uno stesso bit. Questi due inconvenienti derivano da un errore nella scelta da parte del ricevitore dell'istante in cui campionare il segnale in ingresso. Per ovviare a questo inconveniente si può ricorrere ad un semplice artifizio: si fa lavorare il clock in ricezione ad una frequenza multipla di quella del clock in trasmissione (ad esempio una frequenza 16 volte maggiore), in questo modo si hanno a disposizione più istanti di campionamento per poter leggere lo stesso bit trasmesso (nel caso proposto 16 istanti). Dopo la ricezione dello start-bit il ricevitore calcola il numero di cicli di attesa trascorsi i quali potrà campionare il segnale e con ottima approssimazione trovarsi proprio al centro dell'impulso del primo bit trasmesso (16+16/2 cicli). Per evitare che l'errore di diffonda, si procede ad effettuare una nuova sincronizzazione ogni tot bit trasmessi (generalmente dopo 8 bit, cioè dopo ogni carattere ricevuto).
La trasmissione asincrona è conveniente quando l'emissione dei caratteri è irregolare come ad esempio nel caso dei terminali a tastiera; lo svantaggio principale sta nello scarso rendimento della trasmissione a causa della ridondanza dovuta all'aggiunta dei bit di start e stop, che incide per un 30% sui bit realmente trasmessi.
Schema di trasmissione
asincrona
Trasmissione sincrona
Nella trasmissione sincrona i caratteri costituenti un messaggio vengono trasmessi back-to-back, dopo essere stati raggruppati in blocchi, con cadenza continua in sincronismo con un clock condiviso dal trasmettitore (master) e dal ricevitore (slave). Ciascun blocco di caratteri inizia con una serie di caratteri di sincronizzazione per permettere al ricevitore di sincronizzarsi e mettersi al passo con il trasmettitore.
La temporizzazione può essere fornita: attraverso una linea separata di clock (questa soluzione è scarsamente utilizzata poiché non è realizzabile su lunghe distanze e su normali linee telefoniche e presenta una alta probabilità di perdere la sincronizzazione), regolando finemente un clock esistente nel ricevitore in base al clock ricavato dal segnale in ingresso oppure ricavando il clock direttamente dal segnale in arrivo mediante un circuito di aggancio di fase. Quest'ultima è la soluzione più comunemente utilizzata dato che richiede una circuiteria piuttosto semplice e offre un buon grado di affidabilità.
Schema di trasmissione
sincrona
Una tecnica utilizzata comunemente per ottenere l'aggancio è il codice bipolare alternato (Alternate Mark Inversion, AMI). E' il tipo più semplice di codice di linea e ricorre alla codifica del bit 1 nel segnale trasmesso alternativamente con impulsi uguali in modulo, ma di polarità opposta. Il codice alternato presenta essenzialmente due inconvenienti:
- tutto il sistema va progettato come sistema ternario pur portando una informazione di 1 bit/simbolo;
- questo codice lascia inalterati gli zeri, cosicché una lunga sequenza di zeri in linea (ad esempio una pausa) può far perdere la sincronizzazione.
Per ovviare a questi inconvenienti si sono introdotti altri codici che si possono classificare in: codici a lunghezza fissa (detti codici MB-NT) e codici a lunghezza variabile.Fra questi ultimi si collocano il sistema europeo HDB3 e l'americano B8ZS. Il primo deriva dal bipolare alternato con la variante di sostituire le sequenze con quattro bit 0 consecutivi con la sequenza B00V dove VÎ {0,1} e BÎ {-,0,+} secondo le regole:
- V deve cambiare segno ogni volta che si incontra una nuova sequenza di quattro bit zeri;
- B deve assumere valore tale che V (e solo V) violi la regola dell'alternanza di polarità.
Il secondo invece trasmette una sequenza di otto bit 0 consecutivi come 000+-0-+, sequenza che contiene una violazione dell'alternanza (...-0-...) per poter essere identificata con certezza.Con il sistema sincrono si ha una minore ridondanza, e quindi una migliore efficienza di trasmissione, a spese di una maggiore complessità circuitale, che però trova piena giustificazione per le alte velocità di trasmissione consentite.
Codifica di canale (Encoding)
Vengono ora brevemente analizzate alcune delle codifiche di canale utilizzate per la trasmissione dei bit. Nel seguito si presupporrà che il valore alto del segnale sia associato al bit 1, mentre quello basso al bit 0; in pratica la situazione può benissimo essere rovesciata (valore alto -> bit 0 e valore basso -> bit 1).
- Codifica NRZ (Not Reduced Zero). Il livello del segnale è mantenuto costante durante tutto il periodo di cifra al valore. Questa codifica può ingenerare problemi di sincronizzazione nella trasmissione di lunghe sequenze di bit uguali.
- Codifica RZ (Reduced Zero). Il livello di segnale è mantenuto al livello alto solo per una frazione del periodo di cifra. In questo modo si risolve il problema della sincronizzazione nella trasmissione di lunghe sequenze di bit 1 (valore alto), ma non per quelle di bit 0 (valore basso).
- Codifica MANCHESTER. L'idea alla base della codifica Manchester è dividere in due frazioni di uguale durata il periodo di cifra e trasmettere un bit come la serie di due bit con codifica NRZ sul mezzo periodo; cioè il bit 1 come la serie di un bit 0 e un bit 1 e il bit 0 come la serie di un bit 1 e un bit 0. Purtroppo con questo codice si ha una efficienza del 50%, cioè per ogni bit da trasmettere né vengono trasferiti due. In pratica richiede una banda doppia rispetto a quella strettamente necessaria. E' utilizzata nelle reti locali Ethernet e Token-Ring che saranno illustrate in seguito.
- Codifica 4B/5B. Questa codifica utilizza una tabella di conversione, fissa, che trasforma ogni sequenza di 4 bit in una 5 bit con la caratteristica di avere al massimo un bit 0 come prefisso e due bit 0 come suffisso. In questo modo si eliminano i problemi dovuti alle lunghe sequenze di questi bit 0 (al massimo si hanno sequenze di 3 bit 0) con una efficienza dell'80%. Permangono però i problemi legati alle sequenze di bit 1.
- Codifica NRZI (Not Reduced Zero Inverted). La codifica NRZI risolve il problema delle lunghe sequenze di bit 1. Il bit 0 è codificato mantenendo costante, per tutto il periodo di cifra, il livello del segnale al valore dell'ultimo bit trasmesso, mentre il bit 1 è codificato come una transizione del livello del segnale (da alto a basso oppure viceversa) rispetto al valore dell'ultimo bit trasmesso. Questa codifica utilizzata assieme alla 4B/5B permette di risolvere completamente il problema della sincronizzazione dovuto alle lunghe sequenze di bit uguali. E' utilizzata, congiuntamente alla codifica 4B/5B (in modo da risolvere entrambi i problemi legati alle sequenze di bit 0 e 1), nelle reti FDDI che saranno illustrate in seguito.