appunti

Transcript

appunti
CAPITOLO 1:
INTRODUZIONE
Comunicazione dati: Quando comunichiamo scambiamo informazioni, questo scambio di
informazioni può essere locale o remoto.
Locale
Æ dialogo fatto di persona
Remoto
Æ dialogo fatto da persone distanti
L’espressione comunicazione dati fa riferimento allo scambio di dati fra due dispositivi grazie
all’utilizzo di un mezzo trasmissivo (cavo). Questa comunicazione per avvenire richiede la
necessità che i due dispositivi debbano far parte di un sistema fatto di hardware e software.
Componenti: Un sistema di comunicazione ha cinque componenti
• Messaggio, informazioni che devono essere inviate
• Mittente, dispositivo che spedisce il messaggio
• Destinatario, dispositivo che riceve il messaggio
• Mezzo trasmissivo, cammino fisico su quale viaggia il messaggio
• Protocollo, insieme di regole che governano la comunicazione adottate dai dispositivi.
Rappresentazione dei dati: varie forme:
•
Testo
Æ è rappresentata da simboli codificati da una sequenza di bit. La codifica più
utilizzata è quella ASCII che rappresenta ogni carattere con una sequenza di 7 bit.
Attualmente la codifica ASCII è stata sostituita dalla codifica UNICODE in quanto utilizza 32
bit per rappresentare un singolo carattere.
• Numeri
Æ sono rappresentati utilizzando sequenze di bit, quindi utilizzano la
notazione binaria.
• Immagine
Æ è composta da una matrice di pixel, i quali determinano la risoluzione
dell’immagine. Ogni pixel viene rappresentato da una sequenza di bit.
• Audio e video Æ sono per natura continua e non discreta, però è possibile rappresentarli
anche in forma discreta (es.: un video può essere rappresentato come una sequenza di
immagini proiettate rapidamente).
Flusso di dati: La comunicazione tra due dispositivi può essere di tre tipi:
• Unidirezionale (simplex), la comunicazione avviene in una sola direzione. Solo uno dei
dispositivi può spedire dati mentre l’altro può solo ricevere.
Es.: monitor, tastiera.
•
Bidirezionale alternata (half duplex), entrambi i dispositivi possono sia trasmettere che
ricevere dati ma non contemporaneamente. Quando uno trasmette l’altro riceve e viceversa.
Es.: ricetrasmittente
1
•
Bidirezionale (full duplex), entrambi i dispositivi possono spedire e ricevere dati
contemporaneamente.
Reti: Una rete è un insieme di dispositivi spesso chiamati nodi connessi da canali di
comunicazione. Un nodo può essere un calcolatore, una stampante,.……..
Le prestazioni di una rete dipendono da vari fattori:
-. Numero di utenti
-. Caratteristiche hardware dei dispositivi
Le metriche utilizzate per misurare le prestazioni sono:
-. Throughput, quantità di dati che si spediscono nell’unità di tempo
-. Ritardo, tempo necessario ad un messaggio per viaggiare dal mittente al
destinatario.
L’ affidabilità di una rete è la capacità di consegnare i dati spediti senza errori.
La sicurezza di una rete include la protezione dei dati.
Tipi di connessione: Le connessioni collegano due punti e sono:
• Connessione punto-punto Æ si ottiene collegando un canale fisico ai due dispositivi che
devono comunicare
• Connessione multipunto Æ è un collegamento condiviso da più di due dispositivi.
Topologia: La topologia di una rete è il modo in cui i nodi sono fisicamente disposti e
interconnessi. Ne esistono quattro tipi:
1. Topologia Mesh Æ ogni nodo ha un collegamento punto-punto con gli altri nodi
della rete.
Svantaggi: costo dell’ hardware delle porte elevato, necessita di molti cavi se il
numero di nodi è elevato.
Vantaggi:
un collegamento tra ogni coppia di nodi implica che ogni coppia di nodi
può comunicare indipendentemente da ogni altra coppia, elevata affidabilità,
sicurezza.
2. Topologia a Stella Æ ogni nodo è connesso con un collegamento punto-punto ad un
dispositivo centrale chiamato hub, quindi diversamente dalla topologia Mesh, il
traffico di dati deve passare attraverso l’hub.
Svantaggi: l’intera rete dipende dall’hub, quindi eventuali guasti all’hub comportano
l’inutilizzabilità della rete.
Vantaggi:
economico in quanto richiede una sola porta di I/O e un solo
collegamento per ogni nodo. Se un collegamento si rompe solo il nodo collegato ne
subisce le conseguenze.
2
3. Topologia Bus
Æ utilizza un collegamento multipunto (bus) che connette tutti i
nodi. Ogni nodo è connesso tramite un connettore che è fisicamente collegato al bus.
Svantaggi: difficoltà di gestione dei problemi del bus, se il bus si guasta si bloccano
tutte le comunicazioni.
Vantaggi:
facilità di installazione di un nuovo nodo.
4. Topologia Anello Æ ogni nodo ha un collegamento punto-punto con solo due altri
nodi, quello che lo precede e quello che lo segue. I dati vengono fatti passare in una
sola direzione. Ogni nodo ha un ripetitore.
Svantaggi: se collegamento o un ripetitore si guasta l’intera rete non è più
utilizzabile a causa del verso unidirezionale della rete. Questo svantaggio può essere
alleviato usando un doppio anello per permettere il traffico in entrambe le direzioni.
Vantaggi:
semplicità di installazione e configurazione. L’isolamento dei guasti è
semplice.
5. Topologia ibrida Æ insieme di due o più topologie viste precedentemente.
Classificazione delle reti: Le reti vengono classificate in base alla loro dimensione fisica:
•
LAN (Local Area Network)
Æ area limitata (ufficio, edificio). Il limite massimo è di
pochi chilometri. Le reti LAN sono progettate per condividere risorse far gli utenti della rete.
La velocità di trasmissione delle reti LAN funziona a 100 Mbps (Megabit per secondo) e a 1
Gbps (Gigabit per secondo).
• WAN (Wide Area Network)
Æ area estesa, grandi distanze. Una rete WAN può
essere semplice cioè costituita da un collegamento punto-punto, o molto complessa quando
costituisce la dorsale di un’interrete complessa e vasta. Nel secondo caso si parla WAN a
commutazione e la rete è costituita da nodi speciali, detti router, connessi tra loro.
• MAN (Metropolitan Area Network)Æ dimensioni intermedie, normalmente le dimensioni
ricoprono un’area di città o una città.
Oggigiorno è difficile trovare una LAN, MAN, WAN isolata, le reti sono quasi sempre interconnesse
tra loro fornendo una interrete o una internet (con la “i” minuscola).
3
Internet (con la “i” maiuscola) invece è una particolare interrete che collega milioni di calcolatori in
tutto il mondo e che permette di navigare sul World Wide Web. Per connettersi ad Internet oggi si
utilizzano i cosiddetti ISP (Internet Service Provider) che possono operare sia a livello nazionale
che a livello internazionale.
Protocolli:
Protocollo
Standard
Æ insieme di regole;
Æ insieme di regole approvate da organizzazioni riconosciute
Protocollo: Quando due nodi comunicano fra loro devono seguire delle regole, queste regole sono
chiamate protocollo. Un protocollo definisce cosa viene comunicato, come viene comunicato e
quando avviene la comunicazione. Gli elementi chiave sono:
• Sintassi
Æ definisce il formato dei dati, cioè l’ordine in cui i vari elementi
della comunicazione devono essere presentati.
• Semantica
Æ definisce cosa significano la sequenza di bit.
• Sincronizzazione Æ uniformare le diverse velocità alla quale operano mittente e
destinatario.
Standard: sono delle linee guida a chiunque (produttori hardware e software, venditori, agenzie,…)
sia coinvolto nello sviluppo di una interrete pubblica.
• Standard de facto: non sono stati approvati da nessuna organizzazione ma sono utilizzati.
• Standard de jure: sono stati approvati.
4
CAPITOLO 2:
MODELLI PER LE RETI
Architettura a strati:
Per il mittente le attività da svolgere sono:
• Stato superiore. Il mittente scrive la lettera, … (seguire la figura)
• Strato centrale. (seguire la figura)
• Strato inferiore. (seguire la figura)
Per il trasportatore l’attività da svolgere è quella di trasportare fisicamente la lettera dal mittente al
destinatario
Per il destinatario le attività da svolgere sono:
• Strato inferiore. (seguire figura)
• Strato centrale. (seguire figura)
• Strato superiore. (seguire figura)
Osservazioni: Le tre attività devono essere fatte in un preciso ordine che rispetta la gerarchia degli
strati. Nel mittente gli strati vanno attraversati dall’alto verso il basso, mentre nel destinatario dal
basso verso l’alto. Ogni strato utilizza le informazioni, i servizi offerti dallo strato inferiore.
Modello OSI (Open System Interconnection): L’ISO (International Standard
Organization) ha proposto lo standard OSI con lo scopo di dare delle regole che facilitano la
comunicazione fra sistemi differenti senza richiedere cambiamenti di hardware o software. Il
modello OSI è un modello a strati per la progettazione di reti che permette la comunicazione fra
tutti i tipi di rete. È composto da sette strati:
5
Ogni strato definisce un insieme di funzioni che si occupano di aspetti diversi della trasmissione.
Ogni strato utilizza le funzionalità offerte dallo strato sottostante. Fra due nodi della rete, lo strato n
di un nodo comunica con il corrispondente strato n dell’altro nodo. Questa comunicazione è gestita
grazie ad un protocollo. I processi su due nodi che comunicano a un dato strato sono detti peer. La
comunicazione tra due peer è detta peer to peer.
Nel mittente in ogni passaggio da uno strato all’altro, dall’alto verso il basso, ogni strato aggiunge
delle informazioni. Nello strato fisico i dati vengono convertiti in una forma adatta al mezzo
trasmissivo. Nel destinatario i dati passano dal basso verso l’alto e ogni strato rimuove
l’informazione aggiuntiva. Gli strati interagiscono tra di loro utilizzando un’interfaccia. Ogni
interfaccia definisce i servizi che uno strato deve fornire allo strato superiore. Modifiche
all’implementazione non creano nessun problema. I sette strati possono essere pensati come
appartenenti a tre gruppi:
-. Gli strati 1,2,3 sono strati per il supporto di rete;
-. Gli strati 5,6,7 sono strati per il supporto all’utente;
-. Lo strato 4 collega i due gruppi.
In questa figura, D7 indica il pacchetto di dati del livello 7, D6 indica il pacchetto dati del livello 6e
così via. D7 quindi è la sequenza di byte che si vuole spedire. Nel passaggio da uno strato a quello
sottostante viene aggiunta un’intestazione (header) o anche una cosa (trailer). Normalmente solo il
livello 2 utilizza una coda. Lo strato fisico si occupa di trasformare la sequenza di bit in segnali
elettromagnetici che viaggeranno sul mezzo trasmissivo per arrivare al destinatario. Qui il
pacchetto subirà il processo inverso passando da uno strato a quello superiore dove verranno
eliminate le intestazioni (e le code) e alla fine il blocco D7 arriverà all’applicazione destinataria dei
dati. Da questo deriva quindi il concetto di incapsulamento cioè la porzione di dati del livello n-1
contiene sia i dati che l’intestazione del livello n, ma considera tutto il blocco come singola unità
dati.
Strati del Modello OSI:
1. Strato 1: Fisico
Lo strato fisico si preoccupa di trasmettere i singoli bit sul mezzo trasmissivo da un nodo
a quello successivo.
Lo strato fisico si occupa di:
• Caratteristiche fisiche del mezzo: definisce il tipo di mezzo trasmissivo
• Rappresentazione dei bit: definisce come il valore 0 e 1 sono codificati
• Velocità di spedizione: definisce la velocità con cui si possono spedire i bit
• Sincronizzazione dei bit: definisce il modo di sincronizzare il clock del mittente
e del destinatario
6
•
Configurazione del collegamento: definisce come gestire la connessione del
nodo al mezzo trasmissivo.
• Topologia: definisce come gestire la comunicazione in funzione della topologia
della rete.
• Flusso di dati: definisce il tipo di comunicazione (simplex, half duplex, full
duplex).
2. Strato 2: Collegamento
Lo strato di collegamento si occupa della trasmissione affidabile di pacchetti di dati fra un
nodo ed il successivo.
Lo strato di collegamento si occupa:
• Framing: divide il flusso di bit che arriva dallo strato di rete e che deve essere
spedito in blocchi, detti frame.
• Indirizzi fisici: aggiunge un’intestazione che specifica l’indirizzo fisico del
destinatario.
• Controllo di flusso: usa dei meccanismi per il controllo di flusso dei bit al fine di
non sovraccaricare il destinatario.
• Controllo degli errori: implementa meccanismi che permettono di rilevare la
presenza di errori e di ritrasmettere i frame danneggiati.
• Controllo per l’accesso: quando il mezzo trasmissivo è multipunto lo strato di
collegamento ha il compito di controllare qual nodo ha accesso al mezzo.
3. Strato 3: Rete
Lo strato di rete si occupa della consegna di pacchetti di dati da un nodo mittente a un
nodo destinatario.
Lo stato di rete si occupa di:
• Indirizzamento logico: lo strato di collegamento utilizza indirizzi fisici per far
comunicare due nodi sulla stessa rete. Questo tipo di indirizzamento è locale alla
singola rete. Per specificare tutti i nodi di una interrete non si utilizzano, quindi,
indirizzi fisici, ma si utilizzano indirizzi logici.
• Routing: fornisce il meccanismo di routing che permette di interconnettere più reti
per creare un’interrete.
4. Strato 4: Trasporto
Lo strato di trasporto si occupa della consegna di un messaggio da un processo mittente
ad un processo destinatario.
Lo strato di trasporto si occupa di:
• Indirizzamento dei processi: Lo strato di rete utilizza un indirizzamento logico che
permette di indirizzare ogni singolo nodo e visto che all’interno di ogni singolo
nodo occorre poter distinguere i processi lo strato di trasporto deve includere un
meccanismo per questo tipo di indirizzamento, quindi si utilizza un numero di
porta.
• Segmentazione e riassemblaggio: i messaggi spediti possono essere più grandi
del grandezza consentita, quindi, lo strato di trasporto prevede un meccanismo di
segmentazione dei messaggi e ad ogni pezzo viene aggiunto un numero di
sequenza che permetterà di riassemblare il messaggio.
• Controllo della connessione
• Controllo del flusso: è eseguito fra i processi destinatari piuttosto che sul canale di
comunicazione.
• Controllo degli errori. Si occupa di far arrivare l’intero messaggio del processo
mittente al processo destinatario senza errori.
5. Strato 5: Sessione
Lo strato di sessione si occupa del controllo del dialogo e della sincronizzazione.
Lo strato di sessione si occupa di:
• Controllo del dialogo: permette a sistemi diversi di comunicare tra di loro.
7
•
Sincronizzazione: permette di inserire punti di controllo, ad esempio se si deve
spedire un file di 2000 pagine ognuna di 1 KB è opportuno inserire un controllo
ogni 100 pagine per essere sicuri che il trasferimento avvenga con successo.
6. Strato 6: Presentazione
Lo strato di presentazione si occupa della sintassi e della semantica dell’informazione
trasmessa.
Lo strato di presentazione si occupa di:
• Traduzione: effettua la traduzione di dati in forma di stringhe, numeri, o altro, in
sequenze di bit da trasmettere.
• Cifratura: protegge la comunicazione grazie all’uso di strumenti crittografici.
Mittente Æ cifratura
Destinatario Æ Decrittazione
7. Strato 7: Applicazioni
Lo strato delle applicazioni si occupa di fornire i servizi di rete all’utente finale:
Alcuni servizi tipici sono:
• Terminale virtuale
• Accesso remoto ai file
• Posta elettronica
• World wide web
• Chat
La suite di protocolli TCP/IP: La suite TCP/IP è stata sviluppata quando il modello OSI non
era ancora diventato uno standard. Per questo motivo gli strati del modello TCP/IP non coincidono
con quelli del modello OSI. Nel modello originale TCP/IP sono stati definiti cinque strati anziché
sette:
1. fisico
2. di collegamento
3. di rete
4. di trasporto
5. delle applicazioni
Una differenza sostanziale tra i due modelli è dovuta al fatto che la suite TCP/IP è costituita da
vari protocolli strutturati gerarchicamente, ma non così rigidamente come previsto dal modello OSI.
In TCP/IP i protocolli sono abbastanza indipendenti e possono essere usati a seconda delle
necessità specifiche.
1. Strato 1: Fisico
Per questo strato il modello TCP/IP non definisce nessun protocollo. Quindi si utilizzano
quelli previsti dall’hardware della rete.
2. Strato 2: Collegamento
Per questo strato il modello TCP/IP non definisce nessun protocollo. Quindi si utilizzano
quelli definiti dalla rete fisica.
8
3. Strato 3: Rete
In questo strato TCP/IP definisce il protocollo IP (Internet Protocol). Il protocollo IP fa uso
di quattro protocolli di servizio: ARP, RARP, ICMP, IGMP.
Protocollo IP
Æ fornisce il servizio di consegna dei
pacchetti da un nodo ad un altro dell’interrete. Il servizio offerto è senza connessione e
inaffidabile, detto in gergo best-effort. Ciò significa che IP non fornisce né controllo di
errore né meccanismi per il controllo della consegna. IP cerca di fare quanto è possibile
per consegnare i pacchetti al destinatario senza però offrire nessuna garanzia.
ARP (Address Resolution Protocol)
Æ permette di tradurre gli indirizzi
logici usati dal protocollo IP in indirizzi fisici.
Æ permette di effettuare l’operazione
RARP (Reverse Address Resolution Protocol)
inverse: risalire all’indirizzo IP tramite un indirizzo fisico.
ICMP (Internet Control Message Protocol)
Æ viene usato per il controllo della rete.
IGMP (Internet Group Message Protocol)
Æ offre delle funzionalità per la
trasmissione simultanea di un messaggio a un gruppo di destinatari.
4. Strato 4: Trasporto
I protocolli di Trasporto nella suite TCP/IP sono TCP e UDP. IP permette di trasportare
pacchetti da un computer mittente ad un computer destinatario, invece TCP e UDP
permettono di trasportare i dati da un processo mittente ad un processo destinatario. Un
nuovo protocollo, SCTP, è stato aggiunto alla suite TCP/IP per supportare alcune
applicazioni recenti.
TCP (Trasmission Control Protocol)
Æ nel mittente TCP divide il flusso di
byte da spedire in pezzi detti segmenti. Ogni segmento ha un numero di sequenza che
serve per riordinare i byte all’arrivo alla destinazione. Nel destinatario TCP riceve i
datagram contenenti i segmenti e li riordina prima di passarli all’applicazione.
Trasmissione affidabile.
UDP (User Datagram Protocol)
Æ UDP è un protocollo che rispetto al
protocollo IP aggiunge semplicemente l’uso delle porte per l’identificazione dei processi.
Senza garanzia di consegna.
SCTP (Strema Control Trasmission Protocol)
Æ fornisce supporto per applicazioni
recenti come la trasmissione di dati audio.
5. Strato 5: Applicazioni
Questo strato è equivalente alla combinazione degli strati di sessione, presentazione e
applicazioni del modello OSI.
Indirizzamento: Quattro livelli di indirizzamento vengono usati nel modello TCP/IP:
• Indirizzi fisici: permettono di individuare fisicamente il calcolatore. Tale indirizzo serve per
specificare il destinatario dei frame nello strato di collegamento. La grandezza e il formato
dell’indirizzo fisico dipende dal tipo di rete a cui il nodo è collegato. Un indirizzo fisico è
formato da 6 byte (12 cifre esadecimali).
• Indirizzi logici (IP): servono per identificare i nodi di un’interrete a livello globale. Gli indirizzi
fisici non sono adeguati per questo scopo perché dipendono dal tipo di rete e potrebbero
non essere unici a livello globale di una interrete. Gli indirizzi fisici cambiano da hop a hop,
mentre gli indirizzi logici normalmente rimangono gli stessi.
• Indirizzi di porta: permettono di individuare i processi. Gli indirizzi fisici cambiano da hop a
hop, mentre gli indirizzi logici e i numeri di porta rimangono invariati. Un numero di porta è a
16 bit ed è espresso come un numero decimale.
• Indirizzi specifici: Alcune applicazioni utilizzano degli indirizzi che possono essere facilmente
ricordati dalle persone. Esempio di tali indirizzi specifici sono quelli
9
PARTE II STRATO FISICO
CAPITOLO 3:
DATI E SEGNALI
Tutti i tipi di dati per poter essere trasmessi devono essere prima trasformati in una forma tale che
il mezzo trasmissivo possa trasportare, cioè in segnali elettromagnetici.
Dati analogici e digitali:
I dati possono essere analogici o digitali. I dati analogici sono in forma continua e vengono
rappresentati da valori continui. Ad esempio quando una persona parla viene creata un’onda che si
propaga nell’aria, quest’onda può essere recepita da un microfono e convertita in un segnale
analogico oppure campionata e convertita in un segnale digitale.
I dati digitali sono in forma discreta e vengono rappresentati da valori discreti. Ad esempio i dati
memorizzati in un computer sono rappresentati sottoforma di 0 e 1, essi possono essere convertiti
in un segnale digitale o in un segnale analogico per essere trasmessi su un mezzo trasmissivo,
Segnali analogici e digitali:
I segnali possono essere analogici o digitali. I segnali analogici possono assumere un infinito
numero di valori in un dato intervallo. I segnali digitali possono assumere solo un numero finito di
valori.
Segnali periodici e aperiodici: Sia i segnali analogici che quelli digitali possono assumere
due forme: periodici e aperiodici (non periodici). Un segnale periodico si ripete con regolarità nel
tempo. Il tempo necessario affinché il segnale si ripeta viene detto periodo mentre la ripetizione
del segnale all’interno di un periodo viene detta ciclo; Un segnale aperiodico cambia senza esibire
una regolarità nel tempo.
Per le reti di comunicazione, normalmente, vengono utilizzati segnali analogici periodici e segnali
digitali non periodici.
Segnali analogici periodici: Tali segnali possono essere classificati come semplici e
composti:
-. Semplici: rappresentati da un’onda sinusoidale, non possono essere decomposti in
segnali più semplici.
-. Composti: formato da varie onde sinusoidali.
Cosa è un’onda sinusoidale?
È la più importante forma di un segnale analogico periodico, può essere rappresentata da tre
parametri:
1. ampiezza massima
2. frequenza
3. fase
10
1. L’ampiezza massima (o di picco) di un segnale è il valore assoluto del segnale nella sua
intensità massima, come riportato in figura:
2. Il periodo è il tempo necessario, misurato in secondi, affinché un segnale completi un ciclo.
La frequenza è il numero di periodi in 1 secondo. Quindi il periodo è l’inverso della frequenza e la
frequenza è l’inverso del periodo. Indichiamo con f = frequenza T = periodo
La figura successiva mostra due segnali e le loro frequenze, dove il periodo è espresso in secondi
e la frequenza in Hz (hertz).
Facciamo un esempio: La corrente
elettrica che usiamo nelle nostre
case ha una frequenza di 50 Hz,
quale è il periodo dell’onda
sinusoidale?
T = 1/f = 1/50 = 0.02 s = 0.02*103 ms = 20 ms
La frequenza è la velocità con cui un segnale cambia rispetto al tempo. Cambiamenti veloci
implicano una frequenza alta, cambiamenti lenti implicano una frequenza bassa. Es.: un segnale di
80 Hz è più veloce di un segnale di 40 Hz.
11
3. La fase descrive la posizione dell’onda sinusoidale rispetto al tempo 0. Se pensiamo all’onda
come qualcosa che può essere spostata in avanti o indietro lungo l’asse del tempo, la fase
descrive la grandezza di tale spostamento. La fase viene misurata in gradi o in radianti. Uno
spostamento di 360° corrisponde a uno spostamento di un intero periodo, uno di 180° corrisponde
ad uno spostamento di ½ periodo, mentre uno spostamento di 90° corrisponde ad uno
spostamento di ¼ di periodo.
La lunghezza d’onda è un’altra caratteristica di un segnale. Mette in relazione il periodo (o la
frequenza) con la velocità di propagazione del mezze che trasporta il segnale. Quindi tale
caratteristica dipende sia dalla frequenza che dal mezzo trasmissivo. Denotando con λ la
lunghezza d’onda e con c la velocità di propagazione abbiamo
La lunghezza d’onda normalmente viene misurata in micron (micrometri).
Segnali Composti: Un onda sinusoidale semplice non è adatta per le reti di comunicazione,
occorre quindi un segnale composto. L’analisi di Fourier mostra che un qualsiasi segnale composto
è la somma di onde sinusoidali semplici con diverse frequenze, ampiezze e fasi.
Lo spettro di un segnale è l’insieme delle frequenze che esso contiene, la larghezza di banda del
segnale composto è la differenza fra la frequenza più alta e quella più bassa nello spettro di un
segnale.
In questa figura ci sono due segnali composti, uno periodico e l’altro aperiodico. Lo spettro del
segnale periodico contiene tutte le frequenze con valori interi fra 1000 e 5000 (1001, 1002, 1003,..).
La larghezza di banda del segnale aperiodico è la stessa del segnale periodico, ma le frequenze,
del segnale aperiodico, contenute nello spettro sono infinite (tutti i numeri reali tra 1000 e 5000).
12
Segnali digitali: Assume valori discreti.
• Es.: -5V, +5V
• Es.: -6V, -2V, +2V, +6V
È facile rappresentare un bit con un segnale digitale.
Questa figura mostra due segnali digitali, uno con due livelli e l’altro con quattro livelli. Ogni livello
del segnale con due Livelli può codificare 1 bit; ogni segnale del livello con quattro livelli può
codificare 2 bit. In generale se il segnale ha L livelli si possono rappresentare log2 L bit.
La velocità in bit è il numero di bit che si riesce a spedire in un secondo ed è espressa in bps (bit
per secondo). La figura precedente mostra anche la velocità di bit dei due segnali.
Esempio: Supponiamo di voler trasferire un documento alla velocità di 100 pagine al minuto e che
ogni pagina sia composta in media da 24 linee con 80 caratteri in ogni linea, quale è la velocità in
bit necessaria?
Sappiamo che un carattere è normalmente rappresentato con 8 bit, pertanto la velocità in bit è:
100 * 24 * 80 * 8 = 1636000 bps = 1636 Mbps
La lunghezza dei bit è l’analogo della lunghezza d’onda per i segnali digitali. È la distanza che 1
bit occupa sul mezzo trasmissivo.
Lunghezza di 1 bit = velocità di propagazione * durata di 1 bit
Segnali digitali e segnali analogici composti: Un segnale digitale può essere approssimato da
un segnale analogico. Secondo l’analisi di Fourier un segnale digitale è un segnale analogico
composto per il quale la larghezza di banda è infinita.
13
Deterioramento del segnale: Quando i segnali viaggiano attraverso il mezzo trasmissivo,
quest’ultimo causa un deterioramento del segnale, cioè in pratica il segnale ricevuto non è
esattamente uguale a quello spedito. Le principali cause di ciò sono:
1. Attenuazione
L’attenuazione è un perdita di energia. In pratica quando il segnale viaggia attraverso il
mezzo trasmissivo, esso perde un po’ dell’energia per superare la resistenza del mezzo
trasmissivo. Per compensare questa perdita vengono utilizzati degli amplificatori che
ripristinano l’energia iniziale del segnale.
L’attenuazione o l’amplificazione di un segnale viene misurata in decibel. Il decibel (dB)
misura la potenze relativa dei due segnali o dello stesso segnale in due punto differenti
Dove P1 e P2 rappresentano la potenza del segnale nei punti 1 e 2. Si noti che la
misurazione in decibel è negativa se il segnale viene attenuato e positiva se il segnale
viene amplificato.
2. Distorsione
La distorsione è un cambiamento della forma del segnale.
Ogni segnale ha una propria velocità di propagazione sul mezzo trasmissivo e quindi un
proprio ritardo per l’arrivo a destinazione. Pertanto queste differenti velocità possono far
si che la forma del segnale composto alla destinazione può essere diversa da quella che
il segnale ha quando viene spedita.
3. Rumore
Il rumore è dovuto a interferenze esterne, quindi si traduce in un segnale addizionale,
cioè non trasmesso dal mittente, che si somma a quello originale.
Esistono varie forme di rumore:
• Rumore termico: movimento casuale degli elettroni sul mezzo trasmissivo che
crea un segnale addizionale.
• Rumore indotto: dovuto da motori o altri dispositivi elettronici.
• Rumore dovuto da interferenze: quando due cavi sono troppo vicini.
• Rumore dovuto a impulsi: è causato da fonti esterne come fulmini.
14
Il rapporto tra la potenza del segnale e la potenza del rumore (SNR Signal-to-Noise ratio) è
dato da:
Un valore alto del rapporto SNR indica un segnale poco alterato dal rumore, mentre un
valore basso del rapporto SNR indica un segnale molto alterato dal rumore. Il rapporto SNR
viene misurato in decibel e viene così definito:
Esempio: La potenza di un segnale è di 10 mW e la potenza del rumore è di 1 μW; quali
sono i valori SNR e SNRdB?
SNR = 10*103 μW / 1 μW = 10000 μW / 1 μW = 10000
SNRdB = 10 log10 SNR = 10 log10 10000 = 40
Limiti di velocità per il trasferimento di dati: La velocità massima di trasferimento dati su
un canale di comunicazione dipende da tre fattori:
a. La larghezza di banda disponibile
b. Il numero di livelli del segnale
c. La qualità del canale (la quantità di rumore)
Sono stati ottenuti due risultati teorici per il calcolo della velocità massima:
1. Canali senza rumore: teorema di Nyquist
Dove L è il numero di livelli del segnale.
Aumentando il numero di livelli (L) si aumenta la velocità in bps, questo però non significa
che si può aumentare L a piacere in quanto si riduce l’affidabilità della trasmissione. In
pratica più è grande L più è facile fare errori.
Esempio: Dobbiamo spedire dati a una velocità di 265 kbps su un canale senza rumore che
ha una larghezza di banda di 20 kHz. Quanti livelli del segnale dobbiamo utilizzare?
265 kbps = 265000 bps
20 kHz = 20000 Hz
265000 bps = 2 * 20000 Hz * log2 L
log2 L = 265000 bps / 40000 Hz = 6.625
L = 2 6.625 = 98.7 livelli
Poiché il risultato non è una potenza di 2 dobbiamo o incrementare il numero di livelli da
utilizzare o ridurre la velocità. Utilizzando 128 livelli, la velocità massima è di 280 kbps e
quindi si può spedire a 265 kbps, utilizzando invece 64 livelli la velocità massima è 240 kbps.
2. Canali con rumore: teorema di Shannon
Tale teorema fornisce la velocità massima, espressa in bit per secondo, di un canale di
comunicazione in funzione del rapporto segnale-rumore del canale. Quindi non c’è nessun
riferimento al numero di livelli.
Esempio: Consideriamo un canale di comunicazione per trasportare un segnale vocale.
Normalmente il segnale vocale occupa una larghezza di banda di 3000 Hz (da 300 a 3300
Hz). Il rapporto segnale-rumore è tipicamente di 3162. Quale è la capacità?
Capacità = 3000 Hz * log2 (1+ SNR) = 3000 Hz * log2 (1 + 3162) = 3000 Hz * log2 3163 =
= 3000 Hz * 11.62 = 34860 bps = 34,86 kbps
Questo significa che su una linea telefonica di 3 KHz possiamo spedire a una velocità
massima di 34,86 kbps. Per poter spedire ad una velocità maggiore dobbiamo o aumentare
la larghezza di banda o migliorare il rapporto segnale-rumore.
15
Uso di entrambi i teoremi: per poter trovare la velocità massima e il numero di livelli del
segnale occorre utilizzare entrambi i teoremi.
Esempio: Canale di comunicazione con larghezza di banda di 1 MHz e con un rapporto
segnale-rumore pari a 63. A quale velocità possiamo spedire i dati e quanti livelli del segnale
dobbiamo utilizzare?
Teorema di Shannon:
capacità = 1000000 * log2 (1 + 63) = 1000000 * log2 64 =
= 1000000 * 6 = 6000000 bps = 6 Mbps
Quindi la velocità massima (teorica) alla quale possiamo spedire i dati è di 6 Mbps. Al fine di
avere un canale più affidabile scegliamo di trasmettere ad una velocità inferiore, 4 Mbps.
Teorema di Nyquist:
4 Mbps = 2 * 1 MHz * log2 L => log2 L = 4/(2*1) => L = 22 = 4
Il teorema di Shannon fornisce la capacità massima di un canale, il teorema di Nyquist
permette di determinare il numero di livelli del segnale da utilizzare.
Prestazioni: Un aspetto importante per una rete di comunicazione dati è quello delle
prestazioni della rete. Le prestazioni dipendono da vari fattori:
1. Larghezza di banda
a) larghezza di banda in hertz
rappresenta l’intervallo delle frequenze di un segnale composto.
Es.: linea telefonica 4 kHz
b) larghezza di banda in bit per secondo
specifica la velocità alla quale possiamo spedire i bit su un canale o anche
su una rete.
Es.: Ethernet 100 Mbps
2. Throughput
È una misura di quanto velocemente possiamo spedire i dati attraverso una rete.
Potrebbe sembrare uguale alla larghezza di banda ma non lo è in quanto la larghezza
di banda è una misura della capacità massima del collegamento, mentre il throughput
è una misura effettiva di quanto velocemente possiamo spedire i dati
Esempio: una rete con larghezza di banda di 10 Mbps riesce a trasferire in media
solo 12000 frame al minuto. Ogni frame contiene 10000 bit. Quale è il throughput di
questa rete?
Throughput = (12000 * 10000) / 60 s = 2000000 bps = 2 Mbps
3. Latenza (ritardo)
Misura quanto tempo è necessario affinché un intero messaggio arrivi a destinazione.
Il tempo viene misurato dalla spedizione del primo bit da parte del mittente alla
ricezione dell’ultimo bit da parte del destinatario. La latenza è costituita da quattro
componenti:
Latenza = tempo di propagazione + tempo di trasmissione + tempo di attesa + tempo
di inoltro
a) tempo di propagazione
misura il tempo necessario al segnale per viaggiare dal mittente al
destinatario.
Tp = distanza di trasferimento / velocità di propagazione
Esempio: quale è il tempo di propagazione se la distanza fra il punto di
partenza e il punto di arrivo è di 12000 Km? Si assuma che la velocità di
propagazione del segnale sia di 2.4 * 108 m/s.
Tp = 12000000 m / 2.4 * 108 m/s = 12000000 / 240000000 = 0,05 s = 50 ms
16
b) tempo di trasmissione
misura il tempo necessario a inserire i bit del messaggio sul canale
Tt = dimensione messaggio (in bit) / larghezza di banda (in bit)
Esempio: quali sono i tempi di propagazione e i tempi di trasmissione per
un messaggio di 2.5 KB se la larghezza di banda della rete è di 1 Gbps? Si
assuma che la distanza tra mittente e destinatario è di 12000 Km e che la
velocità di propagazione del segnale è 2.4 * 108 m/s.
Tp = 12000000 m / 2.4 * 108 m/s = 12000000 / 240000000 = 0,05 s = 50 ms
2.5 KB = 2500 byte
1 Gbps = 1000000000 bps
Tt =(2500 * 8)bit/1000000000 bps = 20000/1000000000=0,00002 s =0,02 ms
c) tempo di attesa
non è un fattore fisso che si può misurare a priori, esso cambia in funzione
del carico della rete. Calcola il tempo di attesa nelle code dei nodi intermedi.
d) tempo di inoltro
calcola il tempo necessario al nodo intermedio per smistare il messaggio.
4. Prodotto banda-ritardo
Il prodotto larghezza di banda per ritardo definisce il numero di bit che servono per
riempire il canale. Questa misura è importante se occorre spedire i dati in pacchetti e
aspettare un riscontro dopo ogni pacchetto prima di poter proseguire con il
successivo.
5. Jitter
Misura la variabilità del ritardo, cioè in pratica consideriamo che un mittente debba
spedire a un destinatario dei dati che rappresentano un segnale video in tempo reale.
Affinché il video sia correttamente riprodotto dalla destinazione è necessario che i
pacchetti vengano consegnati tutti con lo stesso ritardo, tuttavia può capitare che i
pacchetti abbiamo un ritardo diverso dagli altri. Questo fenomeno viene detto jitter.
17
CAPITOLO 4:
TRASMISSIONE DATI
Una rete di comunicazione è progettata per spedire dati da un punto ad un altro. I dati devono
essere convertiti in segnali digitali o analogici per poter essere trasmessi.
CONVERSIONE DIGITALE-DIGITALE: I dati possono essere sia digitali che analogici ed
anche i segnali che li rappresentano possono essere sia digitali che analogici. La rappresentazione
coinvolge tre tecniche: codifica di linea, codifica a blocchi, scrambling. La codifica di linea è sempre
necessaria; la codifica a blocchi e lo scrambling possono anche non essere necessari.
Codifica di linea:La codifica di linea è il processo di conversione dei dati digitali in segnali
digitali. La codifica di linea converte una sequenza di bit in segnali digitali. Per il mittente questa
conversione è necessaria per poter spedire i dati. Il destinatario dei dati dovrà ricreare i dati digitali
dal segnale digitale ricevuto.
L’unità di base dei dati, che chiameremo “elemento dei dati”, è il bit, cioè il più piccolo pezzo di
informazione che possiamo rappresentare. Analogamente l’unità di base dei segnali, che
chiameremo “elemento del segnale”, è il più piccolo elemento del segnale digitale che possiamo
utilizzare. Un fattore importante è il rapporto fra il numero di elementi dei dati rappresentati da ogni
elemento del segnale.
La velocità dei dati è il numero di elementi dei dati (bit) che possono essere spediti in 1 s; l’unità
di misura è chiamata bit per secondo (bps). La velocità del segnale è il numero di elementi del
segnale che possono essere spediti in 1 s; l’unità di misura è chiamata baud. È chiaramente
desiderabile avere un’alta velocità di trasmissione dei dati mantenendo una velocità del segnale
bassa. In altre parole è desiderabile riuscire a spedire più dati in meno tempo. La velocità dei dati e
la velocità del segnale sono in stretta relazione tra di loro, e questa relazione dipende dal valore
del rapporto r. in realtà dipende anche dai dati; se i dati presentano molte sequenze di bit uguali
consecutivi (tutti 1 o tutti 0), la velocità del segnale potrebbe essere differente dal caso in cui i dati
presentano i valori 0 e 1 che si alternano. Possiamo considerare tre casi: pessimo, migliore, medio.
Nel caso pessimo abbiamo bisogno di una velocità del segnale più grande (il massimo fra i casi
possibili); nel caso migliore abbiamo bisogno di una velocità del segnale più piccola (il minimo tra i
casi possibili). La formula che lega la velocità del segnale è:
S = c x N x 1/r baud
Dove N è la velocità dei dati (in bps), c è un fattore che dipende dal caso che stiamo considerando
(medio, pessimo, migliore); S è la velocità del segnale.
18
Esempio: Un segnale trasporta dati rappresentando ogni elemento dei dati con un elemento del
segnale (r = 1). Se la velocità in bi è di 100 kbps, quale è il valore medio della velocità del segnale
quando c = ½?
Soluzione: S = c x N x 1/r = ½ * 100000 * 1/1 = 50000 = 50 kbaud.
Possiamo dire che la velocità del segnale, e non la velocità dei dati, determina la larghezza di
banda necessaria per un segnale digitale.
In questo caso, quindi, la larghezza di banda (intesa come intervallo delle frequenza utilizzate) è
proporzionale alla velocità del segnale. L’ampiezza di banda minima può essere espressa come:
Bmin = c x N x 1/r
La precedente equazione può essere utilizzata per trovare la massima velocità in bit in funzione
della larghezza di banda del canale:
Nmax = 1/c x B x r
Linea di base. Nella decodifica di un segnale digitale, il destinatario calcola in tempo reale la
media della potenza del segnale che riceve. Questa media viene chiamata linea di base. Il segnale
ricevuto viene confrontato con la linea di base per determinare il valore dell’elemento del segnale
che si deve decodificare. Una lunga sequenza di valori uguali può causare un graduale
spostamento della linea di base e rendere più difficoltosa la decodifica.
Componenti DC. Quando il voltaggio di un segnale digitale è costante per un certo periodo di
tempo, vengono utilizzate frequenze molto basse.
Sincronizzazione automatica. Per interpretare correttamente il segnale ricevuto, la lettura degli
elementi del segnale da parte del destinatario deve corrispondere agli intervalli di tempo utilizzati
dal mittente per generare il segnale. Se il clock del destinatario è più veloce o più lento di quello del
mittente, gli intervalli di tempo utilizzati dal mittente per generare il segnale non corrispondono a
quelli utilizzati dal destinatario per leggere il segnale e il destinatario potrebbe interpretare in modo
sbagliato il segnale ricevuto.
Esempio in cui il destinatario ha un clock più veloce di quello del mittente.
Un segnale digitale auto-sinconizzante contiene delle informazioni relative al tempo spedite
insieme ai dati; tali informazioni permettono al destinatario di sincronizzare automaticamente il
proprio clock con quello del mittente.
Schemi di codifica di linea
Gli schemi di codifica di linea sono degli schemi di codifica che permettono la rappresentazione
degli elementi dei dati (bit) con elementi del segnale digitale. Possiamo dividerli in 5 categorie
generali.
1. Schemi unipolari: In uno schema unipolare, i valori di tutti i livelli del segnale che vengono
utilizzati hanno lo stesso segno, cioè sono tutti positivi o tutti negativi.
NRZ. Tradizionalmente, uno schema unipolare viene chiamato schema di codifica NRZ
(Non-Return-to-Zero) e rappresenta il valore 1 con un voltaggio positivo ed il valore 0 con il
voltaggio zero. Viene chiamato NRZ perché il valore del segnale non ritorna a zero durante
la rappresentazione di ogni bit.
19
2. Schemi polari: Negli schemi polari, i livelli del segnale possono assumere sia valori positivi
che valori negativi. Si può usare un voltaggio positivo per rappresentare 0 e un voltaggio
negativo per rappresentare 1.
NRZ. Nella codifica NRZ polare, vengono utilizzati due livelli di voltaggio, uno positivo e uno
negativo. Esistono due versioni di questo schema di codifica: NRZ-L, NRZ-I. NRZ-L (NRZLevel), il livello del voltaggio determina il valore dei bit; un voltaggio positivo rappresenta il
valore 0 ed un voltaggio negativo rappresenta il valore 1. Nella seconda versione, NRZ-I
(NRZ-Invert), il valore dei bit è determinato dall’assenza o dalla presenza di un cambio del
livello del voltaggio; un’assenza di cambiamento rappresenta il valore 0, un cambiamento di
voltaggio rappresenta il valore 1.
Se c’è una lunga sequenza di 0 (o di 1) nella codifica NRZ-L, il valore medio della potenza
del segnale si avvicinerà sempre più al valore del voltaggio positivo (negativo) che
rappresenta il valore 0 (il valore 1); ad un certo punto il destinatario potrebbe avere difficoltà
nel distinguere una tensione positiva o negativa da un’assenza di tensione. Lo schema
NRZ-I presenta questo problema solo per lunghe sequenze di 0. Un altro problema generato
da lunghe sequenze di bit uguali è quello della sincronizzazione.
Le codifiche NRZ-L e NRZ-I hanno una velocità del segnale di N/2 baud
RZ. Il problema principale degli schemi NRZ è quello della sincronizzazione dei clock. La
codifica RZ (Return-to-Zero) risolve questo problema utilizzando tre livelli del segnale: uno
positivo, uno negativo e 0. Nella codifica RZ il segnale cambia durante la rappresentazione
di ogni singolo bit: il valore 0 è rappresentato da una tensione negativa ed il valore 1 da una
tensione positiva, ma il segnale ritorna sempre al valore zero al centro di ogni bit e rimane
su tale valore fino all’inizio del prossimo bit.
Il principale svantaggio di questa codifica è che richiede due cambiamenti del segnale per
codificare un solo bit e quindi ha bisogno di una larghezza di banda maggiore.
Codifiche bifase. L’idea della transizione al centro di ogni bit (usata in RZ) combinata con
la codifica NRZ-L produce la codifica Manchester. In questa codifica ogni singolo bit viene
rappresentato da due elementi del segnale; il voltaggio usato in questi due elementi del
segnale è sempre diverso: per rappresentare il valore 0 il primo elemento del segnale ha un
voltaggio positivo mentre il secondo ha un voltaggio negativo (cioè c’è un cambiamento di
voltaggio da positivo a negativo), mentre per rappresentare il valore 1 il primo elemento del
segnale ha un voltaggio negativo ed il secondo elemento ha un voltaggio positivo (cioè c’è
un cambiamento di voltaggio da negativo a positivo). L’idea della transizione al centro di
ogni bit combinata con la codifica NRZ-I produce la codifica “Manchester differenziale”.
20
Nelle codifiche bifase la transizione al centro di ogni bit viene utilizzata per la
sincronizzazione dei clock.
La codifica Manchester risolve alcuni dei problemi della codifica NRZ-L; la codifica
Manchester differenziale risolve alcuni dei problemi della codifica NRZ-I. Innanzitutto, non
c’è il problema del cambiamento della linea di base. Non c’è il problema delle componenti
DC in quanto ogni bit è rappresentato sia da un voltaggio positivo che da uno negativo.
L’unico lato negativo è relativo alla velocità.
La velocità del segnale richiesto dalle codifiche bifase è due volte quella richiesta
dalle codifiche NRZ.
3. Codifiche bipolari: Nelle codifiche bipolari vengono utilizzati tre livelli del segnale: uno
positivo, uno negativo e zero. Il valore di un bit viene rappresentato o da un voltaggio pari a
zero o da un voltaggio diverso da zero alternando il valore positivo a quello negativo . La
codifica AMI (Alternate Mark Inversion) rappresenta il valore 0 con il voltaggio nullo ed il
valore 1 con voltaggi positivi e negativi che si alternano. La codifica Pseudoternaria
utilizza la rappresentazione opposta: il valore 1 corrisponde al voltaggio nullo ed il valore 0
con voltaggi positivi e negativi che si alternano. La codifica AMI viene utilizzata per le
comunicazioni a grande distanza. Si noti che essa presenta un problema di sincronizzazione
per lunghe sequenze di 0.
4. Codifiche multilivello: La necessità di aumentare la velocità dei dati ha portato alla
creazione di molte codifiche. L’obiettivo è quello di incrementare il numero di bit spediti (in
media) per ogni elemento di segnale codificando una sequenza di m bit con una sequenza
di n elementi del segnale. Una sequenza di m bit può assumere 2m possibili valori.
Analogamente una sequenza di n elementi del segnale può assumere Ln possibili valori,
dove L è il numero di livelli del segnale che utilizziamo. Le codifiche multilivello sono
solitamente indicate con sigle tipo mBnL, dove B indica che i dati sono binari. La L viene
sostituita con B (segnale binario) nel caso L=2, con T nel caso L=3 (segnale ternario) e Q
(segnale quaternario) nel caso L=4.
2B1Q. questa tecnica codifica sequenze di due bit con un elemento di segnale con 4 livelli.
Con questa codifica possiamo spedire al doppio della velocità rispetto alla codifica NRZ-L.
5. Trasmissione multilinea.
21
Codifica a blocchi: Per poter ottenere la sincronizzazione dei clock e fornire delle capacità di
rilevamento degli errori, occorre utilizzare ridondanza nella rappresentazione dei dati che vengono
spediti. La codifica a blocchi permette di ottenere questa ridondanza e migliorare le prestazioni
della codifica di linea. In generale, la codifica a blocchi trasforma una sequenza di m bit, chiamata
parola sorgente, in una sequenza di n bit, con n>m, spesso chiamata parola codice; tale
trasformazione viene indicata con mB/nB, utilizzando gli opportuni valori di m e n.
In generale, la codifica a blocchi trasforma una sequenza di m bit, chiamata parola sorgente, in una
sequenza di n bit, con n>m, chiamata parola codice; tale trasformazione viene indicata con mB/nB,
utilizzando gli opportuni valori di m e n.
La codifica a blocchi coinvolge tre fasi: divisione , sostituzione e riassemblaggio.
1. Nella prima fase la sequenza di bit originale viene divisa in gruppi di m bit.
2. In questa fase viene sostituita ogni parola sorgenti con una parola codice.
3. In fine le parole codice vengono riassemblate.
4B/5B
La codifica a blocchi 4B/5B è stata progettata per essere usata con lo schema di codifica di linea
NRZ-I. La sequenza di bit prodotta dalla codifica a blocchi 4B/5B non ha mai più di tre 0
consecutivi, e quindi non possono esserci lunghe sequenze di 0. Nella codifica a blocchi 4B/5B. Il
destinatario dovrà prima trasformare il segnale digitale ricevuto con la codifica NRZ-I in un flusso di
bit e poi decodificare di nuovo questo flusso di bit utilizzando la decodifica 4B/5B per ottenere la
sequenza di bit originale.
Le parole codice utilizzate per sostituire le parole sorgenti non hanno mai più di un bit iniziale pari a
0 e mai più di due bit finali pari a 0.
La codifica HDB3 è usata al di fuori del Nord America. Questa codifica è simile alla codifica B8ZS,
ma anziché operare su sequenze di 8 bit opera su sequenze di 4 bit.
CONVERSIONE ANALOGICO DIGITALE: Ci sono due tecniche di modulazione che
permettono di convertire un segnale analogico in dati digitali: la modulazione ad impulsi codificati e
la modulazione delta.
Modulazione a impulsi codificati: La tecnica più comune per convertire un segnale analogico in
dati digitali è la tecnica detta modulazione a impulsi codificati o PCM (Pulse Code Modulation). Un
codificatore PCM utilizza tre fasi per trasformare il segnale analogico in dati digitali:
1. Campionamento: il segnale analogico viene campionato
2. Quantizzazione: il segnale viene rappresentato attraverso un insieme finito di valori
3. Codifica: il risultato della quantizzazione viene codificato con una sequenza di bit
22
Campionamento: La prima fase della codifica PCM è il campionamento il segnale analogico viene
misurato a intervalli regolari di Ts secondi, il che significa a una frequenza di campionamento di
fs=1/Ts. Esistono tre metodi di campionamento: ideale, naturale e a gradini. Nel campionamento
ideale, gli impulsi del segnale analogico vengono misurati esattamente negli istanti di tempo a
distanza Ts. Nel campionamento naturale la misura del segnale avviene in un breve intervallo di
tempo che include l’istante di campionamento. La tecnica più usata è detta a gradini, simile a l
campionamento naturale in quanto usa un breve intervallo di tempo che include l’istante di
campionamento, ma il risultato della misura è un valore costante il processo di campionamento
viene chiamato PAM (Pulse Amplitude Modulation).
Velocità di campionamento. Una considerazione importante è relativa alla frequenza con cui
avviene il campionamento. Quali sono le restrizioni sul valore di Ts? Si può dare una risposta a
questa domanda utilizzando il teorema di Nyquist, che asserisce che per riprodurre il segnale
analogico originale,1 condizione necessaria è che la velocità di campionamento sia almeno il
doppio della più alta frequenza presente nel segnale originale.
Quantizzazione
Il risultato della fase di campionamento è la misurazione di una serie di impulsi con valori che
spaziano dall’ampiezza minima all’ampiezza massima del segnale. I valori che ne risultano sono
numeri reali. Tali valori non possono essere utilizzati nel processo di codifica, ma occorre
approssimarli. La quantizzazione effettua quest’approssimazione nel seguente modo:
Siano Vmin e Vmax l’ampiezza minima e l’ampiezza massima del segnale campionato.
1. L’intervallo [Vmin e Vmax]viene diviso in L intervalli di ampiezza ∆ = (Vmax - Vmin]/L.
2. Ogni intervallo viene rappresentato da un cosiddetto valore di quantizzazione compreso fra
0 e L-1.
3. La misura del campionamento viene approssimata con il valore di quantizzazione del
corrispondente intervallo.
Ad esempio, assumiamo di avere un segnale di campionato con ampiezza min di -20 V e max +20 V.
Scegliamo L=8. Questo significa che ∆ =5 figura 4.25. l’ampiezza del segnale per il primo impulso
campionato è -6.1 V; questo campione ricade nell’intervallo rappresentato dal valore di quantizzazione 2 ed è
per tanto rappresentato da tale valore. Nella figura vengono riportati anche i valori normalizzati (valore reale/
∆) per ogni campione, i valori normalizzati della quantizzazione (cioè il valore che rappresenta ogni
intervallo) e la differenza fra questi due valori che viene chiamata errore normalizzato.
23
La quantizzazione è un processo di approssimazione: un solo valore, solitamente quello del centro
dell’intervallo di approssimazione, deve essere usato per rappresentare tutti valori dell’intervallo.
Se il valore da approssimare corrisponde proprio al centro dell’intervallo allora l’errore di
quantizzazione è nullo. Gli errori di quantizzazione fanno decrescere il rapporto segnale-rumore, e
ciò, in accordo al teorema di Shannon, riduce la capacità del canale.
MODALITA’ DI TRASMISSIONE: La connessione fisica fra un dispositivo o un altro può
utilizzare uno o più fili. Utilizzando un solo filo possiamo spedire un solo bit per volta; utilizzando in
parallelo più fili possiamo spedire più bit per volta. Il primo tipo di trasmissione viene detta
trasmissione seriale, il secondo tipo di trasmissione viene detta trasmissione parallela. La
trasmissione seriale può essere ulteriormente suddivisa in asincrona, sincrona e isocrona.
Trasmissione parallela: Nella trasmissione parallela il flusso di bit da spedire viene organizzato in
gruppi di n bit, per un certo valore di n, e i bit in ogni gruppo vengono spediti contemporaneamente.
Tipicamente i fili utilizzati vengono raggruppati in un solo cavo che inizia e termina con dei
connettori. Il vantaggio della trasmissione parallela è la velocità. Lo svantaggio della trasmissione
parallela è il costo.
Trasmissione seriale: Nella trasmissione seriale i bit vengono spediti in sequenza e pertanto
occorre un solo canale di comunicazione e non n per trasmettere i dati da un dispositivo all’altro. Il
vantaggio della trasmissione seriale è dovuto al fatto che occorre un solo canale di comunicazione,
il che riduce il costo di circa un fattore pari a n. Gli svantaggi sono dovuti alla velocità e anche al
fatto che i dati sono tipicamente gestiti in gruppi di bit all’interno dei dispositivi e pertanto si rende
24
necessario l’utilizzo di una conversione parallelo-seriale per il mittente e seriale-parallelo per il
destinatario.
• Trasmissione seriale asincrona. La trasmissione seriale asincrona è una trasmissione
seriale in cui la sincronizzazione del segnale non è importante. I bit vengono raggruppati in
byte e il mittente spedisce ogni gruppo di bit quando possibile e indipendentemente dagli
altri gruppi, quindi senza preoccuparsi di problemi di sincronizzazione. L’assenza di
sincronizzazione fa si che il destinatario non possa sapere quando il prossimo gruppo bi bit
arriverà. Per segnalare l’arrivo di un nuovo gruppo di byte viene usato il bit di start il cui
valore tipicamente è 0; questo bit verrà posto all’inizio della sequenza. Per segnalare la fine
della spedizione verrà utilizzato un altro bit con valore 1 chiamato bit di stop; questo bit verrà
posto alla fine della sequenza. I bit di start e di stop permettono al destinatario di individuare
l’inizio e la fine di ogni byte e quindi di sincronizzarsi sul flusso. La trasmissione seriale
asincrona è “asincrona” a livello di byte; a livello di bit il destinatario deve essere
sincronizzato.
• Trasmissione seriale sincrona. Nella trasmissione seriale sincrona, il flusso di bit viene
raggruppato in unità chiamate frame, che possono contenere molti byte. Nella trasmissione
seriale sincrona, i bit vengono spediti uno dopo l’altro senza bit di start e di stop. Il
destinatario dovrà separare i bit della sequenza per ottenere i byte. Il vantaggio della
trasmissione sincrona è la velocità. L’assenza di bit addizionali e di periodi di inutilizzo del
canale, permette di trasferire più velocemente il bit di dati sul canale di comunicazione
rispetto alla trasmissione asincrona. Per questo motivo la trasmissione sincrona viene
utilizzata per applicazioni ad alta velocità, come ad esempio la trasmissione dei dati da un
computer a un altro il problema della sincronizzazione viene risolto nello strato di
collegamento.
• Trasmissione seriale isocrona. La trasmissione seriale isocrona garantisce l’arrivo dei dati
a una velocità costante.
CONVERSIONE DIGITALE-ANALOGICO: La conversione digitale-analogico trasforma i
dati digitali in un segnale analogico. Un’onda sinusoidale è definita da tre caratteristiche: ampiezza,
frequenza e fase. Variando una di queste caratteristiche, creiamo una versione differente dell’onda
sinusoidale. La variazione di una delle caratteristiche dell’onda sinusoidale può essere utilizzata
per rappresentare i dati digitali. Una qualsiasi delle tre caratteristiche può essere utilizzata per
questo scopo. Ne risultano tre diversi meccanismi per la modulazione di dati digitali in un segnale
analogico: la modulazione ASK (Amplitude Shift Keying) che varia l’ampiezza, la modulazione FSK
(Frequency Shift Keying) che varia la frequenza e la modulazione PSK (Pulse Shift Keying) che
varia la fase.
•
Modulazione ASK: Nella modulazione ASK, per creare gli elementi del segnale, viene
modificata l’ampiezza del segnale. Sia la frequenza che la fase rimangono costanti durante i
cambiamenti dell’ampiezza. Modulazione ASK binaria (BASK). Sebbene un elemento del
segnale possa assumere varie forme, ognuna con ampiezza diversa, la modulazione ASK
viene normalmente implementata usando solo due tipi di elementi del segnale (cioè L=2).
Pertanto questa tecnica viene chiamata BASK. Un elemento del segnale può assumere due
forme: in una la sua ampiezza è nulla, nell’altra la sua ampiezza è uguale all’ampiezza
massima del segnale portante.
25
•
Modulazione FSK: Nella modulazione ASK, per creare gli elementi del segnale, viene
modificata la frequenza del segnale. Sia l’ampiezza che la fase rimangono costanti durante i
cambiamenti della frequenza. Modulazione FSK binaria (BSFK): La modulazione FSK
binaria utilizza due frequenze portanti. La prima frequenza portante viene utilizzata per il
valore 0 e la seconda per il valore 1. Normalmente le frequenze portanti sono molto alte e la
loro differenza è molto piccola (sono molto vicine).
•
Modulazione PSK: Nella modulazione PSK viene modificata la fase del segnale. Sia
l’ampiezza e la frequenza rimangono invariate durante i cambiamenti della fase. La
modulazione PSK, è più utilizzata delle modulazioni ASK e FSK. Modulazione PSK binaria
(BPSK): La forma più semplice di modulazione PSK è quella binaria, in cui si hanno solo
due tipi di segnali, uno con una fase di 0° e l’altro con una fase di 180°. La modulazione
PSK binaria è semplice come la modulazione ASK binaria, ma ha un grande vantaggio: è
più resistente al rumore. Il rumore può cambiare più facilmente l’ampiezza e meno
facilmente la fase. La modulazione PSK ha un vantaggio anche rispetto a quella FSK in
quanto non necessita di due segnali portanti.
CONVERSIONE ANALOGICO-ANALOGICO: La conversione analogico-analogico
trasforma un segnale che rappresenta i dati analogici in un altro segnale analogico che viene
trasmesso. Ci si potrebbe chiedere perché modulare un segnale analogico in un altro segnale
analogico. Una tale modulazione si rende necessaria se il canale a disposizione per la
trasmissione è passa-banda. Un esempio ci è dato dalle trasmissioni radio. Il segnale analogico
prodotto da ogni stazione è un segnale passa-basso e tutte le stazioni producono tale segnale
nella stessa banda di frequenze. Per poter trasmettere il segnale di più stazioni
contemporaneamente, i segnali passa-basso devono essere spostati su frequenze diverse. La
conversione analogico-analogico può essere fatta in tre modi: modulazione di ampiezza (AM,
Amplitude Modulation), modulazione di frequenza (FM, Frequency Modulation) e modulazione di
fase (PM, Phase Modulation).
26
CAPITOLO 5:
MULTIPLEXING E DIFFUSIONE
Noi sappiamo che i canali che possono essere utilizzati hanno una larghezza di banda limitata,
quindi la principale sfida della comunicazione elettronica è cercare di utilizzare in modo oculato tale
canale. L’obiettivo del multiplexing, quindi, è l’efficienza, mentre gli obiettivi della diffusione sono
evitare le interferenze e le intercettazioni.
Multiplexing: Quando la larghezza di banda di un canale è superiore alla larghezza di banda
effettivamente necessaria, il canale può essere condiviso da più trasmissioni simultanee in modo
da ottimizzare il canale. Per fare ciò però abbiamo bisogno del multiplexing, che permette la
trasmissione simultanea di più segnali su un singolo canale di comunicazione. In un sistema che
usa multiplexing ci sono n linee di input (trasmissioni) e un collegamento fisico (canale).
Le n linee di input condividono il collegamento fisico. Le linee di input portano i dati da trasmettere
per ognuno dei canali logici in un dispositivo chiamato MUX (multiplexer) che crea un unico
segnale che verrà spedito sul canale fisico. Quando arriva a destinazione tale segnale passa
attraverso un altro dispositivo, chiamato DEMUX (demultiplexer), che riconverte il segnale ricevuto
nei segnali originali per ognuno dei canali logici. Esistono tre tecniche generali per implementare il
multiplexing:
1. Multiplexing a divisione di frequenza (FDM):
Permette di spedire vari canali logici su un singolo collegamento fisico con sufficiente
ampiezza di banda. I segnali vengono modulati utilizzando frequenze portanti diverse,
vengono poi combinati in un singolo segnale che può essere trasportato sul canale fisico.
2. Multiplexing a divisione di lunghezza d’onda (WDM):
Viene usato principalmente nelle connessioni a fibre ottiche dove le operazioni di
composizione e divisione dei segnali luminosi sono estremamente semplici. È molto simile al
multiplexing FDM con la differenza che la modulazione viene effettuata sulla lunghezza
d’onda del segnale. L’inconveniente è che le frequenze sono molto alte.
3. Multiplexing sincrono a divisione di tempo (TDM):
E’ una tecnica per segnali digitali. Viene progettato per condividere un canale digitale. Il
multiplexing TDM, anziché condividere una porzione della larghezza di banda, come accade
nel multiplexing FDM, condivide il tempo di utilizzo del collegamento. Ogni canale logico
occupa un intervallo di tempo. Il collegamento fisico è uguale a quello del multiplexing FDM
ma, anziché essere suddiviso in frequenze (fasce orizzontali), viene diviso in intervalli
temporali (fasce verticali).
27
Come si vede in figura, i dati dei canali logici di input, 1,2,3,4, occupano il canale in modo
sequenziale.
Il multiplexing TDM può essere sincrono o statistico.
Multiplexing sincrono a divisione di tempo: Nel multiplexing TDM sincrono gli intervalli
di tempo vengono allocati in modo fisso alle sorgenti indipendentemente dalla presenza di
dati da spedire, mentre nel multiplexing TDM statistico, gli intervalli di tempo vengono
allocati a un canale logico solo quando ci sono dati da spedire. Nel multiplexing sincrono
l’utilizzo del collegamento fisico viene suddiviso in intervalli di tempo e il canale viene
sfruttato a turno da ogni singolo canale logico. La grandezza dell’intervallo di tempo è un
parametro dello schema del multiplexing che determina il numero di bit che si possono
spedire in un intervallo. Per spedire i dati alla velocità richiesta dei singoli canali logici il
collegamento deve essere n volte più veloce (n volte significa il numero di canali logici più
veloci, es.: 3 canali logici da 5Kbps ciascuno, devono disporre di un canale fisico di 15
Kbps). In altre parole, il numero di bit che un canale logico spedisce nell’intervallo di tempo
T stabilito dallo schema, viene spedito sul collegamento in un intervallo di tempo pari a T/n
in modo tale che in un intervallo di tempo T si riesca a spedire dati per ogni canale logico. Il
gruppo di bit che si spedisce in un intervallo di tempo viene chiamato frame. Se ci sono n
canali logici ogni frame sarà costituito da n parti, ognuna delle quali arriva da un canale
logico diverso.
Esempio: Assumiamo che per il multiplexing della figura precedente la velocità di
spedizione di ognuno dei canali logici sia di 1 Kbps. In ogni turno viene spedito 1 bit di ogni
canale. Quale è la durata di un turno (intervallo di tempo)? E di ogni frame? E della parte di
un frame che trasporta i dati del canale logico C?
1. La velocità di spedizione dei singoli canali logici è di 1000 bit per secondo. In ogni
turno viene spedito 1 bit, quindi per spedire 1000 bit occorrono 1000 turni, il che
significa che la durata di ogni intervallo di input è 1/1000 s, cioè 1 ms.
2. Nella figura precedente ci sono n=3 canali logici, ogni frame è costituito da n=3 bit
quindi ci saranno 1000 frame costituiti 3 bit, uno per un totale di 3000 bit. Visto che
la velocità del canale fisico è n=3 volte quella dei canali logici, tale velocità è
3 Kbps. Quindi la durata di ogni frame è
3000 / 3000 = 1 ms
3. Poiché un frame trasporti i dati di 3 canali logici e la durata di un frame è 1 ms
Allora la durata ci ciascuna parte di frame è 1/3 ms.
Bisogna fare un’osservazione però, finora abbiamo assunto che tutti i canali logici che
vengono combinati dal multiplexing trasmettono dati alla stessa velocità. Ovviamente nella
realtà può capitare che i dati da trasportare arrivino a velocità diverse per ogni canale.
Esistono due tecniche per risolvere questo problema:
28
-. multiplexing multilivello:
Questa tecnica viene utilizzata quando la velocità delle linee di input sono l’una
multipla dell’altra. Per esempio nella figura precedente abbiamo due input a 20 Kbps
e tre input a 40 Kbps. Le prime due linee possono essere multiplexate per creare un
canale di input che ha la stessa velocità degli altri 3. Un secondo livello di multiplexing
può quindi combinare i quattro canali di 40 Kbps che possono essere trasportati su un
collegamento a 160 Kbps.
-. multiplexing multiturno:
Questa tecnica alloca più di un turno a un canale che è più veloce degli altri; questo
significa che le velocità devono essere tutte multiple di un’unità di base. Nella figura
precedente il canale di input di 50 Kbps usufruisce di due turni, i dati provenienti da
tale canale vengono fatti passare attraverso un convertitore seriale-parallelo che da
una linea di 50 Kbps crea due linee di 25 Kbps. In questo caso l’unità di base è 25
Kbps. In questa tecnica e in questa figura il frame è costituito da n+1 bit anziché n.
La sincronizzazione fra multiplexer e demultiplexer è un problema fondamentale. Se questi
due dispositivi non sono sincronizzati, l’appartenenza dei bit ai canali logici verrà falsata.
Per questo motivo, uno o più bit di sincronizzazione vengono solitamente inseriti nei frame.
Questi bit seguono uno schema prestabilito e nella maggior parte dei casi viene usato un
solo bit di sincronizzazione e il suo valore si alterna fra 0 e 1 come riportato nella figura
sottostante:
29
Multiplexing statistico a divisione di tempo: Nel multiplexing sincrono TDM, i turni
vengono assegnati staticamente a ognuno dei canali logici. Questo metodo è inefficiente
quando i canali logici non hanno dati da spedire. Nel multiplexing statistico TDM i turni
vengono assegnati dinamicamente per migliorare l’utilizzo del collegamento. Un turno viene
assegnato a una linea di input solo quando ci sono dati da spedire.
Questa figura evidenzia il fatto che quando ci sono sorgenti che non hanno dati da spedire
con il TDM sincrono si creano dei vuoti nei frame, con il TDM statistico, invece, non si
creano vuoti nei frame.
Lo svantaggio del TDM statistico è che non esiste più una relazione precisa tra la posizione
dei dati all’interno del frame e l’appartenenza dei dati stessi a un canale logico. Con il TDM
sincrono un frame è fatto di n parti e la parte i-esima appartiene al canale logico i. Con il
TDM statistico ciò non è più vero. Si rende perciò necessario inserire informazioni
addizionali per indicare il canale al quale appartengono i dati. Ogni parte del frame dovrà
trasportare anche dei bit che indicano il canale di appartenenza; si possono ad esempio
utilizzare k = log2 n bit per specificare il canale di appartenenza. Per quanto riguarda la
dimensione dei frame, il rapporto fra il numero di bit di dati e il numero di bit usati per gli
indirizzi sia sufficientemente alto. Ad esempio sarebbe molto inefficiente spedire 1 bit di dati
se occorrono 3 bit di indirizzamento, ciò significherebbe introdurre un sovraccarico del 300%.
Un’altra differenza fra TDM sincrono e TDM statistico è dovuto all’assenza di bit di
sincronizzazione dei frame.
Diffusione dello spettro: Le tecniche di multiplexing combinano i segnali di varie sorgenti per
utilizzare in modo efficiente la larghezza di banda, mentre la diffusione dello spettro serve sempre
a combinare i segnali di varie sorgenti ma gli obiettivi sono diversi. Tali tecniche sono state
progettate per essere utilizzate in reti senza fili. Quindi gli obiettivi sono quelli di evitare sia
l’intercettazione sia l’interferenza. Per ottenere questi obiettivi le tecniche della diffusone dello
spettro utilizzano la ridondanza.
Esistono due tecniche di diffusione dello spettro:
0. 1. Diffusione dello spettro tramite salti di frequenza:
La tecnica di diffusione dello spettro mediante salti di frequenza (FHSS) utilizza M
frequenze portanti che vengono modulate dal segnale originale. In ogni unità di tempo il
segnale, viene modulato su una particolare frequenza. Tutte le M frequenze saranno
utilizzate mediante un codice di diffusione che può essere generato mediante un
generatore di numeri pseudocasuali.
. 2. Diffusione dello spettro tramite sequenza diretta:
La diffusione dello spettro mediante sequenza diretta (DSSS) espande lo spettro del
segnale. Ogni bit appartenente al segnale dei dati viene sostituito da una parola in
codice di bit, chiamati chip, mediante uno specifico codice di diffusione.
30
CAPITOLO 6:
MEZZI TRASMISSIVI
Finora abbiamo parlato di varie questioni relative allo strato fisico, adesso discuteremo dei mezzi
trasmissivi che sono controllati dallo strato fisico e in qualche modo possono essere visti come un
ulteriore strato sottostante a quello fisico. Un mezzo trasmissivo può essere definito come qualsiasi
cosa capace di trasportare informazione da una sorgente a una destinazione. Nell’ambito della
comunicazione dei dati la definizione di dati e di mezzo trasmissivo è un po’ più specifica. Il mezzo
trasmissivo tipicamente è un cavo metallico, una fibra ottica o l’etere. L’informazione è un segnale
che deriva dalla conversione di dati che originariamente sono in un’altra forma. I mezzi trasmissivi
possono essere classificati in due categorie generali:
1. Mezzi guidati:
Sono quei mezzi che usano una conduttura per collegare un dispositivo a un altro. Il segnale
si propaga attraverso la conduttura (cavo) ed è sempre contenuto nei limiti fisici del mezzo
stesso. Il doppino e il cavo coassiale sono fatti di materiale metallico (rame) capace di
condurre il segnale sottoforma di corrente elettrica invece la fibra ottica trasporta il segnale
sottoforma di luce. Fra i mezzi guidati più comuni troviamo:
a) doppino: formato da due fili di rame ognuno dei quali è protetto da un isolamento di
plastica. I due fili vengono intrecciati. Uno dei due fili serve per trasportare il segnale. L’altro
viene usato per spedire un segnale di riferimento (terra). Il ricevitore utilizza la differenza tra
i due segnali in quanto intrecciando i fili l’interferenza è uniforme su entrambi e quindi ha
meno effetto sulla differenza fra i due segnali.
Il doppino più comune è il doppino non schermato anche se la IBM ha prodotto una
versione di doppino schermato che prevede un’ulteriore protezione, oltre all’isolamento dei
singoli fili, costituita da una lamina metallica che funge da guaina per la coppia di fili. Tale
guaina aumenta la qualità del doppino ma ne aumenta anche il costo. L’associazione delle
industrie elettroniche (EIA) ha sviluppato uno standard che classifica i doppini non schermati
in sette categorie ognuna adatta ad uno specifico uso. La velocità di trasferimento aumenta
con l’aumentare della categoria del doppino. Un connettore serve a collegare il doppino al
dispositivo, i più comuni sono i connettori RJ45. Prestazioni: Un modo per misurare la
qualità di un doppino è quella di misurare l’attenuazione in funzione della frequenza e della
distanza. Applicazioni: Il doppino è utilizzato per linee telefoniche e permette di trasportare
segnali per la voce e dati. I collegamenti tra i nostri telefoni fissi e le centraline sono fatti con
doppini non schermati.
b) cavo coassiale: Permette di trasportare segnali a frequenza maggiore rispetto a quelle
che è possibile utilizzare con un doppino. Un cavo coassiale è formato da un conduttore
centrale solitamente di rame protetto da una guaina isolante che a sua volta è racchiusa in
un altro conduttore metallico. Il tutto è ulteriormente isolato da un’altra guaina isolante e
infine protetta da una terza guaina di plastica. I cavi coassiali sono suddivisi in categorie in
funzione alle loro caratteristiche fisiche. Il connettore per cavo coassiale più diffuso è
chiamato connettore BNC e sono utilizzati per connettere l’estremità di un cavo a un
dispositivo (es.: una televisione). Prestazioni: Anche qui le prestazioni si misurano
calcolando l’attenuazione in funzione della frequenza e della distanza. Applicazioni: Il cavo
coassiale viene utilizzato nella rete televisiva.
c) fibra ottica: è un cavo fatto di vetro o di plastica capace di trasmettere il segnale
sottoforma di luce. La fibra ottica usa la riflessione della luce per far propagare il segnale
all’interno de cavo. Un nucleo di vetro (o plastica) è circondato da un rivestimento di vetro (o
plastica) meno denso. La differenza di densità è tale che la luce viene riflessa nel nucleo. La
tecnologia attuale permette la propagazione della luce in una fibra ottica in due modi:
Multimodo: il nome deriva dal fatto che molti raggi di luce viaggiano
contemporaneamente nella fibra ottica lungo direzioni diverse, quindi tale modo può
essere suddiviso a sua volta in altri due modi:
-. Nelle fibre multimodo con indice a scatto la densità del nucleo rimane costante
dal centro verso i bordi. Arrivato quindi ai bordi dove è presente il rivestimento vi è
31
un cambiamento repentino del raggio di luce dovuto alla diversa densità del
rivestimento.
-. Nelle fibre multimodo con indice graduale viene utilizzato un nucleo con densità
variabile. In questo caso la densità del raggio di luce è maggiore nel centro del
nucleo e diminuisce gradualmente verso il bordo del nucleo.
Modo singolo: La fibra a modo singolo è una fibra con indice a scatto e utilizza raggi
spediti con direzioni molto vicine a quella orizzontale.
Spessore delle fibre: Le fibre ottiche sono classificate in base al diametro del nucleo e del
rivestimento espressi entrambi in μm. Esistono tre tipi di connettore per le fibre ottiche. Il
connettore SC (subscriber channel) viene usato per la TV via cavo, il connettore ST
(straight-tip) viene usato per connettere dispositivi di varia natura in rete. Un terzo
connettore è il connettore MT-RJ. Applicazioni: Le fibre ottiche sono spesso usate per le
dorsali delle reti perché offrono larghezze di balda molto elevate.
Vantaggi e svantaggi: I vantaggi nell’uso di fibre ottiche rispetto agli altri casi sono
molteplici:
-. Alta capacità: Le fibre ottiche hanno una larghezza di banda (quindi velocità) molto
più ampia rispetto agli altri cavi.
-. Minore attenuazione: il segnale spedito su una fibra ottica può raggiungere distanze
notevoli (es.: con le fibre ottiche si può arrivare fino a 50 Km senza l’uso di ripetitori,
mentre con gli altri cavi servono ripetitori ogni 5 Km).
-. Immunità alle interferenze magnetiche.
-. Resistenza ai materiali corrosivi: il vetro è più resistente del rame alla corrosione.
-. Minor peso: i cavi in fibra ottica sono molto più leggeri dei cavi di rame.
-. Maggior immunità all’intercettazione: difficoltà nell’intercettare i dati che viaggiano
su una fibra ottica.
Ci sono anche svantaggi:
-. Installazione e manutenzione.
-. Propagazione unidirezionale: la propagazione del segnale può avvenire in una sola
direzione quindi se ci serve un canale bidirezionale occorrono due fibre ottiche.
-. Costo.
2. Mezzi non guidati (senza filo): I mezzi non guidati trasportano onde elettromagnetiche
senza usare un conduttore fisico. Questo tipo di comunicazione è chiamato comunicazioni
senza fili. Con i mezzi non guidati i segnali possono viaggiare dalla sorgente alla
destinazione in vari modi:
-. Propagazione terrestre: le onde radio viaggiano nella porzione più bassa dell’atmosfera
intorno alla terra. Le onde vengono emanate dalle antenne e si propagano in tutte le
direzioni seguendo la curvatura del pianeta. Maggiore è la potenza del segnale maggiore è
la distanza dove il segnale può arrivare.
-. Propagazione ionosferica: le onde radio viaggiano verso l’alto e vengono riflesse dalla
ionosfera. Questo tipo di propagazione permette di raggiungere distanze maggiori con una
minore potenza.
-. Propagazione in linea di visione diretta: i segnali vengono trasmessi in linea retta dalla
sorgente alla destinazione. Le antenne devono essere unidirezionali e orientate una verso
l’altra e abbastanza alte in modo da non essere influenzate dalla curvatura della terra.
Possiamo dividere la comunicazione senza fili in tre grosse categorie: onde radio,
microonde e raggi infrarossi.
Onde radio: Le onde elettromagnetiche che spaziano da 3 KHz a 1 GHz sono chiamate
onde radio; onde con frequenze da 1 GHz a 300 GHz sono dette microonde. Le onde radio
sono quasi sempre omnidirezionali cioè i segnali vengono spediti in tutte le direzioni, ciò
vuol dire che le antenne non devono essere allineate. L’omnidirezionalità ha però uno
svantaggio: le onde radio trasmesse da un’antenna possono subire l’interferenza dovuta alle
onde radio trasmesse da un’altra antenna che sta usando la stessa frequenza.
Applicazioni: è utilizzata per trasmissioni radiofoniche e televisive e telefoni senza fili.
32
Microonde: onde con frequenze da 1 GHz a 300 GHz. Sono onde unidirezionali. L’antenna
che riceve le microonde trasmesse devono essere allineate. Non c’è interferenza fra due
trasmissioni. La propagazione può avvenire solo fra punti che sono a vista; la curvatura della
terra e altri ostacoli non permettono la comunicazione con microonde. Applicazioni: Le
microonde vengono utilizzate per la comunicazione unidirezionale per i telefoni cellulari, i
satelliti, e le reti LAN senza fili.
Raggi infrarossi: i raggi infrarossi, con frequenze che vanno da 300 GHz a 400 THz,
possono essere usati per comunicazioni a distanze brevi. Essi non possono penetrare muri.
Applicazioni: I raggi infrarossi possono essere usati per comunicazioni a breve distanza in
un’aria chiusa e con dispositivi che comunicano in linea diretta a vista.
33
CAPITOLO 7:
COMMUTAZIONE
Per connettere in una rete un insieme di nodi terminali, che chiameremo stazioni, vengono utilizzati
dei nodi speciali interconnessi fra loro, chiamati switch. Le reti a commutazione possono essere
divise in tre categorie generali: reti a commutazione di circuito, reti a commutazione di pacchetto,
reti a commutazione di messaggio.
Reti a commutazione di circuito: Una rete a commutazione di circuito consiste in un
insieme di switch connessi da collegamenti fisici. Ogni collegamento è diviso in n canali utilizzando
il multiplexing. Occorre enfatizzare vari punti:
• La commutazione a circuito avviene nello strato fisico.
• Prima di iniziare la comunicazione, le stazioni devono effettuare una prenotazione delle
risorse che saranno usate durante la comunicazione. Queste risorse devono rimanere
dedicate a questa connessione per tutta la durata del trasferimento dei dati.
• I dati trasferiti fra due stazioni non sono divisi in pacchetti ma spediti in un flusso continuo
anche se si possono avere periodi di silenzio (assenza di dati).
• Non c’è bisogno di indirizzamento durante il trasferimento dei dati.
La comunicazione in una rete a commutazione di circuito richiede tre fasi:
™ Instaurazione della connessione
Prima che due stazioni possano comunicare, deve essere instaurato un circuito. Le stazioni
sono normalmente connesse attraverso linee dedicate agli switch, quindi la fase di
connessione serve a creare dei canali dedicati fra gli switch.
™ Trasferimento dei dati
Dopo l’instaurazione della connessione le due stazioni possono trasferire dati.
™ Chiusura della connessione
Quando una delle stazioni di una connessione vuole terminare la connessione, la stazione
spedisce un segnale che raggiunge tutti gli switch coinvolti in modo tale che essi possano
liberare le risorse riservare alla connessione.
In alcuni casi le reti a commutazione di circuito non sono così efficienti in quanto le risorse dedicate
a una connessione sono riservate alla connessione per la sua intera durata. Sebbene l’efficienza
non sia massima, il ritardo in questo tipo di rete è minimo. Durante il trasferimento i dati non
vengono fermati in ogni switch. Quindi non c’è tempo d’attesa negli switch, e il ritardo totale è
dovuto al tempo necessario per compiere le tre fasi.
Reti a commutazione di pacchetto: Se due stazioni di una rete devono comunicare devono
scambiarsi dei messaggi. Se tali messaggi devono passare attraverso una rete a commutazione di
pacchetto essi devono essere suddivisi in pacchetti di dimensione fissa o variabile. La grandezza
del pacchetto è determinata dalla rete e dal protocollo che ne gestisce il funzionamento. Nella
commutazione di pacchetto non c’è prenotazione delle risorse. Le risorse vengono utilizzate in
base alla domanda. In una rete a datagram ogni pacchetto è gestito indipendentemente da tutti gli
altri, anche se il pacchetto fa parte di una singola trasmissione la rete lo tratta come singola unità di
dati. In questo approccio i pacchetti vengono chiamati datagram.
La figura precedente mostra l’approccio a datagram per la consegna di quattro pacchetti dalla
stazione A alla stazione B. Gli switch di una rete a commutazione di datagram sono chiamati
router. In questo esempio i quattro datagram appartengono allo stesso messaggio ma viaggiano su
cammini diversi per raggiungere la propria destinazione. Quest’approccio può causare la consegna
dei datagram alla destinazione in ordine diverso da quello di spedizione oppure può capitare che i
34
pacchetti si perdano prima di arrivare a destinazione o che vengano eliminati per mancanza di
risorse. Comunque nella maggior parte dei protocolli sono gli strati superiori dell’architettura di rete
ad avere la responsabilità di riordinare i datagram e di rispedire i datagram mancanti, prima di
passare i dati all’applicazione di destinazione.
Le reti a commutazione di datagram sono dette reti senza connessioni in quanto non esiste una
fase di instaurazione della connessione, né una famedi chiusura della connessione.
Allora sorge la domanda: come fanno i pacchetti a essere instradati verso la loro destinazione? In
una rete a commutazione di datagram ogni switch ha una tavola di routing che contiene le
informazioni necessarie per l’instradamento. Per ogni possibile destinazione la tavola di routing
specifica quale è la porta di output verso la quale lo switch deve inoltrare i pacchetti per quella
destinazione. Queste tavole vengono aggiornate periodicamente. In pratica ogni pacchetto
contiene un’intestazione che contiene l’indirizzo di destinazione del pacchetto. Tale indirizzo
rimane invariato durante l’intero viaggio del pacchetto all’interno della rete.
La rete a
commutazione di datagram, quindi, è più efficiente della rete a commutazione di circuito, in quanto
le risorse vengono allocate solo quando ci sono pacchetti da trasferire. Altra cosa da dire sulle reti
a commutazione di pacchetto è che i ritardi possono essere maggiori di quelli in una rete a circuito
virtuale in quanto ogni pacchetto potrebbe subire un ritardo negli switch prima di essere inoltrato.
Reti a circuito virtuale: è una via di mezzo fra una rete a commutazione di circuito e una rete
a commutazione di pacchetto. Ha caratteristiche in comune con entrambe:
1. Come nella rete a commutazione di circuito ci sono le fasi di instaurazione ed eliminazione
della connessione, oltre alla fase di trasferimento dati.
2. Le risorse possono essere allocate durante la fase di instaurazione come avviene nelle reti
a commutazione di circuito oppure in base alla domanda come avviene nelle reti a
commutazione di pacchetto.
3. Come nelle reti a datagram, i dati sono divisi in pacchetti e ogni pacchetto contiene un
indirizzo nell’intestazione. Tuttavia, quest’indirizzo ha un valore locale cioè identifica il
prossimo switch.
4. Come in una rete a commutazione di circuito tutti i pacchetti seguono lo stesso percorso che
è quello stabilito durante la fase di instaurazione della connessione.
In una rete a circuito virtuale vengono utilizzati due tipi di indirizzamento: un indirizzamento globale
e uno locale (identificatore di circuito virtuale). L’indirizzo globale è un indirizzo univoco che
identifica qualsiasi nodo della rete indipendentemente dalla grandezza della rete. L’identificatore
di circuito virtuale (VCI) invece viene usato per trasferire i dati. Quindi diversamente dall’indirizzo
globale, un VCI è un numero che ha un significato solo localmente cioè relativamente a ogni
coppia di switch. Un VCI viene usato per identificare i pacchetti appartenenti a una connessione
tra due switch. Quando un datagram arriva in uno switch, l’intestazione del datagram contiene un
VCI che permette di inoltrare correttamente il datagram.
Le tre fasi:
1. Nella fase di instaurazione del circuito la sorgente e la destinazione utilizzano i loro indirizzi
globali per aiutare gli switch a costruire le informazioni di routing necessarie per la
connessione. Nella fase di instaurazione del circuito, uno switch crea una riga nella tavola di
routing per il circuito virtuale della connessione richiesta.
Per esempio supponiamo che la sorgente A voglia creare un circuito virtuale verso la
destinazione B. La sorgente A deve spedire una richiesta e la destinazione B deve spedire
una risposta.
35
Richiesta:
a) La sorgente A spedisce un pacchetto di richiesta connessione allo switch 1.
b) Lo switch 1 riceve questa richiesta. Lo switch crea una riga nella tavola di routing per il
circuito virtuale relativo a questa connessione; tuttavia a questo punto esso è in grado di
riempire solo tre delle quattro informazioni necessarie, infatti lo switch sa che i pacchetti che
arrivano dalla porta 1 con VCI 14 devono essere inoltrati sulla porta 3, ma non sa ancora
con quale VCI. Il pacchetto di richiesta viene inviato sulla porta 3 verso lo switch 2.
c) Lo switch 2 riceve il pacchetto di richiesta, crea una riga nella tavola di routing e la
riempie parzialmente con la porta di input (porta 1), il VCI di input (66) e la porta di output
(porta 3). La richiesta viene quindi inoltrata allo switch 3.
d) Lo switch 3 riceve il pacchetto di richiesta, crea una riga nella tavola di routing e la
riempie parzialmente con la porta di input (porta 2), il VCI di input (2) e la porta di output
(porta 3). La richiesta viene quindi inoltrata alla destinazione.
e) La destinazione riceve il pacchetto di richiesta. Se B decide di accettare la richiesta di
connessione fatta da A, allora deciderà un valore VCI con il quale identificare i pacchetti
relativi a questa connessione. Nell’esempio viene utilizzato il valore 77. Questo valore
permette a B di distinguere i pacchetti che arrivano da A da quelli che arrivano da altre
connessioni.
Risposta:
a) La destinazione spedisce un pacchetto di risposta allo switch 3. Questo pacchetto di
risposta contiene gli indirizzi globali della sorgente e della destinazione in modo tale che lo
switch possa capire a quale connessione si fa riferimento. Il pacchetto di risposta contiene
anche il numero VCI scelto da B (77) per identificare il circuito virtuale. Lo switch 3 usa
questo numero per completare la riga nella propria tavola di routing.
b) Lo switch 3, a questo punto, invia il pacchetto d risposta allo switch 2., specificando il
valore VCI di input che lo switch 3 ha precedentemente deciso (22). Lo switch 2 userà
questo valore per completare le informazioni della propria tavola di routing.
c) Lo switch 2 spedisce il pacchetto di risposta allo switch 1, specificando il valore di VCI di
input che lo switch 2 ha precedentemente scelto (66) nella fase di richiesta. Lo switch 1
userà questo valore per completare le informazioni della propria tavola di routing.
d) Lo switch 1 spedisce il pacchetto di risposta alla sorgente, specificando il valore VCI
scelto per identificare questa connessione durante la fase di richiesta.
e) La sorgente usa quest’ultimo VCI per spedire i pacchetti di dati alla destinazione B.
2. Nella fase di eliminazione del circuito la sorgente e la destinazione chiedono agli switch di
cancellare le informazioni relative alla connessione. Quando la sorgente A spedisce tutti i
dati a B, spedisce un pacchetto speciale che richiede la chiusura del circuito virtuale. La
destinazione risponde con un pacchetto di conferma chiusura e tutti gli switch coinvolti in
quel circuito virtuale cancellano la riga relativa a esso.
3. Il trasferimento dei dati avviene tra queste due fasi. Per trasferire un pacchetto da una
sorgente alla destinazione, tutti gli switch devono avere nella tavola di routing una riga
relativa al circuito virtuale corrispondente alla connessione fra la sorgente e la destinazione.
36
La figura precedente mostra un pacchetto in arrivo dalla porta 1 con un VCI che vale 14.
Quando il pacchetto arriva, lo switch consulta la tavola di routing e scopre che i pacchetti in
arrivo dalla porta 1 con VCI uguale a 14 devono essere inoltrati sulla porta 3 e il VCI deve
essere cambiato in 22. Il pacchetto in arrivo quindi viene inviato alla porta 3 e il suo VCI
viene cambiato in 22.
Efficienza: Come già detto in precedenza la prenotazione delle risorse in una rete a circuito
virtuale può essere fatta sia durante la fase di instaurazione del circuito sia dinamicamente. Nel
primo caso il ritardo di ogni pacchetto sarà uniforme, mentre nel secondo caso ogni pacchetto può
subire un ritardo variabile.
Struttura di uno switch: Ora discuteremo della struttura di uno switch sia per le reti a circuito
virtuale sia per le reti a commutazione di datagram.
• Struttura di uno switch per reti a circuito virtuale: La tecnologia attuale per gli
switch di una rete a circuito virtuale utilizza switch a divisione di spazio e switch a divisione
di tempo.
Switch a divisione di spazio: I circuiti sono separati fisicamente cioè ognuno occupa il
proprio spazio. Uno switch a crossbar connette n input a m output in una griglia usando dei
connettori elettronici (transistor) in ogni punto di incrocio. Quindi per connettere n input a m
output occorrono n x m punti di incrocio. Uno switch del genere sarebbe difficile da costruire
e anche molto inefficiente perché meno del 25% dei punti di incrocio vengono usati
contemporaneamente.
Uno switch a più livelli, invece, combina vari switch a crossbar in più livelli, normalmente
tre. In pratica vengono utilizzati dei crossbar più piccoli che vengono organizzati in livelli (tre
di solito). Ogni punto di incrocio del livello centrale è collegato a tutte le uscite del primo
livello e a tutte le entrate del terzo livello. Per progettare uno switch a tre livelli dobbiamo
seguire i seguenti passi:
a) Dividiamo le N linee di input in gruppi, ognuno di n linee. Per
ogni gruppo utilizziamo un crossbar di grandezza n x k, dove k è il numero di crossbar
del livello centrale. In altre parole il primo livello è costituito da N/n crossbar con n x k
punti di incrocio.
b) Nel livello centrale usiamo k crossbar di grandezza (N/n) x (N/n).
c) Nel terzo livello utilizziamo N/n crossbar di grandezza k x n.
Pertanto il numero totale di punti di incrocio è:
N/n (n * k) + k (N/n * N/n) + N/n (n * k) = 2 kN + k(N/n)2
37
Esempio: Si progetti uno switch 200 x 200 a tre livelli con k = 4, n = 20
Nel primo livello abbiamo N/n, cioè 10 crossbar, ognuno di grandezza 20 x 4, nel secondo
livello abbiamo 4 crossbar, ognuno di grandezza 10 x 10. Nel terzo livello abbiamo 10
crossbar, ognuno di grandezza 20 x 4. Il numero totale di punti di incrocio è 2kN + k(N/n)2 ,
cioè 2000. Questo numero equivale al 5% del numero di punti di incrocio in un crossbar
singolo (200 x 200 = 40000).
La riduzione drastica del numero di punti di incrocio si paga però con una caratteristica
negativa: uno switch a più livelli è bloccante. L’idea di base di uno switch a più livelli è quella
di condividere i punti di incrocio del livello centrale. Questa condivisione può essere la causa
della indisponibilità di risorse se molti utenti richiedono la connessione
contemporaneamente. Quando un input non può essere connesso a un output perché i punti
di incrocio necessari sono già utilizzati, lo switch blocca la richiesta di connessione. Clos ha
studiato un modo per avere uno switch non bloccante: il livello centrale di uno switch a tre
livelli deve avere almeno 2n – 1 switch, cioè k deve essere >= 2n – 1. Si noti che anche con
questo vincolo il numero totale di punti di incrocio è più piccolo di N2; seguendo il criterio di
Clos, infatti, e scegliendo n = (N/2)1/2, il numero di punti di incrocio è proporzionale a N3/2.
Uno switch a più livelli che usa il criterio di Clos, comunque necessita di un elevato numero
di punti di incrocio.
Switch a divisione di tempo: Gli switch a divisione di tempo utilizzano il multiplexing a
divisione di tempo (TDM). La tecnologia più usata è quella chiamata scambio di intervalli
temporali (TSI).
La figura precedente mostra un sistema che connette quattro linee di input a quattro linee di
output. Si immagini che ogni linea di input voglia spedire dati a una linea di output in accordo
al seguente schema:
1Æ3
2Æ4
3Æ1
4Æ2
Tale figura mostra l’utilizzo di un multiplexer TDM e un demultiplexer TDM e un TSI che è
composto da una memoria ad accesso casuale (RAM) che ha varie locazioni di memoria. Il
numero di locazioni di memoria è uguale al numero di input. La RAM viene riempita con i
dati spediti nell’ordine in cui sono stati ricevuti. Gli stessi dati vengono inoltrati verso le
uscite in un ordine che è deciso dall’unità di controllo del TSI.
Switch a divisione di tempo e spazio: Abbiamo visto che sia lo switch a divisione di spazio
sia lo switch a divisione di tempo hanno dei vantaggi e svantaggi:
Switch a divisione di spazio
Vantaggi: la comunicazione è istantanea
Svantaggi: è il numero di punti di incrocio necessari affinché lo switch non sia bloccante.
38
Switch a divisione di tempo
Vantaggi: non richiede punti di incrocio
Svantaggi: nel caso del TSI, la gestione di ogni connessione crea ritardi (i dati devono
essere prima scritti nella RAM e poi letti dalla RAM per poter essere inoltrati.
È possibile quindi combinare queste due tecnologie per ottenere il meglio. Il risultato sono gli
switch tempo-spazio-tempo (TST).
• Struttura di uno switch per reti a commutazione di datagram: A differenza
dello switch per reti a di circuito, lo switch per reti a commutazione di datagram ha quattro
componenti: porte di input, porte di output, unità di controllo, congegno di commutazione.
Porte di input: Esegue le funzioni dello strato fisico e dello strato di collegamento per
operare la commutazione di pacchetto. Il segnale ricevuto viene trasformato nei
corrispondenti bit. Il pacchetto viene estratto dal frame ricevuto, vengono rilevati e corretti gli
errori, a questo punto il pacchetto è pronto per essere instradato dallo strato di rete. La porta
di input ha anche dei buffer (code) per memorizzare temporaneamente il pacchetto prima
che esso venga inoltrato verso il congegno di commutazione.
Porte di output: Esegue le stesse funzioni di una porta di input ma in ordine inverso. Prima
di tutto i pacchetti in uscita vengono inseriti nelle code, quindi vengono incapsulati in un
frame e infine i bit del frame vengono trasformati in segnali da spedire sulla linea di uscita.
Unità di controllo.
Congegno di commutazione.
39
PARTE III
CAPITOLO 9:
STRATO DI COLLEGAMENTO
RILEVAMENTO E CORREZZIONE
DEGLI ERRORI
I dati possono subire delle alterazioni durante la trasmissione. Molte applicazioni necessitano di
meccanismi per la rilevazione e correzione di errori.
Introduzione: Le interferenze possono cambiare la forma del segnale, causando
un’interpretazione errata dei bit da parte del ricevitore. In un errore singolo, uno 0 viene cambiato
in un 1 oppure un 1 viene cambiato in uno 0. In un errore a raffica, più bit consecutivi vengono
interpretati in modo errato.
Errore singolo:
In un errore singolo un solo bit dell’unità di dati viene alterato.
Errore a raffica:
In un errore a raffica due o più bit dell’unità di dati vengono cambiati. La lunghezza dell’errore a
raffica è misurata dal primo bit alterato all’ultimo bit alterato, è possibile che fra questi bit ci siano
bit ricevuti correttamente. Gli errori a raffica sono più probabili degli errori singoli.
Ridondanza: Per rilevare o correggere gli errori, occorrono dei bit aggiuntivi (ridondanti) da spedire
con i dati. Questi bit addizionali sono aggiunti dal mittente e rimossi dal destinatario.
Correggere gli errori è molto più difficile che rilevarli. Infatti per rilevare errori, abbiamo bisogno
solo di sapere se uno o più errori si sono verificati. Per correggere gli errori, invece, dobbiamo
sapere esattamente il numero di bit che sono stati alterati e soprattutto la loro posizione all’interno
dell’unità di dati. Il ricevitore può, quindi, utilizzare i bit ridondanti per localizzare eventuali errori
avvenuti durante la trasmissione. Questo approccio è possibile quando il numero di errori è piccolo.
Un’alternativa alla correzione è la ritrasmissione; in pratica il ricevitore usa i bit ridondanti solo per
rilevare la presenza di errori, mentre per correggerli chiede al mittente di rispedire i dati. I bit
ridondanti vengono aggiunti utilizzando vari schemi di codifica. Possiamo dividere le codifiche in
due grandi categorie: codifiche a blocchi e codifiche convoluzionali.
Codifica a blocchi: Nella codifica a blocchi i dati vengono divisi in blocchi ognuno di un certo
numero k di bit. Ognuno di questi blocchi viene chiamato parola sorgente. Per ogni parola
sorgente vengono aggiunti r bit addizionali (ridondanti), ottenendo dei blocchi di lunghezza n = k + r.
Questi blocchi sono detti parole codice. Poiché la lunghezza delle parole sorgenti è k, il numero
massimo di parole sorgenti è 2k ; analogamente, poiché la lunghezza delle parole codice è n, allora
il numero massimo di parole codice è 2n. Poiché n>k il numero di parole codice è maggiore delle
parole sorgenti.
40
Rilevamento degli errori: Il mittente crea la parola codice partendo dalla parola sorgente e
applicando le regole di codifica. Ogni parola codice spedita dal mittente può cambiare durante la
trasmissione per effetto degli errori. Se la parola codice ricevuta è uguale a una parola codice
valida, essa viene accettata e la corrispondente parola sorgente viene recuperata. Se la parola
codice ricevuta non è valida, allora viene eliminata. Se una parola codice spedita viene cambiata in
un’altra parola codice valida gli errori non vengono rilevati.
Esempio: Assumiamo che k=2 n=3. La tabella sottostante mostra una particolare codifica,
elencando tutte le possibili parole sorgente e le relative parole codice.
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
000
011
101
110
Stabilito che la parola sorgente O1 è codificata con la parola codice 011, assumiamo che il mittente
spedisca tale parola codice al ricevitore. Consideriamo, quindi, i seguenti casi:
1. Il ricevitore riceve 011. Questa è una parola codice valida. Il ricevitore sa che questa parola
codice codifica la sequenza 01, e pertanto accetta 01 come dati ricevuti.
2. Se la parola codice viene alterata durante la trasmissione e il ricevitore riceve 111, il
ricevitore sa che questa non è una parola codice valida. Quindi il ricevitore elimina i dati
ricevuti.
3. Se la parola codice viene alterata durante la trasmissione, e il ricevitore riceve 000, questa
sequenza di bit è una parola codice valida che corrisponde alla parola sorgente 00. Pertanto
il ricevitore accetta erroneamente 00 come dati ricevuti.
In questo caso, quindi, è possibile rilevare la presenza di un solo errore, ma se ci sono più errori
questi non vengono rilevati. Inoltre non è possibile correggere errori.
Esempio: Riprendendo l’esempio precedente, al posto di un solo bit ridondante ne vengono
aggiunti tre stavolta. Quindi la parola codice sarà costituita dai 2 bit della parola sorgente e dai 3 bit
ridondanti. Questa è la tabella:
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
00000
01011
10101
11110
Supponiamo che il mittente voglia spedire la parola sorgente 01. Il mittente consulta la tavola delle
parole codice e ottiene la parola codice 01011. Tale parola codice viene spedita. Per effetto degli
errori il ricevitore riceve 01001 (errore nel secondo bit da destra). Il ricevitore si accorge che questa
parola codice non è valida, capisce quindi che ci sono stati degli errori. Il ricevitore assume che ci
sia 1 solo bit alterato e usa la seguente strategia per capire quale è la parola sorgente spedita dal
mittente:
1. La parola codice ricevuta, 01001, viene confrontata con la prima parola codice della tavola,
00000. Poiché queste due sequenze di bit differiscono in due posizioni, 00000 non può
essere la parola codice spedita.
2. Lo stesso ragionamento può essere fatto per la terza e per la quarta parola codice della
tavola.
3. La parola codice spedita deve essere la seconda della tavola, 01011, che differisce dalla
parola codice ricevuta, 01001, in una sola posizione (quella in cui si è verificato l’errore).
Pertanto il ricevitore assume che la parola spedita sia 01011 e accetta 01 come dati ricevuti.
In questo caso, quindi, è possibile correggere un errore, ma se ci sono più errori avviene una
decodifica errata.
41
Correzione degli errori: Per la correzione di errori, quindi, occorre inserire un numero maggiore di
bit ridondanti.
Distanza di Hamming: La distanza di Hamming fra due parole della stessa lunghezza è il numero
di differenze fra i bit nella stessa posizione. Denoteremo la distanza di Hamming fra due parole x e
y con d(x,y).
Esempio:
1. La distanza di Hamming fra 000 e 011 è d(000,011)=2
2. La distanza di Hamming fra 10101 e 11110 è d(10101,11110)=3
Distanza di Hamming minima: La distanza di Hamming minima è il più piccolo valore fra le
distanze di Hamming di tutte le possibili coppie di parole. La denoteremo con dmin
Esempio: Trovare la distanza di Hamming minima della seguente tabella 9.1
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
000
011
101
110
d(000,011)=2
d(000,101)=2
d(000,110)=2
d(011,101)=2
d(011,110)=2
d(101,110)=2
Pertanto la distanza di Hamming minima è dmin = 2
Esempio: Trovare la distanza di Hamming minima della seguente tabella 9.2
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
00000
01011
10101
11110
d(00000,01011)=3
d(00000,10101)=3
d(00000,11110)=4
d(01011,10101)=4
d(01011,11110)=3
d(10101,11110)=3
Pertanto la distanza di Hamming minima è dmin = 3
Distanza di Hamming minima per il rilevamento degli errori: Per garantire il rilevamento di un
numero di errori minore o uguale a s, occorre un codice con distanza di Hamming minima
dmin >= s+1. Nella Tabella 9.1 abbiamo visto che la distanza di Hamming minima è dmin = 2. Questo
codice garantisce il rilevamento di un solo errore. Per esempio, se la parola codice spedita è 101 e
si verifica un solo errore di trasmissione, la parola codice ricevuta non corrisponderà a nessuna
parola codice valida. Se si verificano invece due errori, la parola codice ricevuta potrebbe essere
uguale a una delle parole codice valide e quindi il ricevitore potrebbe non accorgersi degli errori.
42
Nella Tabella 9.2, invece, abbiamo visto che la distanza di Hamming minima è dmin = 3. Questo
codice garantisce il rilevamento di uno o due errori. Come prima, se la parola codice spedita
contiene uno o due errori allora la parola codice ricevuta non corrisponde a nessuna parola codice
valida, invece se ci sono stati tre errori nella spedizione, la parola codice spedita potrebbe essere
trasformata in una parola codice valida e quindi il ricevitore potrebbe non essere in grado di
accorgersi degli errori.
Distanza di Hamming minima per la correzione degli errori: Per garantire la correzione fino a t
errori, la distanza di Hamming minima del codice che si utilizza deve essere dmin >= 2t+1. Per
esempio, se uno schema di codifica ha una distanza di Hamming dmin = 4 possiamo rilevare al
massimo 3 errori ma ne possiamo correggere 1 solo.
Codici lineari: La maggior parte dei codici utilizzati in pratica fanno parte di un particolare
sottoinsieme dei codici a blocchi che viene chiamato insieme di codici lineari. In un codice lineare
(a blocchi), l’operazione di XOR fatta su due parole codice valide dà come risultato un’altra parola
codice valida.
Distanza di Hamming minima per i codici lineari: Essa è data dal numero di 1 nella parola
codice diversa da quella con tutti 0 e che ha il minimo numero di 1.
Esempio: Trovare la distanza di Hamming minima in queste tabelle
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
000
011
101
110
In questa tabella le parole codice diverse da 000 hanno tutte un numero di 1 pari 2, pertanto
dmin = 2
PAROLA SORGENTE
00
01
10
11
PAROLA CODICE
00000
01011
10101
11110
In questa tabella le parole codice diverse da 00000 hanno un numero di 1 pari a 3,3 e 4, pertanto
dmin = 3
Alcuni codici lineari a blocchi:
1. Codice a parità: In questo codice parole sorgenti di k bit vengono trasformate in parole
codice di n = k + 1 bit. Il bit addizionale viene chiamato bit di parità, ed è selezionato in
modo tale da far si che il numero totale di 1 nella parola codice sia sempre pari. La distanza
di Hamming minima per questi codici è dmin = 2, pertanto un codice del genere può rilevare
al massimo un errore e non è in grado di correggere errori.
PAROLA SORGENTE
0000
0001
0010
0011
0100
0101
0110
0111
PAROLA CODICE
00000
00011
00101
00110
01001
01010
01100
01111
PAROLA SORGENTE
1000
1001
1010
1011
1100
1101
1110
1111
PAROLA CODICE
10001
10010
10100
10111
11000
11011
11101
11110
43
2. Codice con parità bidimensionale: Un raffinamento della tecnica basata sul controllo di
parità è il controllo di parità bidimensionale. In questo metodo la parola sorgente è
organizzata in una tabella (righe e colonne).
1
1
0
0
0
1
0
1
1
1
0
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
0
0
0
1
1
1
1
1
0
1
1
0
1
1
In questa figura i dati da spedire, 4 gruppi di 7 bit, sono stato organizzati in una tabella 4 x 7.
Per ogni riga e per ogni colonna viene calcolato 1 bit di controllo di parità. Inoltre il bit di
parità in basso a destra è un bit di parità calcolato su tutti i bit di dati (è uguale alla parità
calcolata sia sulla colonna dei bit di parità, sia alla parità sulla riga di parità). Il controllo di
parità bidimensionale può rilevare fino a 3 errori e si può correggere al massimo un errore.
ERRORE
INDIVIDUATO
ERRORE NON
INDIVIDUATO MA
RILEVATO
ERRORE INDIVIDUATO MA
RILEVATO
3. Codici di Hamming: Questi codici sono stati originariamente progettati con dmin = 3, e
quindi possono rilevare fino a 2 errori e correggere un singolo errore. Esaminiamo la
relazione fra n e k per un codice di Hamming. Per costruire un codice di Hamming
scegliamo un intero m >= 3. I valori di n e k vengono calcolati a partire da m:
n = 2m – 1
k=n–m
dove m >= 3
Ad esempio se scegliamo m = 3, abbiamo n = 7 e k = 4, cioè un codice di Hamming C(7,4)
con dmin = 3.
44
La tabella sottostante (9.4) mostra questo codice:
PAROLA SORGENTE PAROLA CODICE
PAROLA SORGENTE PAROLA CODICE
0000
0000000
1000
1000110
0001
0001101
1001
1001011
0010
0010111
1010
1010011
0011
0011010
1011
1011100
0100
0100011
1100
1100101
0101
0101110
1101
1101000
0110
0110100
1110
1110010
0111
0111001
1111
1111111
Una copia di 4 bit della parola sorgente è data in input a un generatore che crea 3 bit di
controllo r0, r1, r2 come mostrato di seguito:
r0 = a2 + a1 + a0
r1 = a3 + a2 + a1
r2 = a1 + a0 + a3
Per esempio la parola sorgente 0011 viene trasformata nella seguente parola codice:
a0 = 1
a1 = 1
a2 = 0
a3 = 0
r0 = a2 + a1 + a0 = 0 + 1 + 1 = 0
r1 = a3 + a2 + a1 = 0 + 0 + 1 = 1
r2 = a1 + a0 + a3 = 1 + 1 + 0 = 0
Quindi la parola codice corrispondente è:
0011010
E così anche le altre parole codice.
• Vengono spediti a0, a1, a2, a3, r0, r1, r2
• Vengono ricevuti b0, b1, b2, b3, q0, q1, q2
Il modulo di controllo del ricevitore calcola i 3 bit della sindrome (s2s1s0) sommando, per ogni
bit della sindrome, 4 dei 7 bit ricevuti:
s0 = b2 + b1 + b0 + q0
s1 = b3 + b2 + b1 + q1
s2 = b1 + b0 + b3 + q2
Ovviamente le equazioni usate sono le stesse che sono state usate dal generatore, lato
mittente, con il corrispondente bit di parità aggiunto ad ognuno delle equazioni. In questo caso
la sindrome può assumere otto valori (da 000 a 111), che rappresentano otto diverse condizioni.
Queste condizioni identificano o un’assenza di errore o la posizione di un singolo errore come
mostrato nella tabella sottostante (9.5):
000
001
010
011
100
101
110
111
Sindrome
Nessuno
q0
q1
b2
q2
b0
b3
b1
Errore
Nel caso non ci siano stati errori o nel caso in cui gli errori si siano verificati sui bit di parità (qo,
q1, q2) il modulo di decodifica non effettua nessun cambiamento, ma estrae semplicemente i bit
di dati b3, b2, b1, b0. Negli altri quattro casi invece, uno dei quattro bit deve essere cambiato
per trovare la parola sorgente corretta. Rivedendo la tabella, quindi, se fosse stato q0 ad essere
alterato per effetto di un errore, l’unico bit della sindrome che vale 1 è s0 e pertanto la sindrome
vale 001. Se l’errore è nel bit b2 allora i bit s1 e s0 valgono 1 pertanto la sindrome vale 011.
Se guardiamo la tabella superiore e prendiamo la parola sorgente 0111 questa abbiamo visto
che diventa 0111001. Ora se la parola codice ricevuta è 0011001, la sindrome è 011 perché
b3=0
b2=0
b1=1
b0=1
q2=0
q1=0
q0=1
s0 = b2 + b1 + b0 + q0 = 0 + 1 + 1 + 1 = 1
s1 = b3 + b2 + b1 + q1 = 0 + 0 + 1 + 0 = 1
s2 = b1 + b0 + b3 + q2 = 1 + 1 + 0 + 0 = 0
quindi come si evince dalla tabella 9.5, c’è un errore nel bit b2. Dopo aver cambiato il valore di
questo bit da 0 a 1, la parola sorgente ricevuta è 0111.
45
Prestazioni: Un codice di Hamming può correggere un solo errore o rilevare due errori.
Tuttavia c’è un modo per rilevare errori a raffica.
L’idea è quella di distribuire l’effetto di un errore a raffica su più parole codice in modo tale che
una parola codice sia soggetta ad un solo errore. Sappiamo che quando spediamo dei dati,
normalmente spediamo dei pacchetti di dati. Quindi per rendere un codice di Hamming
resistente a errori a raffica di grandezza N, occorre costruire N parole codice a partire dal
pacchetto di dati. Quindi anziché spedire le parola codice una alla volta, organizziamo le parole
codice in una tavola e spediamo i bit di questa tavola una colonna per volta.
Codici ciclici: Sono dei codici lineari a blocchi con una particolare proprietà. In un codice
ciclico, facendo lo scorrimento (shift) ciclico di una parola codice si ottiene un’altra parola
codice. Ad esempio, se 1011000 è una parola codice, allora anche 0110001, che è stata
ottenuta con un shift a sinistra di una posizione, è una parola codice.
Codici CRC (Cyclic Redundancy Check):
PAROLA SORGENTE
0000
0001
0010
0011
0100
0101
0110
0111
PAROLA CODICE
0000000
0001011
0010110
0011101
0100111
0101100
0110001
0111010
PAROLA SORGENTE
1000
1001
1010
1011
1100
1101
1110
1111
PAROLA CODICE
1000101
1001110
1010011
1011000
1100010
1101001
1110100
1111111
La parola sorgente ha k bit, la parola codice ha invece n bit. Nel modulo di codifica, alla parola
sorgente vengono aggiunti n-k bit con valore 0 nella parte di destra. La parola risultante da tale
operazione viene data in input al generatore. Il generatore usa un divisore di grandezza n–k+1,
che è conosciuto sia dal mittente che dal ricevitore. Il generatore divide la parola che riceve in
input per il divisore. Il quoziente della divisione viene eliminato. Il resto della divisione viene
aggiunto alla fine della parola sorgente originaria, per ottenere la parola codice da spedire. Il
ricevitore riceve la parola codice. Nella trasmissione è possibile che tutto sia andato bene
oppure che si siano verificati degli errori. Il modulo di decodifica del ricevitore invia una copia
degli n bit ricevuti al modulo di controllo che è uguale al generatore. Esso effettua la divisione
dei bit di input per il divisore e dà in output gli n-k bit che rappresentano il resto della divisione;
tali bit costituiscono la sindrome. Se la sindrome è fatta di tutti 0 allora non ci sono stati errori e i
k bit più a sinistra della parola codice vengono accettati come parola sorgente, altrimenti i dati
ricevuti vengono ignorati, cioè viene rilevata la presenza di errori.
46
MODULO DI CODIFICA
MODULO DI DECODIFICA
Somme di controllo: Le somme di controllo vengono utilizzate da molti protocolli di rete,
ma principalmente nello strato delle applicazioni, non nello strato di collegamento. Il
funzionamento è molto semplice. Supponiamo che i nostri dati siano rappresentati da una lista
di numeri ognuno rappresentabile con 4 bit (quindi compreso tra 0 e 15), che vogliamo spedire
da una sorgente ad una destinazione. Oltre a spedire i numeri spediamo anche la somma dei
numeri.
Esempio: insieme dei numeri da spedire è 7, 11, 12, 0, 6 spediremo 7, 11, 12, 0, 6, 36.
Il ricevitore somma i numeri che riceve tranne l’ultimo e confronta il valore della somma con
l’ultimo numero. Se i due valori sono uguali allora non ci sono stati errori e accetta i numeri
ricevuti, eliminando l’ultimo numero (somma); altrimenti ci sono stati errori e i dati non vengono
accettati.
47
Variante: Anziché spedire la somma possiamo spedire il negativo della somma cosicché il
ricevitore somma tutti i numeri ricevuti e se il risultato è 0 allora vuol dire che non ci sono errori;
altrimenti errori.
Esempio: insieme dei numeri da spedire è 7, 11, 12, 0, 6 spediremo 7, 11, 12, 0, 6, -36.
Complemento a uno: Il metodo usato precedentemente ha un grosso difetto. I dati originali
possono essere scritti tutti come un numero a 4 bit; la somma però può essere molto più
grande. Una soluzione è data dal fatto che si può utilizzare l’aritmetica in complemento a uno.
In questa aritmetica, quando un numero ha più di n bit, i bit più a sinistra oltre l’n-esimo
vengono addizionati agli n bit più a destra; i numeri negativi, invece vengono rappresentati
invertendo tutti i bit della rappresentazione del valore assoluto del numero, che equivale a
sottrarre il valore assoluto del numero da 2n-1.
Esempio: Supponiamo di dover rappresentare 21 con la notazione complemento a uno
utilizzando solo 4 bit. Il numero 21 in binario è rappresentato con 5 bit: 10101. Pertanto occorre
sommare ai primi 4 bit partendo da destra, 0101, il quinto bit, 1.
0101 +
1=
-------0110
che equivale a 0*23 + 1*22 + 1*21 + 0*20 = 4 + 2 = 6
Supponiamo invece di dover rappresentare -6 con la notazione complemento a uno utilizzando
solo 4 bit. Il valore assoluto, 6, in binario è 0110; invertendo tutti i bit otteniamo la
rappresentazione in complemento a uno -6: 1001 che equivale a
1*23 + 0*22 + 0*21 + 1*20 = 8 + 1 = 9
Allo stesso risultato saremmo arrivati sottraendo da 24 – 1 = 15 il valore assoluto di -6:
15 – 6 = 9
48
CAPITOLO 10:
FUNZIONI DI CONTROLLO NELLO
STRATO DI COLLEGAMENTO
Le funzioni di controllo dello strato di controllo includono il framing, il controllo degli errori, il
controllo del flusso e i protocolli che permettono di trasmettere in modo affidabile i frame tra i nodi
della rete.
Framing: Lo strato fisico si occupa della sincronizzazione per assicurare che il mittente e il
destinatario utilizzino gli stessi intervalli di tempo per rappresentare i bit tramite il segnale. Lo strato
di collegamento, invece, deve organizzare i bit in gruppi chiamati frame, in modo tale che ogni
frame sia distinguibile da ogni altro frame. Il framing si occupa del problema di separare un frame
da spedire da una particolare sorgente a una particolare destinazione, da tutti gli altri frame.
Normalmente il messaggio che il mittente deve spedire alla destinazione, viene suddiviso in vari
frame. Uno dei motivi di questa suddivisione è quello di limitare la dimensione dei singoli frame. I
frame possono avere dimensione fissa o variabile. Nel framing a dimensione fissa, non c’è
bisogno di utilizzare delle delimitazioni per separare i frame; la dimensione stessa del frame può
essere usata come delimitatore. Es.: Reti ATM con frame di dimensione fissa chiamati celle.
Nel framing a dimensione variabile, occorre segnalare in qualche modo la fine di un frame e
l’inizio di un frame successivo. Vengono utilizzati per questo motivo due approcci:
• Protocolli orientati ai caratteri (byte):
I dati vengono organizzati in caratteri di 8 bit. Quindi anche l’intestazione, che contiene
l’indirizzo della sorgente e altre informazioni di controllo, la coda, che contiene i bit
ridondanti per la rilevazione e correzione di errori, sono anch’esse organizzate in gruppi di 8
bit. Dunque, per separare un frame dal successivo, viene aggiunto un carattere speciale
all’inizio e alla fine di un frame. Tale carattere è chiamato delimitatore. Tale delimitatore
può essere scelto tra uno qualsiasi dei caratteri. Quale è quindi il problema? Il delimitatore
può apparire proprio nei dati stessi e quindi essere uguale ad un carattere che si vuole
spedire. Se questo succede, il destinatario, quando legge la sequenza di 8 bit di dati che è
uguale al delimitatore, la interpreta come la fine del frame. Per ovviare a questo problema,
viene utilizzato un carattere speciale che viene inserito nei dati ogni qual volta si debbano
spedire 8 bit che sono uguali al delimitatore. Questo carattere speciale viene chiamato
carattere di escape (ESC). Quando il destinatario legge i dati e incontra il carattere speciale
ESC, lo rimuove dai dati stessi e tratta il prossimo carattere come dati, anche se questo
carattere è il delimitatore. Questa tecnica risolve il problema della presenza del delimitatore
nei dati ma crea il problema analogo della presenza dello stesso carattere ESC nei dati. Per
risolvere questo problema basta inserire un altro carattere ESC prima di ogni occorrenza di
una sequenza di 8 bit di dati che corrisponde al carattere ESC. Questa tecnica viene
chiamata byte stuffing. La tecnica di byte di stuffing consiste nell’inserimento di 1 byte
(ESC) addizionale ogni qual volta nel testo compare il carattere delimitatore o il carattere
ESC stesso.
49
•
Protocolli orientati ai bit:
La sezione dei dati di un frame è una sequenza di bit. Anche in questo caso, oltre
all’intestazione e opzionalmente alla coda, occorre utilizzare un delimitatore per separare un
frame dall’altro. La maggior parte dei protocolli utilizza un delimitatore di 8 bit, in particolare
la sequenza 01111110, per segnalare l’inizio e la fine di un frame. Questo delimitatore può
creare lo stesso problema visto per i protocolli orientati ai byte. Cioè se la particolare
sequenza di bit utilizzata per il delimitatore appare nei dati, dobbiamo in qualche modo
informare il destinatario che questi bit non rappresentano il delimitatore ma sono parte dei
dati. Questo problema viene risolto inserendo un singolo bit usando la seguente regola: se
nei dati c’è una sequenza di bit fatta da uno 0 e cinque 1 consecutivi viene aggiunto un bit
con valore 0 dopo i cinque bit che valgono 1. L’inserimento di questo bit addizionale fa si
che nella sequenza di bit non possa mai comparire una sequenza che consiste di uno 0 e
sei 1 consecutivi; pertanto il delimitatore non potrà mai apparire nei dati. Il destinatario
eliminerà questo bit addizionale utilizzando lo stesso criterio: ogni volta che nei dati trova
uno 0 e cinque 1 consecutivi e poi ancora uno 0, eliminerà quest’ultimo bit (0). Questo bit
verrà sempre inserito sia che la parola contenga cinque 1 consecutivi sia che contenga
sei, sette, otto, ….. 1 consecutivi. La tecnica del bit stuffing consiste nell’inserire un bit
addizionale (0) ogni qual volta cinque 1 consecutivi seguono uno 0 nei dati.
Controllo del flusso e degli errori:
•
Controllo del flusso: è un insieme di procedure che dicono al mittente quanti dati possono
essere trasmessi prima di ricevere un riscontro da parte del destinatario. Questo
meccanismo serve a non mettere in difficoltà il destinatario, cioè quando i dati arrivano al
destinatario questi dati devono essere elaborati e messi in un buffer in attesa che gli strati
superiori consumino questi dati. Ora se i dati arrivano troppo velocemente, è possibile che lo
spazio del buffer si esaurisca. Pertanto il destinatario deve poter informare il mittente che il
buffer di ricezione sta per riempirsi; il mittente non dovrà spedire altri dati, fino a che non si
libera spazio nel buffer.
• Controllo degli errori: Controllare gli errori significa sia rilevarli che correggerli. Nello strato
di collegamento quindi il controllo degli errori significa rilevare la presenza di errori e
ritrasmettere i frame nei quali si sono verificati errori.
Protocolli: due tipologie di protocolli:
• Protocolli per canali senza rumore
• Protocolli per canali soggetti a rumore
I protocolli della prima categoria non possono essere usati in quanto non esistono canali senza
rumore. Tutti i protocolli di cui parleremo sono unidirezionali, nel senso che i frame di dati
viaggiano da un nodo, chiamato mittente, a un altro nodo, chiamato destinatario. Nella realtà i
protocolli di comunicazione sono bidirezionale: i dati fluiscono in entrambe le direzioni.
50
Protocolli dei canali senza rumore: Protocollo semplice, Protocollo Stop-and-Wait.
•
Protocollo semplice: è un protocollo che non ha né controllo del flusso né controllo degli
errori. È un protocollo unidirezionale in cui i frame viaggiano dal mittente al destinatario. In
questo protocollo assumiamo che il destinatario possa elaborare i frame in arrivo in un
tempo trascurabile. Pertanto il frame viene immediatamente rimosso dal buffer di ricezione e
viene passato allo strato di rete.
Progetto: Il mittente non può spedire un frame fino a che lo strato di rete non fornisce un
pacchetto da spedire, mentre il destinatario non può consegnare un pacchetto di dati al
proprio strato di rete prima che un frame arrivi al destinatario. Pertanto l’esecuzione del
protocollo è guidato da eventi: nel mittente l’evento è una richiesta di spedizione da parte
dello strato di rete; nel destinatario l’evento è la consegna del frame da parte dello strato
fisico.
Algoritmo 10.1 Mittente Protocollo Semplice
1.
2.
3.
4.
5.
6.
while(true)
{
WaitForEvent();
if(Event(RequestToSend())
{
GetData();
//ciclo infinito
//Aspetta un evento
//Si può spedire?
//prende un pacchetto di
//dati dallo strato di rete
7.
MakeFrame();
//crea un frame con questi dati
8.
SendFrame();
//Spedisci il frame allo strato
//fisico
9.
10.
}
}
L’algoritmo ha un ciclo infinito. L’esecuzione è guidata da eventi, ciò significa che il
programma rimane in attesa (linea 3) fino a che non si verifica un evento (linea 4). Quando
l’evento si verifica (una richiesta dallo strato di rete) le linee da 6 a 8 sono eseguite. Il
programma ripete il ciclo e di nuovo si ferma alla linea 3 in attesa del prossimo evento.
Algoritmo 10.2 Destinatario Protocollo Semplice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
ReceiveFrame();
ExtractData();
DeliverData();
}
}
//Ciclo infinito
//Aspetta un evento
//E’ arrivato un frame
//Ricevi il frame da strato fisico
//estrai i dati dal frame
//Consegna dati allo strato di rete
Quest’ algoritmo è simile a quello precedente solo che l’evento è l’arrivo di un frame.
Quando arriva un frame, lo strato di collegamento riceve questo frame dallo strato Fisico.
51
Esempio: In questa figura il mittente spedisce una sequenza di frame e non si preoccupa di
nulla. La spedizione di un frame è rappresentata da un rettangolo
inclinato; l’altezza del rettangolo rappresenta il tempo fra la trasmissione del primo e
dell’ultimo bit del frame; l’inclinazione del rettangolo rappresenta il tempo di
propagazione del segnale.
• Protocollo Stop-and-wait: a questo punto eliminiamo il fatto che il destinatario sia capace
di elaborare un frame istantaneamente. Pertanto quando arriva un frame al destinatario,
esso dovrà elaborarlo, memorizzarlo in un buffer e mantenerlo nel buffer fino a che lo strato
di rete legge i dati. Se i frame arrivano ad una velocità maggiore rispetto a quella che il
destinatario riesce a gestire, allora può capitare che quest’ultimo debba cancellare dei frame
in arrivo. Per evitare questa situazione il destinatario deve in qualche modo dire al mittente
di rallentare la spedizione, pertanto deve esserci un riscontro che il destinatario spedisce al
mittente (ACK). Quindi il mittente dopo che ha spedito un frame si ferma in attesa dell’ACK.
Progetto: In questo figura possiamo notare che oltre al traffico di dati nella direzione dal
mittente al destinatario, c’è anche un traffico che va nell’altra direzione (riscontri).
Algoritmo 10.3 Mittente Stop-and-Wait
1.
2.
3.
4.
5.
6.
7.
while(true)
canSend = true;
{
WaitForEvent();
if(Event(RequestToSend() && canSend))
{
GetData();
//ciclo infinito
//Si possono spedire frame
//Aspetta un evento
//Si può spedire?
//prende un pacchetto di
//dati dallo strato di rete
8.
MakeFrame();
//crea un frame con questi dati
9.
SendFrame();
//Spedisci il frame allo strato
//fisico
canSend=false;
//non si possono spedire altri
//frame fino a che non arriva ACK
10.
11.
12.
13.
14.
15.
16.
17.
18.
}
WaitFoEvent();
if(Event(ArrivalNotification)
{
ReceiveFrame();
canSend = false;
}
//Aspetta un evento
//E’ arrivato un ACK?
//ricevi il frame di ACK
//non si possono spedire dati
}
52
In questo caso possono verificarsi due eventi: una richiesta di spedizione dati da parte dello
strato rete (RequestToSend) oppure una notifica di arrivo di un riscontro da parte dello strato
fisico (ArrivalNotification). Inoltre viene utilizzata la variabile sentinella canSend che assume
il valore true quando un nuovo frame può essere spedito e un valore false quando è in
attesa di un riscontro.
Algoritmo 10.4 Destinatario Stop-and-Wait
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
ReceiveFrame();
ExtractData();
DeliverData();
SendFrame();
}
}
//Ciclo infinito
//Aspetta un evento
//E’ arrivato un frame?
//Ricevi il frame
//estrai i dati dal frame
//Consegna dati allo strato di rete
//Spedisci un frame di ACK
In quest’ algoritmo dopo l’arrivo di un frame a differenza dell’algoritmo 10.2, il destinatario
spedisce un frame di riscontro al mittente.
Esempio: In questa figura il mittente spedisce un frame e aspetta la ricezione di un ACK,
quando il riscontro arriva il mittente spedisce il frame successivo.
53
Protocolli dei canali soggetti a rumore: Stop-and-Wait ARQ, Go-back-N ARQ, Ripetizione
selettiva ARQ.
• Protocollo Stop-and-Wait ARQ: è un Protocollo con richiesta di Ripetizione automatica
(ARQ) che aggiunge un meccanismo per il controllo degli errori al protocollo Stop-and-Wait.
Come funziona?
-. In pratica quando un frame arriva verrà effettuato un controllo per verificare la presenza di
errori. Se ci sono errori, il frame viene eliminato e non viene spedito nessun riscontro. Il
mittente capirà che si è verificato un problema con il frame perché non riceverà nessun
riscontro.
-. I frame vengono numerati per capire se si è perso un frame, se è un frame duplicato o se
si trova in un ordine diverso.
-. Questo protocollo prevede la rispedizione sia dei frame arrivati con errore sia dei frame
perduti.
-. Se il destinatario non risponde con un riscontro entro un certo tempo allora il frame verrà
automaticamente rispedito dal mittente.
-. Per fare ciò quindi il mittente, quando spedisce, mantiene una copia del frame e fissa una
scadenza (timeout). Se non arriva nessun riscontro prima della scadenza del timeout, il
mittente rispedisce il frame.
-. Anche il frame contenente il riscontro necessita di informazioni per il controllo degli errori.
Se il mittente riceve un ACK con degli errori, tale riscontro viene ignorato, in quanto al
mittente serviva solo la prova che il frame inviato fosse arrivato.
Numeri di sequenza: Sia i frame di dati sia i frame di riscontro devono essere numerati.
Pertanto i frame avranno nell’intestazione un campo per specificare il numero di sequenza
del frame. A questo punto ci domandiamo quanto debba essere grande il campo che
contiene il numero di sequenza. La grandezza di questo campo specifica il numero massimo
che possiamo utilizzare come numero di sequenza. Se tale campo ha m bit, allora i possibili
numeri di sequenza vanno da 0 a 2m – 1. Il primo frame può essere numerato con 0, il
secondo con 1 e così via. Quando arriviamo al frame numerato con 2m – 1, non potremo far
altro che riprendere a numerare i successivi frame dal numero 0. Per motivi di efficienza
vogliamo utilizzare un valore di m piccolo per minimizzare la grandezza dell’intestazione, ma
allo stesso tempo sufficientemente grande per non creare ambiguità nell’identificazione dei
frame. Comunque in questo protocollo utilizzeremo soltanto i numeri di sequenza 0 e 1,
usati in alternanza.
Numero di sequenza per i riscontri: Se un frame di dati è arrivato al destinatario senza
errori e ha un numero di sequenza 0, allora il destinatario invierà un frame di ACK con un
numero di sequenza 1, se invece il destinatario riceve un frame 1 invierà un ACK con
numero di sequenza 1.
54
Progetto: Nella figura precedente il mittente mantiene una copia dell’ultimo frame
trasmesso fino a che non riceve un ACK per quel frame. Il mittente mantiene una variabile S
(0,1), che specifica il numero di sequenza del prossimo frame da spedire. Il destinatario
mantiene una variabile R, che specifica il numero di sequenza del prossimo frame che il
destinatario si aspetta di ricevere. Il valore S viene incrementato di 1 usando l’aritmetica
modulo 2. Il destinatario fa la stessa cosa.
Algoritmo 10.5 Mittente Stop-and-Wait ARQ
1.
2.
3.
4.
5.
6.
7.
8.
S=0;
canSend=true;
while(true)
{
WaitForEvent();
if(Event(RequestToSend() && canSend))
{
GetData();
9.
//Primo frame da spedire
//Permetti la spedizione
//ciclo infinito
//Aspetta un evento
//Si può spedire?
//prende un pacchetto di
//dati dallo strato di rete
MakeFrame(S);
//crea un frame con questi
//dati e aggiunge il seqNo
10.
11.
StoreFrame(S);
SendFrame(S);
//Mantieni una copia del frame
//Spedisci il frame allo strato
//fisico
12.
13.
StartTimer();
S = S + 1 mod 2;
//Avvia il timer
//Frame successivo con addizione
//modulo 2
14.
canSend=false;
//non si possono spedire altri
//frame
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
}
WaitFoEvent();
if(Event(ArrivalNotification)
{
ReceiveFrame(ackNo);
if(not corrupted && ackNo == S)
{
StopTimer();
PurgeFrame(S-1 mod 2);
canSend=true;
}
}
if(Event(TimeOut))
{
StartTimer()
ResendFrame(S-1 mod 2);
}
//Aspetta un evento
//E’ arrivato un ACK
//ricevi il frame di ACK
//L’ACK è valido?
//Ferma il timer
//La copia del frame non serve più
//si possono spedire frame
//Il timeout è scaduto?
//Avvia il timer
//Rispedisci il frame
}
Algoritmo 10.6 Destinatario Stop-and-Wait ARQ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
R=0;
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
ReceiveFrame();
if(corrupted(frame))
GoTo 3;
if(seqNo == R)
{
ExtractData();
DeliverData();
R = R + 1 mod 2;
}
SendFrame(R);
}
}
//Primo frame atteso 0
//Ciclo infinito
//Aspetta un evento
//E’ arrivato un frame
//Ricevi il frame
//il frame è corrotto?
//Controllo passa alla linea 3
//il frame arrivato è valido?
//estrai i dati dal frame
//Consegna dati allo strato di rete
//Addizione modulo 2
//Spedisci un frame di ACK
55
Esempio: In questa figura il frame 0 viene spedito e il corrispondente ACK viene ricevuto. Il
frame 1 viene perso; allo scadere del timeout il frame viene rispedito e questa volta viene
ricevuto. Anche il corrispondente ACK viene ricevuto e il timeout per il frame viene eliminato.
Il successivo frame (0) viene spedito, ma il riscontro di questo frame si perde. Il mittente non
Ricevendo il riscontro rispedisce il frame (0) allo scadere del timeout. (Il mittente non può
sapere se il frame si è perso o se si è perso il riscontro) La rispedizione del frame(0)
avviene con successo e anche il suo riscontro viene ricevuto senza problemi.
Efficienza: Il protocollo Stop-and-Wait ARQ è molto inefficiente per due motivi:
a) se il canale ha una larghezza di banda ampia e ritardi di trasmissione
relativamente elevati.
b) Non si può spedire un nuovo frame fino a che no si riceve l’ACK.
Esempio: Protocollo Stop-and-Wait ARQ su canale con larghezza di banda 1 Mbps. Il
ritardo di trasmissione andata e ritorno è di 20 ms. La dimensione dei frame utilizzati è di
1000 bit. Il protocollo Stop-and-Wait ARQ spedisce 1000 bit ogni 20 ms. Noi sappiamo che il
canale è di 1 Mbps cioè 1000000 bit per secondo, quindi se volessimo sfruttare tutto il
canale potremmo spedire (1000000 bit x 20 x 10-3) per secondo = 20000 bit per secondo,
ma poiché dobbiamo attendere il riscontro di ACK ogni 1000 bit spediti allora utilizzeremo il
canale solo al 5% rispetto alla sua capacità. (1000 / 20000 = 0,05 quindi 5%). Quindi per
sfruttare a massimo la capacità del canale possiamo spedire più frame prima di fermarsi ad
aspettare un ACK. Supponiamo di spedire 15 frame prima di fermarsi ad aspettare un
riscontro. In questo caso i bit spediti in 20 ms sono 15000. Pertanto la percentuale di utilizzo
del canale sarebbe (15000 / 20000 = 0,75) il 75%.
• Protocollo go-back-NRQ: è un protocollo che sfrutta al meglio la capacità di un canale
trasmissivo, cioè permette la spedizione di più frame prima di fermarsi ad aspettare un
riscontro.
Numeri di sequenza: In questo caso poiché più frame possono essere spediti non è più
adatta la numerazione fatta per il protocollo Stop-and-Wait che utilizzava soltanto i numeri
di sequenza 0 e 1. Quindi occorrono più numeri di sequenza. L’intestazione del frame ha un
campo di m bit per specificare il numero di sequenza. Pertanto i numeri di sequenza vanno
da 0 a 2m – 1. Arrivati al numero massimo 2m – 1 si riprende la numerazione da 0. I numeri
di sequenza, quindi sono interi modulo 2m . Ad esempio se m = 4 i numeri di sequenza sono:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, …..
Finestra scorrevole: Il funzionamento del protocollo Go-back-N si basa sul concetto di
finestra scorrevole, quindi i frame sono numerati in sequenza. La finestra scorrevole è una
“finestra immaginaria” su questa sequenza che definisce quali sono i frame sui quali si può
Operare. Solo quelli della finestra possono essere spediti. Il mittente e il destinatario
avranno una propria versione della finestra; la finestra nel mittente specifica i frame che
56
sono in fase di spedizione, mentre la finestra del destinatario definisce i frame che esso può
ricevere in quel momento. Le due finestre non sono necessariamente uguali.
Finestra del mittente:
La finestra si è spostata
di tre posizioni a destra
in seguito all’arrivo dei
riscontri per i frame
0,1,2
Possiamo notare nella figura precedente che alcuni frame della finestra potrebbero essere
già stati spediti, ma sono in attesa di un riscontro, altri invece devono ancora essere spediti.
Sebbene ci siano 2m numeri di sequenza da utilizzare la dimensione massima della finestra
è di 2m – 1.
In ogni istante la finestra divide tutti i numeri di sequenza in quattro zone: la zona che
precede la finestra è composta dai frame che hanno ricevuto un ACK, la seconda zona
comprende quei frame all’interno della finestra che sono stati spediti ma ancora non hanno
ricevuto un ACK, la terza zona comprende quei frame all’interno della finestra che ancora
non sono stati spediti, la quarta zona è quella costituita dai frame che seguono la finestra.
Questi ultimi frame non possono essere utilizzati finché la finestra non scorre e li ricopre.
Di conseguenza verranno utilizzate tre variabili, che definiscono l’inizio, la fine e il punto che
divide i frame spediti da quelli ancora da inviare, per le finestre:
Æ primo frame della finestra del mittente.
-. Sf
-. Sn
Æ prossimo frame da spedire
Æ dimensione della finestra mittente
-. Ssize
Finestra del destinatario:
La finestra scorrevole del destinatario consiste di un solo frame, è definita da una sola
variabile (R). La finestra scorre a destra quando il frame nella finestra viene ricevuto, lo
scorrimento è di una sola posizione. I frame quindi devono arrivare in ordine, altrimenti
vengono eliminati. La finestra del destinatario divide i numeri di sequenza in tre zone: la
prima comprende i frame che sono stati già ricevuti e dei quali è stato già spedito il riscontro,
la seconda comprende il frame della finestra ed è il frame che il destinatario si aspetta di
ricevere, la terza comprende i frame alla destra della finestra i quali non possono essere
ancora ricevuti.
Timeout: In questo protocollo quindi occorre utilizzare dei timeout per la rispedizione dei
frame non riscontrati. Alla scadenza del timeout del primo frame, vengono rispediti tutti i
frame per i quali non si è ricevuto un riscontro.
Riscontri: Il destinatario spedisce un ACK quando il frame viene correttamente ricevuto
nell’ordine stabilito dai numeri di sequenza. Se un frame arriva con degli errori o fuori ordine
il destinatario lo elimina. Poiché il destinatario non manda nessun riscontro allo scadere del
57
timeout il mittente rispedirà il primo frame senza riscontro ed eventualmente anche i frame
successivi. Il destinatario non deve spedire un riscontro per ogni frame ricevuto ma può
anche spedire un ACK cumulativo.
Rispedizione di un frame: Quando il timeout scade, il mittente rispedisce tutti i frame già
spediti ma non ancora riscontrati. Per esempio supponiamo che il mittente abbia già spedito
il frame 6 ma scada il timeout per il frame 3. Questo significa che il frame 3 non è stato
riscontrato; il mittente quindi ritorna indietro al frame 3 e rispedisce i frame 3, 4, 5, 6.
Algoritmo 10.7 Mittente Go-back-N ARQ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Ssize = 2m -1;
Sf = 0;
Sn = 0;
while(true)
{
WaitForEvent();
if(Event(RequestToSend())
{
if(Sn - Sf >= Ssize)
Goto 5
GetData();
//Dimensione finestra
//inizio della finestra
//prossimo frame da spedire
//ciclo infinito
//Aspetta un evento
//Si può spedire?
//La finestra è piena?
//Controllo passa alla linea 5
//prende un pacchetto di
//dati dallo strato di rete
12.
MakeFrame(Sn);
//crea un frame con questi
//dati
13.
14.
15.
StoreFrame(Sn);
SendFrame(Sn);
Sn = Sn + 1;
//Mantieni una copia del frame
//Spedisci il frame a strato fisico
//incrementa al prossimo frame da
//spedire
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
if(timer not running)
StartTimer();
//Il timer è avviato?
//Avvia il timer
}
if(Event(ArrivalNotification))
{
Receive(ACK);
if(corrupted(ACK))
Goto 5;
if((ackNo > Sf)&&(ackNo <= Sn))
{
while(Sf <= ackNo)
{
PurgeFrame(Sf);
Sf = Sf + 1;
}
}
if(ackNo == Sn)
StopTimer();
}
if(Event(TimeOut))
{
StartTimer();
Temp = Sf;
while(Temp < Sn)
{
SendFrame(Sf);
Sf = Sf + 1;
}
}
//è arrivato un ACK?
//ricevi il riscontro
//il riscontro è corrotto?
//Controllo passa alla linea 5
//l’ACK è valido?
//Cancella il frame Sf
//Scorri la finestra a destra
//L’ackNo è l’ultimo frame?
//Ferma il timer
//Il timeout è scaduto?
//Riavvia il timer e rispedisci
//tutti i frame dal primo frame
//della finestra (Sf) fino a Sn.
}
Il controllo fatto alla linea 9 fa sì che il numero di frame spediti non sia più grande della finestra, quindi se la
finestra è piena, la richiesta viene ignorata e lo strato di rete dovrà riprovare successivamente. Per la gestione
dell’arrivo di un riscontro invece la cosa è un po’ più complicata. Un frame che contiene errori viene ignorato,
mentre se il riscontro è valido allora la finestra viene fatta scorrere fino alla posizione in cui si trova il frame del
quale si è ricevuto l’ACK. La scadenza del timeout è più complicata da gestire: occorre rispedire tutti i frame già
spediti a partire da quello che ha causato lo scadere del timeout.
58
Algoritmo 10.8 Destinatario Go-back-N ARQ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
R=0;
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
ReceiveFrame();
if(corrupted(frame))
GoTo 3;
if(seqNo == R)
{
ExtractData();
DeliverData();
R = R + 1;
SendFrame(R);
}
}
}
//Primo frame atteso
//Ciclo infinito
//Aspetta un evento
//E’ arrivato un frame?
//Ricevi il frame
//il frame è corrotto?
//Controllo passa alla linea 3
//il frame arrivato è valido?
//estrai i dati dal frame
//Consegna dati allo strato di rete
//La finestra scorre di 1 a dx
//Spedisci un frame di ACK
I frame che contengono errori o che arrivano fuori ordine vengono ignorati. Se invece il
frame ricevuto è quello che il destinatario si aspetta (seqNo == R) i dati vengono accettati e
consegnati allo strato di rete e la finestra viene fatta scorrere di una posizione a destra e
viene spedito l’ACK.
Esempio: In questa figura m = 3 quindi la dimensione della finestra è 2m – 1 = 7. In
quest’esempio i dati vengono spediti dal mittente al destinatario senza problemi. I riscontri
invece a volte vengono persi.
Parte il timer: Allora viene spedito il frame 0 (Sf=0; Sn=1) il destinatario si aspettava di
ricevere il frame 0 (R=0) allora spedisce l’ACK (riscontro per ricevere il frame 1) e scorre la
finestra a destra (R=1). La finestra del mittente scorre a destra di una posizione (in questo
caso quindi Sf=1; Sn=1). Il mittente spedisce il frame 1 (Sf=1; Sn=2), il destinatario riceve
questo frame perché si aspettava di ricevere il frame 1 (R=1) e spedisce l’ACK (riscontro per
ricevere il frame 2) e scorre la finestra (R=2); Tale riscontro viene perso. Nel frattempo il
mittente spedisce il frame 2 (Sf=1; Sn=3) e il frame 3 (Sf=1; Sn=4). Il destinatario riceve il
frame 2 che era quello che si aspettava di ricevere (R=2) e spedisce l’ACK (riscontro per
ricevere il frame 3), scorre la finestra a destra (R=3). Il mittente riceve l’ACK, che in questo
caso è un ACK cumulativo (cioè pur non essendo arrivato l’ACK per il frame 1 arriva l’ACK
per il frame 2 quindi questo significa che l’ACK precedente si era semplicemente perso) e
scorre la finestra di due posizioni a destra (Sf=3,Sn=4). Il mittente riceve anche l’ACK del
frame 3 e scorre la finestra a destra di una posizione (Sf=4; Sn=4).
Scade il timer.
59
Esempio:
Parte il timer: Il mittente spedisce il frame 0, il destinatario riceve il frame 0 e spedisce
l’ACK per ricevere il frame 1 e scorre la finestra di una posizione a destra (R=1). Il mittente
spedisce il frame 1 (Sf=1; Sn=2), tale frame viene perso. Il mittente continua a spedire il
frame 2 (Sf=1; Sn=3), il frame 3 (Sf=1; Sn=4).
Scade il timer: Si ritorna indietro al frame del quale si è ricevuto il riscontro (frame 0 quindi
Sf=1; Sn=1). Viene rispedito quindi il frame 1 (Sf=1; Sn=2) e il frame 2 (Sf=1; Sn=3). Il
destinatario riceve il frame 1, spedisce l’ACK e scorre la finestra (R=2). Il destinatario riceve
ancora il frame 2, spedisce l’ACK e scorre la finestra (R=3). E via dicendo gli altri frame.
N.B: Il protocollo Stop-and-Wait ARQ è un caso speciale del protocollo Go-back-N ARQ, in
cui la finestra del mittente ha grandezza pari a 1. In altre parole, per il protocollo Stop-andWait ARQ si ha che m=1 e quindi 2m – 1 = 1.
•
Protocollo Ripetizione selettiva ARQ: Il protocollo go-back-N ARQ è molto inefficiente
per un canale dove si verificano spesso errori. Infatti se si perde solo il primo frame vengono
comunque rispediti anche gli altri. Quindi questo consuma la capacità trasmissiva del canale
e quindi rallenta la trasmissione. Quindi per risolvere questo problema è stato introdotto
questo nuovo protocollo, ripetizione selettiva ARQ. In pratica si fonda sul fatto di non far
rispedire i frame che arrivano fuori ordine, ma rispedire solo i frame danneggiati o persi.
Finestre: la finestra del mittente è più piccola di quella usata per il protocollo go-back-N
ARQ. La dimensione quindi è 2m – 1. La finestra del destinatario invece è totalmente diversa
da quella utilizzata nel protocollo go-back-N ARQ. La dimensione quindi è uguale alla
finestra del mittente: 2m – 1. Poiché le dimensioni delle due finestre sono uguali, tutti i frame
nella finestra del mittente possono arrivare fuori ordine e non verranno scartati. Il
destinatario può mantenerli fino a che non li riceve tutti. Si noti che il destinatario non
consegna i frame ricevuti fuori ordine allo strato di rete.
60
Algoritmo 10.9 Mittente Ripetizione Selettiva ARQ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Ssize = 2m - 1;
Sf = 0;
Sn = 0;
while(true)
{
WaitForEvent();
if(Event(RequestToSend())
{
if(Sn - Sf >= Ssize)
Goto 5
GetData();
//Dimensione finestra
//inizio della finestra
//prossimo frame da spedire
//ciclo infinito
//Aspetta un evento
//Si può spedire?
//La finestra è piena?
//Controllo passa alla linea 5
//prende un pacchetto di
//dati dallo strato di rete
12.
MakeFrame(Sn);
//crea un frame con questi
//dati
13.
14.
15.
StoreFrame(Sn);
SendFrame(Sn);
Sn = Sn + 1;
//Mantieni una copia del frame
//Spedisci il frame a strato fisico
//incrementa al prossimo frame da
//spedire
StartTimer(Sn);
//Avvia il timer per Sn
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
32.
33.
34.
35.
36.
37.
38.
39.
40.
42.
43.
44.
45.
46.
47.
48.
49.
}
if(Event(ArrivalNotification))
{
Receive(frame);
if(corrupted(frame))
Goto 5;
if(frameType == NACK)
if(nakNo between Sf and Sn)
{
resend(nackNo);
StartTimer(nakNo);
}
if(frameType == ACK)
if(ackNo beetwen Sf and Sn)
{
while(Sn < ackNo)
{
Purge(Sf);
StopTimer(Sf);
Sf = Sf + 1;
}
}
}
if(Event(TimeOut(t)))
{
StartTimer(t);
SendFrame(t);
}
//è arrivato un ACK?
//ricevi l’ACK o il NACK
//il riscontro è corrotto?
//Controllo passa alla linea 5
//Il riscontro è negativo?
//il riscontro è compreso tra Sf and Sn
//rispedisci il frame
//Riavvia il timer per quell frame
//il riscontro è positive?
//il riscontro è compreso tra Sf and Sn
//Elimino il frame Sf
//Fermo il timer relativo a Sf
//scorre la finestra
//Il timeout è scaduto
//Avvia il timer per t
//Spedisce il frame t
}
In questo algoritmo utilizziamo un timeout per ogni singolo frame spedito. Inoltre il destinatario
può spedire sia riscontri positivi (ACK) sia riscontri negativi (NAK). Un NAK richiede la
rispedizione di un singolo frame, quello che il destinatario non ha ricevuto. La scadenza del
timeout genera la rispedizione solo del frame per il quale il timeout è scaduto.
61
Algoritmo 10.10 Destinatario Ripetizione Selettiva ARQ
1.
2.
R=0;
NakSent=false;
3.
AckNeeded=false;
4.
5.
Repeat(for all slots)
Marked(slot)=false;
6.
7.
8.
9.
10.
11.
12.
13.
//inizio finestra
//variabile sentinella che
//specifica il riscontro negativo
//variabile sentinella che
//specifica i riscontri positivi
//Ripeti per tutti gli slots
//inizializzo tutti gli slot
//a false, quando vale true
//significa che il corrispondente
//frame è stato ricevuto
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
Receive(frame)
if(corrupted(frame)&&(NOT nakSent))
14.
15.
16.
{
17.
18.
19.
Goto 7;
}
if((seqNo <> R)&&(NOT NakSent))
20.
21.
22.
{
SendNAK(R);
NakSent=true;
//Aspetta un evento
//Sono arrivati dei dati?
//Ricevi il frame
//Se il frame è corrotto e non è
//stato spedito ancora un NAK
//Spedisci un NAK
//poni NakSent a true in modo da non
//permettere la spedizione di altri
//NAK
//Se il numero di sequenza del frame
//ricevuto è diverso da quello che
//il destinatario aspettava (R) e
//non è stato spedito un NAK
SendNAK(R);
NakSent=true;
23.
//ciclo infinito
//Spedisci il NAK per R
//poni NakSent a true in modo da non
//permettere la spedizione di altri
//NAK
if((seqNo in window)&&(!Marked(seqNo))
//se il frame è nella finestra del
//destinatario se quel frame non era
//ancora stato memorizzato nello
//slot corrispondete
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
{
StoreFrame(seqNo);
Marked(seqNo)=true;
while(Marked(R))
{
DeliverData(R);
Purge(R);
R = R + 1;
AckNeeded=true;
}
if(AckNeeded)
{
SendAck(R);
AckNeeded=false;
NakSent=false;
}
//memorizza quel frame
//segna come ricevuto nello slot
//Consegna dati allo strato di rete
//Cancella R
//Scorri la finestra
//spedisco l’ACK per R che è l’ultimo
}
}
}
La variabile nakSent serve a tener traccia dei riscontri negativi spediti, la variabile ackNeeded
Invece serve a tener traccia dei riscontri positivi da spedire. Entrambe vengono inizializzate a
False. Per ogni elemento della finestra del mittente viene utilizzata una variabile, chiamata
Marked, che vale true quando il corrispondente frame è stato ricevuto. Inizialmente tutte le
variabili Marked vengono inizializzate a false; Quindi quando il destinatario riceve un frame se il
frame è danneggiato e non è ancora stato spedito un NAK allora viene spedito un NAK, per dire
al mittente che il destinatario non ha ancora ricevuto i frame che si aspetta di ricevere. Se invece
62
il frame viene correttamente ricevuto e il suo numero di sequenza è all’interno della finestra del
destinatario, il frame viene memorizzato e la corrispondente variabile Marked viene aggiornata a
true. Se una serie consecutiva di frame a partire dall’estrema sinistra della finestra del mittente,
è stata ricevuta, allora questi frame possono essere spediti allo strato di rete e quindi la finestra
può scorrere verso destra.
Esempio: Figura precedente. Per ogni frame spedito o rispedito occorre un timeout Il timeout
per il frame 0 viene fatto partire alla spedizione del frame, ma viene eliminato quando arriva il
riscontro per questo frame. Il timeout per il frame 1 viene fatto partire alla spedizione del frame
ma poiché il frame non arriva al destinatario, viene fatto partire una seconda volta quando arriva
un NAK che causa la rispedizione del frame, e infine viene eliminato all’arrivo dell’ACK per il
frame 1. Nel destinatario quando arrivano i frame vengono memorizzati nel buffer, tuttavia se
non vi è una serie consecutiva di frame a partire dall’estrema sinistra, questi non possono
essere spediti allo strato di rete.
Piggyback: I tre protocolli descritti sono tutti unidirezionali. I frame vanno in una sola direzione.
In situazioni reali, i frame di dati normalmente viaggiano in entrambe le direzioni. Dati due nodi A
e B che vogliono comunicare, ci sono frame di dati che viaggiano da A a B, e frame di dati che
viaggiano da B a A. Ovviamente questo comporta la presenza di frame ACK e NAK che devono
viaggiare sia da B ad A sia da A a B. Quindi per questo viene utilizzata la tecnica del piggyback.
L’idea di questa tecnica è quella di sfruttare i frame di dati che viaggiano da A a B in modo tale
che essi portino con sé informazioni di controllo (riscontri) che A vuol far sapere a B.
Ovviamente vale anche il viceversa, cioè da B ad A.
63
CAPITOLO 11:
ACCESSO MULTIPLO
Lo strato di collegamento può essere pensato come composto da due sottostrati:
il sottostrato superiore gestisce le funzioni di controllo, mentre quello inferiore gestisce l’accesso al
canale di comunicazione quando questo è condiviso con altri utenti. Ovviamente se il canale è
dedicato quest’ultimo strato è assente. Il sottostrato superiore viene chiamato LLC (Logic Link
Control); il sottostato inferiore viene chiamato MAC (Media Access Control).
Accesso casuale: nel metodo ad acceso casuale (contesa) nessun nodo ha il controllo del
mezzo trasmissivo; ogni nodo deve contendersi l’utilizzo del mezzo con le altre stazioni. Ogni
stazione ha il diritto di accedere al mezzo trasmissivo indipendentemente dalle altre stazioni,
tuttavia, se più stazioni provano a spedire contemporaneamente si può verificare una collisione e i
frame spediti verranno distrutti o modificati. Per evitare queste collisioni, quindi, ogni stazione deve
seguire una procedura che applica i seguenti criteri:
• Quando è possibile accedere al mezzo?
• Che cosa può fare la stazione se il mezzo è occupato?
• Come può una stazione determinare l’esito, positivo o negativo, di una trasmissione?
• Che cosa si può fare quando c’è una collisione?
I metodi ad accesso casuale derivano tutti da un protocollo conosciuto come ALOHA, al quale
sono state apportate varie modifiche.
ALOHA puro: il protocollo originale viene chiamato ALOHA puro. L’idea è che ogni stazione
spedisca un frame ogni qualvolta ha un frame da spedire. Ovviamente essendoci un canale
condiviso c’è la possibilità di collisioni.
In questo esempio 4 stazioni si contendono il canale trasmissivo, ogni stazione spedisce due frame.
Come si evince dalla figura, alcuni di questi frame collidono, in quanto spediti
contemporaneamente. Gli unici frame che arrivano a destinazione sono 1.1 e 3.2.
Tale protocollo fa affidamento sui riscontri spediti dal destinatario. Quando una stazione spedisce
un frame si aspetta di ricevere un riscontro da parte del destinatario, se tale riscontro non arriva
dopo un certo periodo, il mittente assume che il riscontro sia stato distrutto da una collisione e
rispedisce i dati. Il tempo di attesa che ogni stazione deve aspettare è casuale e viene chiamato
tempo di backoff (TB). Il protocollo ALOHA puro ha anche un metodo per evitare la congestione
del canale dovuta alla ritrasmissione di un frame. Infatti dopo un numero massimo di tentativi di
ritrasmissione, Kmax, la stazione deve abbandonare la spedizione del frame per riprovare in un
secondo momento.
64
Spiega Enzo
Esempio: Le stazioni su una rete senza fili ALOHA sono situate ad una distanza massima di
600Km. Assumendo che il segnale trasmissivo si propaghi alla velocità 3x108m/s, si ha che
Tp=(600x105)/ (3x108)=2ms. Troviamo i valori TB per vari K.
1. Per K=1 l'insieme dei fattori moltiplicativi è {0,1}. La stazione deve generare numeri casuali
scelti fra 0 e1. questo significa che TB è o 0ms (0x2ms) oppure 2ms (1x2ms).
2. Per K=2 l’insieme dei fattori moltiplicativi è {0, 1, 2, 3}. La stazione deve generare numeri
casuali scelti fra 0 e 3. questo significa che TB può essere 0, 2, 4 o 6ms.
3. Per K>10 il calcolo di TB viene fatto normalmente con K=10.
Il tempo di vulnerabilità è il periodo di tempo in cui c’è una possibile collisione.
In questo esempio le stazioni spediscono dei frame di lunghezza fissa ognuno dei quali impiega un
tempo pari a Tfr ms per essere trasmesso. La stazione A spedisce un frame al tempo t, se la
stazione B spedisce un frame fra il tempo t - Tfr e il tempo t, avviene una collisione fra i frame, cioè
l’ultima parte del frame B collide con l’inizio del frame A. E così via per gli altri frame.
Il tempo di vulnerabilità del protocollo ALOHA puro è 2 volte il tempo di trasmissione di un frame.
65
ALOHA a intervalli: in questo protocollo il tempo viene diviso in intervalli di ampiezza Tfr . una
stazione può spedire solo all’inizio di un intervallo, quindi il tempo di vulnerabilità di questo
protocollo è pari al tempo di trasmissione di un frame
CSMA (Carrier Sense Multiple Access): permette di ridurre le collisioni ma non eliminarle. La
probabilità di collisione può essere ridotta se una stazione controlla lo stato del mezzo trasmissivo
prima di spedire, quindi se c’è già una trasmissione in corso allora è inutile spedire. La possibilità di
collisione può esistere ancora a causa del ritardo di propagazione del segnale. In pratica quando
una stazione controlla il mezzo trasmissivo e lo trova libero, esso in realtà potrebbe non essere
libero perché i bit trasmessi da qualche altra stazione non hanno ancora raggiunto la stazione che
sta controllando il mezzo trasmissivo. Il tempo di vulnerabilità per il CSMA è pari al tempo di
propagazione Tp che è il tempo necessario ad un segnale per propagarsi da un estremo all’altro del
mezzo trasmissivo. Quando una stazione spedisce un frame, se un’altra stazione spedisce un altro
frame prima che scada il tempo di vulnerabilità, i due frame possono collidere.
Che cosa deve fare una stazione se il mezzo trasmissivo è occupato?
Che cosa deve fare una stazione se il mezzo trasmissivo è libero?
Vengono utilizzati tre metodi per rispondere a queste domande:
• Metodo di 1 – insistenza: se il mezzo è occupato la stazione non trasmette e continua a
controllare lo stato del mezzo trasmissivo; appena il canale diventa libero la stazione
spedisce immediatamente il frame. Probabilità di collisione massima;
• Metodo di non insistenza: una stazione che vuole spedire un frame controlla prima se il
mezzo trasmissivo è libero, se lo è spedisce il frame immediatamente, altrimenti aspetta un
tempo casuale prima di ripetere la stessa operazione (controllo, spedizione). Probabilità di
collisione minima, ma riduce l’efficienza della rete;
• Metodo di p – insistenza: combina i vantaggi dei due metodi precedenti riducendo la
probabilità di collisione e migliorando l’efficienza. Una stazione che vuole spedire controlla
continuamente il mezzo trasmissivo fino a che non lo trova libero. Quando ciò accade la
stazione esegue i seguenti passi:
1. Con la probabilità P la stazione spedisce il frame;
2. Se il frame non viene spedito (quindi con probabilità q=1-P) la stazione
aspetta l’inizio del prossimo intervallo e controlla di nuovo lo stato del
mezzo trasmissivo:
ƒ Se il mezzo trasmissivo è libero riprende dal passo 1;
ƒ Se è occupato si comporta come se ci fosse stata una
collisione utilizzando una procedura di backoff.
CSMA/CD (Collision Detection): CSMA non specifica cosa fare quando c’è una collisione, questo
metodo, invece, aggiunge al metodo CSMA un algoritmo per gestire le collisioni. In questo metodo
una stazione controlla lo stato del mezzo trasmissivo dopo che ha spedito un frame per vedere se
la trasmissione è avvenuta con successo. Se non si sono verificate collisioni allora la trasmissione
è finita; se però c’è stata una collisione allora il frame viene rispedito.
66
In questo esempio al tempo t1 la stazione A inizia a spedire i bit del proprio frame. Al tempo t2 la
stazione C non ha ancora ricevuto il primo bit spedito dalla stazione A e quindi anche essa inizia a
spedire il proprio frame. Il segnale di C si propaga sia a sinistra che a destra. I segnali spediti da A
e C collidono al tempo t2. La stazione C rileva la collisione al tempo t3, cioè quando riceve il primo
bit del frame spedito da A, e immediatamente interrompe la trasmissione del proprio frame. La
stazione A, invece, rileva la collisione al tempo t4, cioè quando riceve il primo bit spedito da C, e
immediatamente interrompe la trasmissione.
Dimensione minima del frame: affinché il metodo CSMA/CD funzioni, occorre imporre delle
restrizioni sulle dimensioni del frame. È necessario che prima della spedizione dell’ultimo bit di un
frame, la stazione che spedisce il frame sia in grado di rilevare la collisione, se ce n’è stata una, e
interrompere la trasmissione. Quindi la dimensione minima è di 512 bit ovvero 64 byte.
Livello di energia del segnale: il livello dell’energia del segnale che viaggia sul mezzo trasmissivo
può avere tre valori: 0, normale e anormale. Quando il livello è 0 vuol dire che il mezzo trasmissivo
è libero; quando il livello è normale il mezzo trasmissivo sta trasportando il segnale spedito da una
stazione; quando il segnale è anormale vuol dire che si è presentata una collisione.
CSMA/CA (Collision Avoidance): l’idea di base del CSMA/CD era quella che una stazione
doveva essere capace di ricevere mentre trasmetteva per poter rilevare la collisione. Quando non
c’era collisione la stazione riceveva un solo segnale, altrimenti riceveva due segnali, cioè il proprio
segnale e quello trasmesso da un’altra stazione. Quindi per distinguere questi due casi i due
segnali dovevano avere un significato diverso, in altre parole il segnale della seconda stazione
doveva aggiungere una quantità di energia al segnale creato dalla prima stazione in modo da
evidenziare l’interferenza. In una rete cablata, il segnale ricevuto ha quasi sempre la stessa
energia del segnale spedito; in una rete senza fili, invece, il segnale spedito perde energia durante
la trasmissione e l’energia del segnale ricevuto è molto bassa. Pertanto una collisione può
aggiungere solo il 5 – 10% di energia al segnale. Ciò non basta per poter rilevare una collisione. Il
protocollo CSMA/CA è stato progettato per questa necessità. Le collisioni vengono evitate
attraverso l’uso di tre strategie:
• Spaziatura tra i frame: anche se il mezzo trasmissivo è libero la trasmissione di
un frame viene ritardata, cioè la stazione aspetta un certo tempo chiamato tempo
di spaziatura tra i frame (IFS);
• Finestra di contesa: la finestra di contesa è un tempo diviso in intervalli. Una
stazione che ha già aspettato un tempo IFS, sceglie un numero casuale e
aspetterà quel numero di intervalli prima di spedire;
• Riscontri: anche utilizzando le precauzioni precedenti è possibile che si
verifichino delle collisioni. L’uso di timeout e riscontri aiuta a garantire che il
destinatario abbia ricevuto correttamente il frame.
67
CAPITOLO 12:
LAN CABLATE - ETHERNET
Standard IEEE:
Lo standard dell’IEEE è stato adottato dall’ANSI, nel 1987 anche l’ISO lo ha approvato
chiamandolo ISO 8802.
Le relazioni tra lo standard IEEE 802 e il modello OSI è mostrata nella Figura 12.1.
Nello standard IEEE 802 lo strato di collegamento è stato diviso in due sottostrati:
1. sottostrato LLC
2. sottostrato MAC
Ethernet Standard:
Le reti Ethernet sono state create nel 1976 nel centro di ricerca della Xerox di Palo Alto in
California. Da allora le reti Ethernet si sono evolute attraverso quattro generazioni: Ethernet
Standard (10 Mbps), Ethernet veloce (100 Mbps), Ethernet gigabit(1 Gbps)
Ethernet 10 Gigabit(10 Gbps), come mostrato nella figura 12.3.
Sottostrato MAC: Nelle reti Ethernet standard, il sottostrato MAC è responsabile della creazione
dei Frame e gestisce il metodo di accesso al mezzo trasmissivo.
Formato del frame:
• PREAMBOLO
• DELIMITATORE
• INDIRIZZO DESTINAZIONE
• INDIRIZZO MITTENTE
• LUNGHEZZA (O TIPO)
• DATI
• CRC
Lunghezza del frame:
La restrizione sulla lunghezza minima è necessaria per permettere il corretto funzionamento del
metodo CSMA/CD. Un frame Ethernet deve avere una lunghezza minima di 512 bit(64 byte) per
permettere la rivelazione delle collisioni.
Lo standard definisce anche una lunghezza massima di un frame(senza il PREAMBOLO e il
DELIMITATORE) di 1528 Byte.
Indirizzi ETHERNET:
Ogni nodo in un rete Ethernet ha un’interfaccia di rete grazie alla quale si collega al mezzo
trasmissivo condiviso. L’interfaccia di rete Ethernet si trova fisicamente all’interno del nodo e viene
identificata da un indirizzo fisico di 6 byte(48 bit); tale indirizzo è codificato nell’hardware
dell’interfaccia.
68
Il bit meno significativo del primo byte di un indirizzo Ethernet definisce il tipo di indirizzo.
Se il bit vale 0, l’indirizzo è singolo, altrimenti è di gruppo.
Metodo di accesso: CSMA/CD
Le reti Ethernet standard utilizzano il protocollo CSMA/CD e il metodo di 1-insistenza per l’accesso
al mezzo trasmissivo.
Intervalli di tempo: Pertanto l’intervallo di tempo d utilizzare con il metodo CSMA/CD è dato da
due volte il tempo di propagazione massimo(tempo di andata e ritorno) più il tempo necessario per
spedire un segnale di disturbo. Per una Ethernet standard a 10Mbps tale tempo è pari a
51.2 µs ed equivale al tempo necessario a un nodo per spedire 512 bit.
Lunghezza della rete: La lunghezza massima della rete dipende dalla velocità di propagazione
del segnale e quindi legata agli intervalli di tempo utilizzati nel metodo CSMA/CD.
La massima lunghezza della rete Internet a 2500 m, cioè il 48% del limite teorico.
La lunghezza massima di una rete Ethernet è di 2500 m.
STRATO FISICO:
10base5: Nell’implementazione chiamata 10base5 o anche Ethernet a cavo coassiale grosso(tick
Ethernet o anche Thicknet), il mezzo trasmissivo utilizzato è un cavo coassiale il cui spessore è più
o meno quello dei tubi dell’acqua che si usano per i giardini ed è sufficientemente rigido da non
poter essere piegato con le mani.
10base2: Nell’implementazione chiamata 10base2 o anche Ethernet a cavo coassiale sottile(Thin
Ethernet o anche Cheapernet), il mezzo trasmissivo è un cavo coassiale molto più sottile e
flessibile.
69
10base-T: Nell’implementazione chiamata 10base-T o anche Ethernet a doppino, il mezzo
trasmissivo utilizzato è un doppino(cavo UTP).
10base-F: Nell’implementazione chiamata 10base-F o anche Ethernet in fibra ottica, il mezzo
trasmissivo utilizzato è la fibra ottica.
MODIFICHE DELLO STANDARD
Ethernet con bridge: Il primo passo dell’evoluzione di Ethernet è stato quello della divisione di
una rete LAN in vari pezzi collegati tra di loro da nodi di commutazione chiamati bridge.
L’uso di bridge nelle reti Ethernet ha avuto due effetti collegati: aumentare la larghezza di banda e
separare le collisioni.
Aumento della larghezza di banda: In una rete Ethernet senza bridge, la capacità totale del
canale, 10Mbps, è condivisa fra tutti i nodi che devono spedire un frame.
Un bridge divide la rete in due o più parti. Ognuna di queste parti, che è a tutti gli effetti una rete, è
indipendente dalle altre per quanto riguarda la larghezza di banda.
Ad esempio, nella figura 12.15 una rete con 12 nodi viene divisa in 2 reti, ognuna con 6 nodi.
Ognuna delle due reti di 6 nodi(in realtà 7 nodi perché il bridge è un nuovo nodo della rete) ha una
capacità di 10Mbps.
70
Il vantaggio che si ottiene è che per ogni rete la larghezza di banda di 10Mbps deve essere
condivisa solo tra 6 nodi, non tra 12.
Ethernet con switch: Portando all’estremo l’idea introdotta nel precedente paragrafo si può
arrivare ad avere un segmento per ogni singolo nodo. Quindi se la rete è composta da N nodi, ogni
nodo sarà direttamente collegato ad un nodo di commutazione, chiamato in questo caso switch.
In altre parole stiamo dividendo la rete iniziale in N segmenti, e ogni segmento consiste di un
singolo nodo e dello switch, come mostrato nella figura 12.17.
Ethernet veloce: Le reti Ethernet veloci sono state progettate per competere con le reti LAN ad
alta velocità come le reti FDDI o le reti in fibra ottica.
Ethernet 10-Gigabit: L’IEEE ha creato un nuovo standard, chiamato 802.3ae, per reti Ethernet
che funzionano alla velocità di 10Gbps.
71
CAPITOLO 14:
CONNESIONI DI RETI LAN,
DORSALI E RETI VIRTUALI
Introduzione: Le reti locali(LAN, Local Area Network) normalmente non sono isolate. Spesso sono
connesse tra di loro e alla rete Internet. Per connettere più reti tra loro, vengono utilizzati dei
dispositivi di connessione.
Dispositivi di connessione: I dispositivi di connessione possono essere divisi in 5 categorie in
base allo strato in cui essi operano nell’architettura di rete, come mostrato nella figura 14.1.
Le 5 categorie contengono dispositivi che possono essere classificati nel seguente modo:
1. quelli che operano al di sotto dello strato fisico(ad esempio, hub passivi);
2. quelli che operano nello strato fisico(ad esempio, ripetitore e hub attivi);
3. quelli che operano nello strato fisico e nello strato di collegamento(bridge o switch di livello
2);
4. quelli che operano nello strato fisico, in quello di collegamento e in quello di rete(router o
switch di livello 3);
5. quelli che operano in tutti gli strati(gateway).
Hub passivi:
Un hub passivo è semplicemente un connettore. Esso connette i cavi che convergono nel
connettore. Ad esempio, in una rete Ethernet con topologia a stella, un hub passivo è il punto in cui
i segnali che arrivano da varie stazioni possono collidere. Questo tipo di dispositivo di connessione
fa parte a tutti gli effetti del canale trasmissivo; infatti la sua collocazione rispetto all’architettura di
rete è al di sotto dello strato fisico.
Ripetitore:
Un ripetitore è un dispositivo che opera solo nello strato fisico. I segnali che viaggiano nei cavi
subiscono un’attenuazione che fa diminuire la potenza del segnale mettendo a rischio l’integrità dei
dati. Un ripetitore riceve un segnale prima che questo diventi troppo debole e rigenera il segnale
corrispondente ai bit codificati dal segnale stesso.
Il ripetitore spedisce il nuovo segnale( rigenerato).
Un ripetitore connette due segmenti di una rete LAN.
Un ripetitore inoltra ogni frame che riceve; non ha possibilità di filtrare i frame.
Un amplificatore non differenzia il segnale e il rumore; esso amplifica qualsiasi cosa riceve. Un
ripetitore è un rigeneratore, non un amplificatore.
Hub attivi:
Un hub attivo è in pratica un ripetitore a più porte. Normalmente viene utilizzato per creare la
connessione tra i nodi di una rete con topologia a stella.
72
Bridge:
Un bridge opera sia nello strato fisico che in quello di collegamento. Dal punto di vista dello strato
fisico un bridge ha la stessa funzionalità di un ripetitore: rigenera il segnale che riceve. Dal punto di
vista dello strato di collegamento, un bridge può controllare l’indirizzo fisico della sorgente e della
destinazione contenuti nel frame e prendere delle decisioni in base a questi indirizzi.
Bridge trasparenti:
Un bridge trasparente è un bridge la cui presenza non viene percepita dai nodi della rete; se un
bridge viene inserito o tolto dalla rete, non è necessario riconfigurare i nodi.
In accordo allo standard IEEE 802.1d, una rete che utilizza bridge trasparenti deve soddisfare 3
requisiti:
1. i frame devono essere inoltrati da un nodo verso un altro nodo(non possono essere
indirizzati ad un bridge);
2. le tabelle di inoltro dei bridge devono essere costruite automaticamente osservando il
traffico sulla rete;
3. occorre prevenire cicli per i frame inoltrati dai bridge.
Inoltro: Un bridge trasparente deve inoltrare correttamente, cioè verso la destinazione, i frame che
riceve.
Apprendimento: Una soluzione migliore è quella di avere delle tabelle di inoltro dinamiche che
vengono aggiornate dal bridge stesso. Infatti il bridge può imparare la posizione dei nodi all’interno
della rete osservando il traffico che arriva sulle porte di ingresso. Per fare ciò, quando arriva un
frame il bridge controlla anche l’indirizzo del mittente, oltre a quello della destinazione. L’indirizzo
della destinazione viene usato per decidere dove inoltrare il frame; l’indirizzo del mittente viene
utilizzato per inserire i dati nella tabella d’inoltro. Inizialmente le tabelle di inoltro sono vuote;
quando arrivano nuovi frame, vengono inseriti nuovi dati. Vediamo come funziona questo processo
facendo riferimento alla figura 14.6.
73
1. Quando il nodo A spedisce un frame al nodo D, il bridge non ha nessuna informazione nella
tabella. Quindi non sa dove inoltrare il frame; in questo caso il frame viene inoltrato su tutte le
porte(tranne quella dalla quale è arrivato). Tuttavia il bridge, guardando l’indirizzo del mittente
del frame, cioè il nodo A, deduce che tale nodo deve essere raggiungibile tramite la porta 1.
Questa informazione può essere inserita nella tabella d’inoltro: se il bridge dovesse ricevere in
futuro frame destinate al nodo A, sa che deve inoltrarli sulla porta 1. A questo punto la tabella
di inoltro del bridge contiene una riga.
2. Quando il nodo E spedisce un frame A, il bridge sa dove si trova il nodo A e inoltra il frame
solo verso la porta 1. Inoltre può usare l’informazione relativa al mittente di questo nuova
frame per aggiungere una nuova riga nella tabella di inoltro.
3. Quando il nodo B spedisce un frame al nodo C, il bridge non ha informazioni sulla posizione
del nodo C. Quindi il frame viene inoltrato su tutte le porte(tranne quella dalla quale è arrivato).
Una nuova informazione, relativa al nodo B viene inserita nella tabella di inoltro.
4. Quando il nodo A spedisce un frame al nodo E, il bridge sa dove si trova il nodo E e inoltra il
frame solo sulla porta 3. In questo caso l’informazione relativa al mittente non è utile in quanto
il bridge conosce già la posizione del nodo A.
5. Questo processo di apprendimento viene ripetuto per ogni frame inoltrato dal bridge.
Cicli: I bridge trasparenti funzionano senza problemi a patto che non ci siano dei cicli nella rete. Un
ciclo viene formato quando si utilizzano dei bridge addizionali che spesso sono utili per rendere la
rete tollerante ai guasti. Ad esempio due segmenti di una stessa rete possono essere collegati da
due bridge in modo tale che anche se uno dei due bridge si guasta la rete può continuare a
funzionare utilizzando l’altro bridge. Una ridondanza di bridge però, può creare dei cicli nella rete.
La figura 14.7 mostra un esempio molto semplice in cui il ciclo viene creato da due bridge che
connettono due reti. Esaminiamo il problema che si crea:
74
1. il nodo A spedisce un frame al nodo D. Le tabelle di entrambi i bridge sono vuote. Pertanto
entrambi i bridge inoltreranno il frame e inseriranno un’informazione relativa al nodo A nella
propria tabella;
2. a questo punto ci sono due copie del frame sulla rete LAN2. La copia spedita dal bridge1 viene
ricevuta anche dal bridge2, che non ha nessuna informazione riguardo al nodo di destinazione
D e pertanto inoltra il frame sulla porta 1. In modo analogo, la copia spedita dal bridge2 verrà
anch’essa inoltrata dal bridge1 sulla porta 1.
3. Adesso ci sono 2 copie del frame sulla rete LAN1 e si verifica la stessa situazione del punto
precendente: le due copie del frame verranno inoltrate sulla rete LAN2.
4. Si noti che poiché i bridge sono anche dei ripetitori, i frame vengono rigenerati. Il processo
continua all’infinito.
Per risolvere il problema dei cicli, le specifiche dell’IEEE richiedono che i bridge usino un albero
ricoprente(spannino Tree) per creare una topologia(logica) senza cicli.
Albero ricoprente: Dato un paragrafo che rappresenta una rete, un albero ricoprente del grafo, e
quindi della rete, è una nuova versione del grafo ottenuta rimuovendo degli archi in modo tale da
eliminare tutti i cicli. Questa nuova versione è un albero(non ha cicli) e si chiama ricoprente perché
75
contiene tutti i nodi del grafo originale. La rete viene rappresentata con un grafo che ha un nodo
per ogni segmento e per ogni bridge e degli archi per tutti i collegamenti creati dai bridge.
Ovviamente non si può, e non si vuole, cambiare al topologia fisica, ma se ne crea una logica che
corrisponde ad un albero ricoprente di questo grafo. La figura 14.8 mostra una rete con 4 segmenti
LAN e 5 bridge; la figura mostra anche la rappresentazione della stessa rete con un grafo. Per
stabilire l’albero ricoprente, vengono assegnati dei costi ad ogni arco. Tale assegnazione viene
fatta dall’amministratore della rete e può essere funzione della latenza, della larghezza di banda e
della distanza(numero di hop).
Switch:
Il termine switch ha un doppio significato: esso indica sia un bridge, sia un router o un gateway.
Per eliminare l’ambiguità si parla di switch di livello2(bridge) e di livello3(router o gateway). Uno
switch di livello2 è sostanzialmente un bridge; spesso, però, uno switch è più sofisticato: può avere
della memoria interna per memorizzare i frame ed è capace di inoltrare i frame a velocità maggiori.
Le ultime generazioni di switch hanno anche la capacità di iniziare a inoltrare un frame prima che la
ricezione sia stata completata(iniziano a inoltrare il frame appena riescono a leggere l’indirizzo
della destinazione). Questi switch vengono solitamente chiamati switch cut-through per distinguerli
da quelli tradizionali che invece vengono chiamati switch store-and-forward(perché devono prima
memorizzare tutto il frame per poi poterlo inoltrare).
[Cut through per renderlo più sicuro].
Router:
Un router è un dispositivo capace di inoltrare i pacchetti in una rete in base all’indirizzo logico della
destinazione(ad esempio nella rete Internet, in base all’indirizzo IP). Normalmente un router
connette reti LAN e WAN a Internet ed ha una tavola di routing che viene utilizzata per prendere le
decisioni di instradamento dei pacchetti.
Gateway:
Alcuni libri usano il termine gateway come sinonimo di router; la maggior parte della letteratura,
tuttavia, distingue i due termini. Un gateway è un dispositivo di connessione che opera in tutti gli
strati dell’architettura di rete. un gateway riceve un messaggio da un’applicazione, lo legge e lo
interpreta. Questo significa che può essere utilizzato come un dispositivo di connessione fra due
interreti che utilizzano due modelli diversi.
Dorsali:
Un dorsale permette di connettere molte reti LAN tra di loro. I singoli nodi non sono direttamente
connessi alla dorsale, ma fanno parte delle reti LAN; la dorsale connette le reti LAN attraverso
opportuni dispositivi. La dorsale stessa è una rete LAN e utilizza protocolli come Ethernet; ogni
nodo della rete dorsale è a sua volta una rete LAN.
76
Una dorsale può essere implementata con varie topologie; discuteremo solo delle due topologie
più comuni: la topologia BUS e la topologia a STELLA.
Dorsali a BUS:
In una dorsale a BUS la connessione tra le varie reti è ottenuta con un mezzo trasmissivo
condiviso sul quale vengono agganciate le varie reti, esattamente come succede per una rete LAN
con topologia a BUS( la dorsale è una rete LAN).
In una dorsale a BUS, la topologia della rete è un BUS.
Dorsali a STELLA:
In una dorsale a stella, a volte chiamata dorsale con switch, la topologia della rete è a stella. In
questa configurazione, la dorsale si riduce semplicemente ad uno switch che connette le varie reti
LAN.
Connessione di LAN a grandi distanze:
I bridge funzionano come dispositivi di connessione e connettono le reti LAN grazie a
collegamenti(reti) di tipo punto-punto, come linee telefoniche o ADSL.
Un collegamento punto-punto può funzionare come dorsale per connettere reti LAN a grandi
distanze attraverso l’uso di bridge remoti.
Reti LAN virtuali: L’idea che sta alla base delle reti virtuali è quella di dividere la rete in segmenti
logici, anziché fisici. In questo modo una rete LAN viene divisa in varie reti logiche chiamate
appunto VLAN. Ogni VLAN corrisponde, ad esempio, ad un gruppo di lavoro. Con questa
configurazione è facile spostare un nodo da una rete ad un’altra, in quanto non c’è bisogno di
nessun cambiamento nella struttura fisica della rete. L’appartenenza ad un gruppo in una VLAN
viene definita via software e non attraverso collegamenti fisici. Pertanto lo spostamento di un nodo
da una rete ad un’altra diventa molto facile.
77
Gruppi:
Come si può gestire l’appartenenza di un nodo ad una rete virtuale? A tal fine si possono usare
varie caratteristiche dei nodi: numeri di porta, indirizzi fisici, indirizzi logici(IP), indirizzi di multicast o
una combinazione di queste caratteristiche.
Numeri di porta: In questo caso l’appartenenza di un nodo a una rete virtuale è determinata dal
numero di porta della connessione del nodo alla rete.
Indirizzi fisici: L’appartenenza a una rete virtuale può anche essere determinata dall’indirizzo
fisico del nodo. Ad esempio, l’amministratore può stabilire che le stazioni con indirizzi fisici
E2:13:42:A1:23:34, F2:A1:23:BC:D3:41 e A5:17:5B:23:EF:1° appartengono alla rete VLAN3.
Indirizzi logici(IP): Anche gli indirizzi logici, ad esempio gli indirizzi IP, possono essere utilizzati
per stabilire l’appartenenza ad una rete virtuale. Ad esempio l’amministratore può stabilire che i
nodi con indirizzi IP 181.34.23.67, 181.34.23.272, 181.34.23.98 e 181.34.23.112 appartengono alla
rete VLAN1.
Indirizzi di Multicast: Un altro modo per definire l’appartenenza ad una rete virtuale è quella di
utilizzare gli indirizzi di multicast IP. In questo caso il multicast fatto nello strato IP viene
trasformato in un multicast nello strato di collegamento.
Combinazione: Il software messo a disposizione da alcuni produttori permette di combinare varie
di queste caratteristiche per definire l’appartenenza ad una rete virtuale. L’amministratore può
scegliere una o più di queste caratteristiche in fase di installazione del software. inoltre il software
può essere riconfigurato anche successivamente.
78
PARTE IV STRATO DI RETE
CAPITOLO 18:
INDIRIZZI LOGICI
La comunicazione nello strato di rete avviene fra due nodi della rete: un computer che si trova in
qualche parte del mondo deve comunicare con un altro computer che si trova in qualche altra parte
del mondo. Gli indirizzi logici utilizzati dalla rete Internet, cioè dallo strato di rete della suite di
protocolli TCP/IP, vengono chiamati indirizzi IP.
Indirizzi IPv4:
Un indirizzo IPv4 è una sequenza di 32 bit che identifica in modo unico ed universale un dispositivo
connesso alla rete Internet.
Un indirizzoIPv4 è una sequenza di 32 bit
Un indirizzo IP identifica in modo unico un dispositivo, nel senso che su tutta la rete Internet un
particolare indirizzo IP è associato a un solo nodo. Gli indirizzi IP sono universali nel senso che il
sistema di indirizzamento deve essere accettato da tutti i nodo che sono connessi alla rete Internet.
Gli indirizzi IP sono unici e universali
Spazio di indirizzamento:
Lo spazio di indirizzamento è l’insieme degli indirizzi che possono essere utilizzati. Poiché il
protocollo IP utilizza indirizzi lunghi 32 bit, lo spazio di indirizzamento consiste di 232 indirizzi (più di
4 miliardi).
Lo spazio di indirizzamento di IPv4 contiene 232 indirizzi
Notazione:
Un indirizzo IP è tipicamente specificato utilizzando la notazione binario oppure la notazione
decimale con punto. Con la notazione binaria l’indirizzo è una sequenza di 32 cifre binarie che
per comodità di lettura vengono solitamente raggruppate in byte, cioè in gruppi di 8 bit
01110101 10010101 00011101 00000010
Per rendere un indirizzo IP più facile da leggere e ricordare, viene spesso utilizzata la notazione
decimale. Ognuno dei 4 byte viene specificato con il suo valore e i quattro numeri decimali
vengono separati da tre punti
117.149.29.2
Indirizzamento con classi:
Il progetto degli indirizzi IPv4 prevede il concetto di classe. Gli indirizzi IPv4 sono divisi in cinque
classi, identificate con le prime cinque lettere dell’alfabeto: A, B, C, D ed E. A ogni classe
corrisponde una parte dello spazio di indirizzamento.
Con lo schema di indirizzamento con le class, lo spazio di indirizzamento IPv4 viene diviso in
cinque classi: A, B, C, D, E
La classe viene specificata dai primi bit della sequenza di 32 bit. Chiaramente è possibile risalire
alla classe sia guardando la notazione binaria che quella decimale dell’indirizzo IP.
79
Classi e blocchi:
Il problema principale dell’indirizzamento con classi è che ogni classe è divisa in un numero fissato
di blocchi, ognuno costituito da un numero fissato di indirizzi
I blocchi di classe A venivano utilizzati per organizzazione molto grandi che dovevano utilizzare reti
con numero di nodi molto grande (fino a circa 16 milioni). I blocchi di indirizzi di classe B venivano
utilizzati per organizzazioni di grandezza media (fino a circa 65000 nodi). Infine, i blocchi di indirizzi
di classe C venivano utilizzati per organizzazioni piccole che avevano solo pochi nodi (fino a 256)
nelle proprie reti. Come si può intuire dal numero di nodi indirizzabili, per le classi A e B questa
suddivisione comporta un enorme spreco di indirizzi. Gli indirizzi di classe D sono stati progettati
per la comunicazione multicast: ogni indirizzo in questa classe viene utilizzato per identificare un
gruppo di nodi di Internet e un messaggio spedito ad un indirizzo di multicast verrà consegnato a
tutti i nodi appartenenti al gruppo. Infine gli indirizzi di classe E furono riservati per eventuali utilizzi
futuri.
L’indirizzamento con classi crea un grosso spreco di indirizzi IPv4
Indirizzi di reti e di host:
Con l’indirizzamento con le classi un indirizzo IP delle classi A, B, C viene diviso in due parti:
indirizzo di rete e indirizzo di host. La lunghezza di ognuna di queste due parti dipende dalla
classe. Un indirizzo di classe A prevede 7 bit per l’indirizzo di rete (il primo bit serve per identificare
la classe) e i restanti 24 per l’indirizzo di host; un indirizzo di classe B prevede 14 bit per la rete (i
primi due bit servono alla classe) e i restanti 16 per l’host; un indizio di classe C prevede 21 bit per
la rete e i restanti 16 per l’host. E’ opportuno sottolineare che il concetto di indirizzo di rete e di host
non esiste per gli indirizzi delle classe D ed E.
Maschere:
Sebbene la lunghezza dell’indirizzo di rete e dell’indirizzo di host sia predeterminata dalla classe di
appartenenza, è possibile utilizzare una cosiddetta maschera che consiste in una sequenza di 32
bit fatta di una sequenza di 1 consecutivi. La maschera viene utilizzata per estrarre rapidamente da
un indirizzo IP l’indirizzo di rete oppure l’indirizzo di host: un’operazione di AND bit a bit fra un
indirizzo IP e la corrispondente maschera restituisce l’indirizzo di rete, mentre un’operazione di
AND bit a bit fra un indirizzo IP e il complemento della corrispondente maschera restituisce
l’indirizzo di host.
Subnetting:
Il subnetting è stato utilizzato per dividere un blocco di indirizzi di classe A o B (ma anche C) in vari
sottogruppi di indirizzi consecutivi, in modo tale che ognuno di questi gruppi costituisce una
sottorete. In pratica la lunghezza dell’indirizzo di rete viene incrementata in modo da avere alcuni
bit che servono a identificare la sottorete all’interno della rete.
Supernetting:
Il numero di blocchi di indirizzi di classe A e B è relativamente piccolo se confrontato con il numero
di blocchi di indirizzi C. Pertanto gli indirizzi di classe A e B sono stati esauriti più velocemente.
Una soluzione a questo problema è stato il supernetting. Con la tecnica di supernetting
un’organizzazione può combinare vari blocchi contigui di classe C per creare dei blocchi di indirizzi
più grandi. In altre parole, più reti vengono messe insieme per creare una rete più grande, cioè una
supernet. In questo caso la lunghezza dell’indirizzo di rete viene incrementato in modo tale da
accordare tutti i blocchi di indirizzi di rete che vengono utilizzati.
Indirizzamento senza classi:
80
L’indirizzamento senza classi ha allevato il problema dell’esaurimento degli indirizzi permettendo di
gestire in maniera più oculata i blocchi di indirizzi da assegnare alle singole organizzazioni. Con
questo schema di indirizzamento non esistono più classi, anche se gli indirizzi sono comunque
assegnati in blocchi
Maschere:
Per poter gestire blocchi di dimensioni 2i con i arbitrario e compreso fra 1 e 31, è necessario
utilizzare delle maschere specificate da /n dove n è un intero qualsiasi fra 1 e 31; se un blocco
consiste di 2i indirizzi, allora la sua maschera è /32-i
ESEMPIO 18.5
Qual è il primo indirizzo del blocco di indirizzi 205.16.37.39/28? Qual è l’ultimo indirizzo? Quanto è
grande il blocco?
Il blocco contiene 232 – 28 = 24 = 16
Il primo indirizzo del blocco può essere facilmente trovato scrivendo zero nei 32-n bit più a destra
dell’indirizzo IP. Lo stesso per l’ultimo si inseriscono bit uguali a 1. Nel nostro esempio, il primo è
205.16.37.32 e l’ultimo 205.16.37.47
ESEMPIO 18.6
Un altro modo per trovare il primo e l’ultimo indirizzo è il seguente:
La maschera del blocco 205.16.37/28 è 11111111 11111111 11111111 11110000 (ventotto 1 e
quattro 0). Il primo indirizzo del blocco può essere trovato con un operazione di AND bit a bit fra
l’indirizzo del blocco e la maschera
Indirizzo blocco
Maschera
Primo indirizzo
11001101 00010000 00100101 00100111
11111111 11111111 11111111 11110000
11001101 00010000 00100101 00100000
L’ultimo indirizzo può essere trovato con un’operazione di OR bit a bit fra l’indirizzo del blocco e il
complemento della maschera
Indirizzo blocco
11001101 00010000 00100101 00100111
Maschera
00000000 00000000 00000000 00001111
Ultimo indirizzo
11001101 00010000 00100101 00101111
Indirizzo di rete
Un concetto molto importante per il protocollo IP è quello di indirizzo di rete. Quando ad una
organizzazione viene assegnato un blocco di indirizzi IP, l’organizzazione è libera di allocare questi
indirizzi ai dispositivi che deve connettere alla rete Internet. Il primo indirizzo del blocco viene
normalmente trattato come un indirizzo speciale. Questo indirizzo è chiamato l’indirizzo di rete e
identifica la rete dell’organizzazione all’interno di Internet. La rete connessa a Internet attraversa un
dispositivo speciale chiamato router. Il router ha due indirizzi IP, uno che appartiene al blocco 205.
16.37.32/28 e l’altro che appartiene all’altra rete alla quale il router è connesso; tale indirizzo viene
indicato genericamente x.y.w.z/n
Il primo indirizzo di un blocco non viene normalmente assegnato al nodo: esso viene utilizzato per
identificare la rete all’interno di Internet.
Broadcast limitato:
Anche l’ultimo indirizzo di un blocco di indirizzi utilizzati per una rete viene trattato normalmente
come indirizzo speciale. Questo indirizzo è chiamato indirizzo di broadcast limitato: i messaggi
81
spediti a questo indirizzo vengono consegnati a tutti i nodi della rete x.y.w.z/n. Viene chiamato
limitato perché è limitato soltanto alla rete x.y.w.z/n.
Gerarchia a 2 o 3 livelli:
Gli indirizzi IP hanno una gerarchia a due livelli, se non si utilizza il subnetting, oppure a tre livelli,
se si utilizza il subnetting. La struttura a due livelli è formata dall’indirizzo di rete e dall’indirizzo di
host. L’indirizzo x.y.w.z/n consiste di due parti: i primi n bit (quelli a più sinistra) identificano la rete
e costituiscono il primo livello della gerarchia; i rimanenti 32-n bit (quelli più a destra) identificano
un particolare dispositivo all’interno della rete e rappresentano il secondo livello della gerarchia.
Tutti i messaggi vengono spediti al router che connette l’organizzazione con il resto di Internet; il
router si preoccupa di spedire i messaggi alle appropriate sottoreti.
E’ opportuno sottolineare che dei 6 bit a disposizione dell’organizzazione il valore del primo bit per
la sottorete 1 e i valori del primo e del secondo bit per le sottoreti 2 e 3 devono essere scelti
opportunamente per poter distinguere le sottoreti.
Gerarchia a più di 3 livelli:
Un ISP nazionale può dividere il proprio blocco di indirizzi in blocchi più piccoli e assegnare ognuno
di questi a un ISP regionale. Un ISP regionale può ulteriormente dividere il proprio blocco di
indirizzi in sottoblocchi da assegnare a ISP locali. Un ISP locale può operare un’ulteriore
suddivisione per assegnare blocchi di indirizzi ancora più piccoli a diverse organizzazioni. Infine
un’organizzazione può dividere il blocco di indirizzi ricevuto per creare varie sottoreti.
Allocazione degli indirizzi:
Gli indirizzi Internet vengono assegnati da un’autorità che opera a livello globale e che si chiama
ACANN (Internet Corporation for Assigned Names and Address). Ovviamente, l’ICANN non
assegna gli indirizzi direttamente alle singole organizzazioni, ma assegna grandi blocchi di indirizzi
agli ISP. Ogni ISP, a sua volta, divide il blocco in (sotto)blocchi più piccoli e li assegna ai propri
clienti. Questa tecnica viene chiamata aggregazione degli indirizzi: molti blocchi di indirizzi
vengono aggregati in un unico blocco gestito da un singolo ISP
82
Esempio 18.7
Un ISP gestisce il blocco di indirizzi 190.100.0.0/16 (65536 indirizzi). L'ISP deve distribuire questi
indirizzi a tre gruppi di clienti nel seguente modo:
1. Il rimo gruppo a 64 clienti, ognuno dei quali ha bisogno di 256 indirizzi.
2. I l
secondo gruppo a 128 clienti, ognuno dei quali ha bisogno di 128
indirizzi.
3. Il terzo gruppo a 128 clienti, ognuno dei quali ha bisogno di 64 indirizzi.
Mostrare una possibile allocazione.
Soluzione
I clienti del primo gruppo hanno bisogno, ognuno, di un gruppo di 256 indirizzi. Questo significa che
l'indirizzo di host che devono utilizzare deve avere 8 bit. Pertanto le maschere di sottorete per questi
clienti dovranno essere /24. Possiamo assegnare il blocco 190.100.0.0/24 al primo cliente di questo
gruppo, il blocco 190.100.1.0/24 al secondo, il blocco 190.100.2.0/24 al terzo e così via fino ad arrivare
al blocco 190.100.63.0/24 che sarà assegnato al 64° cliente di questo primo gruppo. Il totale degli
indirizzi assegnati a questo primo gruppo è 64 x 256 = 16384.
Per i clienti del secondo gruppo è sufficiente un blocco di 128 indirizzi. Pertanto le maschere dovranno
essere /25. Possiamo assegnare il blocco 190.100.64.0/25 al primo cliente, il blocco 190.100.64.128/25
al secondo, il blocco 190.100.65.0/25 al terzo, il blocco 190.100.65.128/25 al quarto e così via fino al
blocco 190.100.127.128/25 che verrà assegnato al 128° cliente del secondo gruppo. Il totale degli
indirizzi assegnati a questo secondo gruppo è 128 x 128 = 16384.
Infine per il terzo gruppo ogni cliente ha bisogno di soli 64 indirizzi. Pertanto le maschere dovranno
essere /26. Possiamo assegnare il blocco 190.100.128.0/26 al primo cliente, il blocco 190.100.128.64/26
al secondo, il blocco 190.100.128.128/26 al terzo, il blocco 190.100.128.192/26 al quarto, il blocco
190.100.129.0/26 al quinto e così via fino al blocco 190.100.159.192/26 che verrà assegnato al 128°
cliente. Il totale degli indirizzi assegnati al terzo gruppo è 128 x 64 = 8192.
Il totale degli indirizzi assegnati ai tre gruppi è di 40960. Il resto degli indirizzi (65536 - 40960 =
24576) rimarrà disponibile per ulteriori utilizzi da parte dell'ISP. La Figura 18.8 riepiloga l'allocazione
descritta.
NAT (Network Address Translation):
La tecnica di traduzione degli indirizzi di rete, comunemente conosciuta con l’acronimo NAT, viene
utilizzata per ridurre la necessità di indirizzi IP
Con questa tecnica un utente può utilizzare arbitrariamente degli insieme di indirizzi IP locali che
non sono visibili su tutta la rete Internet, e un solo indirizzo IP o un numero molto piccolo di indirizzi
IP visibili esternamente. Il traffico interno potrà utilizzare l’insieme di indirizzi locali, mentre il traffico
esterno dovrà utilizzare gli indirizzi visibili su tutta la rete. Ovviamente gli indirizzi locali, essendo
appunto locali, non devono essere richiesti alle autorità competenti. Proprio per questo motivo il
progetto degli indirizzi IP ha previsto tre insieme di indirizzi che possono essere usati localmente e
che non vengono utilizzati mai come indirizzi visibili sulla rete Interne.
83
Chiunque può utilizzare liberamente questi indirizzi senza chiedere il permesso a nessuno.
Ovviamente il loro utilizzo deve essere sempre relegato all’interno delle singole organizzazioni,
cioè non può essere reso visibile all’esterno. L’interconnessione fra una rete locale e il resto di
Internet è in genere gestita attraverso un router che utilizza dei programmi di traduzione degli
indirizzi. Pertanto la rete interna è invisibile al resto di Internet che vedrà solo l’indirizzo esterno del
router NAT. Ovviamente tramite il router è possibile connettere a Internet l’intera rete locale.
Traduzione degli indirizzi
Quando i pacchetti in uscita dalla rete locale attraversano il router NAT, il router sostituisce
l’indirizzo sorgente del pacchetto, che è un indirizzo locale, con il proprio indirizzo pubblico.
Quando i pacchetti in entrata alla rete locale attraversano il router NAT, il router sostituisce
l’indirizzo di destinazione, che è l’indirizzo pubblico, con l’appropriato indirizzo locale. In pratica
qualsiasi nodo nel resto di Internet vede solo il router NAT e con esso scambia pacchetti di dati; il
router NAT gestisce questi pacchetti internamente alla rete locale in modo tale da permettere la
comunicazione dei computer locali con il resto di internet
Tabella di traduzione:
E’ abbastanza evidente che la traduzione dell’indirizzo dei pacchetti in uscita è molto semplice: il
router sostituisce l’indirizzo privato della reale sorgente del pacchetto con il proprio indirizzo in
modo tale che il destinatario veda il router NAT come mittente. Il pacchetto in entrata arriva al
router NAT e ha come indirizzo di destinazione l’indirizzo del router NAT; non c’è niente nel
pacchetto che indichi quella che deve essere la reale destinazione del pacchetto stesso, cioè
l’indirizzo locale. Il problema viene risolto utilizzando le cosiddette tavole di traduzione.
NAT con un solo indirizzo IP: Nella sua forma più semplice, una tabella di traduzione ha solo due
colonne: un indirizzo privato e un corrispondente indirizzo pubblico. Quando un pacchetto in uscita
attraversa il router NAT, il router, oltre a sostituire l’indirizzo sorgente nel pacchetto, inserisce nella
tabella di traduzione la corrispondenza fra l’indirizzo interno (privato) dal quale proviene il
pacchetto, che indicheremo con IPl , e l’indirizzo esterno (pubblico) al quale il pacchetto è destinato,
che indicheremo IPE. Quando al router NAT arriva un pacchetto che ha come sorgente IPE , il
router utilizza la tabella di traduzione per recuperare il corrispondente indirizzo interno IPl , che
verrà utilizzato nella sostituzione dell’indirizzo di destinazione del pacchetto in entrata. Con questa
strategia, la comunicazione fra un computer esterno deve sempre iniziare dal computer interno.
L’indirizzo del computer interno non è visibile al computer esterno e la tabella di traduzione
contiene l’informazione necessaria a identificare il computer interno solo dopo che questo ultimo ha
spedito un pacchetto. Come vedremo, questa strategia viene utilizzata da molti ISP che assegnano
un indirizzo IP locale ai propri utenti. In questi casi, la comunicazione con Internet viene sempre
iniziata dall’utente con un programma client che si connette al corrispondente programma server.
NAT con più indirizzi IP: La strategia precedente non funziona nel caso in cui due computer
interni vogliono comunicare con lo stesso computer esterno (server). In quel caso nella tabella di
traduzione si creerebbe un’ambiguità e il router NAT non saprebbe a chi consegnare i pacchetti in
entrata. Un modo per evitare questo problema è utilizzare più di un indirizzo IP esterno. In questo
caso si possono gestire un numero di comunicazione dall’interno verso lo stesso computer esterno
pari al numero di indirizzi esterni utilizzabili. IL problema viene così alleviato. Rimane il vincolo che
bisogna stabilire a priori un numero massimo di comunicazioni contemporanee con lo stesso host
esterno e che comunque un singolo host interno non può usufruire di due comunicazioni
contemporanee verso lo stesso host esterno.
84
NAT con indirizzi IP e porte: Una soluzione più flessibile ci viene fornita dall’utilizzo delle porte di
comunicazione. Occorre inserire nella tabella di traduzione più informazioni, in particolare quelle
relative alle porte di comunicazioni utilizzate; allora la tabella di traduzione potrebbe includere sia la
porta sorgente che la porta di destinazione e anche il protocollo di trasporto utilizzato.
Indirizzi speciali:
Il blocco di indirizzi 0.0.0/8 è un blocco di indirizzi speciale e non può essere usato per indirizzare
un host nella rete Internet. L’indirizzo con tutti 0 ha il significato di “questo host su questa rete”. Il
significato di “questo” può essere usato anche solo per la rete o solo per l’host. Anche il blocco di
indirizzi 127.0.0.0/8 è un blocco speciale. I suoi indirizzi sono detti indirizzi loopback: i dati in
uscita su un indirizzo di loopback non vengono mandati sulla rete, ma vengono consegnati in
entrata allo stesso computer che li ha spediti
Indirizzi IPv6:
L’indirizzamento senza classi, la strategia NAT e il protocollo DHCP alleviano il problema della
carenza di indirizzi IP, ma non lo risolvono. Questo e altri problemi del protocollo IPv4 sono stati la
motivazione per la versione 6 del protocollo IP.
Un indirizzo IPv6 è una sequenza di 128 bit, cioè una sequenza di 16 byte. Per rendere un
indirizzo IPv6 più leggibile viene utilizzata la notazione esadecimale, dividendo i 128 bit in otto
sezioni, ognuna di 2 byte. Le otto sezioni sono separate dal carattere “ : ” e ogni sezione viene
specificata con quattro cifre esadecimali. Pertanto un indirizzo consiste di 32 cifre esadecimali, con
un carattere “ : ” dopo ogni quattro cifre.
85
CAPITOLO 19:
PROTOCOLLO IP
Il protocollo IP (internet Protocol) è il protocollo principale della rete internet.
Discuteremo del protocollo IP versione 4, che è la versione attualmente usata in internet, e del
protocollo ip versione 6, che diventerà il protocollo dominante nel prossimo futuro.
Internetworking
Gli strati fisico e di collegamento di una rete operano localmente. Questi due strati, insieme, hanno
la responsabilità della consegna dei dati in una rete da un nodo a quello successivo.
La interrete mostrata nella fig 19.1 consiste di 5 reti: 4 rati LAN e una WAN. Se il nodo A deve
spedire un pacchetto di dati al nodo D, il pacchetto deve passare prima da A a R1 (che è uno
switch o un router ), poi da R1 a R3 e infine da R3 a D.
Necessità di avere uno strato di rete
Nel nodo mittente, lo strato di rete ha la responsabilità di creare un pacchetto con i dati in arrivo da
un protocollo degli starti superiori, come ad esempio un protocollo di trasporto o un protocollo di
routing.
In router o in uno switch, lo strato di rete ha la responsabilità di inoltrare il pacchetto verso la
destinazione. Quando il pacchetto arriva, il router o lo switch consulta la sua tavola di routing per
trovare l’interfaccia sulla quale il pacchetto deve essere inoltrato. Il pacchetto, dopo aver subito
alcuni cambiamenti nell’intestazione, viene nuovamente passato allo strato di collegamento.
Nella destinazione, lo strato di rete ha la responsabilità di verificare l’indirizzo di destinazione del
pacchetto in arrivo; deve cioè controllare che il pacchetto sia arrivato alla destinazione corretta. Se
il pacchetto è un frammento, lo strato di rete deve aspettare la ricezione di tutti i frammenti e quindi
riassemblarli per poter consegnare il pacchetto originale agli strati superiori.
86
Internet e reti a datagram
La rete internet è uno rete a commutazione di pacchetto con approccio a datagram.
Per la rete internet è stato scelto l’approccio a datagram per operare la commutazione di pacchetto
nello strato di rete.
la rete internet utilizza la commutazione di pacchetto con l’approccio a datagram per operare la
commutazione nello strato di rete.
Internet e reti senza connessione
La consegna dei pacchetti dal mittente alla destinazione può essere fatta utilizzando o un servizio
orientato alla connessione oppure un servizio senza connessione.
Utilizzando un servizio orientato alla connessine, il mittente deve prima instaurare una
connessione con la destinazione per poter successivamente spedire i pacchetti di dati. In questo
caso c’è una relazione tra i pacchetti: i pacchetti appartengono tutti alla stessa connessine e ogni
pacchetto è connesso, da un punto di vista logico, al pacchetto che viaggia prima di esso e al
pacchetto che viaggia dopo di esso. Quando tutti i pacchetti sono stati consegnati, la connessione
viene eliminata.
Utilizzando un servizio senza connessione, lo strato di rete tratta ogni pacchetto
indipendentemente dagli altri. Pertanto, in questo caso, non c’è nessuna relazione tra i pacchetti.
Anche se i pacchetti appartengono alla stessa sorgente, vanno verso la stessa destinazione e
fanno parte dello stesso messaggio, ognuno di essi attraversa la rete in modo indipendente; due
pacchetti potrebbero seguire strade diverse per arrivare alla destinazione.
Il servizio di comunicazione nello strato di rete di internet è senza connessione.
IPv4
Il protocollo IPv4 (internet protocol, versione 4) implementa il servizio di consegna dei
pacchetti(datagram) senza connessione.
87
Il protocollo IP offre un servizio di consegna detto best-effort. La consegna dei pacchetti avviene
senza connessione ed è inaffidabile; il protocollo non fornisce nessun meccanismo per il controllo
degli errori e per il controllo di flusso.
Si noti che poiché IPv4 implementa un servizio di consegna senza connessione con l’approccio a
datagram, i pacchetti vengono gestiti indipendentemente, ognuno può seguire una propria strada
per raggiungere la destinazione e per tanto i pacchetti possono arrivare in un ordine diverso da
quello in cui sono stati spediti.
Datagram
I pacchetti del protocollo IPv4 vengono chiamati datagram.
Un datagram è un pacchetto di dati con lunghezza variabile ed è diviso in due parti: un’intestazione
e un carico dati. L’intestazione ha una lunghezza k varia da 20 a 60 byte e contiene le informazioni
necessarie per permettere la consegna alla destinazione.
• Versione questo campo consiste di 4 bit e definisce la versione del protocollo IP.
Attualmente la versione è la numero 4.
• LI (lunghezza intestazione) questo campo consiste di 4 bit e definisce la lunghezza totale
dell’intestazione del datagram, misurata in parole di 4byte; pertanto la lunghezza
dell’intestazione deve essere un multiplo di 4. Quando non ci sono opzioni, la lunghezza
dell’intestazione è di 20 byte e il valore di questo campo è 5 (5 * 4 = 20). La presenza di
opzioni può far aumentare la lunghezza dell’intestazione fino ad un massimo di 60 byte; in
questo caso il valore di questo campo è 15 (15*4= 60) .
• Servizi questo campo consiste di 8 bit. Originariamente questo campo specificava il tipo di
servizio che doveva essere riservato al datagram. L’internet engineering task force (IETF)
ha successivamente cambiato l’interpretazione di questo campo che serve ora a specificare
i servizi differenziati
1) Tipo di servizio in questa interpretazione, i primi 3bit rappresentano la priorità, i successivi
4 specificano il tipo di servizio richiesto, mentre l’ultimo bit non è utilizzato.
a) Priorità il valore specificato da questi 3bit, da 0 a 7, rappresenta la priorità del
datagram in situazioni di congestione.
2) Servizi differenziati in questa interpretazione, i primi 6bit costituiscono un codice, mentre
gli ultimi 2bit non vengono utilizzati.
• Lunghezza totale questo campo di 16bit specifica la lunghezza totale del datagram IPv4; la
lunghezza viene misurata in byte. Poiché questo campo contiene 16bit la lunghezza totale di
un datagram IPv4 è al massimo 65535 (cioè 216 – 1)byte. I datagram devono essere
incapsulati in frame per poter essere spediti e molte delle tecnologie di rete utilizzate
attualmente prevedono una dimensione massima di un frame che tipicamente è molto +
piccola di 65535.
88
• Identificativo questo campo viene utilizzato per la frammentazione.(descritta nel prossimo
paragrafo)
• Flag (bit di segnalazione) questo campo viene utilizzato per la frammentazione.
• Offset (spiazzamento) anche questo campo viene usato per la frammentazione.
• TTL (time to live) il protocollo IP prevede che un datagram abbia un tempo di vita limitato
durante il suo viaggio nella rete: se non viene consegnato entro un certo tempo deve essere
eliminato. Questo campo serve ad implementare tale regola.
• Protocollo questo campo a 8bit definisce il protocollo degli strati superiori che sta
utilizzando il servizio offerto dal protocollo IP (che appartiene allo strato di rete), ad esempio
i protocolli TCP, UDP, ICMP e IGMP.
• Somma di controllo questo campo serve per la rilevazione degli errori. (ne discuteremo nel
seguito di questo capitolo)
• Indirizzo del mittente questo campo contiene l’indirizzo IPv4 del mittente. Il valore di
questo campo rimane inalterato durante il viaggio che il datagram effettua sulla rete per
arrivare dal mittente alla destinazione.
• Indirizzo della destinazione questo campo contiene l’indirizzo IPv4 dell’host al quale deve
essere consegnato il datagram. Anche il valore di questo campo deve rimanere inalterato
durante il viaggio del datagram
Esempio 19.1
Un datagram IPv4 arriva a un computer e i primi 8bit del datagram sono: 01000010. Il computer
elimina questo pacchetto. Perché?
Soluzione
I primi 4bit specificano il numero della versione del protocollo IP; questi 4bit sono corretti in quanto
il valore specificato è 4 (0100). I successivi 4bit specificano la lunghezza dell’intestazione, che in
questo caso vale 0010, cioè 2quindi il datagram ha in arrivo un’intestazione lunga 8 byte (2 * 4).
Questo è un errore in quanto la dimensione minima dell’intestazione di un datagram IPv4 è di 20
byte. Pertanto si sono verificati degli errori di trasmissione.
Esempio 19.2
In un datagram IPv4 il valore del campo LI è 1000in binario. quanti byte di opzioni sono inclusi
nell’intestazione?
Soluzione
La lunghezza dell’intestazione, in questo caso, è di 32byte (8 * 4). Un’intestazione senza opzioni è
lunga 20 byte; pertanto in questo caso ci sono 12 byte di opzioni.
Esempio 19.3
In un datagram IPv4 il valore del campo LI è 5 e il valore del campo lunghezza totale è 0*0028.
Quanti byte di dati sono trasportati nel datagram?
Soluzione
La lunghezza dell’intestazione in questo caso è di 20byte (5*20).la lunghezza totale, invece, è di
40byte (40 vale 0*0028 in esadecimale). Pertanto il datagram contiene 20byte di dati (40 – 20).
Esempio 19.4
Un datagram IPv4 arriva a un computer e i primi byte del datagram, in notazione esadecimale,
sono 0*45000028000100000102. Quanti router questo datagram può attraversare prima di essere
eliminato?a quale protocollo di strato superiore appartengono i dati trasportati nel datagram?
Soluzione
Per trovare il valore del campo TTL, saltiamo i primi 8byte(16cifre esadecimale). Il valore de TTL è
dato dal nono byte che vale 0*01 questo significa che il datagram può attraversare un solo
collegamento(verrà eliminato dal prossimo router). Il campo protocollo è specificato dal byte
successivo che vale 0*02. Dalla tabella 19.4 deduciamo che i dati appartengono al protocollo
IGMP.
89
Frammentazione
Per arrivare dalla sorgente alla destinazione, un datagram potrebbe attraversare varie reti.
Unità massima di trasferimento
Ogni protocollo dello strato di collegamento utilizza una propria forma per i frame. Il campo
riservato a contenere i dati da trasportare ne frame non può superare una certa grandezza; tale
limite viene chiamato MTU (Maximum transfer unit). In altre parole, quando un datagram viene
incapsulato in un frame, la grandezza totale del datagram deve essere minore del valore dell’ MTU
Quando si usa una tecnologia di rete che ha un MTU più piccolo di 65535, un datagram che è più
grande dell’MTU viene diviso in pezzi più piccoli per poter attraversare la rete. Questa operazione
viene chiamata frammentazione.
Se l’applicazione mittente produce datagram con dimensione più grande dell’MTU, lo strato di
trasporto si preoccuperà di frammentare il pacchetto in pezzi più piccoli che possono essere spediti
sulla rete.
Quando il datagram viene frammentato, ogni frammento diventa un nuovo datagram a tutti gli
effetti: esso ha una propria intestazione in cui la maggior parte dei campi hanno lo stesso valore di
quelli del datagram originale. Un datagram che è un frammento può a sua volta dover essere
frammentato, se si trova a dover attraversare una rete con un MTU ancora più piccolo. Quindi un
datagram può subire varie frammentazioni prima di raggiungere la destinazione finale.
Il riassemblaggio del datagram, invece, avviene solo alla destinazione. Infatti, ogni frammento
diventa a tutti gli effetti un datagram indipendente dagli altri e quindi viaggia indipendentemente
dagli altri sulla rete. ciò significa che è impossibile garantire che tutti i frammenti passino
attraverso un determinato nodo. Pertanto l’unico nodo che sicuramente riceve tutti i pacchetti ( a
meno di errori o perdite) è la destinazione.
Valori dell’MTU per alcuni protocolli: es. protocollo Ethernet MTU 1500
Campi dell’intestazione usati per la frammentazione
I campi dell’intestazione di un datagram IPv4 usati per la frammentazione e il riassemblaggio dei
frammenti sono il campo che contiene l’identificativo del datagram, il campo che contiene i bit di
segnalazione di frammentazione e il campo che contiene l’offset.
• Identificativo questo campo serve a identificare univocamente ogni datagram generato dalla
sorgente.
• Flag questo campo contiene tre bit di segnalazione. Il primo bit è riservato. Il secondo bit viene
chiamato bit di non frammentazione mentre il terzo bit viene chiamato bit di altri frammenti. Se il
bit di non frammentazione vale 1, allora il datagram non deve essere frammentato. Questo
significa che se il datagram non può essere inserito in un frame in quanto l’MTU non è
sufficientemente grande, esso dovrà essere eliminato; in questo caso, come vedremo nel capito
20, verrà inviato un messaggio di errore al mittente utilizzando il protocollo ICMP. Quando il bit
di altri frammenti vale 1, significa che ci sono altri frammenti di questo datagram; cioè questo
datagram non è l’ultimo frammento del datagram iniziale. Se il bit altri frammenti vale 0, allora
questo frammento è l’ultimo o l’unico frammento.
• Offset questo campo di 13 bit specifica la posizione del frammento rispetto all’intero datagram
tale posizione viene misurata in unità di 8byte. La fig 19.11 mostra un datagram di 4000 byte
frammentato in 3 frammenti. I byte del datagram originale vengono numerati a partire da 0;
sono quindi numeri da 0 a 3999. Il primo frammento contiene i byte dal numero 0 al numero
1399. Il valore dell’offset per questo datagram è 0/8 = 0.
90
Esempio 19.10
Un nodo della rete riceve un datagram con un valore dell’offset pari a 100, un valore di LI
(lunghezza dell’intestazione) pari a 5 e un valore del campo lunghezza totale pari a 100. Qual è il
numero del primo byte dei dati contenuti nel datagram ricevuto rispetto al datagram originale? Qual
è il numero dell’ultimo byte?
soluzione
come nell’esempio precedente, possiamo dire che il primo byte di dati di questo frammento è il
byte 800 del datagram originale. In questo caso possiamo determinare anche il numero dell’ultimo
byte. La lunghezza dell’intestazione del datagram è 20byte (4 volte LI). La lunghezza totale del
frammento è 100byte; pertanto il frammento contiene 80byte di dati. Poiché il primo byte è il
numero 800, l’ultimo byte è il numero 879.
Somma di controllo
Quindi l’intera intestazione viene divisa in blocchi di 16bit e si fa la somma di questi blocchi. Il
risultato della somma viene complimentato e inserito nel campo destinato a contenere la somma di
controllo.
Si noti che il valore della somma di controllo dipende solo dall’intestazione, non dai dati. La
motivazione per non includere anche i dati è che tutti i protocolli di livello superiore, che
incapsulano i dati in un datagram IP, hanno i proprio meccanismi per la rilevazione di eventuali
errori che si verificano nei dati. Pertanto il protocollo IPv4 non deve preoccuparsi di rilevare gli
errori nei dati contenuti nel datagram.
Opzioni
L’intestazione di un datagram IPv4 è fatta di 2parti, una fissa e una variabile. La parte fissa è lunga
20byte ed è stata già descritta. La parte variabile contiene delle opzioni e , se presente, può essere
lunga fino a un massimo di 40byte.
Le opzioni vengono utilizzate per il testing e il debugging della rete.
91
Operazione nulla
L’operazione nulla è un’operazione di un solo byte che serve a riempire lo spazio fra un’operazione
e la successiva.
Fine delle operazioni
L’opzione fine delle operazioni, di un byte, viene utilizzata per riempire lo spazio.
Registra percorso
L’opzione registra percorso viene utilizzata per memorizzare tutti i router di internet che il datagram
attraversa.
Instradamento guidato dalla sorgente
L’opzione instradamento guidato dalla sorgente viene utilizzata per permettere al mittente di
stabilire i router attraverso i quali il datagram deve viaggiare. Ovviamente il mittente deve
conoscere a priori tale sequenza di router. Questa opzione può essere utile quando il mittente
vuole scegliere uno specifico percorso per il quale sa che verrà garantito un determinato tipo di
servizio, come ad esempio minimo ritardo o massimo throughput.
Instradamento suggerito dalla sorgente
L’opzione instradamento suggerito dalla sorgente è molto simile all’opzione precedente, ma è
meno rigida. Ognuno dei router che sono nell’elenco suggerito dal mittente deve essere
attraversato dal datagram, ma il datagram può attraversare anche altri router.
Memorizza orario
L’opzione memorizza orario viene utilizzata per memorizzare l’istante in cui il datagram viene
processato da un router.
TRANSIZIONE DA IPv4 E IPv6
Internet è costituita da una miriade di reti interconnesse tra di loro.; ciò rende la transizione da IPv4
a IPv6 molto difficile. È impossibile cambiare contemporaneamente tutti i sistemi che costituiscono
internet; la transizione deve avvenire gradualmente e deve essere tale da prevenire problemi
nell’uso combinato di entrambe le versioni del protocollo.
Doppio protocollo
Tutti i nodi di internet, prima di abbandonare completamente la versione 4 per usare la versione 6,
dovrebbero utilizzare entrambi i protocolli contemporaneamente. In altre parole, un nodo deve
saper dialogare utilizzando sia IPv4 sia IPv6 fino al momento in cui tutti i sistemi di internet avranno
adottato la versione 6.
Per determinare quale versione utilizzare quando si spedisce un datagram, la sorgente può
utilizzare
il sistema DNS
Tunneling
Un’altra strategia che si deve usare durante la transizione consiste nell’uso di tunnel IPv4. Con
questa strategia, se due computer che utilizzano IPv6 vogliono comunicare fra loro, ma la loro
comunicazione deve attraversare una regione di internet che utilizza ancora IPv4, essi devono
necessariamente utilizzare il protocollo IPv4 per spedire i datagram. I due computer che utilizzano
IPv6 possono incapsulare i datagram IPv6 all’interno di datagram IPv4 per attraversare la regione
di internet che utilizza IPv4. In altre parole è come se il datagram IPv6 attraversasse un tunnel che
parte a un’estremità della regione IPv4 e finisce nell’altra estremità. Per rendere esplicito il fatto
che il datagram IPv4 contiene un datagram IPv6, il valore del campo che specifica il protocollo di
strato superiore viene impostato a 41.
92
Traduzione dell’intestazione
La traduzione dell’intestazione dei datagram sarà necessaria quando la maggior parte dei sistemi
di internet utilizzerà IPv6, ma pochi sistemi utilizzeranno ancora la vecchia versione 4. Per spedire
dei datagram a questi sistemi che utilizzano ancora le vecchia versione di IP, sarà necessario
trasformare il datagram IPv6 in un datagram IPv4.
93
CAPITOLO 20:
RISOLUZIONE INDIRIZZI,
GESTIONE ERRORI, MULTICAST
Il progetto del protocollo IP è stato sviluppato per offrire un servizio di consegna best-effort; tale
servizio non offre nessuna garanzia anche se viene fatto tutto il possibile per consegnare i dati.
Il protocollo ausiliare ARP (Address Resolution Protocol) permette di risalire all’indirizzo fisico di un
computer a partire dal suo indirizzo logico; in gergo permette di risolvere l’indirizzo IP. Il protocollo
ICMP permette di spedire messaggi di segnalazioni di vario tipo, come ad esempio, segnalazioni di
congestione e di alcuni tipi di errori relativi alla rete o al nodo di destinazione.
RISOLUZIONE DEGLI INDIRIZZI
Tuttavia per poter spedire fisicamente i pacchetti su una rete occorre conoscere gli indirizzi fisici
dei nodi coinvolti. Un indirizzo fisico è un indirizzo locale. Viene chiamato indirizzo fisico in quanto
è spesso, ma non sempre, una proprietà fisica dell’interfaccia di rete. Ogni nodo di Internet viene
identificato sia da un indirizzo logico (IP) che identifica il nodo globalmente nella rete Internet, sia
da un indirizzo fisico, che identifica il nodo all’interno della rete locale alla quale il nodo appartiene.
Ciò significa che la consegna di un pacchetto di dati richiede due livelli di indirizzamento: uno
logico e uno fisico. La risoluzione statistica utilizza una tavola che contiene delle coppie composte
da un indirizzo logico e un indirizzo fisico. Tale tavola deve essere memorizzata in ogni nodo della
rete. L’utilizzo è molto semplice: per effettuare una risoluzione basterà fare una ricerca nella tavola
dell’indirizzo che si vuole risolvere e prendere l’indirizzo con cui esso è associato.
Alcune motivazioni per le quali l’associazione fra indirizzi logici e indirizzi fisici cambia sono:
1. un nodo potrebbe cambiare la propria scheda di rete
2. in alcune reti l’indirizzo fisico cambia ogni volta che il computer viene acceso
3. un computer portatile, si può spostare da una rete a un’altra
4. nuovi computer possono essere aggiunti a una rete e vecchi computer possono essere
eliminati.
Risoluzione di un indirizzo logico:protocollo ARP
Per poter scoprire l’indirizzo fisico associato a un particolare indirizzo logico, un nodo di una rete
può utilizzare il protocollo ARP. Il nodo spedisce un pacchetto del protocollo che è chiamato
richiesta ARP. Tale richiesta include l’indirizzo fisico e l’indirizzo IP del mittente e l’indirizzo IP del
destinatario. Poiché il mittente non conosce l’indirizzo fisico del destinatario, non può spedire il
pacchetto direttamente al destinatario pertanto la richiesta ARP viene spedita in broadcast sulla
rete. Ogni nodo della rete riceverà la richiesta ARP spedita in broadcast; tuttavia solo il nodo che
corrisponde all’indirizzo IP da risolvere risponderà alla richiesta. La risposta ARP conterrà
l’indirizzo fisico richiesto. La risposta ARP non viene spedita in broadcast, ma solo al mittente della
richiesta. Una richiesta ARP viene spedita in broadcast; una risposta ARP viene spedita in
unicast.
Memorie cache
Utilizzando il protocollo ARP per ogni pacchetto di dati è inefficiente. Se un nodo sorgente deve
spedire più di un pacchetto a un nodo destinazione, può utilizzare solo una volta il protocollo ARP
e memorizzare la risoluzione dell’indirizzo del nodo destinazione per poterla utilizzare per i
pacchetti successivi. Pertanto il protocollo ARP memorizza le risoluzioni effettuate in una memoria
94
cache; prima di effettuare una nuova risoluzione, il protocollo controlla la memoria cache per
vedere se tale risoluzione è già stata effettuata. Le informazioni nella memoria cache vengono
mantenute per un certo periodo di tempo (20 o 30 minuti) dopo di che vengono cancellate. Questo
è necessario, perché le associazioni fra indirizzi logici e indirizzi fisici possono cambiare.
Formato di un messaggio ARP
1. tipo di hardware: questo campo di 16 bit definisce il tipo di rete che si sta utilizzando. Ad
esempio per le reti Ethernet sono identificate dal numero 1
2. protocollo: questo campo di 16 bit definisce il tipo di indirizzi logici che si vuole gestire. Per il
protocollo IPv4 il valore memorizzato in questo campo è 0x0800. il protocollo ARP può gestire
qualsiasi tipo di indirizzi logici.
3. lunghezza di indirizzo fisico: questo campo di 8 bit definisce la lunghezza dell’indirizzo fisico;
la lunghezza viene espressa in byte. Ad esempio, per gli indirizzi fisici Ethenet (48 bit) il valore
di questo campo è 6.
4. lunghezza di indirizzo logico: questo campo di 8 bit definisce la lunghezza in byte
dell’indirizzo logico. Ad esempio per IPv4 è 4.
5. operazione: questo campo di 16 bit definisce il tipo di messaggio ARP. I tipo sono 2: richiesta
ARP con codifica 1 e risposta ARP con codifica 2.
6. indirizzo fisico mittente: questo campo di lunghezza variabile specifica l’indirizzo fisico del
mittente
7. indirizzo logico mittente: questo campo di lunghezza variabile specifica l’indirizzo logico del
mittente
8. indirizzo fisico destinatario: questo campo di lunghezza variabile specifica l’indirizzo fisico del
destinatario
9. indirizzo logico destinatario: questo campo di lunghezza variabile specifica l’indirizzo logico
del destinatario
Incapsulamento
Un messaggio ARP viene incapsulato direttamente in un frame dello strato di collegamento. Si noti
che il campo del frame, che specifica il tipo di dati incapsulati nel frame, indica che i dati contenuti
nel frame costituiscono un messaggio ARP.
95
Quali indirizzi IP risolvere?
Abbiamo detto che il protocollo ARP serve a risolvere l’indirizzo IP della destinazione per poter
costruire un frame in cui incapsulare un datagram IP inviato all’indirizzo fisico della destinazione.
L’indirizzo fisico del frame che trasporta il datagram IP potrebbe essere quello di un router.
[figura pag 488]
1. il mittente è un’host che vuole spedire un datagram IP a un altro host sulla stessa rete. In
questo caso lìindirizzo logico che deve essere risolto è l’indirizzo IP dell’host di destinazione.
2. il mittente è un host che vuole spedire un datagram IP a un altro host su un’altra rete. In questo
caso, il mittente deve utilizzare una tabola di routine per trovare l’indirizzo IP di un router.
L’indirizzo logico che deve essere risolto è l’indirizzo del router
3. il mittente è un router che ha ricevuto il datagram IP e lo deve spedire a un host su un’altra rete.
L’indirizzo logico da risolvere è quello del prossimo router.
4. il mittente è un router che ha ricevuto il datagram IP e lo deve spedire a un host su un’altra rete.
L’indirizzo da risolvere è quello della destinazione finale.
Proxy ARP
Un proxy ARP è un nodo che riceve e invia messaggi ARP per conto di un gruppo di nodi. Ogni
qual volta un proxy ARP riveve una richiesta ARP per l’indirizzo IP di uno dei nodi che esso
rappresenta, il proxy risponde con il proprio indirizzo fisico. Questo fa si che il proxy ARP riceva
anche il datagram IP contentente i dati. Il proxy si preoccuperà di inoltrare correttametne questo
datagram verso la reale destinazione.
Risponderà a qualsiasi richiesta inviata per uno di questi indirizzi. I datagram IP inviati a questi
indirizzi verranno recapitati al proxy ARP che li smisterà sulla sottorete riportata nella parte alta
della figura.
96
RARP
Il protocollo RARP (Riverse Address Resolution Protocol) permette a un nodo di una rete che
conosce solo il proprio indirizzo fisico, di trovare il proprio indirizzo logico. Uno nodo conosce
sempre il proprio indirizzo fisico, perché tale indirizzo è una proprietà dell’hardware che fa parte del
nodo stesso. Il protocollo RARP è un molto simile al protocollo ARP. Il nodo crea un messaggio di
richiesta RARP in cui inserisce il proprio indirizzo fisico e lo spedisce in broadcast sulla rete locale.
Il protocollo RARP presenta un grosso problema: la richiesta RARP viene spedita in broadcast
nello strato di collegamento. L’indirizzo fisico di broadcast limitato non permette al messaggio di
andare oltre la rete locale; cioè il broadcast nello strato di collegamento può essere fatto solo
all’interno della rete locale.
BOOTP
Il protocollo BBOTP (Bootstrap Protocol) è un protocollo client/server che funziona nello strato
delle applicazioni. Questo significa che il server che risponde alle richieste dei client non deve
necessariamente essere sulla stesa rete. I messaggi del protocollo BOOTP vengono incapsulati in
pacchetti UDP che a loro volta vengono incapsulati in pacchetti IP.
Se il server BOOTP è sulla stessa rete del client, allora ci deve essere un nodo chiamato relay
agent. In questo caso, il relay agent riceve la richiesta; il relay agent conosce l’indirizzo IP del
server BOOTP e potrò spedire il messaggio di richiesta a tale server
DHCP
Il protocollo BOOTP, sebbene più efficiente del protocollo RARP non permette una configurazione
dinamica degli indirizzo. Quando un client richiede il proprio indirizzo IP, il server BOOTP utilizza
una tabella, che contiene le associazioni fra indirizzi fisici e logici per risalire all’indirizzo logico
associato a un indirizzo fisico. Questo significa che l’associazione fra indirizzi fisici e indirizzi logici
deve essere predeterminata e memorizzata nella tabella; tale tabella deve essere gestita
manualmente dall’’amministratore di rete. Un’associazione statica fra indirizzi fisici e logici può
risultare poco efficiente in varie situazioni. Il protocollo DHCP (Dynamic Host Configuration
Protocol) risolve questo problema utilizzando un’assegnazione degli indirizzi IP sia statica che
dinamica, permettendo una gestione manuale o automatica del sistema.
97
ICMP
Il protocollo IP fornisce un meccanismo di trasmissione dei datagram non affidabile e senza
connessione. Il protocollo IP è stato progettato in questo modo per poter utilizzare efficientemente
le risorse della rete. Inoltre non fornisce nessun meccanismo per il controllo e la gestione degli
errori.
Il protocollo IP non fornisce nemmeno un meccanismo grazie al quale un nodo della rete possa
scoprire informazioni sulla rete. Ad esempio un nodo potrebbe voler sapere se un router oppure un
altro nodo è funzionante e raggiungibile. il protocollo ICMP (Internet Control Message Protocol) è
stato progettato per soddisfare queste esigenze.
I messaggi del protocollo ICMP si dividono in due categorie: messaggi di notifica degli errori e
messaggi di richiesta.
La notifica degli errori è la funzionalità principale del protocollo ICMP. I messaggi di errore vengono
spediti sempre al mittente del datagram per il quale si è verificato l’errore. La motivazione per
questa scelta è che le uniche informazioni sicuramente disponibili riguarda il percorso fatto dal
datagram sono l’indirizzo del mittente e l’indirizzo del destinatario.
ICMP spedisce i messaggi di notifica dell’errore sempre al mittente del datagram per il quale si è
verificato l’errore. Per limitare il traffico generato dal protocollo ICMP se il datagram IP contiene un
messaggio ICMP crea a sua volta un errore, non viene generato un nuovo messaggio ICMP per la
notifica dell’errore.
Quando un router non può inoltrare un datagram oppure l’host di destinazione non può consegnare
il datagram, questo viene eliminato e il router oppure l’host spedisce un messaggio ICMP di
destinazione non raggiungibile alla sorgente che ha inviato il datagram.
Quando un router oppure il nodo di destinazione riceve un datagram, deve memorizzarlo in un
buffer per poi successivamente poterlo inoltrare nel caso del router, oppure consegnare agli strati
superiori nel caso del nodo destinazione. Se un router oppure il nodo di destinazione è costretto a
eliminare un datagram perché il buffer è pieno, si può generare un messaggio ICMP di
rallentamento della sorgente.
Il messaggio di tempo scaduto viene generato in due casi. Il primo è quello in cui il campo TTL
raggiunge il valore zero. Quando il campo TTL raggiunge il valore 0, il datagram viene eliminato.
Una qualsiasi ambiguità o errore nell’intestazione di un datagram può creare seri problemi per la
gestione del datagram attraverso la rete. Quando un router deve inoltrare un pacchetto destinato a
un’altra rete, deve conoscere l’indirizzo IP del prossimo router a cui consegnare il pacchetto.
Quando un router si accorge che la sorgente dovrebbe spedire il datagram verso la un altro router
invia un messaggio ICMP di ridirezione che fornisce tale informazione alla sorgente.
98
Messaggi di richiesta
Oltre ai messaggi di notifica dell’errore, il protocollo ICMP permette di spedire messaggi di richiesta
di informazioni per diagnosticare eventuali problemi della rete. I messaggi utilizzati per questo
scopo vengono detti messaggi di richiesta.
I messaggi di richiesta echo e risposta echo vengono utilizzati per diagnosticare problemi di rete.
L’utilizzo di questi due messaggi permette di stabilire se due nodi della rete riescono a comunicare.
Richiesta e risposta timestamp
Due nodi di una interrete possono usare i messaggi di richiesta e risposta timestamp per
determinare il tempo di andata e ritorno necessario a un datagram IP.
Richiesta e risposta maschera
È possibile che un host conosca il suo indirizzo IP ma non conoscila corrispondente maschera (ad
esempio /24). Per ottenere la maschera, che è una proprietà della rete e non del singolo host, un
host può spedire un messaggio di richiesta maschera a un router della rete
Messaggi di sollecito e presenza router
Per ottenere l’indirizzo IP di un router, un host può spedire in broadcast un messaggio di sollecito
router. Per annunciare la propria presenza su una rete, un router può spedire in broadcast un
messaggio di presenza router. I messaggi di presenza router possono essere spediti sia in risposta
a un sollecito sia periodicamente.
Ping e traceroute
Il comando ping utilizza i messaggi ICMP. Il comando traceroute nei sistemi Unix/Linux (tracert in
windows) permette di scoprire il percorso, cioè la sequenza di router che attraverserebbe un
datagram IP, da una sorgente a una destinazione.
[immg pag 498]
A spedisce un pacchetto con destinazione a b e il TTL viene impostato a 1. quando il router R1
riceve il pacchetto IP decrementa il valore di TTL che diventa 0. pertanto elimina il pacchetto e
spedisce un messaggio ICMP a A.
La tecnica per scoprire l’indirizzo del router R1 e il tempo di andata e ritorno fra A e R1 può essere
utilizzata in modo simile per scoprire l’indirizzo del router R2 e il tempo di andata e ritorno di R2:
anziché utilizzare il valore 1 del campo TTL si utilizza il valore 2. il router R2 così eliminerà il
pacchetto e manda un messaggio ICMP. Quanto il pacchetto raggiunge il nodo B, il TTL verrò
decrementato e raggiungerà il valore 0; in questo caso il pacchetto non verrà eliminato perché ha
raggiunto la destinazione finale. Per ricevere un messaggio di errore anche dalla destinazione
finale, il comando traceroute utilizza una strategia diversa. La porta di destinazione del pacchetto
UDP viene impostato il valore 1, che non è un valore di supportato dal protocollo UDP. Quando
l’host B riceve il pacchetto UDP non riuscirà a trovare un’applicazione che lo accetti, in quanto la
porta non è corretta. Pertanto il pacchetto verrà eliminato e verrà spedito al nodo A un messaggio
ICMP di destinazione non raggiungibile.
99
CAPITOLO 21: CONSEGNA, INOLTRO E INSTRADAMENTO
Con il termine consegna si indica il modo in cui un pacchetto viene gestito dallo strato di rete. Per
inoltro si intende il modo in cui un pacchetto viene consegnato al prossimo nodo del suo cammino
verso la destinazione finale. Il termine instradamento (routing) indica la costruzione delle tavole di
instradamento (tavole di routing).
CONSEGNA DIRETTA E INDIRETTA: La consegna può essere diretta quando chi riceve il
pacchetto è sulla stessa rete di chi lo spedisce, oppure indiretta quando chi riceve il pacchetto è su
una rete diversa dalla rete di partenza del pacchetto.
Nel caso in cui la consegna sia indiretta il pacchetto dovrà passare attraverso una serie di router
R1, R2, …, Rn prima di arrivare alla destinazione finale. I router R1, R2, …, Rn sono delle
destinazioni temporanee.
INOLTRO: L’operazione di inoltro è l’operazione che avviene quando si deve operare una
consegna indiretta. L’operazione di inoltro richiede l’utilizzo di una tavola di routing. Quando un
host o un router deve spedire un pacchetto verso una destinazione finale consulta la propria tavola
di routing per trovare la strada.
Tavola di routing: una tavola di routing deve contenere le informazioni necessarie per instradare
un pacchetto verso la destinazione finale. Quali sono le informazioni che deve contenere una
tavola di routing? Una prima idea sarebbe quella di inserire il percorso completo in ogni tavola di
routing, ma in una rete enorme come Internet ciò risulta improponibile. Quindi per ridurne la
dimensione in una tavola di routing si inseriscono solo le informazioni necessarie a raggiungere il
prossimo router del percorso. Tale tecnica è chiamata next – hop.
Questo esempio mostra tavole di routing con percorso completo e next – hop.
Un altro metodo per ridurre la dimensione delle tavole di routing è quello di inserire in esse non
tutte le destinazioni finali, ma solo tutte le possibili reti. Quindi se una rete è costituita da 1000 host,
una tavola di routing non dovrà contenere 1000 righe ma solo una riga per tutta la rete. Questa
tecnica è chiamata aggregazione.
Anche utilizzando queste due strategie le tavole di routing sarebbero comunque troppo grandi per
poter essere gestite efficientemente. Pertanto le tavole di routing contengono solo una lista
parziale delle possibili reti di destinazione. Per tutte le destinazioni non presenti nella tavola di
routing deve essere definita una rotta di default sulla quale inoltrare i pacchetti.
100
Operazione di inoltro: quando un router riceve un pacchetto deve consultare la propria tavola di
routing per capire dove spedire il pacchetto. Quindi come prima cosa deve estrarre l’indirizzo di
destinazione dopodichè effettuare una ricerca nella tavola per individuare una riga che fornisca
informazioni sulla rotta per questo indirizzo. Nel seguito utilizzeremo l’indirizzamento senza classi
(uso della maschera di rete). Con l’indirizzamento senza classi, una tavola di routing deve
contenere almeno quattro colonne: una per la maschera, una per il blocco degli indirizzi di
destinazione, una per l’indirizzo del next – hop e una che specifica l’interfaccia di rete sulla quale
spedire il pacchetto per raggiungere il prossimo router.
Esempio: costruire una tavola di routing per il router R1 nella interrete mostrata nella figura
sottostante:
Maschera
/26
/25
/24
/22
*
Ind. Di destinazione
180.70.65.192
180.70.65.128
201.4.22.0
201.4.16.0
*
Next – hop
180.70.65.200
Interfaccia
If2
If0
If3
If1
If2
Si descriva l’operazione di inoltro per un pacchetto che arriva al Router R1 nella
configurazione mostrata nella figura precedente e che è destinata all’indirizzo IP
180.70.65.140.
Soluzione: il router esegue le seguenti operazioni:
1. Viene utilizzata la prima maschera per estrarre un possibile indirizzo di rete
dall’indirizzo di destinazione (in pratica si assume che l’indirizzo di destinazione abbia
una maschera /26, ma potrebbe non essere così). Considerando solo i primi 26 bit
dell’indirizzo di destinazione 180.70.65.140, si ottiene l’indirizzo di rete 180.70.65.192,
che non corrisponde all’indirizzo di rete che ha associato alla maschera /26.
2. A questo punto si utilizza la seconda riga della tavola che corrisponde alla maschera
/25. Estraendo l’indirizzo di rete da 180.70.65.140 con una maschera a 25 bit si
ottiene l’indirizzo 180.70.65.128. Questo indirizzo corrisponde all’indirizzo di rete
riportato nella tavola di routine per la maschera /25. Ciò significa che la seconda riga
contiene informazioni per inoltrare il pacchetto. La colonna Next – hop non contiene
nessuna informazione, il che significa che l’indirizzo del next hop è proprio l’indirizzo
di destinazione del pacchetto. Inoltre la tavola di routing ci dice che il pacchetto deve
essere inviato sull’interfaccia di rete if0.
101
Aggregazione degli indirizzi di rete: Il concetto di aggregazione, che, ripetiamo, permette di
riportare nella tavola di routing solo l’indirizzo della rete di destinazione anziché gli indirizzi dei
singoli host di destinazione, può essere usato anche per raggruppare varie reti di destinazione che
condividono il next hop (stesso router) e quindi avere un’unica riga nella tavola di routing per tutte
queste reti. La regola fondamentale è che comunque queste reti devono essere contigue.
In questo esempio il router R1 è connesso alle reti di quattro organizzazioni diverse, ognuna che utilizza una rete con
64 indirizzi (maschera /26). Il router R1 dovrà avere nella sua tavola di routing una riga per ognuna delle quattro reti in
quanto è connesso alle quattro reti su quattro diverse interfacce (if0, if1, if2, if3). Il router R2 è connesso al router R1.
E’ inutile che il router R2 abbia quattro righe nella propria tavola per le quattro reti. È sufficiente che abbia una riga che
include tutti gli indirizzi delle quattro reti, quindi con una maschera /24 che comprende tutti e 256 indirizzi IP delle
quattro reti.
Corrispondenza con la maschera più lunga: L’aggregazione degli indirizzi di rete può essere
difficoltosa se gli indirizzi di rete che possono essere aggregati non condividono lo stesso next hop.
Vedi esempio.
Riprendendo l’esempio precedente in questa figura vediamo che solo le prime tre organizzazioni sono
geograficamente vicine e quindi raggiungibili dal router R1, mentre la rete della quarta organizzazione è fisicamente
lontana da queste reti e quindi dovrà essere raggiunta attraverso il router R3. Il router R2 è connesso sia a R1 che a
R3. In questa situazione il router R2 non potrà aggregare le quattro reti come aveva fatto in precedenza.
Quindi per risolvere questo problema si utilizza il principio della corrispondenza con la maschera
più lunga. Questo principio dice che la tavola di routing deve essere ordinata mettendo prima le
maschere più lunghe e poi quelle più corte. Quindi ritornando all’esempio precedente, la tavola di
routing del router R2 conterrà una riga che specifica il next hop per i pacchetti destinati alla rete
della quarta organizzazione, 140.24.7.192; per questa rete si utilizzerà una maschera /26. Tali
pacchetti dovranno poi essere inoltrati presso il router R3 che può essere raggiunto attraverso
l’interfaccia if1. A questo punto la tavola di routing di R2 può contenere una riga per tutti gli indirizzi
delle reti delle prime tre organizzazioni. In realtà per come sono stati assegnati gli indirizzi di
queste reti, l’aggregazione comprenderà anche gli indirizzi della quarta organizzazione. La
maschera utilizzata nella seconda riga della tavola di routing di R2 sarà, quindi, /24 e il
corrispondente indirizzo di rete è 140.24.7.0. L’interfaccia da utilizzare è if0. La riga corretta per i
pacchetti da inviare alla quarta organizzazione, però, è la prima.
102
Routing gerarchico: Abbiamo visto che l’aggregazione riduce notevolmente la tavola di routing.
L’aggregazione può essere fatta gerarchicamente, infatti, come abbiamo visto già in precedenza
Internet è divisa in ISP nazionali e internazionali. Gli ISP nazionali sono divisi in ISP regionali che,
a loro volta, sono suddivisi in ISP locali.
Routing geografico: Per poter ridurre ulteriormente le tavole di routing è possibile utilizzare anche
il routing geografico. È necessario, però, che l’assegnazione degli indirizzi IP avvenga in funzione
della posizione geografica. Ad esempio si potrebbe assegnare un blocco di indirizzi al Nord
America, un blocco all’Europa, un blocco all’Asia, un blocco all’ Africa e così via. Questi tipi di
indirizzi geografici sono previsti solo nel protocollo IPv6.
Tavole di routing: Le tavole di routing possono essere statiche o dinamiche.
• Tavole di routing statiche: Una tavola di routing statica contiene delle informazioni
che vengono inserite manualmente. La tavola non può essere aggiornata
automaticamente quando ci sono dei cambiamenti. L’aggiornamento deve essere
fatto manualmente dall’amministratore. Una tavola di routing statica può essere
utilizzata solo in una piccola rete.
• Tavole di routing dinamiche: Una tavola di routing dinamica è una tavola che può
essere
aggiornata
automaticamente.
L’aggiornamento
viene
effettuato
periodicamente usando dei protocolli di routing come RIP, OSPF, BGP. In una rete
grande come Internet si deve necessariamente utilizzare il routing dinamico.
Formato delle tavole di routing: come già detto in precedenza una tavola di routing per
l’indirizzamento senza classi deve avere almeno quatto colonne. Tuttavia, nella maggior parte dei
router odierni le tavole di routing contengono anche altre colonne.
Maschera
Rete di
destinazione
Indirizzo
prossimo hop
Interfaccia
Flag
Contatore
Pacchetti
spediti
………..
………..
………..
………..
………..
………..
………..
1. Maschera: specifica la maschera di rete
2. Indirizzo di destinazione: specifica l’indirizzo di destinazione (singolo host) o gli indirizzi delle destinazioni
(aggregazione di più indirizzi).
3. Indirizzo del next-hop: specifica l’indirizzo del prossimo nodo della rete (router o destinazione finale) al quale
il pacchetto va consegnato
4. Interfaccia: specifica l’interfaccia sulla quale il pacchetto deve essere inoltrato.
5. Flag: indica la presenza o assenza di una certa proprietà:
a. U (Up): indica che il next-hop è funzionante, se tale segnalatore non c’è allora il next-hop non funziona.
b. G (Gateway): indica che il next-hop si trova in un’ altra rete e quindi consegna indiretta.
c. H (Host-specific): indica che l’indirizzo di destinazione specificato nella tavola di routing è l’indirizzo di
un host.
d. D (Added by redirection): indica che la riga della tavola di routing è stata inserita in seguito ad un
messaggio di ridirezione.
e. M (Modified by redirection): indica che la riga della tavola di routing è stata aggiornata in seguito ad
un messaggio di ridirezione.
6. Contatore: fornisce il numero di utenti che in quel momento stanno usando questo percorso.
7. Pacchetti spediti: mostra il numero di pacchetti spediti alle destinazioni specificate in questa riga.
PROTOCOLLI DI ROUTING: Per un funzionamento efficiente della rete, le tavole di routing
devono essere aggiornate appena si verifica un cambiamento. I protocolli di routing svolgono
questo compito. Un protocollo di routing è un insieme di regole e procedure che permette ai router
di una rete di scambiarsi informazioni riguardanti i cambiamenti e quindi condividere le informazioni
con i loro vicini. Come sappiamo ad un router possono essere collegate più reti, quindi, il compito
di un router è quello di ricevere il pacchetto da una rete e smistarlo su un’altra rete. Questa scelta
deve seguire un criterio fondamentale: “si dovrebbe scegliere la rete che ottimizza il percorso
verso la destinazione”. Per scegliere un percorso ottimo nella maggior parte dei casi si assegna
un costo per il passaggio del pacchetto attraverso una rete. Il costo di un percorso diventa così la
103
somma dei costi dei passaggi attraverso le singole reti. Un percorso ottimo è un percorso che
minimizza tale costo. Il costo per il passaggio attraverso la rete viene stabilito dal protocollo.
Routing intradominio e interdominio: Internet è così vasta che l’aggiornamento delle tavole di
routing non può essere fatto utilizzando un solo protocollo. Per questo motivo Internet è divisa in
sistemi autonomi (AS – Autonomous System) che sono gruppi di reti, e quindi di router, che sono
sotto il controllo di una singola amministrazione. Spesso un AS corrisponde ad un ISP. Il routing
all’interno di un sistema autonomo viene detto routing intradominio, mentre il routing fra sistemi
autonomi è detto routing interdominio. Ogni sistema autonomo può scegliere il protocollo di
routing per il routing intradominio, mentre per il routing interdominio tutti i sistemi autonomi coinvolti
devono utilizzare lo stesso protocollo. Esistono molti protocolli per il routing sia intradominio che
interdominio. Il protocollo RIP (Routing Information Protocol) è un’implementazione del protocollo
basato sul vettore delle distanze. Il protocollo OSPF (Open Shortest Path First) è
un’implementazione del protocollo basato sullo stato dei collegamenti. Il protocollo BGP (Border
Gateway Protocol) è un’implementazione del protocollo basato sul vettore dei cammini.
• Routing basato sul vettore delle distanze: Con questo metodo il costo del passaggio di un
pacchetto su una rete dipende dalla rete e il percorso più conveniente fra due nodi è quello con
costo totale minimo. In questo protocollo ogni nodo gestisce un vettore (tavola) delle distanze
minime verso ogni altro nodo; la tavola contiene anche informazioni per poter instradare il
pacchetto. Facciamo un esempio:
Situazione
Iniziale
Inizializzazione: Come possiamo notare dalla figura, inizialmente, ogni nodo della rete conosce
solo le distanze verso i nodi cui direttamente è collegato, mentre le distanze verso i nodi cui non
è direttamente collegato viene rappresentato con il simbolo ∞ (cioè il nodo non è raggiungibile).
Condivisione informazioni: L’idea di base di questo protocollo è lo scambio di informazioni fra i
nodi direttamente collegati. Quindi in quest’esempio possiamo notare che il nodo A non
conosce la strada per arrivare al nodo E, mentre il nodo C è direttamente collegato con il nodo
E. Quindi se il nodo C condividesse le informazioni nella propria tavola di routing con il nodo A,
allora il nodo A saprebbe come raggiungere il nodo E. Quindi se i nodi condividessero le proprie
tavole di routing con i vicini sarebbero in grado di scoprire la topologia della rete. Quali sono le
informazioni della propria tavola di routing che un nodo dovrebbe spedire ai propri vicini? La
soluzione più semplice è che ogni nodo spedisca l’intera tavola di routing ai propri vicini,
lasciando ad essi la scelta di quali informazioni utilizzare. La terza colonna della tavola di
routing (prossimo hop) non serve ai vicini.
Aggiornamento: Quando un nodo R riceve le informazioni della tavola di routing da un vicino V,
deve aggiornare la propria tavola di routing. L’aggiornamento avviene nel seguente modo:
d
x
R
V
Altra destinazione
1. Se il nodo R vuole sapere il costo totale dei percorsi verso le destinazioni che potrebbe
raggiungere attraverso il nodo V, il nodo R deve sommare il costo del collegamento
verso V (in questo caso d) ai costi contenuti nella tavola ricevuta da V. Quindi “R” potrà
raggiungere “Altra destinazione” passando per “V” ad una distanza totale di d + x .
104
2. Nella tavola di routing di R, quindi, il prossimo hop per raggiungere “Altra destinazione” è
V e il costo è quello calcolato precedentemente.
3. A questo punto il nodo V confronta la tavola costruita nelle due fasi precedenti con la
propria tavola di routing. Quindi per ogni riga effettua il seguente aggiornamento:
a)
se la colonna del prossimo hop contiene due nodi diversi, allora viene scelta la
riga con il costo più piccolo.
b)
se la colonna del prossimo hop contiene lo stesso nodo allora viene scelta la
riga della nuova tavola.
Riprendiamo l’esempio precedente:
Destinazione
Costo Next-hop
A
0
B
5
Questa è la tavola di routing iniziale del nodo A
C
2
D
3
E
∞
Destinazione
A
B
C
D
E
Costo Next-hop
2
4
0
∞
4
-
Questa è la tavola di routing iniziale del nodo C
Vediamo l’aggiornamento della tavola di routing del nodo A quando quest’ultimo riceve la
tavola di routing del nodo C.
Passo 1 e 2:
Destinazione
Costo
Per ottenere la tavola A risultante si
A
2
somma il valore 2, che è la distanza
B
4
da C ad E, a tutti i valori delle righe
Destinazione
Costo Next-hop
C
0
della tavola di routing C.
A
4
C
D
∞
B
6
C
E
4
C
2
C
D
∞
C
E
6
C
Tavola di routing
ricevuta da C
Tavola di A risultante
Passo 3: Ora confronto la tavola risultante di A con la tavola precedente di A e seguo i criteri
(a) e (b) visti sopra:
Secondo il criterio (a) confrontando le due tavole nella colonna Prossimo Hop i nodi erano
diversi e quindi si prendeva la riga che aveva costo minore.
105
Le tavole d routing vengono spedite sulla rete sia periodicamente sia quando si verifica un
cambiamento della tavola. La spedizione della tavola avviene tipicamente ogni 30 secondi.
Problema dell’instabilità, ciclo a due nodi: Un problema del routing basato sul vettore
delle distanze è quello dell’instabilità. Per spiegare il problema basiamoci su un esempio:
consideriamo che inizialmente sia il nodo A che il nodo B sanno come raggiungere il nodo X.
Ad un certo punto il collegamento fra A e X si rompe. Il nodo A accorgendosi
dell’interruzione, aggiorna la propria tavola di routing nella quale viene scritto che X non è
più raggiungibile (distanza ∞). Il nodo A invia la nuova tavola di routing a B; è possibile, però,
che anche B invii la propria tavola di routing prima di ricevere la tavola aggiornata di A.
Questo significa che A riceve una tavola in cui B dice di poter raggiungere X a distanza n.
Pertanto A penserà di poter raggiungere X attraverso B, quindi a distanza n+d (d = distanza
da A a B). A questo punto A spedisce il nuovo aggiornamento della propria tavola a B, e B
ricevendola aggiorna di conseguenza la propria tavola dicendo che può raggiungere X
tramite A a una distanza di n+d+n. Questo procedimento, quindi, proseguirà all’infinito e
l’anomalia sta nel fatto che in questo modo non ci si accorge che il nodo X non è più
raggiungibile. Una soluzione al problema è quella di utilizzare un valore finito per
rappresentare ∞ (un infinito finito). Un’altra soluzione è conosciuta come split horizon.
Questa soluzione prevede che un nodo non spedisca l’intera tavola ai suoi vicini ma si
comporti nel seguente modo: se il nodo B pensa che la strada ottima per raggiungere X sia
quella che passa per A, non includerà la strada per X nella tabella che invierà ad A, in
quanto tale informazione è stata ottenuta proprio da A. Questo metodo risolve il problema
dell’instabilità però ne crea un altro. Normalmente i protocolli di routing basati sul vettore
delle distanze utilizzano delle scadenze per le informazioni contenute nelle tavole di routing:
quando una informazione non viene aggiornata prima della scadenza, viene eliminata la
tavola di routing. Per risolvere questo problema, insieme alla strategia split horizon viene
utilizzata anche un’altra strategia chiamata poison reverse: il nodo B, cioè, può continuare
a pubblicizzare ad A il percorso verso X, ma anziché inserire la reale distanza verso X,
inserisce un valore fittizio, ad es. ∞.
Problema dell’instabilità, ciclo con tre o più nodi: il problema dell’instabilità può essere
creato da cicli di tre o più nodi; per risolvere questo problema si utilizza un valore finito per
rappresentare ∞.
RIP (Routing Information Protocol): è un protocollo di routing intradominio basato sul
vettore delle distanze. Esso viene utilizzato per sistemi autonomi, l’implementazione di tale
protocollo segue le seguenti considerazioni:
1. Le destinazioni in una tavola di routing sono indirizzi di rete;
2. Il costo del passaggio tra una rete e l’altra è 1;
3. Il valore ∞ viene rappresentato con il valore 16;
4. La colonna del prossimo hop contiene l’indirizzo del router al quale bisogna
inoltrare il pacchetto.
Questo esempio mostra un sistema autonomo con 7 reti e 4 router, incluse le tavole di routing dei
router. Guardiamo la tavola di routing di R1: ha 7 righe che corrispondono a 7 reti. R1 è direttamente
connesso alle reti 130.10.0.0 e 130.11.0.0; pertanto per queste reti non esiste un next – hop nella
tavola di routing di R1. Per spedire un pacchetto a una delle 3 reti poste a sinistra, R1 deve inoltrare
il pacchetto verso R2. Pertanto il prossimo hop per queste 3 reti è R2 il cui indirizzo IP è 130.10.0.1.
Stessa cosa vale per le reti a destra.
106
•
Routing basato sullo stato dei collegamenti: ogni nodo costruisce una propria conoscenza
dell’intera rete, cioè dei nodi, dei collegamenti, dei costi dei collegamenti e dell’usabilità degli
stessi. Basandosi su questa conoscenza, interpretando la rete come un grafo, ogni nodo può
utilizzare l’algoritmo di Dijkstra per costruire le tavole di routing. Ogni nodo ha una conoscenza
diretta dello stato dei collegamenti di cui fa parte, qualsiasi cambiamento di questi collegamenti
sarà percepito immediatamente dal nodo, mentre i nodi più distanti dovranno aspettare di
ricevere gli aggiornamenti. In altre parole ogni nodo ha una conoscenza diretta della rete che è
parziale. Mettendo insieme tali conoscenze parziali è possibile ottenere una conoscenza
globale della rete che in condizioni di stabilità rispecchia la reale topologia della rete.
Abbiamo detto, quindi, che ogni nodo condivide la propria conoscenza parziale della rete con gli
altri nodi. La propagazione delle conoscenze parziali e la costruzione delle tavole di routing
avviene attraverso le seguenti azioni:
1. Creazione delle informazioni sullo stato di ogni collegamento da parte di ogni nodo
memorizzate in pacchetti denominati LSP (Link State packet);
2. Disseminazione dei pacchetti LSP verso ogni altro nodo (flooding);
3. Calcolo dell’albero dei cammini minimi da parte di ogni nodo;
4. Costruzione delle tavole di routing.
1. Un pacchetto LSP può contenere molte informazioni: identità del nodo che crea il pacchetto,
elenco dei collegamenti di cui il nodo fa parte, numero di sequenza e istante di creazione del
pacchetto. Le prime due informazioni rappresentano la conoscenza parziale della rete
tramite le quali si costruisce la conoscenza globale. Il numero di sequenza facilita e rende
efficiente l’operazione di disseminazione, l’istante di creazione evita che esso rimanga nella
rete troppo a lungo.
2. Quando un nodo ha creato un pacchetto LSP lo deve inondare su tutta la rete ed usa i
seguenti criteri:
• Il nodo che ha creato il pacchetto LSP ne spedisce una copia a ogni suo vicino;
• Un nodo X che riceve tale pacchetto controlla se ha già un altro pacchetto LSP
proveniente dallo stesso mittente M. Se il pacchetto arrivato è più vecchio di
quello conosciuto (cioè se ha un numero di sequenza precedente) il pacchetto
appena arrivato viene eliminato, se invece è più recente di quello conosciuto o
non ci sono altri pacchetti arrivati da M il nodo X esegue le operazioni:
a. Cancella il vecchio pacchetto arrivato da M (se questo esiste);
b. Spedisce una copia del pacchetto arrivato ai suoi vicini tranne M.
3. Dopo aver ricevuto i pacchetti LSP da tutti i nodi della rete, un nodo ha una conoscenza
globale di essa, il nodo rappresenta la rete con un grafo. Un albero dei cammini minimi è un
albero che rappresenta tutti i cammini minimi a partire dalla radice. L’algoritmo di Dijkstra
permette di calcolare l’albero dei cammini minimi. L’algoritmo divide i nodi in due insiemi:
finali e temporanei; un nodo diventa finale quando si scopre il precorso più breve dalla
radice verso quel nodo. Partendo da un nodo finale, l’algoritmo considera tutti i vicini come
nodi temporanei e quei vicini che soddisfano un determinato criterio, diventano finali.
107
(1) In questo esempio, inizialmente, l’unico nodo considerato è la radice stessa; la radice
viene inserita nell’insieme dei nodi temporanei.
•
Nodi finali: nessuno;
•
Nodi temporanei: A (distanza dalla radice: 0).
(2) Il nodo A è l’unico nell’insieme dei nodi temporanei ed è anche quello con distanza
minima dalla radice, pertanto viene spostato nella lista dei nodi finali. I suoi vicini B, C e D
vengono inseriti nella lista dei nodi temporanei.
•
Nodi finali: A (0);
•
Nodi temporanei: B (5), C (2), D (3).
(3) Fra i nodi temporanei C è quello a distanza minima dalla radice, quindi viene spostato
nella lista dei nodi finali. Inseriamo, quindi, nella lista dei nodi temporanei i vicini di C. i vicini
di C sono A, B ed E. A non viene considerato perché è già presente nella lista dei nodi finali,
il nodo B è già nella lista dei nodi temporanei e può essere raggiunto con una distanza 5
dalla radice. Se si volesse raggiungere il nodo B attraverso C la distanza sarebbe 6 dalla
radice (2 è la distanza dalla radice a C e 4 la distanza tra C e B). Poiché conosciamo già la
distanza minima per raggiungere B (5) < 6 non consideriamo questa ultima possibilità; in
altre parole B rimane nella lista dei nodi temporanei con distanza 5. Il nodo E viene inserito
nella lista dei nodi temporanei.
•
Nodi finali: A (0), C (2);
•
Nodi temporanei: B (5), D (3), E (7).
(4) Tra i nodi temporanei, il nodo con distanza minima è D, e pertanto viene inserito nella
lista dei nodi finali. Il nodo D ha come unico vicino il nodo A e quindi non viene considerato.
•
Nodi finali: A (0), C (2), D (3);
•
Nodi temporanei: B (5), E (7).
(5) Tra i nodi temporanei il nodo con distanza minima è B pertanto viene inserito nella lista
dei nodi finali. I vicini di B sono A, C, E. Sapendo che C e A sono nodi finali, viene
considerato solo il nodo E. Raggiungere il nodo E attraverso B costa 6 (5 per raggiungere B
e 1 la distanza tra B e E). Sappiamo anche che il nodo E è già presente nella lista dei nodi
temporanei, con distanza 7 dalla radice, quindi conviene utilizzare la nuova strada
•
Nodi finali: A (0), C (2), D (3), B (5);
•
Nodi temporanei: E (6).
(6) Nella lista dei nodi temporanei c’è solo E e quindi viene spostato nella lista dei nodi finali.
I nodi vicini di E sono già finali e quindi non vengono considerati.
•
Nodi finali: A (0), C (2), D (3), B (5), E(6);
•
Nodi temporanei: nessuno.
4. Dall’albero dei cammini minimi è facile costruire la tavola di routing. Riportiamo di seguito la
tavola di routing del nodo A dell’esempio precedente
108
Destinazione
A
B
C
D
E
Costo Next-hop
0
5
2
3
6
C
OSPF (Open Shortest Path First): è un protocollo di routing intradominio basato sullo stato dei
collegamenti. Viene utilizzato all’interno dei sistemi autonomi. Tale protocollo per gestire
efficientemente l’intera rete divide un sistema autonomo in aree. Un’area quindi è un insieme di
reti all’interno del sistema autonomo. A ogni area viene assegnato un identificativo. All’interno di
queste aree i router disseminano le informazioni di routing. Ai bordi delle aree vi sono dei
particolari router, chiamati router di confine. Fra le aree di un sistema autonomo vi è un’area
particolare, chiamata area dorsale, alla quale devono essere connesse tutte le aree del sistema
autonomo. I router all’interno dell’area dorsale sono chiamati router di dorsale. Il protocollo
OSPF permette all’amministratore del sistema di assegnare un costo, chiamato metrica, a ogni
percorso.
•
Routing basato sul vettore dei cammini: I protocolli basati sul vettore delle distanze e sullo
stato dei collegamenti sono protocolli per il routing intradominio, cioè per il routing all’interno di
un sistema autonomo. Per il routing interdominio occorre un approccio diverso. Tale routing si
basa su una tecnica detta vettore dei cammini. In pratica in ogni sistema autonomo c’è un nodo
che funge da portavoce; I portavoce operano più o meno come i router all’interno di un sistema
autonomo solo che le informazioni che si scambiano i portavoce sono diverse da quelle che si
scambiano i router: cioè vengono comunicati i cammini che permettono di raggiungere i sistemi
autonomi e non vengono utilizzate metriche. I portavoce, quindi, formano una “rete logica”
e si scambiano informazioni di raggiungibilità.
Inizializzazione: Inizialmente ogni portavoce può controllare la raggiungibilità dei nodi all’interno
del proprio sistema autonomo.
In questo esempio il nodo A1 è il portavoce per il sistema autonomo AS1, il nodo B1 è il
portavoce per il sistema AS2, C1 per AS3, D1 per AS4. Il nodo A1 crea una tavola di routing
con la seguente informazione: le reti A1….A5 sono nel sistema autonomo AS1 e possono
essere raggiunte attraverso AS1. In modo simile, gli altri nodi portavoce creano delle tavole per
i propri sistemi autonomi.
Condivisione delle informazioni: un portavoce di un sistema autonomo condivide la sua tavola
di routing con i propri vicini (vicini intesi come portavoce direttamente connessi). Facendo
riferimento, quindi, all’esempio precedente il nodo A1 condivide la propria tavola di routing con i
nodi B1 e C1, il nodo B1 con i nodi A1 e C1, il nodo C1 con i nodi A1, B1 e D1, e il nodo D1 con
il nodo C1.
109
Aggiornamento: Quando un portavoce riceve una tavola di routing da un proprio vicino,
aggiorna la propria tavola di routing, aggiungendo quei nodi che può raggiungere attraverso il
sistema autonomo che ha spedito le informazioni. Riprendendo l’esempio precedente, se il
portavoce A1 spedisce la propria tavola di routing al portavoce C1, la tavola di routing del nodo
C1 verrà aggiornata con le informazioni di raggiungibilità dei nodi A1…A5; il percorso per
raggiungere questi nodi dal sistema autonomo AS3 è AS3-AS1. La figura sottostante mostra le
tavole di routing finali dei quattro sistemi autonomi.
Utilizzando queste tavole , se il router A1 riceve un pacchetto per A3 sa che il pacchetto deve
rimanere all’interno del proprio sistema autonomo; se invece A1 riceve un pacchetto destinato a
D1, sa che il pacchetto dovrà passare da AS1 ad AS2 e poi ad AS3 per raggiungere la propria
destinazione.
BGP (Border Gateway Protocol): è un protocollo di routing interdominio basato sul vettore dei
cammini. Il protocollo BGP divide i sistemi autonomi in tre categorie:
• AS terminale: è un sistema autonomo con una sola connessione verso un altro
sistema autonomo, quindi i pacchetti che entrano in un AS terminale sono destinati
ad un host che si trova all’interno di esso. Es. di AS terminali sono gli ISP locali.
• AS di transito: è un sistema autonomo che consente ai pacchetti provenienti da altri
AS di essere inoltrati verso il sistema autonomo di destinazione passando per i propri
router. Es. di AS di transito sono gli ISP nazionali.
• AS con più connessioni: è un sistema autonomo con più connessioni che non
permette il passaggio di pacchetti verso altri sistemi autonomi. Es. di AS con più
connessioni è un sistema autonomo di una grande azienda connesso a più ISP.
BGP interno ed esterno: La sessione E-BGP viene utilizzata per scambiare informazioni fra
due nodi portavoce che appartengono a due sistemi autonomi diversi. Una sessione I-BGP
viene utilizzata per scambiare informazioni fra due router all’interno dello stesso sistema
autonomo.
110
PARTE V
CAPITOLO 22:
STRATO DI TRASPORTO
PROTOCOLLI UDP, TCP E SCTP
Lo strato di collegamento di una interrete permette di trasferire i frame fra i due host direttamente
collegati, cioè che si trovano sulla stessa rete. Lo strato di rete, invece, permette di trasferire i
datagram fra due host indipendentemente dalla loro posizione nella rete. Ciò che a noi interessa,
però, è la possibilità di far comunicare due processi, cioè due programmi in esecuzione, che
vengono eseguiti su due host qualsiasi della rete. Lo strato di trasporto, quindi, ha proprio queste
responsabilità: fornire un servizio di comunicazione che permetta a due processi di comunicare fra
di loro. Nello strato di trasporto la suite di protocolli usati in Internet sono:
• TCP (Transmission Control Protocol): è complesso ma fornisce garanzie sulla consegna dei
dati;
• UDP (User Datagram Protocol): è il più semplice ma non fornisce nessuna garanzia;
• SCTP (Stream Control Transmission Protocol): introdotto di recente per soddisfare le
esigenze di gestione di flussi multimediali (audio/video).
Nello strato di rete due calcolatori comunicano mediante gli indirizzi IP, questo però non è
sufficiente nello strato di trasporto in quanto abbiamo visto che gli indirizzi IP permettono di
identificare due calcolatori ma non i processi in esecuzione sui singoli calcolatori. Per questo
motivo abbiamo bisogno di un ulteriore meccanismo che permetta di identificare il processo di
destinazione una volta che il datagram è giunto nell’host di destinazione. Lo strato di trasporto,
quindi, risolve questo problema utilizzando i numeri di porta. Dunque la comunicazione tra due host,
nello strato di trasporto, sarà caratterizzata dalla coppia di valori (IP, numero di porta) per ogni
host. I numeri di porta sono interi a 16 bit, cioè compresi tra 0 e 65535. I numeri di porta vengono
gestiti dall’associazione IANA (Internet Assigned Number Authority) che divide tali numeri di porte
in tre categorie:
• Porte ben note: da 0 a 1023. Assegnate a servizi ben specifici;
• Porte registrate: da 1024 a 49151. È possibile registrare presso IANA l’utilizzo di uno di questi
numeri di porta per evitare conflitti con altri utenti;
• Porte dinamiche: da 49152 a 65535. Non sono controllate da IANA, il sistema operativo le
utilizza come porte effimere.
111
Modello client/server: sebbene ci siano vari modi per far comunicare due processi il più comune è
il modello client/server: un processo, chiamato Client, necessita di servizi di un altro processo,
chiamato Server.
• Server:
o Processo che offre un servizio;
o Sempre in esecuzione;
ƒ Almeno quando il servizio è attivo;
ƒ In attesa di richieste.
• Client:
o Usufruisce del servizio;
o Contatta il server (inizia la comunicazione).
Ritornando, quindi, al concetto di numero di porta il processo client utilizza un numero di porta
scelto in modo casuale dallo strato di trasporto, chiamata porta effimera (il suo utilizzo è limitato
alla durata della connessione). Invece il numero di porta utilizzato dal processo server deve essere
una porta nota.
In questo esempio il server Daytime offre il proprio servizio sulla porta ben nota 13, mentre il
processo client utilizza la porta effimera 52000 per stabilire la comunicazione con il server.
N.B. l’indirizzo IP serve a identificare l’host di destinazione mentre il numero di porta serve a
identificare il processo una volta che il datagram è giunto nell’host di destinazione.
Socket
Abbiamo visto che per identificare univocamente un processo abbiamo bisogno dell’indirizzo IP per
identificare l’host sul quale è in esecuzione il processo e il numero di porta per identificare il
processo all’interno dell’host. La combinazione di indirizzo IP e numero di porta viene chiamato
indirizzo di socket o più semplicemente socket.
Per una comunicazione fra un client e un server abbiamo bisogno di un socket per il client e di un
socket per il server.
Multiplexing e demultiplexing
Il meccanismo di indirizzamento dei numeri di porta è una forma di multiplexing e demultiplexing
effettuata dallo strato di trasporto.
Nell’host mittente possono esserci vari processi che spediscono dati. Pertanto lo strato di trasporto
deve effettuare il multiplexing dei dati in arrivo dai vari processi. Per fare ciò, assegna un numero di
112
porta a ogni processo, aggiunge tale numero in una propria intestazione per i dati in arrivo dal
processo e spedisce i dati utilizzando lo strato di rete. Lo strato di trasporto della destinazione,
grazie al numero di porta inserito nell’intestazione creata dallo strato di trasporto nel mittente,
consegna i datagram ai processi di destinazione.
Comunicazione senza e con connessione
Un protocollo di trasporto può offrire un servizio di comunicazione orientato alla connessione
oppure senza connessione. In un servizio di comunicazione senza connessione i dati vengono
spediti dal mittente al destinatario, senza dover stabilire una connessione prima della spedizione
dei dati. I datagram non vengono numerati; poiché non c’è una connessione, ognuno di essi
viaggia indipendentemente dagli altri e senza nessuna relazione con quelli spediti prima o dopo.
Ogni datagram può essere perso o ritardato o arrivare fuori sequenza. Il protocollo più semplice dei
tre protocolli di trasporto usati per Internet è il protocollo UDP. In un servizio di comunicazione con
connessione, prima di poter spedire dati, il mittente e il destinatario devono instaurare una
connessione. Dopo aver trasferito tutti i dati, la connessione deve essere eliminata.
Affidabilità
I servizi di comunicazione dello strato di trasporto possono essere classificati in affidabili e
inaffidabili. Un servizio di comunicazione inaffidabile come il protocollo UDP, non fornisce alcuna
garanzia sulla consegna dei pacchetti. N servizio di comunicazione affidabile, come TCP o SCTP,
può offrire varie garanzie sulla consegna dei dati utilizzando meccanismi per il controllo del flusso e
degli errori.
I tre protocolli dello strato di trasporto
Originariamente la suite di protocolli TCP/IP specificava due protocolli per lo strato di trasporto: il
protocollo UDP e TCP. Un nuovo protocollo SCTP è stato recentemente inserito nella suite.
PROTOCOLLO UDP
Il protocollo UDP (User Datagram Protocol) è un protocollo di trasporto inaffidabile e senza
connessione. Non offre nient’altro che l’indirizzamento dei processi attraverso il numero di porta
oltre al sevizio già offerto dal protocollo IP. Il protocollo UDP viene utilizzato perché ha comunque
dei lati positivi. Grazie alla sua semplicità il sovraccarico dovuto al protocollo è minimo. Nei casi in
cui un processo voglia spedire una piccola quantità di dati e i dati non siano di vitale importanza,
può utilizzare il protocollo UDP. L’utilizzo del protocollo UDP richiede meno interazione fra mittente
e destinatario e se i dati vengono consegnati come succede nella maggior parte dei casi, risulta più
efficiente rispetto a TCP o SCTP.
113
In un sistema Unix/Linux i numeri di porta ben noti sono memorizzati nel file /etc/services.
Datagram
I pacchetti del protocollo UDP vengono chiamati datagram e hanno l’intestazione di lunghezza
fissa di 8 byte.
I campi dell’intestazione sono:
1. numero di porta del mittente. Questo campo significa il numero di porta utilizzato dal
processo che spedisce il datagram. È un campo di 16 bit e contiene un numero di porta
compreso fra 0 e 65535.
2. numero di porta del destinatario. Questo campo specifica il numero di porta del processo
destinazione; anche questo campo è di 16 bit.
3. lunghezza. Questo campo di 16 bit definisce la lunghezza totale del datagram. In realtà non è
necessario. La lunghezza del datagram UDP = lunghezza datagram IP – lunghezza
intestazione IP.
4. somma di controllo. Questo campo viene utilizzato per rilevare errori sull’intero datagram, cioè
sia nell’intestazione che nei dati.
Somma di controllo
La somma di controllo utilizzata dal protocollo UDP viene calcolata in un modo diverso da quello
descritto nel capitolo 9. in questo caso la somma include tre sezioni: una pseudointestazione,
l’intestazione del pacchetto UDP e i dati che arrivano allo strato superiore.
114
Esempio 22.2
Il datagram utilizza 7 byte di dati. Si utilizzano gli zeri per allineare i byte di dati per il controllo della
somma di controllo. Sia la pseudointestazione che il riempimento finale non fanno parte del
datagram ma solo per il calcolo della somma di controllo. Tale somma è opzionale. Se non viene
utilizzata il campo relativo alla somma di controllo contiene tutti 1 (una somma reale non può mai
contenere tutti 1, dato che i campi dell’intestazione non possono essere formati da solo 0).
Code
L’implementazione dei numeri di porta prevede l’utilizzo di code per memorizzare i datagram in
uscita e quelli in entrata.
Quando un processo richiede la comunicazione attraverso un particolare numero di porta UDP,
vengono create, da parte del sistema operativo, delle code. Alcune implementazioni creano sia una
coda di entrata che una coda di uscita associate a ogni processo. Altre implementazioni creano
solo una coda di entrata associata a ogni processo. si noti che le code sono associate al numero di
porta e sono operative finché il processo è in esecuzione. Quando il processo termina le code
vengono eliminate.
Per spedire i dati il processo mittente li inserisce nella coda di uscita. Il protocollo UDP preleva i
dati dalla coda di uscita, aggiunge l’intestazione UDP e consegna il datagram UDP al protocollo IP.
Quando arriva un datagram UDP, il protocollo UDP controlla se esiste già una coda di entrata
associata al numero di porta specificato come porta destinazione. Nel caso la coda esista, il
datagram in arrivo viene inserito nella coda di entrata. Se la coda non esiste, il protocollo UDP
elimina il datagram e chiede al protocollo ICMP di spedire al mittente un messaggio di errore (porta
non raggiungibile).
PROTOCOLLO TCP
TCP (Transfer Control Protocol), come UDP, permette la comunicazione fra due processi; pertanto
anch’esso utilizza i numeri di porta. Diversamente da UDP, TCP è un protocollo di trasporto che
utilizza una connessione. Prima di spedire i dati crea una connessione virtuale fra il mittente e il
destinatario. Inoltre, il protocollo TCP utilizza dei meccanismi per il controllo del flusso e degli errori.
Flusso di dati
Con il protocollo TCP, invece, il processo mittente spedisce un flusso di byte, senza limitazione
sulla dimensione, e il protocollo destinatario riceve esattamente lo stesso flusso di byte. Il
protocollo TCP crea una connessione virtuale che può essere paragonata a un tubo che collega il
mittente e il destinatario, nel quale possiamo far fluire i dati.
115
Buffer. Poiché il processo mittente e il processo destinatario potrebbero non scrivere e leggere alla
stessa velocità, il protocollo TCP utilizza dei buffer per memorizzare sia il flusso dei dati in uscita
dal processo mittente sia il flusso di dati in entrata per il processo destinatario.
Un buffer è una coda circolare di celle di memoria capaci ognuna di contenere un byte. Il buffer del
mittente è diviso in tre zone. La zona bianca contiene celle di memoria che possono essere
utilizzare dal processo mittente per scrivere nuovi byte da spedire. La scrittura di 1 byte fa
cambiare lo stato della cella da bianca a colorata. L’area blu contiene byte che sono stati spediti
dal protocollo TCP ma per i quali non si è ancora ricevuto un riscontro; TCP mantiene i byte spediti
nel buffer se non è sicuro che questi byte sono stati ricevuti dal destinatario. Quando TCP è sicuro
che i byte sono stati consegnati al destinatario, libera le corrispondenti celle di memoria allargando
la zona libera (quella bianca). La zona rossa, infine, contiene i byte che il processo mittente ha già
scritto ma che devono essere ancora spediti dal protocollo TCP. La spedizione di 1 byte fa
cambiare lo stato della cella corrispondente da rossa a blu. Si noti che TCP potrebbe spedire
anche solo una parte di byte da spedire; ci sono vari motivi per cui TCP potrebbe spedire solo una
parte di questi byte. Il funzionamento del buffer del destinatario è più semplice. il buffer circolare è
diviso in due zone in questo caso. La zona bianca contiene celle vuote che possono essere
utilizzate per memorizzare i byte in arrivo, mente la sezione colorata contiene quei byte che sono
stati ricevuti e memorizzati nel buffer ma che devono ancora essere prelevati dal processo
destinatario. Quando un byte viene letto dal processo destinatario, la corrispondente cella del
buffer viene riciclata.
Segmenti. Poiché i dati devono comunque essere trasportati dal protocollo IP, il flusso di dati
fornito dal processo mittente dovrà essere diviso in pezzi che possono essere inseriti in datagram
IP. Pertanto il protocollo TCP si preoccuperà di spedire il flusso di dati in pezzi che vengono
chiamati segmenti. A ogni segmento il protocollo TCP aggiunge un’intestazione TCP e utilizza lo
strato di rete per incapsulare il tutto in un datagram IP. All’arrivo i segmenti dovranno essere
rimessi insieme per creare il flusso di dati originali da consegnare al processo destinatario. Anche
questo è ovviamente compito del protocollo TCP.
116
Comunicazione bidirezionale
Il protocollo TCP offre un servizio di comunicazione bidirezionale e quindi permette la spedizione
dei dati in entrambe le direzioni contemporaneamente. Pertanto in una comunicazione TCP ci sono
4 buffer, uno di spedizione e uno di ricezione in ognuno dei due host coinvolti nella comunicazione.
Connessione
Prima di spedire i dati, il protocollo TCP crea una connessione fra i due processi; tale connessione
verrà eliminata alla fine dello scambio dati. Il funzionamento del protocollo TCP passa attraverso le
seguenti 3 fasi:
1. instaurazione della connessione
2. scambio dati in entrambe le direzioni
3. chiusura e eliminazione della connessione
Affidabilità
Il servizio offerto dal protocollo IP per la consegna dei dati contenuti nei segmenti non fornisce
alcun tipo di garanzia. È responsabilità del protocollo TCP creare una connessione virtuale
affidabile controllando che tutti i byte vengano ricevuti, eventualmente rispedendo quelli che non
vengono ricevuti e ristabilendo l’ordine dei byte qualora questo venga perso.
Numerazione del flusso di byte
TCP utilizza un sistema di numerazione che numera tutti i byte del flusso. Ogni segmento includerà
un numero di sequenza che specifica il numero di sequenza del primo byte contenuto nel
segmento. Poiché la comunicazione è bidirezionale, ogni segmento trasporta anche un numero di
riscontro. I byte spediti dal protocollo TCP vengono numerati. La numerazione inizia da un numero
casuale.
Esempio
Supponiamo che vengano trasferiti 5000 byte utilizzando una connessione TCP e che la
numerazione parte da 10001. supponendo che i dati vengano trasferiti in cinque segmenti di 1000
byte, quali sono i numeri di sequenza specificati in ogni segmento?
Soluzione
Il primo segmento avrà numero di sequenza 10001, esso trasporta i primi 1000 byte, dal numero
10001 al 11000. il secondo segmento avrà numero di sequenza 11001; esso trasporta i successivi
1000 byte dal 11001 al 12000 e così via.
Il numero di sequenza di un segmento TCP fa riferimento al primo byte dei dati contenuti nel
segmento.
Numero di riscontro. Una comunicazione TCP è bidirezionale. Poiché i dati fluiscono sia da A a B
che da B ad A, il protocollo TCP spedisce segmenti in entrambi le direzioni. Per poter comunicare
l’avvenuta ricezione dei byte, il protocollo TCP utilizza dei numeri di riscontro che devono essere
spediti nella direzione opposta a quella della spedizione dei dati. Per evitare di spedire dei
messaggi che contengono solo i numeri di riscontro, poiché ci sono dei segmenti di dati che
viaggiano nella stessa direzione in cui devono viaggiare i riscontri, il protocollo utilizza una tecnica
detta di piggyback: i numeri di riscontro che B deve spedire ad A vengono inseriti nei segmenti di
dati che vanno da B verso A.
Il numero di riscontro x vale come riscontro per tutti i byte numerati fino a x-1.
117
Il valore del numero di riscontro definisce il numero del prossimo byte che il destinatario si aspetta
di ricevere. Il riscontro è cumulativo.
Controllo del flusso
Il protocollo TCP fornisce dei meccanismi per il controllo del flusso. Il destinatario dei dati può
controllare la quantità di dati che possono essere spediti dal mittente. Questa caratteristica è utile
per impedire al mittente di sovraccaricare il destinatario con dati che non possono essere
memorizzati nei buffer.
Controllo degli errori
Il protocollo TCP fornisce anche dei meccanismi per il controllo degli errori, che viene fatto per ogni
segmento. Ovviamente garantisce che non ci sono errori in tutti i segmenti equivale a garantire che
on ci sono errori in tutto il flusso di byte.
Controllo della congestione
Il controllo della congestione permette al destinatario di regolare opportunamente secondo le
proprie necessità la velocità di spedizione della sorgente. Oltre a questa funzionalità il protocollo
TCP permette di regolare la velocità di spedizione dei dati in funzione del livello di congestione
della rete.
Segmenti
L’intestazione di un segmento TCP è lunga da un minimo di 20 byte a un massimo di 60 byte ed è
seguita dai dati contenuti nel segmento. L’intestazione è lunga 20 byte se non ci sono opzioni.
¾ Numero di porta del mittente. Questo campo di 16 bit specifica il numero di porta utilizzato
dal processo mittente.
¾ Numero di porta del destinatario. Questo campo di 16 bit specifica il numero di porta del
processo destinatario
¾ Numero di sequenza. Di 32 bit specifica il numero di sequenza del primo byte contenuto
nella sezione dei dati del segmento. Durante l’instaurazione della connessine viene
utilizzato un numero di sequenza casuale, x, che fornisce anche la numerazione, x+1, del
primo byte che dovrà essere trasmesso
¾ Numero di riscontro. Di 32 bit specifica il numero del prossimo byte che il destinatario si
aspetta di ricevere dal mittente.
¾ Lunghezza di intestazione. Questo campo di 4 bit definisce la lunghezza dell’intestazione
TCP misurata in gruppi di 4 byte. Poiché la lunghezza dell’intestazione di un segmento varia
fra 20 e 60 byte, il valore varia fra 5 (5x4=20) e 15 (15x4=60).
¾ Bit riservati. 6 bit riservati per utilizzi futuri
¾ Bit di controllo. Di 6 bit fornisce 6 bit di controllo utilizzati per vari scopi.
¾ Lunghezza della finestra. Il protocollo TCP basa il proprio funzionamento sull’algoritmo
della finestra scorrevole. Di 16 bit definisce la dimensione della finestra scorrevole.
¾ Somma di controllo. Di 16 bit contiene il valore della somma di controllo
118
¾ Puntatore dati urgenti. Questo campo di 16 bit è valido solo quando il corrispondente bit
vale a 1. viene utilizzato quando il segmento contiene dei dati urgenti, cioè dei dati che
devono essere letti subito dal processo destinazione. Il puntatore urgente contiene il numero
di byte urgente. Pertanto i dai urgenti sono quelli numerati dal numero x di sequenza del
segmento fino al numero x+y-1 dove y è il valore del puntatore urgente.
¾ Opzioni. Ci possono essere fino a 40 byte di informazioni opzionali nell’intestazione di un
segmento TCP.
CONNESSIONE TCP
Instaurazione della connessione
La fase di instaurazione della connessione in TCP viene chiamata three-way handshanking. Uno
dei processi chiamato client vuole aprire una connessione con l’altro processo chiamato server
utilizzando il protocollo TCP. Il processo server deve innanzitutto comunicare al protocollo TCP che
è pronto ad accettare una connessione TCP. Questa richiesta viene chiamata apertura passiva. Il
processo client invece chiede al protocollo TCP di instaurare una connessione con un processo
server che deve aver già effettuato l’apertura passiva. Tale richiesta è chiamata apertura attiva.
Vengono scambiati 3 segmenti:
1. il client spedisce il primo segmento che viene chiamato segmento di SYNC, nel quale l’unico
bit di controllo che vale 1 è SYNC. Questo segmento serve per la sincronizzazione. Il
numero di sequenza specificato viene scelto in modo causale.
2. il server risponde con un altro segmento, chiamato segmento di SYNC+ACK, nel quale i bit
di controllo posti a 1 sono SYNC e ACK. Questo segmento ha una doppia funzione, è un
segmento SYNC nell’altra direzione e allo stesso tempo un riscontro per il segmento SYNC
spedito dal client.
3. il client spedisce un terzo segmento in risposta al segmento spedito dal server. Quest’ultimo
segmento è semplicemente un segmento di ACK che conferma la ricezione del segmento
SYNC spedito dal server.
Trasferimento dati
Instaurata la connessione, possono essere trasferiti i dati. Sia il client che il server possono spedire
dati e riscontri.
119
In questo esempio dopo l’instaurazione della connessione, il client spedisce 2000 byte di dati in
due segmenti. Quindi il server risponde spedendo 2000 byte in un solo segmento. Il client spedisce
un ulteriore segmento che però non contiene dati, ma solo un riscontro. I segmenti di dati spediti
dal client viaggiano con il bit di controllo PSH impostato a 1; il segmento spedito dal server invece
non utilizza il bit di PSH.
Chiusura della connessione
Sia il server che il client possono decidere di chiudere la connessione, anche se la chiusura della
connessione viene tipicamente iniziata dal client. La chiusura può avvenire in 2 modi: three-way e
mezza-chiusura.
Chiusura three-way. 1. il processo client richiede la chiusura e spedisce un segmento con il bit
do controllo FIN a 1. può contenere anche l’ultima parte dei dati che il client vuole spedire.
2. il protocollo TCP nel lato server, dopo aver ricevuto il segmento di FIN notifica la
richiesta di chiusura spedendo un segmento con i bit FIN+ACK impostati. Anche il
questo caso il segmento può trasportare dati.
3. infine il client spedisce l’ultimo segmento di ACK per confermare la ricezione del
segmento di FIN spedito dal server. Questo segmento non trasporta dati e contiene un
numero di riscontri pari al numero di sequenza ricevuto nel segmento di FIN spedito dal
server e incrementato di 1.
Mezza chiusura. Nella chiusura three-way si assume che il server chiuda immediatamente la
connessione dopo aver ricevuto la richiesta di chiusura. Tuttavia ci possono essere delle situazioni
in cui il client chieda la chiusura della connessione perché non ha più dati da spedire al server, ma
il server ha ancora dati da spedire al client e pertanto vuole mantenere aperta la connessione.
120
I primi due segmenti sono il segmento di FIN che richiede la chiusura della connessione da parte
del client e il segmento di ACK spedito dal server. Dopo la spedizione di questi due segmenti la
connessione è chiusa a metà, il client non può più spedire dati, mentre il server ha mantenuto
aperta la connessione e quindi può ancora spedire segmenti di dati. Quando anche il server avrà
finito di spedire i propri dati potrà effettuare la chiusura della connessione spedendo un segmento
di FIN.
Diagramma di stato di TCP
Tuttavia tali fasi sono sufficientemente complicate da richiedere un diagramma di stato per la
descrizione dettagliata del comportamento di TCP. La notazione Evento/Spedisci indica ciò che
TCP spedisce nell’accadere di un evento; se viene specificato solo l’evento significa che TCP no
spedisce niente e c’è solo il passaggio da uno stato all’altro.
Lo stato di TIMEWAIT indica che bisogna aspettare prima della chiusura della connessione per
due motivi: il primo è per evitare problemi durante la chiusura della connessione, il secondo motivo
è per evitare problemi con la reincarnazione di una connessione. Una connessione è
univocamente determinata dagli indirizzi IP e dalle porte dei socket coinvolti. Anche se raro, è
possibile che una nuova connessione usi esattamene gli stessi numeri di porta e indirizzi IP.
Pertanto se nella rete esistono ancora pacchetti appartenenti alla vecchia connessione il loro arrivo
alla destinazione creerebbe problemi alla nuova. Lo stato di TIME WAIT risolve questo problema
usando una stima di vita di segmento pari a 2 minuti.
121
Controllo del flusso
Il protocollo TCP utilizza l’algoritmo della finestra scorrevole per poter controllare il flusso di dati.
Tuttavia il modo in cui TCP utilizza la finestra scorrevole è una via di mezzo fra l’algoritmo go-backN e quello di ripetizione selettiva. La finestra scorrevole utilizzata da TCP è simile all’algoritmo goback-N in quanto non vengono utilizzati riscontri negativi. Ci sono 2 differenze sostanziali: la
finestra scorrevole del protocollo TCP ha come elementi i singoli byte; la seconda differenza è che
la dimensione della finestra scorrevole del protocollo TCP è variabile.
La dimensione della finestra viene determinata dal minimo di 2 valori: la dimensione della finestra
del ricevitore (rwnd) e la dimensione della finestra di congestione (cwnd). La dimensione della
finestra del ricevitore è il valore che viene cominciato dal destinatario nei segmenti che trasportano
un riscontro nell’apposito campo dell’intestazione del segmento; in pratica è il numero dei byte che
il destinatario può ancora accettare prima di finire lo spazio disponibile del buffer di ricezione.
Problema della finestra futile
Utilizzando l’algoritmo della finestra scorrevole, TCP può spedire byte quando la finestra non è
nulla. Se però la finestra è molto piccola si creano segmenti che contengono pochi dati e pertanto
si crea molto sovraccarico dovuto alle intestazioni. Se il destinatario pubblicizza sempre una
finestra di un solo byte, il protocollo TCP crea segmenti contenenti un singolo byte. Questo
problema è conosciuto con il nome di finestra futile. Per risolvere questo problema si potrebbe
pensare di imporre una limitazione a TCP: spedire dati solo quando la finestra è sufficientemente
grande. Sebbene questo crei meno sovraccarico dovuto alle intestazioni, non è sempre fattibile.
L’algoritmo di Nagle offre una soluzione elegante. Se si possono creare segmenti grandi, allora si
può spedire subito perché il problema della finestra futile non si pone. Se ci sono solo pochi byte
da spedire, allora si utilizza la seguente regola: se ci sono dati non riscontrati, non spedire;
altrimenti spedisci subito anche se il segmento è molto piccolo. Il altre parole, se il mittente sta
aspettando un riscontro, allora sa che prima o poi qualcosa succederò e quindi può permettersi di
aspettare. Se invece non sta aspettando un riscontro, non può permettersi di aspettare perché
potrebbe rischiare di aspettare per sempre; in questo caso spedisce i dati anche se sono pochi.
Controllo degli errori
Il controllo degli errori nel protocollo TCP viene effettuato attraverso l’utilizzo di somme di controllo,
riscontri e ritrasmissioni.
Trasmissione senza problemi. Il client spedisce un segmento di 200 byte e il server risponde con
un segmento di
1000 byte che contiene anche il riscontro dei 200 byte spediti dal client. Il client,
che non ha altri dati da spedire, aspetta per un tempo pari a 500 ms prima di spedire un riscontro.
Tale attesa viene fatta per aspettare ulteriori dati e quindi spedire un unico riscontro cumulativo;
ovviamente non si può aspettare pr un tempo indefinito, in quanto no si sa se arriveranno altri dati.
Dopo la spedizione del primo riscontro da parte del client, il server spedisce un primo segmento di
1000 byte. Il client non spedisce subito un riscontro per questo segmento ma attende di nuovo 500
ms. durante questa attesa arriva un nuovo segmento di dati spedito dal server. Il client spedisce un
unico riscontro per entrambi i segmenti di dati ricevuti.
122
Trasmissione con segmento perso. Nell’esempio un segmento viene perso o ricevuto con errori.
I primi 2 segmenti spediti dal mittente vengono ricevuti dal destinatario il quale spedisce un
riscontro cumulativo per entrambi i segmenti. Il 3 segmento invece, no viene ricevuto dal
destinatario che invece riceve il 4 segmento. Il destinatario riceve quindi dei dati fuori ordine che
comunque memorizza nel buffer. Il riscontro spedito dopo il 4 segmento fa capire che si aspetta
ancora il 3 segmento. Alla scadenza del time out viene rispedito il segmento 3. il protocollo TCP
consegna i byte in arrivo al processo destinatario nell’ordine in cui questi sono stati spediti, anche
se i segmenti arrivano fuori ordine.
Ritrasmissione veloce. In questo esempio il valore timeout è molto più grande. Quando il
ricevitore riceve il 4, 5, 6 segmento, poiché il 3 non è stato ricevuto, viene spedito un riscontro per il
byte numero 301. alla ricezione del 3 duplicato del riscontro che specifica sempre il byte 301, il
mittente spedisce in segmento che contiene i byte 301-400 senza aspettare il time out. Viene
rispedito solo un segmento. Alla ricezione del segmento il ricevente invierà un riscontro per il byte
701. quando il mittente riceverà tale riscontro capirà che tutti gli altri segmenti sono andati a buon
fine.
destinazione.
123
CAPITOLO 23:
CONTROLLO DELLA
CONGESTIONE E QUALITA’ DEL
SERVIZIO
Il Controllo della congestione e la qualità del servizio sono due aspetti fondamentali del
funzionamento di una rete di calcolatori profondamente collegati tra di loro. Questi due aspetti
dipendono fortemente dal traffico dei dati. In una rete di calcolatori, se si spediscono talmente tanti
dati da esaurire tutte le capacità trasmissivo dei collegamenti e dei router, non è più possibile
comunicare o si riesce a farlo solo lentamente. Quindi per poter offrire un servizio migliore , occorre
poter controllare la congestione della rete. Il controllo della congestione non è un aspetto legato ad
un singolo strato dell’architettura di rete, ma a tre strati: quello di collegamento, quello di rete e
quello di trasporto.
TRAFFICO DATI: Il controllo della congestione ha come obiettivo quello di evitare la
congestione che verrebbe causata da un elevato traffico dati. Cosa è il traffico dati? Il traffico dati
presente sulla rete può essere rappresentato con dei parametri caratteristici:
-. Velocità massima: la velocità massima è il valore massimo della velocità con cui possono
essere spediti i dati; raggiunta solo in pochi momenti.
-. Velocità media: la velocità media, in un certo periodo, è data dalla quantità di dati
(numero di byte) spediti nel periodo di tempo diviso il numero di secondi del periodo di
tempo.
-. Raffiche: Per raffiche di dati si intendono la spedizione di dati per un certo periodo di
tempo alla velocità massima. Tipicamente le raffiche di dati sono molto brevi. Se si
verificano molte raffiche si possono verificare dei problemi.
Il traffico può essere a velocità costante, velocità variabile, a raffiche.
-. Il traffico a velocità costante è caratterizzato da una velocità di spedizione che non
cambia nel tempo. La velocità massima coincide con la velocità media e in questo caso non
ha senso di parlare di raffiche di dati.
-. Il traffico a velocità variabile è caratterizzato da una velocità di spedizione che cambia
nel tempo. I cambiamenti sono tipicamente graduali e possono esserci brevi raffiche di dati.
Questo tipo di traffico è più difficile da gestire rispetto a quello con velocità costante.
-. Il traffico a raffiche è caratterizzato da improvvisi cambi di velocità di spedizione. Ad
esempio si può passare da una velocità di spedizione nulla (nessun dato spedito) a una
velocità di spedizione di 10 Mbps in pochi microsecondi e viceversa. Questo tipo di traffico è
molto difficile da gestire. Il traffico a raffiche è la causa principale della congestione della
rete.
124
CONGESTIONE: In una rete di calcolatori a commutazione di pacchetto si verifica una
situazione di congestione quando il carico sulla rete, cioè la quantità di dati spediti, è più grande
della capacità della rete, cioè della quantità di dati che la rete può gestire. La congestione può
avvenire anche per altri motivi. Infatti i router, per inoltrare i pacchetti ricevuti, devono memorizzarli
nelle code e tale operazione crea un’attesa. Se l’attesa diventa lunga si può creare una situazione
di congestione.
Prestazioni della rete: Per valutare gli effetti della congestione si possono valutare le prestazioni
della rete. In situazioni di congestione le prestazioni degradano. Per misurare le prestazioni
tipicamente si utilizzano due misure: il ritardo e il throughput. Ritardo: Quando il carico è molto più
basso della capacità della rete, il ritardo è minimo; quando il carico cresce e si avvicina alla
capacità della rete, il ritardo aumenta notevolmente; quando il carico è maggiore della capacità
allora è possibile che la congestione diventi totale e nessun pacchetto riesce più a raggiungere la
destinazione, pertanto il ritardo diventa infinito. Throughput: è la quantità di dati che effettivamente
si riesce a trasferire nell’unità di tempo. Quando il carico è minore della capacità della rete, il
throughput cresce proporzionalmente al carico; infatti tutti i dati che si spediscono, poiché non c’è
congestione, vengono consegnati senza problemi. Quando il carico raggiunge e supera la capacità
della rete, il throughput decresce; infatti quando c’è congestione i router eliminano i pacchetti.
CONTROLLO DELLA CONGESTIONE: possiamo dividere i meccanismi di controllo della
congestione in due categorie: proattivi e reattivi.
Controllo proattivo: Le tecniche di controllo della congestione proattive servono a prevenire la
congestione prima che questa accada. Esistono varie tecniche di controllo della congestione
proattivo:
• Politiche di ritrasmissione: la ritrasmissione è necessaria quando ci sono stati problemi
con trasmissioni precedenti. Ovviamente la ritrasmissione di pacchetti genera ulteriore traffico e
quindi può incrementare la congestione della rete. Ritardare la ritrasmissione può aiutare a
evitare il problema della congestione.
• Gestione della finestra scorrevole: Diminuire la dimensione della finestra scorrevole
comporta la riduzione del traffico dati.
• Regole per i riscontri: Il destinatario potrebbe spedire un riscontro solo se ha un pacchetto
di dati da spedire o se un apposito timeout è scaduto. Oppure il destinatario potrebbe decidere
di spedire un riscontro solo ogni N pacchetti. Oltre a rallentare la sorgente, spedire meno
riscontri crea anche meno traffico aggiuntivo sulla rete.
• Politiche di eliminazione dei pacchetti: Nei casi di congestione i router devono eliminare i
pacchetti. In realtà i router possono decidere di eliminare alcuni pacchetti anche prima della
congestione per evitarla. Quindi le politiche di eliminazione dei pacchetti possono aiutare a
prevenire la congestione.
• Politiche di accesso: Le politiche di accesso sono in realtà un meccanismo per la qualità
del servizio, ma possono anche aiutare a prevenire la congestione nelle reti a circuito virtuale.
Qualsiasi router coinvolto nel circuito virtuale può negare la sua disponibilità, impedendo così la
trasmissione. Non si applica a Internet.
Controllo reattivo: Le tecniche di controllo della congestione reattive servono a cercare di
eliminare la congestione dopo che questa si è verificata. Esistono varie tecniche di controllo della
congestione reattivo:
• Pressione all’indietro: Con questa tecnica un nodo congestionato smette di accettare dati
dal nodo precedente. Questo può causare congestione anche in tale nodo e così via fino al
mittente. Può essere applicata sono nelle reti che utilizzano circuiti virtuali.
In questa figura il nodo III è congestionato e fa pressione sul nodo II non accettando più dati
spediti ; il nodo II può quindi congestionarsi e a sua volta fare pressione sul nodo I, che farà
pressione sul mittente che, quindi, sarà costretto a smettere di spedire o rallentare la
spedizione.
125
• Segnalazione al mittente: Con questa tecnica un router congestionato spedisce un
pacchetto di segnalazione direttamente al mittente. Eventuali altri router intermedi non
vengono informati.
• Segnalazione implicita: Con questa tecnica non c’è nessuna comunicazione fra un nodo
congestionato e il mittente dei pacchetti. Il mittente può accorgersi che c’è congestione da
alcuni sintomi. Ad esempio, quando spedisce molti pacchetti e non riceve nessun riscontro
per un lungo periodo di tempo, il ritardo nella ricezione di un riscontro, sono tutti sintomi di
congestione. In questi casi bisognerebbe rallentare la velocità di trasmissione.
• Segnalazione esplicita: Con questa tecnica, un nodo congestionato spedisce un segnale al
Mittente (segnalazione all’indietro) o al destinatario (segnalazione in avanti). La segnalazione
esplicita è diversa dalla segnalazione alla sorgente in quanto non viene utilizzato uno speciale
pacchetto di segnalazione. Nella segnalazione esplicita il segnale viene inserito all’interno di
un pacchetto dati.
Controllo della congestione in TCP:
Finestra di congestione. Abbiamo visto precedentemente che il destinatario comunica la
dimensione della propria finestra al mittente in modo che quest’ultimo sappia quanto spazio il
destinatario ha ancora a disposizione. Il mittente mantiene una variabile, rwnd (receive
window), in cui memorizza la dimensione della finestra del destinatario. Per non
sovraccaricare il destinatario, il mittente sceglie per la propria finestra una dimensione minore
o uguale a rwnd. Il mittente mantiene anche un’altra variabile, cwnd (congestion window), che
permette di tener conto di un’eventuale situazione di congestione della rete. Quando la rete è
congestionata questa variabile assume valori piccoli, mentre quando la rete non è
congestionata questa variabile assume valori più grandi. Per tener conto sia dello stato del
destinatario sia dello stato di congestione della rete, il mittente utilizza una dimensione
effettiva della finestra data dal minimo di queste due variabili: Finestra effettiva = minimo
(rwnd, cwnd).
Gestione della finestra di congestione. I meccanismi per la gestione della finestra di
congestione in TCP sono tre:
1. Avvio lento (aumento moltiplicativo):
La dimensione iniziale della finestra di congestione viene impostata a 1 MSS. Supponiamo che il
destinatario spedisce un riscontro per ogni pacchetto ricevuto e che la variabile rwnd sia sufficientemente
grande in modo tale che la finestra effettiva sia sempre determinata da cwnd. Quindi quando la finestra di
congestione vale 1 il mittente potrà spedire un solo segmento TCP. Se il mittente riceve un riscontro, il
valore cwnd viene incrementato di 1, quindi il mittente potrà spedire altri due segmenti. Alla ricezione dei
riscontri di questi due segmenti, il valore della finestra verrà incrementato di 1 per ogni riscontro, quindi da
2 diventa 4. Ora possono essere spediti 4 segmenti. Alla ricezione di ognuno dei 4 riscontri, la variabile
cwnd viene incrementata di 1, e alla fine varrà 8. Con l’avvio lento la finestra di congestione viene
raddoppiata, se non ci sono problemi di trasmissione. L’approccio usato nell’avvio lento viene detto
aumento moltiplicativo, in quanto la dimensione della finestra viene moltiplicata per un fattore 2 in ogni
aumento.
126
2. Prevenzione della congestione (aumento additivo):
Poiché l’avvio lento non è proprio lento, c’è il rischio di creare una congestione in quanto
la finestra di congestione aumenta esponenzialmente. Per ridurre tale rischio si utilizza
una soglia oltre la quale questo raddoppio si ferma. Il mittente mantiene un’altra variabile,
sstresh (slow-start-threshold), quindi quando la dimensione della finestra di congestione
supera il valore si sstresh la fase di avvio lento termina. Il valore tipico di sstresh è 65535
byte. Quando viene superato il limite di sstresh, ogni qualvolta si riceve un riscontro si
incrementa di 1 il valore di cwnd anziché raddoppiarlo. Quest’approccio viene chiamato
aumento additivo.
3. Rilevamento della congestione (diminuzione moltiplicativa): Quando si verifica una
congestione la dimensione della finestra di congestione deve essere decrementata.
L’approccio utilizzato viene detto diminuzione moltiplicativa. La finestra viene quindi
dimezzata sia a causa dello scadere del timeout sia a causa della ricezione di vari
riscontri duplicati.
Se si ritrasmette a causa dello scadere del timeout, è più probabile che ci sia
congestione e quindi TCP reagisce nel modo seguente:
a. Il valore di sstresh viene posto pari alla metà della dimensione della finestra
attuale.
b. Il valore cwnd viene posto pari a sstresh.
c. Si riprende dalla fase di avvio lento.
Se si ritrasmette alla ricezione di vari ACK duplicati, allora è meno probabile che ci sia
congestione e quindi TCP reagisce nel modo seguente:
a. Il valore di sstresh viene posto pari alla metà della dimensione della finestra
attuale.
b. Il valore cwnd viene posto pari a sstresh.
c. Si riprende dalla fase di prevenzione della congestione.
In questo esempio la dimensione massima della finestra di congestione è di 32 segmenti e la
soglia viene posta pari a 16. Nella fase di avvio lento la finestra di congestione parte da 1 e cresce
esponenzialmente fino a raggiungere il valore della soglia. A questo punto inizia la fase di
aumento additivo. In quest’esempio il mittente deve rispedire un segmento a causa dello scadere
del timeout quando la finestra ha una dimensione di 20 segmenti. Pertanto il nuovo valore di
sstresh è di 10 (diminuzione moltiplicativa) e si riprende dalla fase di avvio lento, partendo da una
finestra di dimensione 1. Quando la finestra diventa di dimensione 10, TCP utilizza di nuovo
l’aumento additivo. A questo punto il mittente deve rispedire un segmento a causa della ricezione
di tre ACK duplicati quando la finestra ha dimensione 12. In questo caso il valore di sstresh è 6,
ma anziché riprendere dalla fase di avvio lento, si riprende dalla fase di aumento additivo,
partendo da una finestra di dimensione 6.
127
Algoritmo RED: Le politiche di eliminazione dei pacchetti possono aiutare a prevenire la
congestione. È possibile eliminare pacchetti anche prima che si verifichi una congestione.
Descriviamo ora un protocollo che è in grado di fare ciò. Questo protocollo è noto con il nome di
rilevazione casuale anticipata o RED(Random Early Detection). L’algoritmo RED controlla le code
dei router, se il traffico è elevato e la rete si avvicina alla congestione, allora comincia ad eliminare i
pacchetti. L’eliminazione è casuale perché avviene in base ad una probabilità p che diventa
sempre più grande all’avvicinarsi della congestione. Quando c’è congestione, RED usa p = 1, cioè
elimina sempre i pacchetti in arrivo. L’algoritmo RED opera sulla coda di entrata di un router.
Assumiamo che la grandezza della coda sia tale da contenere T pacchetti. L’algoritmo RED utilizza
due soglie Tmin e Tmax, con Tmin < Tmax <= T e funziona nel seguente modo:
Quando arriva un pacchetto P, viene controllato il numero x di pacchetti già presenti nella coda. Se
x < Tmin, allora il pacchetto P viene inserito nella coda; se Tmin <= x < Tmax , allora il pacchetto P
viene eliminato con una probabilità p che è funzione di x; infine se x > Tmax, allora il pacchetto P
viene eliminato. La scelta della probabilità di scarto p e delle soglie Tmin e Tmax determinano il
comportamento dell’algoritmo RED . L’algoritmo RED, dunque, inizia a eliminare i pacchetti, anche
se con probabilità bassa, quando la coda comincia a riempirsi. Più pacchetti ci sono nella coda più
alta è la probabilità di eliminazione.
Un difetto di quest’algoritmo è che si possono eliminare pacchetti inutilmente, cioè l’eliminazione
può verificarsi anche se il router è in grado di gestire la situazione. Per evitare questo problema
quindi non si considera il numero x di pacchetti effettivamente presenti nella coda, ma si mantiene
una media y del numero di pacchetti presenti nella coda. Quando arriva un pacchetto P, si
confronta y con Tmin e Tmax , per decidere se accettare o eliminare il pacchetto.
QUALITA’ DEL SERVIZIO: La qualità del servizio, spesso indicata con l’acronimo QoS
(Quality of Service), fa riferimento alla bontà del servizio offerto. La qualità del servizio viene
valutata in base a quattro caratteristiche:
• Affidabilità: è una garanzia di consegna dei dati spediti dal mittente.
• Ritardo: tempo necessario affinché un pacchetto arrivi dalla sorgente alla destinazione.
• Jitter: variabilità del ritardo.
• Larghezza di banda: la velocità con cui si possono trasmettere i dati.
• Classi: i servizi di comunicazione possono essere classificati in gruppi in base alle
caratteristiche offerte dai servizi.
Vediamo ora alcune tecniche che vengono utilizzate per migliorare la qualità del servizio:
• Schedulazione: Esistono varie tecniche di schedulazione:
o Code FIFO. I pacchetti vengono serviti nell’ordine in cui arrivano. Maggiore è il
numero di pacchetti presenti nella coda, maggiore sarà l’attesa per i nuovi pacchetti
che arrivano. Se il tempo medio di arrivo dei pacchetti è maggiore del tempo medio di
smaltimento dei pacchetti, la coda si riempirà e i pacchetti dovranno essere eliminati.
o Code a priorità. Vengono definite delle classi di priorità e i pacchetti in arrivo
vengono classificati e inseriti in una di queste classi. I pacchetti che si trovano nelle
classi con priorità più alta verranno serviti prima. Solo quando non ci sono più
pacchetti appartenenti a classi di priorità alta, il router serve i pacchetti appartenenti
alle classi di priorità bassa. Il problema è che questo miglioramento viene pagato da
un servizio peggiore per il traffico appartenenti alle classi più basse.
128
o Code pesate. Migliora l’approccio visto con le code a priorità. In pratica a ognuna
delle classi di priorità viene assegnato un peso. Ad esempio se ci sono tre code con i
pesi 5, 3, 2, su 10 pacchetti inoltrati dal router, 5 vengono presi dalla prima coda, 3
dalla seconda e 2 dalla terza.
•
•
•
Controllo del traffico: Le tecniche del controllo del traffico sono meccanismi che
permettono di controllare la quantità di dati immessa nella rete. Esistono diverse tecniche di
controllo del traffico:
o Imbuto.
o Deposito di token.
o Deposito di token e tecnica di imbuto.
Prenotazione delle risorse: Un flusso di comunicazione che richiede una certa QoS ha
bisogno di consumare risorse. Se tali risorse vengono prenotate prima della comunicazione,
la qualità del servizio sarà garantita.
Controllo di accesso: Il controllo dell’accesso fa riferimento ai meccanismi utilizzati dai
router per accettare o rifiutare il traffico in arrivo in base a determinati parametri che
specificano il flusso ammissibile. Se al nuovo flusso non può essere garantita la QoS
richiesto, il servizio viene rifiutato.
129
PARTE VI
CAPITOLO 24:
STRATO DELLE APPLICAZIONI
DOMAIN NAME SYSTEM (DNS)
Il sistema dei nomi di servizio, è una applicazione Internet di servizio che permette agli utenti finali
di utilizzare nomi mnemonici, come ad esempio www.unisa.it, al posto degli indirizzi IP.
NOMI DI DOMINIO E INDIRIZZI IP:Un nodo della rete Internet è identificato univocamente
da un indirizzo IP; due processi per poter dialogare devono utilizzare un protocollo di trasporto,
come il TCP, che deve conoscere gli indirizzi dei due host per poter instaurare una connessione e
trasferire i dati.
L’uso di indirizzi IP, però, risulta alquanto scomodo da ricordare per gli utenti. Il sistema dei nomi di
dominio crea una associazione fra indirizzi IP e nomi di dominio e offre un servizio di traduzione fra
indirizzi IP e nomi di dominio. Il sistema può essere utilizzato da tutte le applicazioni che richiedono
la traduzione di domini in indirizzi IP. Nella Fig. 24.1 viene mostrata l’operazione di traduzione del
dominio da parte di un programma di trasferimento della posta elettronica.
Esempio: il nome di dominio identifica l’host con il quale si vuole comunicare. Il programma di
posta elettronica interroga il DNS per trasformare il nome di dominio nel corrispondente indirizzo IP
(il programma di posta deve necessariamente conoscere l’indirizzo IP del server DNS) ed inoltrare
il messaggio nella casella di posta dell’utente destinatario.
In principio, la trasformazione da nome di dominio ad indirizzo IP veniva fatta memorizzando su
ogni singolo nodo della rete un file che specificava la corrispondenza fra indirizzi IP e nomi di
dominio. Questo file era aggiornato manualmente e periodicamente e la traduzione era effettuata
dall’utente stesso che, consultando il file, ricavava l’effettivo indirizzo IP. Questo approccio, oggi, è
impossibile in quanto il numero di host connessi è enorme; come conseguenza il file sarebbe
eccessivamente grande e l’aggiornamento da parte di tutti gli host genererebbe una quantità di
traffico inaccettabile.
La soluzione al problema è stata quella di adottare un sistema distribuito: le informazioni vengono
memorizzate in molti server, dividendo lo spazio dei nomi in domini. Il sistema costituito da tutti
questi server viene chiamato DNS. Un host che deve tradurre un nome di dominio in indirizzo IP
deve semplicemente contattare il DNS più vicino ed ottenerne la traduzione.
SPAZIO DEI NOMI DI DOMINIO:
130
Un nome di dominio è una sequenza di caratteri che, per essere gestito in maniera efficiente, viene
usato uno spazio dei nomi gestito in maniera gerarchica. I nomi di dominio, quindi, sono costituiti
da varie parti strutturalmente collegate fra di loro con un preciso schema.
La struttura gerarchica dello spazio di dominio è rappresentata da un albero la cui radice
rappresenta il livello 0. La struttura gerarchica dei nomi di dominio prevede fino a 128 livelli
(generalmente si usano 2, 3 livelli; raramente con 4 o 5). Ogni nodo dell’albero che rappresenta la
struttura gerarchica dello spazio dei nomi è identificato da un’etichetta, che è una sequenza di 63
caratteri al massimo. Per mantenere l’unicità dei nomi dello spazio, tutti i figli del nodo devono
avere etichette diverse.
Nomi di dominio: Un nome di dominio è composto da una sequenza di etichette separate dal
carattere “.”; ogni nodo dell’albero rappresenta un nome di dominio, dato dalla sequenza di
etichette che si incontrano procedendo dal nodo alla radice.
I nomi di dominio possono essere di due tipi:
. Nomi di domino completi: quando un nome di dominio viene completato da
un’etichetta vuota (che rappresenta la radice) e che quindi termina con il carattere “.”.
Un nome di domino completo viene definito Fully Qualified Domain Name (FQDN), ad
esempio l’indirizzo:
. Challenger.atc.fhda.edu.
.
Solo un nome di dominio completo può corrispondere a un indirizzo IP;
2. Nomi di dominio parziali: quando non arriva alla radice ma si ferma prima. In questo
caso il nome non termina con il punto. Un nome di dominio parziale viene definito
Partially Qualified Domain Name (PQDN). Un nome di domino parziale non
corrisponde a un indirizzo IP. Per poterne ottenere un IP è necessario completare un
nome di dominio parziale. Generalmente questa procedura è effettuata dal client DNS
che mantiene una lista di suffissi (Possibili completamenti). Il client DNS prova a
completare i nomi parziali con i suffissi presenti nella lista, nell’ordine in cui questi
prefissi vengono elencati. Ad esempio, i seguenti suffissi potrebbero essere i suffissi
utilizzati per completare il nome challenger:
LISTA
atc.fhda.edu
fhda.edu
null
NOME COMPLETO
challenger.atc.fhda.edu.
challenger.fhda.edu.
challenger.
131
Dominio: Un dominio è un sottoalbero dello spazio dei nomi di dominio. Il nome del dominio è il
nome di dominio della radice del sottoalbero. Un dominio è spesso diviso in altri domini, chiamati
sottodomini.
DISTRIBUZIONE DELLO SPAZIO DEI NOMI DI DOMINIO: La gerarchia dello spazio dei
nomi di dominio serve anche a distribuire le informazioni relative all’associazione fra nomi e
indirizzi IP.
Gerarchia di name server: le informazioni all’interno dei DNS sono memorizzate nei name
server. A ogni domino della struttura gerarchica corrispondono uno o più name server; quindi i
name server possono essere organizzati nella struttura gerarchica che corrisponde a quella dei
nomi di dominio .
Zone: Un singolo dominio può essere diviso in varie parti chiamate zone. Ogni name server è
responsabile solo per una particolare zona. Se il name server è responsabile per l’intero domino
allora la zona e il dominio fanno riferimento alla stessa cosa. Quando un name server, invece,
divide il dominio in zone che vengono affidate ad altri name server allora zona e dominio si
riferiranno a due cose distinte: le informazioni riguardanti l’intero domino verranno memorizzate nei
name server responsabili per i vari sottodomini, mentre il server di dominio manterrà solo delle
informazioni riguardanti i name server dei sottodomini.
Root name server: è un name server la cui zona consiste nell’intero albero dei nomi di dominio.
Per motivi di efficienza e di affidabilità esistono vari root name server (attualmente 13). I root name
server sono distribuiti un po’ dappertutto. Sono funzionalmente equivalenti, basta contattarne uno.
DNS E INTERNET: Il DNS è un sistema molto generale e il suo uso non è limitato solo ad
Internet o agli indirizzi IP. Esistono tre tipi di domini:
1. Domini generici: i domini generici sono dei sottodomini della radice, ognuno dei quali
corrisponde a un generico gruppo di nomi di dominio. Ad esempio il dominio edu
raggruppa tutti i nomi di dominio assegnati a istituzioni scolastiche. Attualmente
vengono utilizzati 14 nomi di dominio che sono:
Etichetta
aero
Descrizione
Compagnie aeree
biz
Commerciale (simile a com)
com
Organizzazioni commerciali
coop
Cooperative
132
Etichetta
Descrizione
edu
Istituzioni educative
gov
Istituzioni governative
info
Punti di informazione
int
Organizzazioni internazionali
mil
Gruppi militari
museum
name
Musei
Siti personali
net
Centri di supporto per internet
org
organizzazioni non - profit
pro
Organizzazioni professionali
2. Domini delle nazioni: sono dei sottodomini, ognuno dei quali corrisponde a una
nazione. Le etichette utilizzate per rappresentare le nazioni sono composte da due
caratteri; ad es. it;
3. Nomi inversi: una particolarità del sistema DNS è che può essere usato anche per
convertire un indirizzo IP nel corrispondente nome di dominio. Per poter effettuare la
trasformazione inversa il sistema utilizza il dominio speciale in-addr.arpa che contiene
tutti gli indirizzi IP in forma di etichette.
Per rispettare la struttura gerarchica dei nomi di dominio, i quattro numeri decimali
che specificano l’indirizzo IP, appaiono in ordine inverso. Ad esempio, l’indirizzo IP
132.34.45.121 corrisponde al nome di dominio 121.45.34.132.in-addr.arpa.
RISOLUZIONE: La trasformazione di un nome di dominio ad un indirizzo IP viene chiamata
risoluzione. Resolver: Ogni host ha un DNS client che viene chiamato resolver. Quando un
processo ha bisogno di eseguire una trasformazione invoca il resolver, che contatterà il server
DNS che fornirà la risposta oppure fornirà gli indirizzi di altri server DNS ai quali chiedere la
risoluzione. Quando il resolver riceve risposta verifica se si tratta effettivamente di un indirizzo IP
valido e consegna il risultato al processo chiamante. Come abbiamo detto nel paragrafo
precedente è possibile anche eseguire una risoluzione inversa: un determinato IP ‘xxx.xxx.xxx.xxx’
viene trasformato nel nome di dominio ‘xxx.xxx.xxx.xxx.in-addr.arpa’ e poi si esegue la normale
risoluzione che, anziché fornire un indirizzo IP, restituisce il nome di dominio dell’IP di partenza.
Il resolver può chiedere due tipi di risoluzione:
133
Risoluzione ricorsiva: in questo tipo di risoluzione il server DNS è tenuto a fornire la
risposta finale. Se il server conosce la risposta, perché il nome richiesto ricade nel dominio
di autorità del server, allora potrà rispondere facilmente; altrimenti dovrà inoltrare la
richiesta ad un altro server che si comporterà nella stessa maniera, fino ad arrivare al
server DNS che conoscerà la risposta.
Risoluzione iterativa: in questo tipo di risoluzione, invece, il server non è tenuto a fornire
la risposta finale nel caso non la conosca. Se il server conosce la risposta la fornirà
altrimenti fornirà l’indirizzo di un nuovo server DNS a cui rivolgersi per ottenere la risposta.
Questa procedura si ripete finché non verrà ricevuta una risposta.
Caching: Per rendere più efficienti le prestazioni di un server DNS, le informazioni che potrebbero
essere riutilizzate vengono mantenute in una memoria cache. Le informazioni contenute nella
cache, comunque, possono diventare obsolete e quindi si memorizza anche un tempo di scadenza
oltre il quale le informazioni vengono cancellate.
134
Esempio: Supponiamo di digitare l’indirizzo www.azienda.it. Il browser ha bisogno dell’indirizzo IP
per contattare il server web. Tramite il resolver verrò inviata una richiesta al name server locale,
che è sulla stessa rete locale del browser (messaggio 1). L’indirizzo del name server locale è
spesso contenuto in un file o ottenuto dinamicamente all’atto dell’accensione della macchina o
della connessione. Ad esempio, supponiamo di essere connessi dal nostro PC di casa tramite
Alice. Al momento della connessione, al nostro PC viene comunicato l’indirizzo IP di un name
server di Alice che è il name server locale. Quando digitiamo www.azienda.it, il resolver contatterà
un name server locale e chiede la risoluzione ricorsiva aggiungendo al nome di dominio il “.” . In
assenza di informazioni sul nome www.azienda.it il name server locale esegue una richiesta di
risoluzione iterativa al root name server (messaggio 2). Siccome ce ne sono pochi, attualmente 13,
non è difficile conoscere gli indirizzi di questi server. Il root name server contattato dal name server
locale risponderà dicendo che non conosce l’indirizzo IP di www.azienda.it, però conosce i name
server che hanno autorità sulla zona .it; la risposta (messaggio 3) includerà gli indirizzi IP, e i nomi
di dominio di tale server. A questo punto il name server locale ripeterà la richiesta di risoluzione di
www.azienda.it a un name server responsabile per .it (messaggio 4). La risposta (messaggio 5)
sarà simile a quella ottenuta dal root name server: non conosco l’indirizzo IP richiesto, ma conosco
gli indirizzi IP dei name server responsabili per la zona azienda.it . Anche in questo caso il name
server locale dovrà ripetere la richiesta a un name server responsabile per azienda.it (messaggio
6). In quest’ultimo caso il name server contattato conosce l’indirizzo IP di www.azienda.it e può
restituire tale indirizzo al name server locale (messaggio 7), che lo restituisce al resolver
(messaggio 8) e finalmente il broswer potrà contattare il server web.
REGISTRO DEI DOMINI: Per poter utilizzare un nome di dominio occorre registrare il nome, la
registrazione è affidata ai cosiddetti registrar: organizzazioni commerciali accreditate dall’ICANN.
Queste organizzazioni richiedono il pagamento di un affitto per il nome di dominio. Per poter
effettuare la registrazione di un nome di dominio, l’utente deve fornire anche l’indirizzo IP da
associare al nome.
DNS E PROTOCOLLI DI TRASPORTO: Un client e un server DNS possono comunicare
utilizzando sia il protocollo UDP che TCP. In entrambi i casi si usa la porta ben nota 53. Quando i
messaggi sono più piccoli di 512 byte, viene utilizzato il protocollo UDP; dimensioni superiori
potrebbero creare problemi di frammentazione e quindi si usa il protocollo TCP. Poiché il
messaggio di richiesta è più piccolo del messaggio di risposta potrebbe capitare che la risposta sia
più grande di 512 byte.
135
CAPITOLO 25:
ACCESSO REMOTO, POSTA
ELETTRONICA E
TRASFERIMENTO FILE
ACCESSO REMOTO
Poiché internet mette in comunicazione tantissimi computer, una delle necessità più naturali è
quella di voler utilizzare un computer che si trova fisicamente lontano. Ad esempio da un computer
di casa connesso a Internet, si potrebbe voler accedere al computer del proprio ufficio ovviamente
anch’esso connesso a internet. l’accesso remoto permetto l’accesso al computer dell’ufficio stando
a casa.
Accesso al sistema
In un sistema che può essere utilizzato da più utenti, come un sistema di time sharing, ogni utente
ha determinati diritti di utilizzo delle risorse. Quindi per accedere al sistema l’utente fornisce il
proprio nome utente e la propria password e dopo aver effettuato il login, e tutto ciò che digita sul
proprio terminale, vengono inviati al client il quale il SO provvederà ad interpretare i comandi.
POSTA ELETTRONICA
Uno dei servizi più popolari offerti da internet è la posta elettronica, comunemente detta email. La
posta elettronica è stata una delle prime applicazioni. Agli albori di Internet, i messaggi venivano
scambiati tramite posta elettronica ed erano brevi messaggi di testo. Oggi la posta elettronica è
molto più complessa in quanto include anche immagini, suoni, video.
Primo esempio
Il mettente ed il destinatario del messaggio di posta elettronica sono utenti o programmi applicativi
sullo stesso sistema. L’amministratore ha creato una mailbox per ogni utente; tale mailbox serve
per contenere i messaggi ricevuti dall’utente. Una mailbox è un file system locale con particolari
permessi di accesso. Quando un utente vuole spedire un messaggio ad un altro utente, utilizza un
programma utente, PU, per la gestione della posta elettronica che le permette di preparare il
messaggio e di memorizzarlo nella mailbox del destinatario. L’utente per controllare i propri
messaggi utilizza un proprio PU.
Secondo esempio
Il mittente e il destinatario sono utenti su due sistemi diversi collegati a internet. per raggiungere il
destinatario il messaggio deve essere spedito su internet. in questo caso oltre al programma utente
occorrerà anche un programma per il trasferimento del messaggio PTM. Il mittente scrive il
messaggio il quale dovrà essere trasferito al mail server attraverso l’uso di un PTM. Il PU del
136
mittente passa il messaggio al PTM. Il messaggio così viene memorizzato nella mailbox del
destinatario.
Terzo esempio
In questo esempio i 2 utenti utilizzano una connessione punto-punto come ad esempio una
connessione ADSL. Il mittente utilizza il PU per preparare il messaggio il quale sarà trasmesso al
PTM che provvederà ad inoltrarlo al mail server della mailbox del destinatario il quale attraverso il
proprio PU potrà leggere il messaggio.
Quarto esempio
Nessuno dei due utenti è connesso al proprio mail server. La distinzione dal precedente esempio è
che anche il destinatario dovrà utilizzare un programma di accesso ai messaggi PAM. I programmi
PTM e PAM devono essere sempre in esecuzione per svolgere la loro funzione di server.
Indirizzi email
Gli utenti di un sistema di posta elettronica vengono individuati grazie a un indirizzo di posta
elettronica. Di fatto il termine email viene utilizzato anche per indicare un indirizzo di posta
elettronica. Tale indirizzo è costituito da 2 parti: una locale (il nome dell’utente) e un nome di
domicilio separati da @. Il nome di dominio individua il mail server e il nome dell’utente individua
l’utente all’interno del dominio. È possibile gestire gli alias, cioè un nome fittizio che viene
trasformato in un indirizzo reale o in una lista di indirizzi.
Programmi utente
Il programma utente permette la gestione di una email
Spedire un messaggio
Una delle funzionalità primarie del PU è quella di spedire il messaggio. Per spedire il messaggio, il
PU aggiunge delle informazioni addizionali al testo preparato dall’utente.
Ricevere un messaggio
137
L’altra funzionalità primaria del PU è quella di recuperare i messaggi inviati all’utente. Per far ciò il
PU deve controllare la mailbox dell’utente. Questa operazione potrebbe richiedere l’utilizzo di un
PAM. Il PU controlla la presenza di email in arrivo periodicamente o su richiesta dell’utente stesso.
Trasferimento dei messaggi: SMTP
Il trasferimento fisico dei messaggi da un client a un server viene effettuato dai PTM: il client PTM
invia il messaggio al server PTM. Per svolger questa operazione deve esser utilizzato un protocollo.
Il protocollo attualmente utilizzato in Internet è il protocollo SMTP (Simple Mail Transfer Protocol).
Nel caso più tipico il protocollo SMTP deve essere usato 2 volte: una volta per trasferire il
messaggio dal mittente al mail server del mittente e una volta per trasferire il messaggio dal mai
server del mittente al mail server del destinatario.
Esempio 25.3
Vediamo come trasferire un messaggio di posta elettronica con il protocollo SMTP usando direttamente i comandi del
protocollo. Possiamo utilizzare il programma di accesso remoto telnet per effettuare un accesso al server sulla porta ben
nota 25 (la porta utilizzata per il protocollo SMTP). Stabilita la connessione con il server possiamo digitare direttamente
i comandi del protocollo SMTP; di seguito riportiamo una sessione SMTP.
prompt> telnet mail.adelphia.net 25
Trying 68.168.78.100 ...
Connected to mail.adelphia.net (68.168.78.100). mtal3.adelphia.net SMTP server ready Fri, 6 Aug 2004 HELO
mail.adelphia.net
250 mtal3.adelphia.net
MAIL FROM: [email protected]
250 Sender <[email protected]> Ok
RCPT TO: [email protected]
250 Recipient [email protected] Ok
DATA Ok Send data ending with <CRLF>.<CRLF>
From: Forouzan
To: Forouzan
Questo e' un messaggio di prova
Per mostrare l'uso del protocollo SMTP.
Message recived [email protected]
QUIT
mta13.adeplhia.net SMTP server closing connection
Connection closed by foreign host
Accesso ai messaggi: POP e IMAP
Per poter accedere alla propria mailbox, quando essa è situata su un server remoto, l’utente deve
usare un programma di accesso ai messaggi. Attualmente vengono utilizzati 2 protocolli per
implementare un programma di accesso ai messaggi: POP3 e IMAP4.
POP3
Il protocollo POP3 (Post Office Protocol, v3) è molto semplice pertanto ha poche funzionalità. Il
destinatario dell’email utilizza un PAM client POP3, mentre il mail server utilizza un PAM server
POP3. il client apre una connessione TCP verso il server POP3 sulla porta ben nota 110.
dopodichè spedisce il proprio identificativo, cioè nome utente e password . fatto ciò l’utente può
vedere l’elenco dei suoi messaggi. Il protocollo POP3 ha 2 modalità di funzionamento: nella prima i
138
messaggi che il client trasferisce dal server vengono cancellati dalla mailbox mantenuta dal server.
Nella seconda i messaggi rimangono sul server; in pratica il client ottiene una copia dei messaggi
che rimarranno disponibili per successive consultazioni
IMAP4
Il protocollo IMAP4 (Internet Mail Access Protocol, v4) è un’evoluzione di POP3, è molto simile ma
ha molte più funzionalità.
• Il destinatario può controllare l’intestazione del messaggio prima di trasferire il messaggio
stesso
• Il destinatario può eseguire ricerche di particolare stringhe
• Si può effettuare il trasferimento parziale
• Si può gestire la propria mailbox direttamente dal mail server.
MIME
Il protocollo SMTP prevede l’utilizzo di un particolare insieme di caratteri per il corpo del messaggio
di posta elettronica. Tale insieme di caratteri viene detto NVT ASCII e corrisponde ai caratteri
ASCII a 7 bit.
Il formato MIME prevede la trasformazione da parte del mittente di dati binari in dati NVT ASCII
che possono essere trasferiti utilizzando il protocollo SMTP.
Accesso ai messaggi via Web
L’utilizzo della posta elettronica è così diffuso che il servizio viene spesso offerto direttamente
tramite siti web. Fra i fornitori più noti abbiamo Alice, Hotmail, Libero, ecc.
L’accesso alla posta elettronica avviene via Web attraverso l’utilizzo di un browser con il quale
possiamo accedere al servizio di posta elettronica. Il browser utilizza il protocollo SMTP per
spedire la posta elettronica, per ricevere la posta elettronica invece non vengono utilizzati i
protocolli POP3 e IMAP ma direttamene tramite il protocollo HTTP.
139
CAPITOLO 20:
WEB E SERVIZI WEB
Il WWW o più semplicemente Web, è un immenso sistema di informazioni fisicamente
memorizzate su tanti host della rete Internet, molto spesso collegate fra loro. Il CDN (Content
Distribution Network) permette una distribuzione più efficiente e veloce delle pagine web.
ARCHITETTURA
Il WWW è un’applicazione client/server: il programma client viene chiamato browser mentre il
programma server viene chiamato server web. La peculiarità di questa applicazione e che esistono
tantissimi server web. Ogni server offre delle informazioni organizzare in pagine web che possono
essere sfogliate.
Client
Un browser tipicamente consiste in 3 componenti: un modulo di controllo, un protocollo e un
interprete. Il modulo di controllo riceve i comandi dell’utente da tastiera e mouse e utilizza un
protocollo per recuperare le pagine web dai server. Quando una pagine web viene trasferita dal
server, il browser utilizza un interprete per visualizzare correttamente le informazioni contenute
nella pagina. Un browser può memorizzare le pagine web sul proprio disco per velocizzare
eventuali accessi futuri alle stesse pagine.
Server
Le pagine web sono memorizzare nei server. Ogni volta che un server web riceve la richiesta di un
client, il documento richiesto viene spedito al client.
Protocollo
Il trasferimento delle pagine web avviene grazie all’utilizzo di un protocollo fra il client e il server.
Vari protocolli possono essere utilizzati a questo scopo. Quello più comunemente utilizzato è il
protocollo http.
URL
Abbiamo detto che le informazioni offerte dal WWW sono organizzate in pagine web. Occorre un
sistema di indirizzamento della pagine web. Tale sistema utilizza degli indirizzi chiamati URL.
L’URL è costituito da quattro elementi: protocollo, host, numero di porta e nome del file.
PAGINE WEB
Le pagine web possono essere classificate in statiche, dinamiche e attive.
• Statiche. Una pagina web statica è semplicemente un file memorizzato nel server web. Il
browser che fa richiesta di una pagina statica riceve una copia della pagina. Il contenuto
della pagina viene determinato nel momento della sua creazione. Il linguaggio in cui
vengono definite le pagine statiche è l’HTML.
• Dinamiche. Una pagina dinamica è una pagina che viene creata dal server web nel
momento in cui il browser effettua la richiesta. Quando il browser effettua la richiesta, il
server web esegue un programma o uno script che crea la pagina web. L’output del
programma o dello script viene spedito come risposta alla richiesta del browser. Poiché una
nuova pagina web viene creata per ogni richiesta, il contenuto della pagina può variare da
richiesta a richiesta. La tecnica CGI permette di gestire pagine web dinamiche. Essa p un
insieme di standard che definiscono come una pagina dinamica viene scritta. Come i dati
vengono passati in input al programma che crea la pagina e come il risultato del programma
viene utilizzato. Normalmente quando un programma è in esecuzione possiamo passargli
dei parametri in modo tale da specializzare l’esecuzione. Tali dati vengono inseriti nelle
pagine dall’utente attraverso una form. L’output generalmente è una pagina web descritta
attraverso il linguaggio HTML.
• Attive. Per molte applicazioni occorre costruire la pagina web eseguendo un programma o
uno script sul computer del client. Le pagine create in questo modo vengono dette pagine
attive. Es. programma che crea delle immagine allineate o che interagisce con l’utente. Le
tecnologie più usate per creare pagine attive sono il linguaggio Java e Javascript.
140
HTTP
Il protocollo http viene utilizzato per trasferire le pagine web. Il formato di richiesta è simile a quella
di risposta. Il messaggio di richiesta è cosi costituito: il primo elemento è il tipo della richiesta (get,
put, post, ecc), il secondo elemento è l’URL e il terzo la versione del protocollo che si sta
utilizzando.
CACHE NEI BROWSER
Un browser può memorizzare in una memoria cache le pagine web che l’utente richiede. Nel caso
in cui un utente ritorna in una pagina web che ha già visitato, questa viene trovata nella cache. Se
è stata aggiornata tramite la linea di intestazione If-modified-since si verifica e se la risposta è
positiva si ricarica altrimenti viene mostrata la pagina presente in cache.
SERVER PROXY
Il protocollo HTTP supporta i server proxy. Un proxy è un host che memorizza copie delle risposte
alle richieste più recenti. Il client spedisce le proprie richieste al server proxy. Il proxy controlla la
propria memoria cache; se la risposta è nella cache potrà spedirla subito al client, altrimenti
spedisce la richiesta al server reale ottenendo così la risposta per poi inviarla al client oltre a
memorizzarla.
141