Vous êtes sur la page 1sur 120

RETI DI CALCOLATORI

Prof. S. Riccobene

1
CAPITOLO 1

TECNOLOGIA DI TRASMISSIONE

Vi sono principalmente 2 tipi di tecnologie trasmissive:


 Tramite collegamenti BROADCAST
 Tramite collegamenti PUNTO-PUNTO

RETI BROADCAST (Multicast)


Le reti Broadcast sono caratterizzate da un solo canale di comunicazione che è condiviso tra tutte le
macchine della rete. Ogni macchina invia brevi messaggi (detti pacchetti) a tutte le altre. Ogni
pacchetto è caratterizzato da una campo indirizzo che permette di identificare il destinatario.
Quando ogni macchina riceve il pacchetto, confronta il campo indirizzo con il proprio. Se sono
uguali, il pacchetto viene processato, altrimenti viene ignorato.
I sistemi Broadcast di solito, danno anche la possibilità di indicizzare un pacchetto a tutti i
destinatari. attraverso l'uso di un codice speciale nel campo indirizzamento. Questo modo operativo
viene detto Broadcasting. Alcuni sistemi broadcast supportano anche la trasmissione ad un solo
sottoinsieme di macchine che viene detto Multicasting. Uno schema di questo tipo consiste nel
riservare 1 bit per indicare il multicasting mentre gli n-1 bit dell'indirizzo possono contenere un
numero di gruppo. Ogni macchina può appartenere ad un solo gruppo. Quando viene mandato un
pacchetto ad un gruppo, questo viene consegnato a tutte le macchine che fanno parte di quel gruppo.

RETI PUNTO-PUNTO (Unicast)


Le reti punto-punto sono caratterizzate da molte connessioni tra singole coppie di macchine.
In una rete Point-To-Point tutte le postazioni possono essere considerate client e server.
Non esiste un Server di dominio ma vengono configurate per lavorare in un contesto di Gruppo di
Lavoro o WorkGroup. Ogni utente è anche l'amministratore del proprio client ossia è lui stesso a
decidere se condividere o meno una risorsa agli altri e ad impostare i permessi per quella risorsa
(lettura e scrittura, condivisione con password o sola lettura). Una trasmissione punto-punto con un
trasmettitore ed un ricevitore viene chiamata Unicasting.
Normalmente per le reti di piccole dimensioni è consigliata una connessione di tipo Broadcast. Per
reti di dimensioni maggiori si preferisce la connessione Punto-Punto (o Unicast).

Vantaggi:
 facile installazione e configurazione;
 non serve la presenza continua di un amministratore di rete;
 poco costosa (richiede meno hardware rispetto al tipo client/server).

Svantaggi:
 poco veloce;
 con l'interruzione o il cortocircuito del cavo coassiale tra due postazioni, tutta la rete non
funziona;
 poca sicurezza dei dati;
 formazione (e quindi perdita di tempo e denaro) del personale sull'utilizzo della rete.

2
Immagine
Rete Punto-Punto

Classificazione Reti per Scala


Un criterio alternativo per classificare le reti è la loro scala.
Alla sommità si trovano le Personal Area Network, cioè reti che sono pensate per una sola persona.
Per esempio una rete senza fili che collega un computer al suo mouse, alla tastiera e alla stampante
è una personal area network. In coda troviamo invece la rete Internet, in grado di collegare
computer situati anche alle due estremità del pianeta.

Distanza tra i Processori situati nello Identificazione


Processori stesso/a
1m Metro quadro Personal Area Network
10 m Stanza
100 m Edificio Local Area Network
1 Km Campus
10 Km Città Metropolitan Area Network
100 Km Nazione
Wide Area Network
1000 Km Continente
10.000 Km Pianeta Internet
Classificazione della rete in base alla Scala

Reti Locali (LAN) (1.2.1)


Sono delle reti private con dimensioni che variano da qualche centinaia di metri (nel caso di cavi
RJ45) a pochi chilometri (nel caso di connessioni in fibra ottica). E' formata da 2 o più computer
collegati fra loro in modo che ciascun computer possa interagire con gli altri. La velocità di
trasmissione è di circa 10/100 Mbit/sec, ma attualmente esiste la possibilità di raggiungere i 10 Gbit
con pochi errori e bassi ritardi. Esistono diverse topologie di rete Lan Broadcast. La più diffusa è la
ETHERNET (IEEE 802.3).

3
Ethernet
E' una rete Broadcast a bus con controllo non centralizzato. La velocità di trasmissione è compresa
tra 10 Mbit/s e 10 Gbit/s. Tutti i computer possono trasmettere quando vogliono, ma se 2 o più
pacchetti collidono, ogni computer attenderà per un tempo casuale prima di ritrasmettere.

Rete ad Anello
Un altro tipo di rete broadcast è quella ad anello. Nella broadcast ad anello, ogni bit si propaga in
modo autonomo senza aspettare il resto del pacchetto a cui appartiene. Come è intuibile, ciò
comporta la necessità di regole che arbitrino l'accesso simultaneo all'anello. In questo tipo di rete, il
numero dei canali è uguale al numero dei nodi. La rete ad anello è basata su una linea chiusa alla
quale possono connettersi tutti i nodi della rete. Ogni nodo, per comunicare con un altro, deve far
scorrere lungo la struttura ad anello così realizzata le proprie informazioni. Poiché il canale è
condiviso, per riconoscere un destinatario da un altro è importante definire per ogni nodo un
indirizzo. Un nodo che riceve un messaggio destinato ad un altro nodo, lo ritrasmette al suo vicino,
e così via finché non giunge a destinazione.

Le reti Broadcast si possono ulteriormente dividere in:

 STATICHE
Dove ogni macchina a turno può usare il canale. Ciò comporta uno spreco perché
può capitare che quando arriva il turno di una macchina x, questa non ha nulla da
trasmettere.

 DINAMICHE
Dove si decide di volta in volta chi sarà il prossimo a trasmettere;
Nelle reti broadcast dinamiche è necessario un meccanismo di arbitraggio delle
contese, che può essere:

Arbitraggio centralizzato: un apposita apparecchiatura, bus arbitration unit, accetta


richieste di trasmissione e decide chi abilitare;
Arbitraggio distribuito: ognuno decide per conto proprio.

SOFTWARE DI RETE (1.3)


Per diminuire la complessità, le reti sono organizzate a livelli (o strati). Lo scopo di ogni strato è
quello di offrire dei servizi allo strato superiore nascondendo i dettagli di come vengono
implementati tali servizi (Information Hiding). In generale, lo strato n di un computer è in
comunicazione con lo strato n di un altro computer. L'insieme di regole e convenzioni usate da
questa comunicazione viene detto protocollo dello strato n. Quindi il protocollo è un accordo fra le
parti sul modo in cui deve procedere la comunicazione. Se il protocollo viene violato, la
comunicazione viene resa inaffidabile. Le entità che vogliono comunicare tra loro allo stesso livello
vengono dette Peer (pari). Nella realtà, i dati non vengono trasferiti direttamente dallo strato n di un
host allo strato n di un altro host, ma ogni strato passa dati e informazioni di controllo allo strato
sottostante attraversando tutti i livelli fino a raggiungere il supporto fisico (strato 1) dove realmente
i dati viaggiano fisicamente dall'host mittente all'host destinatario.
La tecnica di trasmissione fra gli strati si chiama Interfaccia. L'interfaccia definisce le operazioni
elementari e i servizi che uno strato offre a quello sovrastante.

4
Esempio di comunicazione tra gli strati di una rete a 5 strati

Un processo applicativo che lavora allo strato 5 deve mandare un messaggio ad un processo di pari
strato che lavora in un' altra macchina.
La prima cosa da fare è passare il messaggio allo strato 4 per la trasmissione. Lo strato 4 mette un
header davanti al messaggio per identificarlo e lo passa allo strato 3. L'header include delle
informazioni di controllo per consentire allo strato 4 del computer destinatario di consegnare il
messaggio nell'ordine corretto quando gli strati sottostanti non mantengono la sequenza. In alcuni
strati gli header possono contenere anche dimensioni, tempi e altri campi di controllo. In molte reti
non c'è limite alla dimensione dei messaggi trasmessi nel protocollo dello strato 4, ma quasi sempre
esiste un limite imposto dal protocollo dello strato 3. Di conseguenza, lo strato 3 deve spezzare i
messaggi in arrivo in unità più piccole chiamate pacchetti e aggiunge ad ognuno di essi un header
dello strato 3. Lo strato 3 passa i pacchetti allo strato 2. Lo strato 2, oltre a mettere i propri header,
aggiunge alla fine di ogni pacchetto un trailer che indica la fine del pacchetto. Lo strato 2 passa i
pacchetti allo strato 1, dove avviene la trasmissione fisica dei dati. Quando i pacchetti vengono
ricevuti dal destinatario avviene il processo inverso. Man mano che si sale attraverso i vari strati, gli
header vengono rimossi in modo tale che uno strato n non contenga header di strati <= n.

5
Progettazione degli Strati (1.3.2)
Quando si progettano gli strati di una rete, ci si trova ad affrontare alcuni problemi:

 ogni strato ha bisogno di un meccanismo per identificare sorgenti e destinazioni, quindi


serve una sorta di indirizzamento che indichi l'esatta destinazione.

 nella progettazione di una rete è importante stabilire le regole da utilizzare per il


trasferimento dei dati. Ad esempio bisogna decidere se la trasmissione è simplex, half-
duplex, o full-duplex.

 poiché i pacchetti viaggiano su canali fisici (quindi non esenti da errori) è importante il
controllo degli errori.

 poiché non tutti i canali di comunicazione conservano l'ordine dei messaggi inviati, la
macchina che invia i pacchetti deve aggiungere dei numeri di sequenza ad ogni pacchetto in
modo che il destinatario, una volta ricevuti, li possa ricomporre ed ottenere il messaggio
iniziale.

 una sorgente veloce può sovraccaricare un ricevitore lento. Per ovviare a questo problema e
“limitare” il trasmettitore, viene utilizzato il controllo di flusso.

 poiché è molto “costoso” aprire una connessione separata per ogni coppia di processi
comunicanti, lo strato sottostante può decidere di usare la stessa connessione per più
conversazioni simultanee non correlate. Questa tecnica prende il nome di
MULTIPLEXING.

 quando esistono più percorsi tra sorgente e destinazione, è necessario scegliere quale strada
prendere. Le tecniche che se ne occupano prendono il nome di routing o instradamento.

Servizi Orientati alla Connessione e Senza Connessione (1.3.3)


Gli strati possono offrire due tipi di servizi agli strati superiori:

 orientati alla connessione

 senza connessione

Servizi Orientati alla connessione (Datagram con conferma):


Questo tipo di servizio somiglia al sistema telefonico. Un utente che vuole usare questo tipo di
servizio di rete deve prima stabilire la connessione, poi deve usarla, ed infine rilasciarla. L'aspetto
essenziale di una connessione è che funziona come un tubo: il trasmettitore vi spinge delgi oggetti
(bit) a una estremità, e il ricevitore li prende dall'altra, conservando l'ordine con cui sono stati
trasmessi. In alcuni casi, quando si stabilisce una connessione, il trasmettitore, il ricevitore e il
SUBNET eseguono una negoziazione dei parametri da usare. Tipicamente, quando un lato fa una
proposta, l'altro può accettare, rifiutare, o fare una controproposta.

6
Servizi Senza connessione:
Questo tipo di servizio somiglia al sistema postale. Ogni messaggio trasporta l'indirizzo del
destinatario ed è instradato nella rete in modo indipendente dagli altri. Normalmente, quando si
mandano due messaggi alla stessa destinazione, non è detto che il primo inviato sia anche il primo
ad arrivare perché potrebbe incontrare un ritardo ed arrivare dopo il secondo. Pertanto, affinché si
abbia una maggiore affidabilità, è necessario aspettare la risposta dell'avvenuta ricezione del
messaggio, che viene detta ACK.
Ogni servizio si può classificare in base alla qualità del servizio (QOS ovvero quality of service).
Alcuni servizi sono affidabili e non perdono mai dati, altri invece possono perdere dati ma risultano
più veloci.

Ricapitolando:
Un servizio orientato alla connessione potrebbe risultare utile, ad esempio, per il
trasferimento di un file, in cui è di fondamentale importanza l'affidabilità, e quindi
la certezza che esso arrivi a destinazione senza errori.

Un servizio senza connessione invece, potrebbe risultare utile nella trasmissione di


una videoconferenza, in cui è preferibile vedere qualche pixel errato piuttosto che
un ritardo causato dall'attesa di una risposta di ricezione.

Primitive di Servizio (1.3.4)


Un servizio è specificato da un insieme di primitive (operazioni) utilizzate dai processi per accedere
a tale servizio. Se la pila di protocolli si trova nel Sistema Operativo, allora le primitive vengono
dette chiamate di sistema.

Esempio di utilizzo di primitive di servizio orientato alla connessione:

 Il server esegue la chiamata di sistema LISTEN, cioè è pronto ad accettare connessioni in


arrivo, e rimane bloccato finché non riceve una richiesta di connessione.

 Il client esegue una CONNECT per stabilire una connessione con il server specificando a
chi connettersi.

 La richiesta di connessione arriva al server che verifica se c'è un ascoltatore. In caso


affermativo, si sblocca e manda un messaggio di conferma al client.

 Prima che il messaggio di conferma arrivi al client, il server esegue la chiamata RECEIVE,
si blocca, e attende la prima richiesta da parte del client.

 Il client, avendo ricevuto il messaggio di conferma, si sblocca ed esegue un SEND per


trasmettere le sue richieste, seguita dalla chiamata RECEIVE per ottenere la risposta.

 L' arrivo della richiesta, sblocca il server che la può elaborare.

 A questo punto, il server usa SEND per mandare la risposta, seguito da RECEIVE perché
potrebbe esserci qualche altra richiesta da parte del client.

 Se il client non ha altre richieste da fare, usa DISCONNECT per terminare la connessione.

 Quando il server riceve DISCONNECT, manda a sua volta una DISCONNECT al client
per dare la conferma della sua richiesta.
7
SERVER CLIENT

LISTEN: attesa di 1 connect ------------->

<------------- CONNECT: specifica l'indirizzo del server

RECEIVE: Conferma la possibile connessione -------------->

<-------------- SEND: invia i messaggi

RECEIVE: aspetta altre possibili connessioni -------------->

<-------------- RECEIVE: per ottenere la risposta

<-------------- DISCONNECT: non ha più dati da inviare

DISCONNECT: dà conferma di -------------->


disconnessione

MODELLI DI RIFERIMENTO (1.4)


Nei prossimi due paragrafi verranno esaminate due importanti architetture di rete: il modello OSI e
il modello TCP/IP. Anche se i protocolli del modello OSI sono ormai in disuso, il modello in se è
ancora valido. Il modello TCP/IP ha caratteristiche opposte: il modello in se è poco utilizzabile, ma
i protocolli sono largamente impiegati.

Modello OSI (1.4.1)


Intorno al 1976 la ISO (International Standards Organization) propose, come architettura di rete, il
modello OSI (Open System Interconnection) con l'intento di rendere “aperto” il sistema di
trasmissione affinché fosse di libera e facile interconnettività. Punto di forza del modello OSI è
quello di scomporre il problema in sotto problemi più semplici da trattare.

Il modello OSI è composto da 7 strati:

Strato Fisico:
Si occupa della trasmissione di bit grezzi sul canale di trasmissione. Quindi,
se ad esempio si trasmette il bit 0, si vuole che dall'altra parte arrivi il bit 0, e
non 1.

Strato Data-Link:
Trasforma i bit grezzi ricevuti dallo strato fisico in una linea priva di errori
per lo strato network. Inoltre ha il compito di evitare che un trasmettitore
veloce saturi un ricevitore lento. Il suo doppio compito si può riassumere in
correzione degli errori a controllo di flusso.

Strato Network:
Si occupa della subnet, cioè della modalità con cui i pacchetti vengono
inoltrati dalla sorgente alla destinazione.

Strato Trasporto:

8
Prende i dati dallo strato superiore, li divide (se necessario), li passa allo
strato network e fa si che arrivino correttamente all'altra estremità. Inoltre
stabilisce quale tipo di servizio offrire allo strato sessione e quindi agli
utenti di rete.A quale processo deve arrivare il pacchetto.

Strato Sessione:
Si occupa di ristabilire una connessione e in caso di crash di riportarla allo
stato iniziale prima che avvenisse il problema.Es: Bancomat
Questo strato permette a utenti di computer diversi di stabilire una sessione
che può essere:
 controllo del dialogo (cioè tenere traccia di quando è il turno di
trasmettere e quando di ricevere);

 gestione dei token (evitare che le due parti tentino la stessa


operazione critica al medesimo istante);

 sincronizzazione (supervisionare una lunga trasmissione per


consentire la sua ripresa dal punto in cui si è interrotta a causa di un
crash)

Strato Presentazione:
Questo strato si occupa della sintassi e della semantica dell'informazione
trasmessa. Questo avviene quando due computer vogliono comunicare ed
hanno una differente rappresentazione dei dati.

Strato Applicazione:
Questo strato comprende un insieme di protocolli richiesti dagli utenti, come
ad esempio http.

Modello di Riferimento TCP / IP (1.4.2)

Il modello TCP / IP, a differenza del modello OSI, è formato da 4 strati:

Strato Host to Network:


Questo strato non è definito in maniera esplicita, ma si sa per certo che
l'host deve, in qualche modo, collegarsi alla rete usando qualche
protocollo per poter spedire i suoi pacchetti.

Strato Internet:
Si occupa di mandare i pacchetti in qualsiasi rete facendoli viaggiare
in modo indipendente gli uni dagli altri. I pacchetti potrebbero arrivare
a destinazione in ordine diverso da quello di partenza. Spetta agli strati
superiori riordinarli. In questo strato è presente il protocollo IP, che
permette di inviare i pacchetti alla destinazione corretta.

Strato Trasporto:
Consente la comunicazione tra host sorgente e host destinazione. In
questo strato è definito il protocollo TCP (Transmission Control
Protocol), che ha il compito di trasportare un flusso di byte a
destinazione senza che si verifichino errori. In pratica, il protocollo
TCP suddivide il messaggio in frame e passa ciascuno di essi allo
9
strato Internet. Quando i frame arrivano a destinazione, vengono
ricomposti per ottenere il messaggio iniziale. Il protocollo TCP
gestisce anche il controllo di flusso per garantire che una sorgente
veloce non saturi un ricevitore lento.

Strato Applicazione:
Contiene tutti i protocolli di livello superiore come Telnet, Ftp, Smtp,
Http.

Confronto tra Modelli di Riferimento OSI E TCP / IP (1.4.3)

Entrambi i modelli appena visti si basano sul concetto di protocollo e sulla suddivisione in strati.
Tuttavia vi sono delle differenze sostanziali. Nel modello OSI sono presenti 3 concetti
fondamentali ben distinti:

 servizi
 interfacce
 protocolli

Ogni strato offre un servizio a chi lo sovrasta. tale servizio è la descrizione di ciò che fa lo strato.
L'interfaccia spiega le modalità di accesso ai processi sovrastanti. I protocolli sono invece la
comunicazione virtuale tra le entità di pari strato.

Il modello TCP / IP non fa una netta distinzione tra servizio, interfaccia e protocolli.
Un'altra differenza tra i due modelli è il numero di strati: 7 per il modello OSI, e 4 per il modello
TCP/IP.

Critica del Modello e dei Protocolli OSI (1.4.4)

L'insuccesso del modello OSI a favore del TCP / IP fu causato da diversi motivi, primo tra i quali la
mancanza di tempestività. Infatti passò troppo tempo tra la ricerca, cioè la creazione del modello di
riferimento OSI, e la creazione dei protocolli. In questo lasso di tempo, infatti, nelle Università si
cominciò ad affermare il modello TCP/IP. Pertanto, quando il modello OSI entrò nel mercato era
già troppo tardi. Un'altra causa dell'insuccesso del modello OSI fu la tecnologia scadente. La scelta
di 7 strati non fu del tutto giusta, in quanto ci sono 2 strati (sessione e presentazione) che sono quasi
vuoti mentre altri 2 (data link e network) sono sovraccarichi. Inoltre in molti strati vi sono delle
funzioni ripetute come l'indirizzamento, il controllo di flusso e il controllo di errore. Quest'ultimo
ad esempio è ripetuto in ogni strato, quando sarebbe stato sufficiente farlo solo nello strato più alto.

Critica del Modello TCP / IP (1.4.5)

Una delle principali critiche che si fanno sul modello TCP/IP è che non vi è una netta distinzione tra
servizio, interfaccia e protocolli. Il modello TCP/IP è poco generale e inadatto per poter descrivere
pile di protocolli diverse dal TCP/IP. Per esempio è assolutamente impossibile usare TCP/IP per
descrivere Bluetooth.
Un'altra critica che si può fare riguarda lo strato Host to Network. In realtà questo non è un vero e
proprio strato, ma è piuttosto una interfaccia tra lo strato Data Link e lo strato Network.

10
CAPITOLO 2

LIVELLO FISICO
Lo strato fisico definisce le interfacce meccaniche, elettriche e le temporizzazioni della rete. La
prima parte del capitolo descrive la teoria della trasmissione dei dati e spiega in che modo la natura
limita ciò che può essere trasmesso e ricevuto attraverso un canale. I paragrafi successivi studiano
tre mezzi di trasmissione: quelli guidati (cavi in rame e fibra ottica), quelli wireless (onde radio
terrestri) e quelli basati sui satelliti.

BASI TEORICHE DELLA COMUNICAZIONE DATI (2.1)


Le informazioni possono essere trasmesse via cavo variando alcune proprietà fisiche come la
tensione o la corrente. Rappresentando il valore di questa tensione o corrente attraverso una
funzione a un valore f(t), è possibile modellare il comportamento del segnale e analizzarlo
matematicamente.

Analisi di Fourier (2.1.1)


Quanto appena descritto è ottenuto tramite la serie di Fourier. Con essa si ottiene una funzione
periodica g(t) con periodo T, tramite la somma idealmente infinita di seni e coseni.

∞ ∞
1
g= c+ ∑ a n sen 
t  ∑ b n cos 
2 π nft  2π nft 
2 n=1 n=1

1
dove f= T è la frequenza fondamentale
a n e b n sono le ampiezze di seno e coseno della n-esima armonica di quanto è spostato il segnale
c rappresenta una costante.

Quindi il segnale viene generato sommando queste serie di armoniche, che idealmente sono infinite;
arriviamo circa al nostro segnale che si avvicina ad 1 onda quadra se mettiamo tante armoniche

Segnali a Banda Limitata (2.1.2)


Quando si vuole trasmettere una determinata sequenza di bit, si ha bisogno di un ben preciso tipo di
segnale (che sarà formato da una determinata tipologia di onda quadra). Questo segnale viaggia sul
canale fisico che per natura tende a far perdere parte dell'energia lungo il percorso attenuando in
maniera non uniforme le componenti della serie di Fourier e provocando così una distorsione del
segnale. Pertanto, il segnale che arriverà a destinazione non sarà del tutto uguale a quello iniziale.
Di solito le ampiezze (cioè le armoniche) sono trasmesse senza subire attenuazioni da 0 fino ad una

11
certa frequenza f 0 , mentre sono attenuate per tutte le frequenze superiori a questo limite.
L'intervallo di frequenze trasmesse senza forte attenuazione viene detto Banda Passante. Essa è
una proprietà fisica del mezzo di trasmissione e dipende dalla costruzione, dallo spessore e dalla
lunghezza del mezzo. La linea telefonica, ad esempio, ha una frequenza limite introdotta
artificialmente a 3000Hz e su questa linea non possiamo far viaggiare i dati a qualsiasi velocità.
Ad esempio se vogliamo far viaggiare i dati a 300bps, avremo:
 un periodo T 26,67msec
1
 una frequenza di base f= 26,67 = 37,65 Hz,
 il numero massimo di armoniche è di 3000/(37,67/8) = 80 armoniche.

Quindi potremo avere uno spettro risultante che si avvicina al segnale originale.

Ma se volessimo far viaggiare i dati a 38400bps su canale fisico a 3000Hz otterremo:


 un periodo T 0,21
 una frequenza di base f= 4800Hz
 Per un totale di 3000 / (4800 / 8) = 0 armoniche

Ciò sta a significare che a 38400bps abbiamo la prima armonica a 4800Hz che è una frequenza
maggiore rispetto alla capacità fisica di 3000Hz (che ricordiamo essere la banda passante per far si
che le ampiezze viaggino con una lieve distorsione). Tutto questo ci fa capire come la velocità dei
dati da trasmettere sia dipendente dal mezzo fisico di trasmissione.

La velocità massima di un canale (2.1.3)


I canali trasmessivi si dividono in:
perfetti:non consentono distorsioni o ritardi nella propagazione del segnale
ideali: consentono solo un ritardo costante nella propagazione.
reali: consentono attenuazioni e ritardi in funzione della frequenza dei segnali
Da quanto detto vi sono due teoremi che esprimono in sintesi il concetto che un canale ha una
capacità di trasmissione limitata.

Su Ethernet ad esempio si ha passaggio di frequenze solo a certi livelli mentre superiore o inferiore
a quei livelli nn si ha nessun passaggio di frequenze.
Se dobbiamo passare la voce in un canale che ha frequenza più alta del canale si fa 1 shift del
segnale modulazione

TEOREMA DI NYQUIST
Nyquist osservò che anche su un canale perfetto la capacità di trasmissione è limitata.
Egli dimostrò che se si trasmette un segnale arbitrario attraverso un filtro low-pass la
cui ampiezza di banda è pari a H, il segnale filtrato può essere ricostruito completamente
prendendo solo 2H campioni al secondo. Se il segnale è composto da V livelli discreti, il teorema di
Nyquist afferma che:

12
massimo bit rate = 2 H log 2 V bit / sec

Questa equazione esprime la massima velocità su di un canale perfetto con ampiezza di banda
limitata.

TEOREMA DI SHANNON
Shannon fu più preciso, in quanto considerò non un canale perfetto, ma uno reale. Infatti in un
canale reale il segnale può essere distorto dal rumore (che può essere termico o di varia natura, ma
Shannon considera solo quello termico). Il livello del rumore termico si misura facendo il rapporto
tra la potenza del segnale e la potenza del rumore, il cosiddetto rapporto segnale-rumore, indicato
con S/N ed espresso in decibel (db). Quindi il massimo bit rate su di un canale reale è:

Mega bit = Mega Herz


massimo bit rate = H log 2 (1 + S/N)

H=larghezza di banda del segnale


Per ogni canale esiste un ben preciso limite fisico.
Si aumenta il segnale se il rumore è maggiore, aumentando i quanti così da far diminuire il rumore
rispetto al segnale; è preferibile avere meno livelli ma + laschi quindi allargare le caselle dei quanti,
così il rumore nn mi fa saltare da 1 quanto all’altro.
Più alto è il bit rate, più alta è la banda del segnale da trasmettere.
Più lungo è il canale trasmissivo,maggiore è la potenza del rumore,minore è la capacità del canale.

MEZZI TRASMISSIVI GUIDATI (2.2)

Il Doppino (2.2.2)
Il doppino è uno dei mezzi trasmissivi più vecchi. E' composto da due conduttori di rame isolati,
spessi circa 1mm avvolti uno intorno all'altro in forma elicoidale. L'intreccio viene utilizzato perché
i coni intrecciati annullano i rispettivi campi magnetici, rendendolo quindi meno soggetto ad
interferenze da fonti esterne. L'applicazione più comune del doppino è il sistema telefonico. Esso
può estendersi per diversi chilometri senza richiedere un'amplificazione del segnale. Per distanze
molto lunghe,invece, sono necessari dei ripetitori. I doppini possono essere utilizzati per trasmettere
sia i segnali digitali che quelli analogici. Esistono diversi tipi di doppini, ma per le reti di computer i
più importanti sono due:
 quelli di categoria 3 che sono composti da due cavi isolati attorcigliati. Di solito quattro
coppie di cavi sono raggruppate in una guaina di plastica che protegge e tiene uniti i
conduttori. Vengono usati per reti con frequenze fino a 16 Mhz, molto diffusa per le reti
Ethernet a 10 Mbit/s.

 quelli di categoria 5 che sono simili ai primi, ma usano più spire per centimetro, riducendo
l'interferenza e migliorando la qualità del segnale trasmesso su lunghe distanze. Questi sono

13
più adatti per le comunicazioni ad alta velocità.
Questi tipi di cavo non sono schermati e vengono chiamati anche UTP (Unshielded Twisted Pair,
doppini non schermati).

(a) UTP Categoria 3 - (b) UTP Categoria 5

Il Cavo Coassiale (2.2.3)


Il cavo coassiale, essendo più schermato del doppino, può estendersi per distanze più lunghe e
consente velocità più elevate. Esistono due tipi di cavi coassiali:

 a 50 Ohm: utilizzato per le trasmissioni digitali;

 a 75 Ohm: utilizzato per le trasmissioni analogiche, per la televisione e per le connessioni


internet via cavo.

Un cavo coassiale è composto da un nucleo conduttore ricoperto da un rivestimento isolante, a sua


volta circondato da un conduttore cilindrico realizzato con una calza di conduttori sottili che infine
è avvolto da una guaina protettiva di plastica. Tale costruzione permette di avere una buona
ampiezza di banda e una buona immunità al rumore. La banda disponibile dipende dalla qualità,
dalla lunghezza del cavo e dal rapporto segnale-rumore del segnale dati. I cavi moderni hanno
un'ampiezza di banda vicina a 1 Ghz.Sono insensibili alle onde elettromagnetiche esterne.

Fibra Ottica (2.2.4)


Un sistema ottico è formato da 3 componenti

 la sorgente luminosa
 il mezzo di trasmissione
 il rilevatore

Un impulso di luce indica il valore 1; l'assenza di tale impulso indica lo 0.


Il mezzo di trasmissione è una fibra di vetro sottilissima realizzata in silicio. Quando un rilevatore
viene colpito dalla luce, genera un segnale elettrico. Se si collega ad un estremo della fibra una
sorgente di luce, e all'altro estremo un rilevatore, ecco costruito un mezzo di comunicazione
unidirezionale che accetta un segnale elettrico e lo converte in luminoso, e dall'altra estremità
converte nuovamente il segnale in elettrico. Tutto ciò può essere realizzato sfruttando un principio
della fisica che consente di non disperdere la luce. Infatti, quando un raggio luminoso passa da un
materiale all'altro, si rifrange sul confine tra i due materiali. L'entità della rifrazione dipende dalle
proprietà dei due materiali, e viene detta Valore Critico. Quindi, tutti i raggi che colpiscono
l'interfaccia con un angolo uguale o superiore a quello critico, rimangono intrappolati nella fibra.
Dato che più raggi possono colpire l'interfaccia con angoli diversi (maggiori del valore critico), la

14
fibra può contenere molti raggi che rimbalzano ad angoli diversi. Questo tipo di fibra viene detta
Fibra Multimodale.
Se invece il diametro della fibra viene ridotto a poche lunghezze d'onda della luce, la luce può
propagarsi solo in linea retta senza rimbalzare. Questo tipo di fibra vene detta Fibra Monomodale;
la luce avanza senza riflessioni,ricopre distanze maggiori,ha un bit rate più alto,ma sono molto
costose.

Cavi in Fibra
Il cavo in fibra è formato da un nucleo di vetro attraverso il quale si propaga la luce detto core.
Nelle fibre multimodali esso ha un diametro di 50μ (circa quello di un capello umano), mentre nelle
fibre monomodali ha un diametro che varia da 8μ a 10μ. Il core è circondato da un rivestimento di
vetro che ha un indice di rifrazione più basso, e ciò costringe la luce a rimanere nel nucleo. Lo
strato successivo è una fodera di plastica che protegge il rivestimento.

Le fibre si possono collegare in tre diversi modi:

 Possono terminare in connettori inseriti in apposite prese; i connettori perdono circa


il 10-20% della luce, ma semplificano la riconfigurazione dei sistemi.

 Possono essere attaccate meccanicamente: l'estremità di un cavo viene appoggiata


all'estremità dell'altro; il segmento, dopo essere stato avvolto in una manichetta speciale,
viene pinzato. L'allineamento può essere migliorato passando la luce attraverso la giunzione
e apportando piccole correzioni che massimizzano il segnale. Personale addestrato può fare
una giunzione meccanica in circa 5 minuti; causa una perdita del 10% della luce.

 Due pezzi di fibra possono essere fusi per formare una connessione solida. Una
giuntura di questo tipo è buona quasi quanto una fibra uniforme ma, anche in questo caso, si
genera una piccola attenuazione del segnale.

In tutti e tre i casi, nel punto di giuntura possono presentarsi fenomeni di riflessione e l'energia
riflessa può interferire con il segnale.

Per generare il segnale normalmente si impiegano due tipi di sorgenti luminose:


 i LED (Light Emitting Diode)
 i semiconduttori laser.

Reti in Fibra Ottica


Esistono diverse tipologie di cavi in fibra ottica:

Ad anello: è composta da una serie di connessioni punto-punto. L'interfaccia utilizzata da ogni


computer passa il flusso di impulsi luminosi verso il collegamento successivo e funge da giunzione
a T per dare al computer la capacità di inviare e accettare messaggi. Per realizzare ciò si usano due
tipi di interfacce:

 passiva: formata da 2 spine fuse nella fibra principale. Ad una estremità si trova un LED
(per inviare il segnale), nell'altra si trova un fotodiodo (per ricevere il segnale).

 ripetitore attivo: la luce in entrata è convertita in segnale elettrico che viene rigenerato alla
sua massima potenza se necessario, e riconvertito in segnale luminoso.

15
A stella passiva: In questo tipo di rete, ogni interfaccia ha una fibra che collega il suo trasmettitore
a un cilindro di silicio; Le fibre in entrata sono fuse a un capo del silicio, mentre le fibre che escono
dall'altro capo si collegano ad ognuno dei ricevitori.

TRASMISSIONI WIRELESS (2.3)

Lo spettro elettromagnetico (2.3.1)


In base al tipo di frequenza, possiamo distinguere tra onde radio, microonde, infrarosso e luce
visibile. Tutte le onde possono essere utilizzate per trasmettere informazioni modulando
l'ampiezza, la frequenza o la fase. A frequenze più alte abbiamo la luce ultravioletta, i raggi x e i
raggi gamma. In teoria dovrebbero essere le migliori grazie alla frequenza elevata, ma sono difficili
da generare e da modulare e difficilmente superano gli ostacoli solidi.

Trasmissioni Radio (2.3.2)


Le onde radio sono facili da generare, possono viaggiare su lunghe distanze e attraversano
facilmente gli edifici. Le onde radio sono omnidirezionali, ossia si espandono dalla sorgente in tutte
le direzioni e pertanto trasmettitore e ricevitore non devono essere necessariamente allineati. Le
proprietà delle onde radio dipendono dalla frequenza. A frequenze basse esse attraversano bene gli
ostacoli, ma la potenza diminuisce man mano che ci si allontana dalla sorgente.
Ad alte frequenze, le onde viaggiano in linea retta e difficilmente superano gli ostacoli.
A basse e medie frequenze le onde seguono una direzione simile alla curvatura terrestre, mentre a
frequenze elevate le onde radio tendono a essere assorbite dal pianeta, ma quando incontrano la
ionosfera rimbalzano e ritornano sulla terra.

Trasmissioni a Microonde (2.3.3)


Le microonde viaggiano da 100MHz a 10GHz, quasi in linea retta e pertanto possono essere messe

16
a fuoco facilmente. Come parabola ricevente e trasmittente allineati. Le microonde non attraversano
bene gli edifici. Inoltre alcune onde possono rifrangersi sugli strati dell'atmosfera arrivando poco
dopo le onde dirette. Le onde in ritardo possono arrivare fuori fase rispetto alle onde dirette,
causando l'annullamento del segnale. Questo effetto viene chiamato Multipath Fading.
Possono essere assorbite dalla pioggia e riescono a trasportare parecchi bit per herz.
E’ possibile raggrupparle in un fascio tramite le antenne paraboliche in modo da migliorare il
rapporto S/N.

Infrarossi e onde Millimetriche (2.3.4)


I raggi infrarossi vengono utilizzati per le comunicazioni a corto raggio. Questo sistema è
direzionale, facile da costruire e poco costoso. L'aspetto negativo è che non supera gli ostacoli
solidi, mentre il lato positivo è che un sistema infrarosso non interferirà mai con un altro sistema
infrarosso anche se si trovano nelle immediate vicinanze non possono essere utilizzati all’aperto o
in presenza di elevate fonti di calore

RETE TELEFONICA PUBBLICA COMMUTATA (2.5)


Per il collegamento di due pc dello stesso edificio si usa un collegamento LAN, ma se si volesse far
comunicare due pc posti in luoghi diversi, risulterebbe troppo costoso dedicare una linea per la
comunicazione. Per tale motivo, i progettisti si sono affidati ai sistemi di comunicazione già
esistenti, con l'inconveniente però che tali sistemi erano ottimizzati per la comunicazione vocale e
non per quella dati.

Struttura del sistema telefonico (2.5.1)


Quando fu concepito il sistema telefonico (Bell), permettendo la comunicazione tra due telefoni
collegati tramite una linea dedicata, si capì subito che un utente non poteva avere n telefoni per
poter comunicare con n persone diverse e pertanto successivamente si decise di collegare tutti i
telefoni ad una centrale di commutazione che aveva il compito di smistare le telefonate. Tuttavia,
con il crescere degli utenti e con la crescente esigenza di comunicare anche con utenti di altre città
venne creata una centrale di commutazione di secondo livello, che poteva collegare centrali di
commutazione di zone diverse della stessa città o di città diverse (le cosiddette chiamate
interurbane).

I Collegamenti Locali: Modem, Adsl, Connessioni Wireless (2.5.3)


Per inviare i dati digitali attraverso una linea telefonica (analogica), il computer (digitale) ha
bisogno di convertire i dati da digitale ad analogico. Questa conversione è eseguita dal modem
(modulatore/demodulatore).

I principali problemi delle linee di trasmissioni sono:

 Attenuazione: rappresenta la perdita di energia causata dalla propagazione del segnale


verso l'esterno;

 Distorsione: dovuta al fatto che le componenti di Fourier si propagano anche a velocità


differenti, causando la distorsione del segnale ricevuto dall'altro capo;

 Rumore: rappresenta l'energia indesiderata generata da sorgenti esterne al trasmettitore.

Per aggirare questi problemi associati alla trasmissione, viene introdotto un tono continuo, chiamato
portante d'onda sinusoidale. La sua ampiezza, frequenza e fase possono essere modulate per
trasmettere informazioni.
17
 Nella modulazione di ampiezza, sono utilizzate due ampiezze diverse per rappresentare i bit
0 e 1.
 Nella modulazione di frequenza si utilizzano due o più toni;
 Nella modulazione di fase l'onda portante è spostata da 0 a 180 gradi per rappresentare i bit.
Quindi un cambiamento di fase indica un cambiamento di bit.

Per trasmettere le informazioni, si usa quindi la combinazione di due tipi di modulazione: o la


modulazione di ampiezza con quella di frequenza, oppure la modulazione di ampiezza con quella di
fase. Il dispositivo che fa questo tipo di lavoro è chiamato modem. il numero di campioni al
secondo è misurato in baud. Durante ogni baud viene trasmesso un singolo, ovvero bit. Il modem
utilizza le tecniche sopra citate per poter trasmettere più bit per baud. Questo avviene modulando
sia l'ampiezza sia la fase della portate. Esse vengono rappresentate tramite diagrammi a
costellazioni dove ogni punto ha una sua ampiezza (distanza dall'origine) e fase (l'angolo che forma
il punto con l'asse delle x). Ad esempio un diagramma con quattro combinazioni valide può essere
utilizzata per trasmettere due bit per simbolo. Con il passare del tempo i diagrammi si sono evoluti
fino a rappresentare più bit per baud.

Linee DSL
Con il tempo nacque l'esigenza di avere un prodotto più competitivo. Nacquero i servizi a banda
larga, che utilizzano una banda superiore a quella del sistema telefonico. Il trucco sta nel togliere il
filtro alla linea di comunicazione. Tale filtro venne adoperato nei sistemi telefonici perchè per
trasmettere la voce bastava una banda di 4000Hz. La linea DSL quindi utilizza tutto lo spettro pari a
1,1Mhz. Esso viene suddiviso in 256 canali di 4312,5Hz ciascuno. Il canale 0 è utilizzato per la
comunicazione vocale; i canali da 1 a 5 non sono utilizzati, per evitare che il segnale dei dati e
quello vocale interferiscano tra loro; un canale è utilizzato per il controllo della trasmissione ed un
altro per la ricezione. Tutti gli altri canali sono a disposizione degli utenti. Di solito l'80% dei canali
è dedicato al download e il restante 20% all'upload, per questo viene chiamato ADSL, dove la “A”
sta per asincrono.
Nei modem per aumentare il throughput si modula la portante sia in fase che in ampiezza;attraverso
gli schemi di costellazioni,avendo costellazioni differenti i modem all’inizio fanno un fischio che
serve per cercare gli altri dispositivi modem e stabilire una connessione,prima si parte da 1 bassa
velocità e poi via via si aumenta per testare la qualità della linea.
Per ovviare al basso throughput delle linee,sono stati introdotti anche alcuni sistemi di
compressione dati in tempo reale. Infatti data la lentezza delle linee, i vantaggi derivanti dalla
compressione compensano altamente i ritardi dovuti alle fasi di compressione-decompressione.
Una configurazione tipica dell’ADSL è la seguente: il tecnico della società telefonica installa un

18
NID nell’edificio del cliente(segnala la fine della proprietà dell’azienda telefonica e l’inizio di
quella del cliente). Accanto al NID si trova lo splitter, filtro analogico che divide i dati dalla banda
0-4.000Hz utilizzata per POTS. Il segnale POTS è inviato all’apparecchio telefonico, mentre i dati
sono instradati verso il modem ADSL. Il modem ADSL è un elaboratore di segnali digitali, che fa
le veci di 250 modem che operano in parallelo a diverse frequenze. Per quanto riguarda la centrale
locale, deve essere installato un analogo splitter. Qui il segnale vocale è filtrato e inviato al normale
commutatore per il traffico vocale. Il segnale sopra i 26kHz, invece, è passato ad un dispositivo
chiamato DSLAM che contiene lo stesso tipo di processore di segnale digitale integrato nel modem
ADSL. Dopo essere stato riorganizzato in flussi di bit, il segnale digitale è prima organizzato in
pacchetti e poi inviato all’ISP. Lo svantaggio di questa configurazione è la presenza del NID e dello
splitter nella casa del cliente. Dato che questi due componenti possono essere installati solamente da
personale tecnico, per il cliente ha un costo da sostenere. Per ovviare a questo inconveniente è stato
creato uno standard basato su una configurazione che non usa splitter. Questo standard è chiamato
G.lite. Quindi la linea telefonica è usata cosi com’è; l’unica differenza è che si deve interporre un
microfiltro tra ogni presa telefonica e il telefono o modem collegato. Il filtro per il telefono fa da
low-pass che elimina le frequenze sopra i 3.400Hz; il filtro per il modem ADSL è un high-pass che
elimina le frequenze sotto i 26kHz.

Linee e Multiplexing (2.5.4)


Usare una linea dedicata per ogni comunicazione risulterebbe molto costoso. Di conseguenza si è
sviluppato un modo per poter utilizzare lo stesso canale per effettuare più comunicazioni. Ecco
alcune tecniche:

Multiplexing a Divisione di Frequenza (FDM)


Questa tecnica permette di creare più comunicazioni sullo stesso canale. In pratica ogni canale ha
una ampiezza di banda limitata di 3100Hz. Quando si uniscono in multiplexing ai canali, sono
allocati 4000Hz per canale in modo da ottenere una separazione tra i canali. Quando si fa l'unione
tra i canali, si sta attenti a non sovrapporli. Quindi ad ogni canale viene associata una frequenza di
4000 Hz.
La frequenza di ogni canale vocale viene aumentata di una quantità diversa. A questo punto si fa
l’unione dei canali facendo attenzione a non sovrapporli

Multiplexing a Divisione di Ampiezza (AM) Fase(PM) e Frequenza (FM)


Abbiamo il nostro segnale, ogni segnale ha la sua portante se si fa 1 modulazione in ampiezza viene
fatta una moltiplicazione dei segnali.

19
Modulazione avviene attraverso la formula:

A sen (wt + y)

Se modifichiamo A modifichiamo ampiezza


W modifichiamo frequenza FM
Y modifichiamo fase PM

Multiplexing a Divisione di Lunghezza d'onda (WDM)


E' molto simile alla tecnica FDM con la differenza che questa è applicata alle fibre ottiche. Le varie
fibre, che hanno una potenza diversa, vengono combinate in un combinatore ottico che trasmette i
vari segnali su una fibra condivisa. All'altro capo vi è collegato uno splitter che suddivide il segnale.
Ogni fibbra inserita contiene uno spezzone di core che filta tutte le lunghezze d'onda tranne quella
associata, che sarà l'unica a passare.

Multiplexing a Divisione di Tempo (TDM)


Con questa tecnica, ogni utente utilizza tutta la banda, ma a turno con gli altri utenti.
Se abbiamo una bada di 10Mbps gli slot sn divisi in 10 slot da 0,1 1 Mb
Può essere gestita da dispositivi digitali, ma può essere utilizzata solo per dati digitali e pertanto
deve essere eseguita una conversione da analogico in digitale nella centrale locale per mezzo di un
dispositivo chiamato codec-decoder che genera una serie di numeri a 8 bit. Il codec elabora 8000
campioni al secondo (125 nicro sec campione) perché per il teorema di nyquist questa velocità è
sufficiente a catturare tutte le informazioni dell’ampiezza di banda del canale telefonico a 4 Khz.
Con velocità inferiore si perderebbero informazioni, mentre con velocità superiori non si
guadagnerebbe niente.Questa tecnica è chiamata PCM.

Commutazione (2.5.5)
Il sistema telefonico è diviso in due parti principali:

 l'impianto esterno: fili e linee collegate all'esterno delle centrali di commutazione)


 l'impianto interno: commutatori.

20
Commutazione di Circuito
Con questa tecnica l'apparecchiatura di commutazione crea un percorso fisico tra il chiamante e il
chiamato. Quindi si crea un percorso dedicato che dura fino al termine della chiamata. La
caratteristica più importante di questa tecnica è quella di stabilire un percorso tra le due parti che
vogliono comunicare prima di trasmettere i dati. Una volta creato il percorso, l'unico ritardo per i
dati è quello dovuto al tempo di propagazione del segnale elettromagnetico.

Commutazione di Pacchetto
Con questa tecnica i singoli pacchetti vengono trasmessi all'occorrenza e non viene impostato
nessun percorso dedicato in anticipo. Ogni pacchetto trova da solo una via per la destinazione. Con
questa tecnica vengono accettati solo pacchetti che hanno una dimensione che non superi quella
limite. Inoltre assicura che un utente non monopolizzi la rete per troppo tempo, gestendo il traffico
interattivo. Un messaggio è diviso in più pacchetti ed un notevole vantaggio si ha dal fatto che il
primo pacchetto può essere inviato prima che il secondo sia completamente arrivato, in maniera
totalmente indipendente. Infatti ogni pacchetto, può scegliere una destinazione diversa. Il vantaggio
sta nel fatto che se un commutatore si blocca i pacchetti possono essere instradati aggirando i
commutatori bloccati, cosa che non potrebbe avvenire in una rete a commutazione di circuito, in
quanto se un commutatore si blocca viene chiusa tutta la comunicazione. Quando si utilizza la
commutazione di pacchetto, non si riserva alcuna ampiezza di banda, perciò ogni pacchetto deve
aspettare il proprio turno, mentre nella commutazione di circuito la preimpostazione di percorso
riserva in anticipo l'ampiezza di banda. Quest'ultimo, come svantaggio ha quello di sprecare banda
quando un utente non ha niente da comunicare, cosa che non avviene nella commutazione di
pacchetto.
Usa la tecnica di trasmissione STORE AND FOREWARD per cui un pacchetto è temporaneamente
memorizzato nella memoria del router, e poi viene inviato nel router successivo.Questa tecnica
aggiunge un ritardo nella propagazione.

CDMA (Code Dimission Multiple Access) (2.6.2)


Il CDMA a differenza delle altre due tecniche TDMA e FDMA, permette ad ogni stazione di
trasmettere per tutto il tempo attraverso l'intero spettro di frequenza. Le trasmissioni multiple
avvengono attraverso la teoria della codifica. Ogni stazione che trasmette ha un proprio codice. Nel
CDMA ogni tempo di bit è suddiviso in m intervalli brevi chiamati chip. A ogni stazione è
assegnato un codice univoco chiamato sequenza di chip. Quando una stazione deve trasmettere
combina i bit di dati con la sequenza di chip (mediante il prodotto), ottenendo in uscita la sequenza
da trasmettere. A destinazione, il ricevitore, per ottenere i dati, moltiplica la sequenza ottenuta per
la sequenza di chip, somma il risultato ottenuto e lo divide per M (dove M è la dimensione dei bit di
dati). La stessa cosa succede se due o più stazioni vogliono comunicare. Ognuna di esse applica la
propria sequenza di chip ai propri bit di dati da trasmettere. Ciò che si ottiene viene sommato e
trasmesso. A destinazione, il ricevitore, sapendo quali dati ricevere, applica una determinata
sequenza di chip per ottenere i bit di dati.
I limiti fisici del canale riducono naturalmente la capacità del CDMA. Ad esempio è impossibile
avere la sincronizzazione dei chip.

21
CAPITOLO 3

LIVELLO DATA LINK

Progetto dello Strato Data Link (3.1)


Questo strato ha diverse funzioni, tra cui:

1. Fornire un ben definito servizio di interfaccia allo strato network

2. Gestire gli errori di trasmissione

3. Gestire il controllo di flusso

Per offrire questi servizi, lo strato Data Link prende i pacchetti dallo strato network e li incapsula in
frame per trasmetterli. Ogni frame contiene una intestazione (Header), un campo di carico utile
dove risiede il pacchetto e una coda del frame.

Servizi forniti allo Strato Network (3.1.1)


Il servizio principale dello strato Data Link è quello di trasferire dati dallo strato network dell'host
sorgente allo strato network dell'host di destinazione. Il livello Data Link offre anche i servizi unack
senza connessione, ack senza connessione, ack orientato alla connessione.

Nel primo (unack senza connessione), la sorgente invia in modo indipendente i pacchetti alla
destinazione, senza che quest'ultima debba rispondere con un ack, cioè un messaggio di avvenuta
ricezione. Se un frame viene perso, non viene fatto nessun tentativo di correggere o di rilevare la
perdita nello strato Data Link. Questa classe di servizio si usa solo quando la frequenza di
trasmissione degli errori è molto alta.Utile nel traffico real-time, trasmissione voce

Nel secondo tipo di servizio (ack senza connessione) non si usa alcun tipo di connessione logica,
ma ogni frame viene inviato. In questo modo il mittente riesce a sapere se un frame è arrivato a
destinazione in modo corretto oppure no. Se non arriva l'ack in uno specifico intervallo di tempo, il
frame può essere rispedito.Utile nei canali poco affidabili come il Wireless.

Nel terzo tipo di servizio (ack orientato alla connessione) la sorgente e la destinazione stabiliscono
una connessione prima di inviare i dati. ogni frame, prima di essere inviato viene numerato e lo
strato Data Link garantisce che venga effettivamente ricevuto nell’ordine corretto.
Il trasferimento avviene in 3 fasi: si stabilisce connessione: si trasferiscono i frame tenendo traccia
di quali sono stati ricevuti e quali no; si rilascia la connessione.

Suddivisione in Frame (3.1.2)


Per servire lo strato network, lo strato Data Link deve usare a sua volta il servizio che gli è stato
fornito dallo stato fisico, il quale ha come compito quello di prendere un flusso di bit e cercare di
portarli a destinazione con la probabilità di avere errori. Quello di rilevare, ed eventualmente
correggere gli errori, è uno dei compiti dello strato Data Link. Quando preleva il flusso di bit, lo
strato Data Link suddivide tale flusso in frame e calcola il checksum di ogni frame. Quando arriva a
destinazione, il checksum del frame viene ricalcolato. Se è uguale a quello del frame lo accetta, in
caso contrario manda un messaggio di errore. Per delimitare l'inizio e la fine di un frame sono stati
22
utilizzati diversi metodi.
Bisogna stabilire clock o il bit rate per sapere quanti 1 ci sono graficamente.
Quindi viene usato un contattore che conta gli 1 e appena contattore arriva a 5 mette uno 0

Conteggio dei caratteri


Questo metodo di framing prevede l'uso di un campo nell'intestazione del frame che ne indica la
lunghezza. In questo modo si conosce a priori la lunghezza del frame, quindi dove questo frame
finisce e dove inizia il successivo con un ulteriore campo nell'intestazione. L'unico problema di
questo algoritmo è che, se per errore di trasmissione si dovesse alterare il campo di conteggio, il
destinatario andrebbe fuori sincronia e non sarebbe in grado di trovare l'inizio del frame successivo.
Inoltre non risulta neanche conveniente mandare un frame alla sorgente per chiederne la
ritrasmissione, perchè il destinatario non riesce a sapere quanti caratteri deve saltare per arrivare
all'inizio della nuova trasmissione.

Flag Byte con Byte Stuffing


Questa tecnica aggira il problema della sincronizzazione, causa errore di trasmissione, introducendo
un byte speciale all'inizio e alla fine del frame. Questo prende il nome di Flag Byte. In questo modo,
quando il destinatario perde la sincronia, può semplicemente cercare il flag byte per trovare la fine
del frame corrente. Due Flag Byte consecutivi indicano la fine di un frame e l'inizio di un altro.
Dato che un flag Byte è una sequenza di bit, può capitare che questa (che non è un flag) compaia
nella parte dati del frame. Per evitare che questo interferisca con le operazioni di framing, la
sorgente inserisce un byte speciale di Escape (ESC) subito prima di ogni occorrenza occidentale del
flag byte nei dati. Lo strato Data Link della destinazione provvederà a rimuovere il byte di escape
prima di passare il frame allo strato network. Questa tecnica è chiamata Byte Stuffing.

Il flag byte è composto da STX DLE all’inizio frame e DLE ETX alla fine del frame; se nel nostro
messaggio compare all’interno del frame DLE lo si raddoppia così destinazione capisce che non è
un fine di frame ma fa parte del frame.
 Vantaggi è quello di riconoscere sempre inizio e fine frame
 Svantaggi utilizziamo più livelli quindi spreco di banda perché ci sono i bit di controllo

23
Flag di Inizio e Fine con Bit Stuffing
La tecnica appena descritta ha lo svantaggio di essere legata all'uso di caratteri a 8 bit. Quindi si è
sviluppata una nuova tecnica che consente di gestire i caratteri di lunghezza arbitraria. Si creano
così frame e codifiche con un numero arbitrario di bit. Ad esempio, ogni frame inizia e finisce con
un gruppo speciale di bit, 01111110. Per ovviare al problema di trovare questa stessa sequenza nei
bit dei dati e quindi confonderli con bit speciali, ad ogni 5 1 che incontra, la sorgente aggiunge uno
0 e poi trasmette il frame. A destinazione il livello Data Link toglie questi 0 e passa il frame allo
strato network. Questa tecnica è chiamata Bit Stuffing.

Violazioni della codifica nello Strato Fisico


Questa tecnica viene applicata solo alle reti in cui la codifica contiene delle ridondanze a livello
fisico. Quindi il bit 1 è rappresentato da una coppia alto-basso, mentre il bit 0 da una coppia basso-
alto. Ogni bit di dati deve poi avere una transizione, rendendo facile alla destinazione la decodifica
della posizione dei singoli bit. Quindi per rappresentare i frame utilizziamo tre livelli, che per il
teorema di Nyqueist significa che il massimo bit rate trasmissibile è abbastanza elevato ma, in
realtà, un livello viene utilizzato per la transizione, quindi non trasporta dati.

Codici per la Correzione degli Errori (3.2.1)


Gli architetti delle reti hanno sviluppato due strategie di base per gestire gli errori:

 codifica a correzione d'errore: consiste nell'includere in ciascun blocco dati trasmesso una
quantità di informazioni ridondanti tale da permettere di ricostruire il contenuto del blocco
in caso di errore. L'uso di questa codifica è spesso indicata come forward error correction
(correzione d'errore in anticipo).

 codifica a rilevazione d'errore: consiste nell'introdurre abbastanza ridondanza da


permettere alla destinazione di capire che c'è stato un errore, ma non di correggerlo. In
questo modo la destinazione potrà richiedere una ritrasmissione del blocco di dati.

La scelta di queste tecniche dipendo molto dal tipo di canale utilizzato.


Nel caso di fibre ottiche, che sono piuttosto affidabili, è più conveniente usare codifiche a
rilevazione di errore e limitarsi a ritrasmettere quei blocchi che eventualmente risultino corrotti.
Invece su canali molto rumorosi, come quelli wireless, risulta più conveniente usare una codifica a
correzione di errore in modo che ad ogni blocco venga aggiunta una ridondanza tale da permettere
alla destinazione di ricostruire il blocco in caso di errore.

Distanza di Hamming
Normalmente un frame consiste di m bit di dati (cioè il messaggio) e r bit ridondanti per i controlli.
Chiamiamo la lunghezza totale n dove n=m+r. Un'unità di n bit che contiene dati e bit di controllo
viene chiamata codeword di n bit. Prendiamo due codeword, per esempio 10001001 e 10110001;
per determinare quanti bit corrispondenti sono differenti nelle due codeword basta eseguire l'OR
esclusivo e contare il numero di bit a 1 nel risultato. Ad esempio:

10001001
10110001
00111000

In questo caso ci sono 3 bit differenti. Il numero di bit corrispondenti diversi nelle due sequenze
viene detto distanza di Hamming. Se due codeword sono ad una distanza di Hamming pari a d,
significa che ci vorranno d errori su singoli bit per convertire una sequenza nell'altra. Nella maggior
24
m
parte delle applicazioni di trasmissioni dati, tutti i 2 possibili messaggi sono legali, ma per via del
n
modo in cui sono calcolati i bit di controllo, non tutte le 2 codeword vengono utilizzate. Quindi,
considerando le codeword utilizzate, troviamo quelle con la minima distanza di Hamming. Questa
sarà per definizione la distanza di Hamming dell'intera codifica. Le proprietà di rilevazione e
correzione degli errori dipendono dalla sua distanza di Hamming. Per trovare d errori è necessario
una codifica con distanza d+1, in quanto con tale codifica non esiste un modo in cui d errori su
singoli bit possano cambiare una codeword valida in un'altra ancora valida. Per correggere d errori
abbiamo bisogno di una codifica con distanza 2d+1, in maniera tale che le codeword legali siano
distanziate tra di loro tanto che anche con d cambiamenti la codeword originale è sempre più vicina
di ogni altra codeword e può essere determinata univocamente.

110 V
010
Valide Non
valide
000 111
011 111
011 100
110 010
100 101 001 NV
000

001 101

Codifiche a rilevazione di errore (3.2.2)


Questa tecnica di codifica permette di introdurre parecchia ridondanza nei frame di dati da inviare,
in modo che la destinazione capisca che c'è un errore dovuto alla trasmissione ma non di
correggerlo. Un semplice esempio di codifica è il bit di parità.

Bit di Parità
Un semplice esempio di codifica a rilevazione di errore si può realizzare aggiungendo un bit di
parità ai dati. Il bit di parità viene calcolato in maniera tale che il numero di 1 nella codeword sia
sempre pari (o dispari). Per esempio, per trasferire il bit 1011010 con parità pari bisogna
aggiungere lo 0 al precedente frame, mentre per avere una parità dispari bisogna aggiungere 1.
Naturalmente se abbiamo 2 4 6 errori fa risultare parola corretta

Parità a Due Dimensioni


Con questa tecnica si considera ogni blocco da trasmettere come una matrice di n colonne e k righe.
Un bit di parità viene calcolato separatamente per ogni colonna ed aggiunto come ultima riga della
matrice. La matrice sarà poi trasmessa una riga per volta. All'arrivo del blocco, la destinazione
controlla tutti i bit di parità. Se uno qualunque di questi bit è errato, la destinazione chiede la
ritrasmissione del blocco.
Affinché si correggano gli errori dobbiamo usare una matrice:

bit calcolare bit parità x riga


101 0
110 0
010 1
001 1 calcola bit parità x colonna

25
battaglia navale capisce dov’è l’errore!!
Svantaggio che abbiamo un ritardo perche deve memorizzare tutto in un buffer si aumenta la
complessità riesco a rilevare 2 errori ma 4 errori messi hai vertici non li vedo.

CRC (Controllo Ciclico di Ridondanza) detta anche Codifica Polinomiale


Serve per il rilevamento degli errori. Viene utilizzato per le trasmissioni wireless in quanto molto
rumorose e piene di errori. Con questa tecnica è possibile rilevare errori, ma non è possibile
correggerli.
La codifica polinomiale z2 si usa perché somma e sottrazione coincidono tra loro; si basa sul fatto
di trattare le sequenze di bit come dei polinomi a coefficienti che possono assumere solo i valori 0
oppure 1. Un frame di k bit è visto come una lista di coefficienti per un polinomio con k termini che
k− 1 0
variano da x a x . Quando si usa la codifica polinomiale, la sorgente e la destinazione devono
concordare in anticipo un polinomio generatore, G(x). Il generatore deve avere i bit di ordine più
alto e più basso uguali a 1. Per poter calcolare il checksum di un frame di m bit che corrisponde al
polinomio M(x), il frame deve essere più lungo del polinomio generatore. L'idea è quella di
aggiungere un checksum alla fine del frame definitivo che viene trasmesso a destinazione in modo
che il polinomio rappresentato dal frame con checksum (nella figura sottostante tale polinomio è:
11010110111110) sia divisibile per G(x). Quando alla destinazione arriva il frame con checksum e,
dividendolo per G(x) c'è un resto, allora c'è stato un errore di trasmissione. Se invece non c'è resto,
allora non ci sono stati errori.

L'algoritmo per calcolare il checksum funziona nel seguente modo:

 Posto r il grado di G(x), aggiungere r bit con valore 0 dopo la parte di ordine più basso del
frame, così che adesso contenga m+r bit e corrisponda al polinomio x M  x ; Nella figura,
r

il generatore è 10011 che ha grado 4. Quindi si aggiunge 0000 al frame 1101011011. Quindi
il messaggio che la sorgente dividerà per il polinomio generatore è 11010110110000.

 Dividere il messaggio così ottenuto (11010110110000) per il polinomio generatore (10011).


Se il grado del risultato delle singole divisioni è >= del dividendo (ad esempio 10110) si
divide per il polinomio generatore (10011). In caso contrario si divide per un polinomio di
grado inferiore (ad esempio 00101 / 00000).

 Alla fine della divisione, si prende il resto (nella figura è 1110) e si aggiunge alla fine del
frame. Quindi verrà mandato a destinazione il frame 11010110111110.

CRC 12 ha come massimo grado del polinomio x12; CRC 16 x16 in base alla lunghezza del file
naturalmente 1 file da 1 giga nn viene controllato da un CRC 16.

26
27
Ridondanza
Supponiamo di progettare una codifica con m bit di dati e r bit di controllo in maniera tale da
m
correggere tutti gli errori singoli. Per ognuno dei 2 messaggi legali, esistono n codeword illegali
a distanza 1 che si ottengono invertendo sistematicamente ognuno degli n bit della codeword legale.
m
Per questo motivo ognuno dei 2 messaggi ha bisogno di n+1 combinazioni dedicate. Poiché il
n
numero totale di combinazioni di bit è 2 si ha:


n+1 
2m ≤ 2 n Sostituendo n=m+r, la disuguaglianza diventa

[ n]
=
m+r+1 
m
2 ≤2 ; 2m+2r>=2m (m+r+1); 2r>= m+r+1; 2r-r>=m+1

Questa disuguaglianza impone un limite al numero di bit di controllo necessari per correggere gli
errori singoli.

Codici di Hamming
Questo limite teorico può essere effettivamente raggiunto usando un metodo dovuto a Hamming.
I bit della codeword sono numerati consecutivamente a partire da 1 per il primo bit sulla sinistra, 2
per quello immediatamente alla sua destra e così via. I bit che sono potenza di 2 (1, 2, 4, 8, 16, ecc.)
sono i bit di controllo, mentre i restanti bit (3, 5, 6, 7, 9, ecc.) sono riempiti con m bit di dati. Ogni
bit di controllo forza la parità di alcuni gruppi di bit, incluso se stesso, a essere pari (o dispari). Un
bit può essere incluso in diversi calcoli di parità. Per vedere quali bit di controllo sono legati a un
certo bit di dati, basta riscrivere ogni bit di dati k come somma di potenza di 2 (ovvero come somma
di bit di controllo). Per esempio 11=1+2+8 e 29=1+4+8+16. In questo modo, un bit di dati è
controllato solo da quei bit di controllo che compaiono nella somma (per esempio 11 è controllato
solo dai bit 1, 2 e 8). Quando una codeword viene ricevuta, la destinazione inizializza il contatore a
0. A quel punto controlla ogni bit di controllo k per vedere se la parità è corretta e, in caso contrario,
aggiunge il valore k al contatore. Se, quando tutti i bit di controllo sono stati esaminati, il contatore
è ancora a 0 (cioè se non sono stati rilevati errori), la codeword viene accettata come valida. In caso
contrario, il valore non nullo del contatore indica il numero del bit in errore. Per esempio se i bit di
controllo 1, 2 e 8 sono in errore, il bit invertito è 11; infatti questo è l'unico che viene controllato dai
bit di controllo 1,2 e 8.
Le codifiche di Hamming riescono a correggere solo errori singoli, ma si può fare in modo che tale
codifica riesca a correggere anche errori burst.
Una sequenza di k codeword consecutive è disposta riga per riga in modo da formare una matrice.
Normalmente i dati sono trasmessi una codeword alla volta, riga per riga. Per correggere gli errori
burst invece, i dati vengono trasmessi colonna per colonna a partire dalla prima a sinistra. Quando
tutti i k bit della prima colonna sono stati inviati si procede con la seconda e così via. Dopo che il
frame è arrivato a destinazione, la matrice viene ricostruita colonna per colonna. Se si verifica un
errore burst di lunghezza k, al massimo 1 bit per ogni codeword sarà toccato, ma sappiamo che la
codifica di Hamming riesce a correggere 1 errore per codeword, e quindi l'intero blocco può essere
corretto.

28
PROTOCOLLI DATA LINK ELEMENTARI (3.3)
Prima di iniziare a parlare dei protocolli usati dal livello Data Link, è utile dare qualche definizione.
Un pacchetto rappresenta l'informazione che viene scambia tra lo strato Network e quello Data
Link della stessa macchina, oppure tra gli strati Network di macchine comunicanti.
Un frame rappresenta una porzione del flusso di bit prelevati dallo strato fisico il quale viene
appunto suddiviso in frame. Esso è composto da 4 campi: kind, seq, ack e info. I primi tre
contengono le informazioni di controllo, mentre l'ultimo contiene i dati da trasferire. I campi con le
informazioni di controllo vengono anche dette intestazione del frame (frame header). Il campo kind
specifica il tipo di frame e serve a capire se il frame contiene dati oppure solo informazioni di
controllo. Ciò serve perché alcuni protocolli distinguono i frame che contengono solo informazioni
di controllo da quelli che contengono anche dati. i campi seq e ack sono usati rispettivamente per i
numeri di sequenza e per l'acknowledgement. Il campo info contiene un singolo pacchetto. A questo
punto è utile enfatizzare la relazione che c'è tra pacchetto e frame.
Nella macchina “mittente” lo strato Network costruisce i pacchetti prendendo i messaggi dallo
strato Trasporto e gli aggiunge un'intestazione di tipo network (header dello strato network). Questo
pacchetto viene passato allo strato Data Link che lo include nel campo info del frame in uscita.
Quando il frame arriva a destinazione, lo strato Data Link della macchina “destinazione” estrae il
pacchetto dal frame e lo passa allo strato Network. In questo modo, lo strato Network agisce come
se le due macchine si stessero scambiando direttamente i pacchetti.

Protocollo 1: Simplex senza restrizioni o Heaven (3.3.1)


Questo protocollo, usato su canali simplex, cioè dove i dati sono trasmessi in una sola direzione, è
basato sulle ipotesi (non realistiche) che:

 i frame vengono trasmessi in una sola direzione;


 le peer entity del livello Network sono sempre pronte (cioè non devono mai attendere per
inviare o ricevere dal/al livello Data Link);
 non si conosce il tempo di elaborazione del livello Data Link;
 C'è spazio infinito per il buffering nel ricevitore;
 il canale fisico non commette mai errori.

Il protocollo consiste in due procedure: un mittente e un destinatario, entrambi a livello Data Link.

Mittente (loop infinito) Destinatario (loop infinito)

1. attende un pacchetto dal livello network; 1. attende evento:


2. costruisce un frame dati; * arriva il frame da livello fisico;
3. passa il frame al livello fisico; 2. estrae pacchetto;
4. torna al punto 1. 3. lo passa al livello network;
4. torna al punto 1.

Protocollo 2: Simplex Stop-and-Wait (canale half-duplex) (3.3.2)


Questo protocollo è basato sulle ipotesi non realistiche viste per il precedente, ma con una sola
differenza: in questo caso si suppone che il buffer nel ricevitore non sia infinito. Questa differenza

29
porta a dover rallentare opportunamente il mittente. Questo rallentamento non si può fare
utilizzando dei ritardi prefissati in quanto sarebbe troppo gravoso, perché dovrebbero essere
calibrati sul caso pessimo, che non sempre si verificherà. La soluzione consiste nell'invio, da parte
del destinatario, di una esplicita autorizzazione all'invio del prossimo frame. Questo tipo di
protocolli, nei quali il mittente attende un OK dal destinatario, vengono chiamati stop-and-wait.

Ecco uno schema del loro funzionamento:

Mittente (loop infinito) Destinatario (loop infinito)

 attende un pacchetto dal livello  attende evento:


network; * arriva il frame da livello fisico;
5. costruisce un frame dati; 9. estrae pacchetto;
6. passa il frame al livello fisico; 10. lo passa al livello network;
7. attende un evento: 11. invia un frame di ack (vuoto) al mittente;
*arriva un frame di ack (vuoto); 12. torna al punto 1.
8. torna al punto 1.

Si noti che, sebbene il traffico dati viaggi in una sola direzione (simplex), i frame viaggiano in
entrambe, dunque ci vuole un canale almeno half-duplex (c'è' alternanza stretta nelle due direzioni).

Protocollo 3: Simplex per canali Rumorosi (3.3.3)


In questo protocollo si assume che il canale possa fare errori. I frame (dati o ack) possono essere
danneggiati o persi completamente. Se un frame arriva danneggiato, l'HW di controllo del
checksum se ne accorge e informa il SW di livello data link; se il frame si perde del tutto,
ovviamente, la cosa non si rileva. Per ovviare a questo problema si introduce l'uso di un timer in
modo che, se il mittente non riceve l'ack di conferma ricezione da parte del destinatario entro la
scadenza del timer, invierà nuovamente il frame. Tuttavia, il solo timer non è sufficiente. Infatti
potrebbe verificarsi la seguente situazione:

 Il mittente invia il frame x al destinatario;


 Il destinatario riceve il frame x e invia un ack di avvenuta ricezione, ma questo ack si perde
completamente a causa di errori;
 il mittente, non ricevendo l'ack entro la scadenza del timer, invia nuovamente il frame x.
 ERRORE!!! Il livello network della destinazione riceve due copie di x.

Per risolvere questo inconveniente è necessario che il destinatario possa riconoscere gli eventuali
doppioni. Ciò si ottiene sfruttando il campo seq dell'header, dove il mittente metterà il numero di
sequenza del frame dati inviato. Fino a quando un frame non viene confermato, e' sempre lui ad
essere ritrasmesso, altrimenti e' il suo successore. Per il numero di sequenza è sufficiente 1 bit.

Dunque, sia mittente che destinatario useranno, come valori per i numeri di sequenza, la
successione
...01010101...
Il mittente trasmette i frame dati alternando 0 ed 1 nel campo seq e passerà a trasmettere il prossimo
frame solo quando riceve l'ack di quello precedente.
Il destinatario invia un frame di ack per tutti quelli ricevuti senza errori, ma passerà al livello

30
Network solo quelli con il numero di sequenza atteso.
Protocolli come questo, in cui il mittente aspetta un ack di conferma prima di trasmettere il
prossimo frame, si chiamano PAR (Positive Ack with Retransmission) o ARQ (Automatic Repeat
Request).

PROTOCOLLI SLIDING WINDOW O A FINESTRA SCORREVOLE (3.4)


Nei casi precedenti i frame di dati e quelli di ack viaggiano in una sola direzione, i primi in un senso
e gli altri in senso opposto. Pertanto possiamo affermare che esistono dei frame che viaggiano in
entrambe le direzioni. Volendo stabilire una comunicazione dati bidirezionale è necessario disporre
di due circuiti, il che ovviamente e' uno spreco di risorse. Un'idea migliore e' quella di usare un solo
circuito, nel quale far convivere tutte le esigenze.
Supponendo che la comunicazione sia fra A e B, si avra' che:

 nella direzione da A a B viaggiano i frame dati inviati da A a B e i frame di ack inviati da A


a B (in risposta ai frame dati inviati da B ad A);

 nella direzione da B a A viaggiano i frame dati inviati da B a A e i frame di ack inviati da B


a A (in risposta ai frame dati inviati da A ad B);

Frame dati da A a B Frame ack da A a B


A B

Frame dati da B a A Frame ack da B a A


A B

31
Il campo kind serve a distinguere fra i due tipi di frame, di dati e di ack, che viaggiano nella stessa
direzione.

In realtà esiste una soluzione migliore: se, quando si deve inviare un ack da B ad A, si aspetta un
po' finché e' pronto un frame dati che B deve inviare ad A, si puo' "fare autostop" e mettere dentro
questo frame dati anche le informazioni relative all'ack in questione. Questa tecnica si chiama
piggybacking (letteralmente, portare a spalle). Il campo ack serve proprio a questo scopo, infatti è il
campo in cui viene trasportato, se c'è, un ack. Questa tecnica consente un notevole risparmio di
banda utilizzata e di uso della CPU poiché, così facendo, le informazioni di ack non richiedono la
costruzione di un apposito frame (e quindi il tempo necessario alla creazione, al riempimento della
struttura, al calcolo del checksum, ecc.) né la sua trasmissione (e quindi l'uso di banda).
Tuttavia c'è un aspetto da non trascurare: per quanto può aspettare un frame su cui trasportare un
ack che è pronto e deve essere inviato? Non troppo, perché se l'ack non arriva in tempo il mittente
ritrasmetterà il frame anche se ciò non e' necessario. Dunque si stabilisce un limite al tempo di
attesa di un frame sul quale trasportare l'ack; trascorso tale tempo si crea un frame apposito nel
quale si mette l'ack.

I protocolli che vedremo ora appartengono alla classe dei protocolli Sliding Window (finestra
scorrevole), sono full-duplex (per i dati), sfruttano il piggybacking e sono più robusti di quelli
precedenti.

Protocollo 4: Finestra Scorrevole a 1 bit (3.4.1)


Si tratta di un protocollo di tipo stop-and-wait in cui sia mittente che destinatario usano una finestra
scorrevole di dimensione uno. Il funzionamento e' il seguente:

Mittente Destinatario

 il mittente, quando invia un frame, fa  quando arriva un frame corretto,


partire un timer; senza errori, invia un ack col
corrispondente numero di sequenza;
 se prima che scada il timer arriva un
ack con lo stesso numero di sequenza  se il frame non e' un duplicato lo
del frame che si sta cercando di passa al livello network e avanza la
trasmettere, si avanza la finestra e si finestra.
passa a trasmettere il frame successivo;

 se arriva un ack diverso o scade il


timer, si ritrasmette il frame.

La principale novità, rispetto al protocollo 3, è che l'ack è etichettato col numero di sequenza del
frame a cui si riferisce. I valori dell'etichetta possono solo essere 0 e 1, come nel protocollo 3.

Il peggio che può succedere e' la ritrasmissione inutile di qualche frame, ma questo protocollo e'
sicuro.

32
Protocollo 5: Go-Back-n (3.4.2)
Se il tempo di andata e ritorno del segnale (round-trip time) è alto, come ad esempio nel caso dei
canali satellitari nei quali e' tipicamente pari a 500 + 500 msec, c'è' un enorme inefficienza con i
protocolli stop-and-wait, perché si sta quasi sempre fermi ad aspettare l'ack. Per migliorare le cose,
si può' consentire l'invio di un certo numero di frame anche senza aver ricevuto l'ack del primo.
Questa tecnica va sotto il nome di pipelining. Questo pero' pone un serio problema perché se un
frame nel mezzo della sequenza si rovina molti altri frame vengono spediti prima che il mittente
sappia che qualcosa e' andato storto. Il primo approccio al problema e' quello del protocollo go-
back-n che funziona così:

 se a destinazione arriva un frame danneggiato o con un numero di sequenza non


progressivo, il destinatario ignora tale frame e tutti i successivi, non inviando i relativi ack.
Ciò' corrisponde ad una finestra di dimensione 1 nel ricevitore, che quindi accetta i frame
solo nell'ordine giusto;
 il mittente ad un certo punto va in time-out sul frame sbagliato, e poi su tutti quelli
successivi (scartati dal destinatario), e quindi provvede a ritrasmettere la sequenza di frame
che inizia con quello per il quale si e' verificato il time-out.

Si noti che il mittente deve mantenere in un apposito buffer tutti i frame non confermati per poterli
eventualmente ritrasmettere. Se il buffer si riempie, il mittente deve bloccare il livello network fino
a che non si ricrea dello spazio. Inoltre, vi e' spreco di banda se il tasso d'errore è alto e/o il time-out
è lungo.

33
Protocollo 6: Selective Repeat (ripetizione selettiva) (3.4.3)
Questo approccio è più' efficiente, ed e' chiamato selective repeat:

 il destinatario mantiene nel suo buffer tutti i frame ricevuti successivamente ad un eventuale
frame rovinato; non appena questo arriva nuovamente (senza errori), esso e tutti i successivi
frame contigui che il destinatario ha mantenuto nel buffer vengono consegnati al livello
network;

 per ogni frame arrivato bene, il destinatario invia un ack col numero piu' alto della sequenza
completa arrivata fino a quel momento;

 quando si verifica un timeout, il mittente rispedisce il frame corrispondente.

In questo protocollo mittente e destinatario devono entrambi gestire un buffer: il mittente per
mantenervi i frame non confermati, il destinatario per mantenervi i frame successivi ad un errore.
L'utilizzo di questo protocollo permette di risparmiare molta banda.

34
CAPITOLO 4

SOTTOSTRATO MAC (MEDIUM ACCESS CONTROL)

Come spiegato nel Capitolo 1, esistono due tipi di reti: quelle che utilizzano connessioni punto-
punto e quelle che usano canali broadcast. Questo capitolo si occupa delle reti broadcast e dei loro
protocolli. In qualsiasi rete broadcast il problema principale è la scelta dell'entità che dovrà
acquisire il diritto di utilizzo del canale in caso di competizione. Per risolvere questo problema sono
stati sviluppati molti protocolli che verranno esaminati in questo capitolo.
I canali broadcast qualche volta vengono chiamati anche canali multiaccesso o canali ad accesso
casuale.

Il Sottostrato MAC è un sottostrato del livello Data Link in cui si trovano i protocolli che si
occupano di assegnare l'uso del canale multiaccesso. Esso è importante soprattutto nelle reti LAN in
quanto molte si servono proprio di un canale multiaccesso per la comunicazione. Al contrario le
WAN (ad eccezione delle reti satellitari) preferiscono le connessioni punto-punto.
I protocolli del sottostrato MAC sono usati sopratutto nelle LAN, ma anche nelle parti di WAN
basate su satelliti.
Il problema principale e' come allocare il canale ai vari utenti in competizione. Ci sono due
meccanismi fondamentali:
•allocazione statica, che viene decisa in anticipo;
•allocazione dinamica, che si adatta alle esigenze di ogni momento.

Assegnazione statica del canale in LAN e WAN


L'allocazione statica prevede la suddivisione del canale fra gli N utenti, ciascuno dei quali riceve di
conseguenza una frazione della banda totale. Si puo' fare, ad esempio, con tecniche quali FDM,
allocando a ciascun utente una banda di frequenze distinta da quella degli altri utenti. Cio' va bene
se il numero di utenti non varia rapidamente e se tutti trasmettono con un data rate piu' o meno
costante, pero' in genere comporta vari problemi:
•si verifica uno spreco di banda quando uno o piu' utenti non trasmettono;
•poiché il traffico e' in generale molto bursty, i picchi che si verificano non possono essere gestiti
solamente con la sottobanda allocata.

Assegnazione dinamica del canale LAN e MAN


Viceversa, l'allocazione dinamica cerca di adeguarsi alle esigenze trasmissive, in modo da
soddisfarle al meglio. Ci sono alcune assunzioni da fare:
1. modello a stazioni: ci sono N stazioni indipendenti, ognuna delle quali genera nuovi frame
per la trasmissione. La probabilità di generare un frame in un intervallo di tempo T e'
uguale a pT, dove p e' una costante e rappresenta il tasso d'arrivo dei nuovi frame. Quando
un frame e' generato, la stazione si blocca finché esso non e' trasmesso;
2. singolo canale: un singolo canale, e null'altro, e' disponibile per le comunicazioni; tutte le
stazioni vi possono trasmettere e da esso possono ricevere, e tutte sono ad uguale livello;
3. collisioni: se due frame vengono trasmessi contemporaneamente, si sovrappongono ed il
segnale risultante e' rovinato (si verifica collisione):
• tutte le stazioni possono rilevare la collisione;
• i frame devono essere ritrasmessi;
• non ci sono altri tipi di errori;
4. tempo: puo' essere gestito in due modi:
•continuous time: la trasmissione di un frame puo' iniziare in un qualunque istante;
•slotted time: il tempo e' diviso in intervalli discreti (slot). Uno slot puo' contenere 0, 1
oppure piu' di un frame. Cio' corrisponde ad uno slot vuoto, ad uno slot con un frame e ad
uno slot in cui si verifica una collisione. La trasmissione può iniziare solo all'inizio di uno
35
slot;
5. ascolto del canale: ci sono due possibilità,
•carrier sense (tipico delle LAN): le stazioni, prima di trasmettere, ascoltano il canale; se e'
occupato non cercano di trasmettere;
•no carrier sense (tipico dei canali via satellite, nei quali vi e' un elevato round trip time): le
stazioni non ascoltano, trasmettono senz'altro; si preoccuperanno dopo di vedere se c'e' stata
una collisione.

Protocolli ad Accesso Multiplo (4.2)


Esistono diversi algoritmi per assegnare un canale ad accesso multiplo. Di seguito verranno
esaminati alcuni dei più importanti spiegandone il funzionamento e l'utilizzo.

Aloha (4.2.1)
Questo protocollo fu ideato da Norman Abramson e dai suoi colleghi dell'Università delle Hawaii
per risolvere il problema dell'assegnazione del canale. Esso utilizza la trasmissione radio broadcast
basata su stazioni terrestri ma può essere applicato a qualsiasi sistema dove utenti non coordinati
competono tra loro per l'utilizzo di un canale condiviso.
Esistono due versioni di Aloha: Aloha puro e Aloha slotted

Aloha Puro
Questo protocollo permette agli utenti di trasmettere ogni volta che hanno dati da inviare. Nel caso
di collisioni, grazie alla proprietà di feedback, il trasmettitore potrà sempre scoprire, ascoltando il
canale, se il suo frame è andato distrutto. Se ciò non fosse possibile, si adotta un sistema di
acknowledge. Se il frame è stato distrutto, il trasmettitore rimane in attesa per un tempo casuale
prima di ripetere la trasmissione. I frame del sistema Aloha hanno la stessa lunghezza. Ogni volta
che due frame tentano di occupare contemporaneamente il canale si verifica una collisione che
danneggia i due frame. Basta che il primo bit di un frame si sovrapponga all'ultimo bit di un altro
frame per considerarli danneggiati. Un frame non entra in collisione quando nessun altro frame
viene trasmesso nello stesso intervallo di tempo. Tuttavia questo non può essere garantito perché in
un sistema Aloha Puro una stazione non ascolta il canale prima di iniziare a trasmettere e non c'è
modo di sapere se un altro frame è già stato inviato. La relazione tra il traffico che si presenta e la
capacità di trasporto fa si che si possa sperare di utilizzare al massimo il 18% del canale.

Slotted Aloha
Questo metodo, ideato da Roberts nel 1972, permette raddoppia la capacità di un sistema Aloha.
L'idea è di dividere il tempo in intervalli discreti dove ogni intervallo corrisponde a un frame.
Rispetto all'Aloha Puro, ogni stazione non può inviare il frame ogni volta che vuole, ma deve
attendere l'inizio dell'intervallo (slot) successivo per poter trasmettere. In questo modo le collisioni
vengono notevolmente limitate e le prestazioni salgono ad un massimo del 37% di utilizzo del
canale.

36
Protocolli ad Accesso Multiplo con Rilevamento della Portante (4.2.2)
Questi sono i protocolli in cui le stazioni rimangono in ascolto della portante (ossia di una
trasmissione). In questo modo sono in grado di rilevare le azioni intraprese dalle altre e adattare di
conseguenza il proprio comportamento, permettendo di raggiungere un livello di utilizzo del canale
nettamente superiore al 37% ottenuto con Slotted Aloha.

Di seguito vengono descritti alcuni di questi protocolli:

CSMA (Carrier Sense Multiple Access) 1 – Persistente


Quando una stazione deve trasmettere dati, ascolta prima il canale per vedere se è occupato. Se così
fosse, aspetta finché questo non si libera. Non appena si accorge che il canale è libero, trasmette il
frame e, in caso di collisione, rimane in attesa per un intervallo di tempo casuale prima di ritentare
la trasmissione. Il protocollo è chiamato 1-persistente perché trasmette con una probabilità di 1
quando trova il canale libero. Il ritardo di propagazione influisce notevolmente sulle prestazioni del
protocollo. Infatti c'è una piccola possibilità che, subito dopo l'inizio di una trasmissione da parte di
una stazione, un'altra stazione sia pronta ad inviare dati e tenga sotto controllo il canale. Se il
segnale della prima stazione non ha ancora raggiunto la seconda, questa potrebbe ritenere il canale
libero e iniziare a trasmettere i propri dati creando così una collisione. Più è lungo il ritardo di
propagazione, più diventa importante l'effetto e peggiori saranno le prestazioni del protocollo. La
collisione può verificarsi anche se il ritardo di propagazione è uguale a 0. Infatti, se due stazioni
stanno attendendo che una terza finisca di trasmettere, quando ciò accade, entrambe le stazioni che
erano in attesa vedranno libero il canale ed inizieranno a trasmettere generando una collisione.

CSMA Non Persistente


Prima di trasmettere, ogni stazione controlla il canale: Se nessuno sta trasmettendo, inizia ad inviare
dati, altrimenti non controlla continuamente il canale, ma attende per un intervallo di tempo casuale.
In questo modo si migliora l'uso del canale, ma si allungano i ritardi.

CSMA P – Persistente
Questo protocollo si applica ai canali divisi per intervalli di tempo. Quando una stazione è pronta a
trasmettere, controlla il canale. Se lo trova libero trasmette con una probabilità p, altrimenti rimanda
con probabilità q = 1 – p. Se il canale risulta occupato anche dopo questo intervallo di tempo, la
stazione rimanderà nuovamente. Viene usato nello Slotted Aloha.

CSMA \ CD
Un ulteriore miglioramento si ottiene consentendo ad ogni stazione di annullare la propria
trasmissione in caso di collisione. Quindi se due stazioni che tengono sotto controllo il canale
iniziano a trasmettere contemporaneamente, entrambe rileveranno immediatamente la collisione e la
trasmissione verrà interrotta. Il funzionamento è il seguente:
all'istante t0 una stazione ha finito di trasmettere. A questo punto, qualsiasi altra stazione può tentare
di trasmettere dati. Se due o più stazioni decidono di trasmettere contemporaneamente, si verifica
una collisione. Quest'ultima si rileva confrontando il segnale inviato con quello ricevuto.
Il CSMA \ CD è caratterizzato da periodi di contesa, alternati a periodi di trasmissione, alternati a
periodi inattivi, che si presentano quando tutte le stazioni sono “silenziose”. In questo protocollo è
fondamentale la determinazione del periodo di contesa. Il tempo minimo per rilevare una collisione
è pari al tempo impiegato dal segnale per propagarsi da una stazione all'altra. Tuttavia sarebbe
errato considerare questo come periodo di contesa. Infatti, supponiamo che sia  il tempo
impiegato dal segnale per propagarsi dalle due stazioni più lontane. Nell'istante t0 la stazione inizia
a trasmettere e a − ε (un istante prima che il segnale arrivi alla destinazione) anche l'altra
stazione inizia a trasmettere. Il picco di rumore causato dalla collisione impiega un tempo
2− ε per tornare indietro alla stazione originale. Pertanto, una stazione può essere certa di aver

37
assunto il controllo del canale solo se non rileva alcuna collisione per un tempo pari a 2

Protocolli Senza Collisioni


Questi protocolli vengono utilizzati nei periodi di contesa.

Protocollo a Mappa di Bit


In questo protocollo ogni periodo di contesa è composto da N intervalli. Ad ogni intervallo
corrisponde una stazione. Se una stazione ha un frame da iniziare, trasmette un bit 1 durante
l'intervallo di contesa a lui concesso. A nessun'altra stazione è concesso di trasmettere durante
questo intervallo. Quindi ogni stazione ha la possibilità di trasmettere durante il proprio intervallo.
Una volta trascorsi gli N intervalli, ogni stazione sa quali sono le stazioni che vogliono trasmettere;
a questo punto le stazioni incominciano a trasmettere in ordine numerico. Non ci sarà quindi mai
collisione. Dopo che l'ultima stazione ha trasmesso, inizia un altro periodo di contesa di N intervalli.
Se una stazione diventa pronta quando il suo intervallo di contesa è scaduto, deve rimanere in
silenzio fino a quando le altre non hanno avuto la possibilità di trasmettere e la mappa di bit non
ricomincia da capo. Lo svantaggio di questa tecnica è che, per la trasmissione, viene favorita la
stazione che ha un numero elevato rispetto a quelle che hanno un numero basso. Si ha inoltre il
problema che per ogni stazione bisogna prevedere un bit di controllo; quindi risulta problematico
nel caso di molte stazioni.

Conteggio Binario
Con questa tecnica una stazione che desidera trasmettere, deve comunicare il proprio indirizzo a
tutte le altre stazioni. I bit che si trovano nella stessa posizione ma su indirizzi di stazioni diverse
sono elaborati mediante l'operatore logico booleano OR. Per evitare i conflitti si applica una regola
di arbitraggio. La stazione rinuncia non appena si accorge di essere stata sovrascritta da un 1 nella
posizione di bit di ordine elevato che, nel proprio indirizzo, vale 0. Anche in questo caso vengono
privilegiate quelle stazioni che hanno un indirizzo elevato. Per esempio, se le stazioni 0010, 0100,
1001 e 1010 vogliono il canale, durante il primo tempo di bit trasmettono rispettivamente 0, 0, 1 e
1; il risultato ottenuto unendo questi valori binari mediante l'operatore logico OR è 1. Le stazioni
0010 e 0100 notano 1'1 e capiscono che una stazione con un numero più grande sta concorrendo per
il canale, perciò si ritirano dal turno corrente. Le stazioni 1001 e 1010 invece vanno avanti.

38
Protocolli a Contesa Limitata (4.2.4)
Le due strategie generali - gestione delle collisioni (come nel CSMA) e "non gestione" delle
collisioni (come nell'Aloha) - hanno i loro pro e contro in linea di massima opposti per quel che
riguarda il ritardo sulla linea con carico basso e l'efficienza della linea con carico alto (i protocolli
senza collisione hanno una maggiore efficienza in caso di carico alto, mentre quelli "non collisione"
hanno un ritardo minore se il carico e' basso).
Il protocollo di "attraversamento adattabile dell'albero" prevede che durante il primo bit del
pacchetto di contesa tutti i nodi possano tentare di acquisire il canale. Se un solo sistema tenta di
trasmettere e ci riesce, allora non ci sono problemi. Se avviene una collisione, allora durante lo slot
successivo, solo una meta' dei nodi viene autorizzata a "tentare" la trasmissione. Si procede
"dimezzando" di volta in volta il gruppo autorizzato al tentativo fino a che non si arriva ad
autorizzare alla trasmissione un solo nodo.
Il protocollo dell'urna e' simile a quello dell'attraversamento adattabile dell'albero; in pratica
possiamo immaginare che le stazioni siano disposte in cerchio, ed una "finestra" scorra intorno.
Sono autorizzati a trasmettere i soli n nodi interni alla finestra; se avviene una trasmissione corretta
o non avviene alcuna trasmissione, la finestra si sposta sulle successive n stazioni, altrimenti la
finestra viene ridotta a n/2 stazioni e si ritenta la procedura, fino al termine delle collisioni (somiglia
un po' al token passing, con la differenza che questo tipo di token abilita piu' di un nodo).
Chiaramente a livello software resta da decidere "quando" far tornare alto il valore di n (per
esempio raddoppiare le dimensioni della finestra quando non vi siano state collisioni per due slot
consecutivi).

39
Protocolli Lan Wireless (4.2.6)
Una delle principali caratteristiche delle LAN wireless e' data dall'inefficacia delle tecniche di
Carrier Sensing nel determinare se il mezzo è accessibile.
Siano date tre stazioni A, B, C con i raggi d’azione raffigurati, ed A stia trasmettendo a B: Se ora C
ascolta il mezzo, lo troverà libero e sarà convinta di poter trasmettere a B; cominciando a
trasmettere disturberà la trasmissione di A, impedendo a B di riceverla; sia A che C saranno
costrette a ritrasmettere. Questo e' noto come il problema della stazione nascosta. Esiste anche il
problema inverso: si supponga che B stia trasmettendo ad A e che C voglia trasmettere a D:
Ascoltando il mezzo, C sentirà la trasmissione di B e concluderà erroneamente di non poter
trasmettere; invece, essendo D fuori della portata di B, ed A fuori della portata di C, le due
trasmissioni potrebbero avvenire parallelamente senza interferenze. Questo è noto come il problema
della stazione esposta. Ragionamenti analoghi valgono per le tecniche di Collision Detection (ad
ogni modo non applicabili alle trasmissioni radio, tipicamente half-duplex). Se ne conclude che non
è possibile utilizzare lo stesso protocollo usato da Ethernet, ossia CSMA/CD, per il controllo
dell’accesso al mezzo.
In risposta al problema della stazione nascosta, sono state elaborate delle eleganti tecniche di
Collision Avoidance: l'idea di base consiste nello stimolare il destinatario nell'emettere un breve
frame, in modo da informare le stazioni ad esso vicine di non interferire per l'intera durata della
trasmissione che sta per avvenire. Il protocollo è il seguente:
ACB
BACD
Quando A vuole trasmettere un frame a B, prima invia un frame RTS (Request To Send), al quale B
risponde con un frame CTS (Clear To Send). Alla ricezione di CTS, A può cominciare a
trasmettere.
Entrambi i frame RTS e CTS contengono il tempo mancante prima della fine della trasmissione.
Ogni stazione nel raggio d’azione di A o B ricevera' uno o entrambi i frame, ed imposterà il proprio
indicatore di Carrier Sensing Virtuale, chiamato NAV (Network Allocation Vector), per la durata
indicata dal frame.
Il NAV e' un contatore che viene decrementato nel tempo, fino a 0; quando NAV e' diverso da zero,
vuol dire che una trasmissione e' in atto nelle vicinanze.

CSMA/CA
Il precedente protocollo funziona bene solo nel caso teorico in cui le stazioni abbiano tutte lo stesso
raggio d’azione e i frame RTS e CTS possano essere scambiati in tempo infinitesimo. In caso
contrario, le collisioni possono ancora avvenire, e quindi tale protocollo viene, in genere, affiancato
a tecniche di Carrier Sensing tradizionali e di acknowledgement a livello di MAC sublayer. Il
Carrier Sensing riduce la probabilita' di collisioni dovute a tentativi di acquisizione contemporanea
del mezzo, ed e' tanto piu' efficace quanto piu' ci si avvicina alla situazione ideale, ma piuttosto
frequente, di stazioni tutte comprese nei rispettivi raggi d’azione.
L’acknowledgement a livello di MAC sublayer ha lo scopo di ridurre i tempi di ritrasmissione dei
frame danneggiati, anticipando notevolmente un compito normalmente affidato al livello di
trasporto.

40
MACA e MACAW
Uno dei primi protocolli progettati per le LAN wireless è stato MACA (Multiple Access with
Collision Avoidance). Non vi e' ascolto del canale (infatti manca CS nella sigla) e si cerca di evitare
le collisioni anziché rilevarle.

Non si impiega l’ascolto del canale sulla base delle seguenti considerazioni:

• il canale libero per il trasmettitore non significa che lo sia anche per il ricevitore (e quindi non e'
detto che la trasmissione abbia successo: problema della stazione nascosta);

• il canale occupato per il trasmettitore non significa che lo sia anche per il ricevitore (e quindi non
e' detto che la trasmissione non sia possibile: problema della stazione esposta);

• nell’ambito delle trasmissioni radio apparecchiature full duplex, in grado di ricevere e trasmettere
contemporaneamente, sono molto costose da realizzare.
L’idea di fondo e' semplice: il trasmettitore invia un breve messaggio al ricevitore chiedendogli
l’autorizzazione a trasmettere. Il ricevitore, se puo' accettare la trasmissione,risponde con
messaggio di via libera. Solo se riceve tale messaggio il trasmettitore inizia ad inviare i dati.

Il funzionamento e' il seguente:

• A invia a B un piccolo frame (30 byte) chiamato RTS (Request To Send), contenente la lunghezza
del frame dati vero e proprio che dovra' essere trasmesso;

• B, se non e' impegnato nella ricezione di altri dati, risponde ad A con un altro piccolo frame,
chiamato CTS (Clear to Send) che lo autorizza a trasmettere. Anche il frame CTS
riporta la lunghezza del frame dati che verra' trasmesso da A, ricopiata dal frame RTS.

Le altre stazioni si comportano nel seguente modo:

• Tutte le stazioni che ricevono solo il frame RTS (situate quindi entro la portata di A ma non entro
quella di B) devono rimanere in silenzio per un tempo che consenta al frame CTS di raggiungere A,
dopodiché possono trasmettere;

• Tutte le stazioni che ricevono solo il frame CTS (situate dunque entro la portata di B ma non entro
quella di A) devono rimanere in silenzio per il tempo necessario alla trasmissione del frame dati (la
cui lunghezza trovano nel frame CTS);

• Le stazioni che ricevono sia il frame RTS che il CTS (situate entro la portata sia di A che di B)
applicano ambedue le regole sopra viste.

Nonostante tutte le precauzioni prese, le collisioni possono ugualmente avvenire: ad esempio due
stazioni A e B, che non si sentono a vicenda, inviano un RTS ad una terza stazione C che si trova a
portata di entrambe: in C si verifica una collisione. Oppure una stazione A invia un RTS a C mentre
esso viene raggiunto da un CTS originato da una stazione che si trova fuori dalla portata di A. Di
nuovo, in C si verifica una collisione.
Chi ha trasmesso un RTS si accorge se esso provoca una collisione perché non riceve il
corrispondente CTS. In tal caso il trasmettitore attende un tempo casuale, che aumenta al crescere
del numero di collisioni, e riprova.
Va comunque notato che le collisioni relative ai soli frame RTS e CTS, che sono molto più piccoli
dei frame dati, rappresentano un fenomeno meno grave delle collisioni che coinvolgono gli interi
frame dati. In MACA queste ultime non possono avvenire.
41
Una successiva versione del protocollo, chiamata MACAW (MACA per Wireless), introduce
alcune ulteriori migliorie, fra le quali:

• Invio di un breve frame ACK dal ricevitore al trasmettitore previa ricezione corretta del frame
dati; questo permette di velocizzare la ritrasmissione (altrimenti sarebbero i livelli superiori a
doversene occupare) del frame in caso di errori trasmissivi, non infrequenti nel caso dei mezzi
wireless;

• Invio da parte del trasmettitore A, dopo la ricezione del CTS, di un breve frame DS (Data Send)
contenente la dimensione del frame dati che sarà trasmesso, subito prima di iniziare a trasmettere il
frame dati stesso. Questo permette alle stazioni fuori dalla portata del ricevitore di evitare di inviare
ad A degli RTS prima che A abbia terminato la trasmissione.

• Accorta gestione distribuita degli algoritmi di aumento del tempo d’attesa dopo un insuccesso, in
modo da garantire equità a tutte le stazioni.

Come abbiamo già detto, i protocolli MACA e MACAW non ascoltano il canale per decidere
in merito alla trasmissione, ma si basano esclusivamente sullo scambio di messaggi di
controllo. Tuttavia esiste un ulteriore protocollo, chiamato CSMA/CA (Carrier Sense Multiple
Access with Collision Avoidance), utilizzato nello standard IEEE 802.11, che vedremo fra
breve e che utilizza, a fianco di tecniche simili a quelle di MACAW, anche l’ascolto del canale
prima di trasmettere.

42
ETHERNET
E' uno standard per un protocollo CSMA/CD di tipo 1-Persistent.

Cablaggio

Si utilizzano 4 tipi di cablaggi:

 il primo Thinck Ethernet (e più vecchio) è 10base5. Le connessioni sono realizzate


mediante spine a vampiro e permette di collegare fino a 100 macchine. Tale notazione
indica che il cavo opera a 10 Mbps, utilizza un sistema di segnali a banda base e può
sopportare segmenti lunghi fino a 500 m. In questo tipo di cablaggio, un transceiver è fissato
saldamente intorno al cavo per mantenere stabile il contatto con il nucleo interno, il
transceiver contiene i circuiti elettronici che gestiscono il rilevamento della portante e il
rilevamento delle collisioni. Quando rileva una collisione il transceivre invia un segnale
lungo il cavo a tutti gli altri transceiver . Un cavo transceiver collega lo stesso ad scheda
interfaccia di rete installata nel computer. Il cavo del transceiver può essere lungo fino a 50
m e contiene 5 doppini schermati singolarmente. 1 doppino è per i dati in uscita , 1 per
quelli in entrata, due sono utilizzati per i segnali di controllo in ingresso e in uscita, l’ultimo
permette al computer di alimentare i circuiti del transceiver. La scheda di rete installata nel
computer contiene un chip che trasmette e riceve i frame, e si occupa di assemblare i frame
di dati nel giusto ordine.

 Il secondo tipo di cablaggio, in ordine di tempo è il 10base2. Le connessioni sono realizzate


usando cavi thin e connettori BNC standard che formano giunzioni a “T”. Ogni segmento
non può essere più lungo di 185 m e può sopportare non più di 30 macchine. Utilizzando
questo tipo di cablaggio la scoperta di guasti è abbastanza difficile. Con questo tipo di
cablaggio, la connessione al cavo passa attraverso un connettore BNC. Le varie stazioni
sono collegate in cascata sul segmento (daisy-chain). I circuiti elettronici del transceiver si
trovano nella scheda di rete del pc.

Per questo motivo sono state introdotte alcune tecniche per rintracciare i guasti, come il
seguente.Ad esempio viene lanciato un impulso di forma nota lungo il cavo. Se l’impulso incontra
un ostacolo o raggiunge la fine del cavo, torna indietro sotto forma di eco. Cronometrando
l’intervallo di tempo trascorso tra la trasmissione dell’impulso e la ricezione dell’eco è possibile
individuare l’origine dell’eco.

 Questi problemi hanno indotto i sistemi verso un differente schema di cablaggio, dove ogni
stazione via cavo è collegata ad un concentratore centrale chiamato hub. Per queste
connessioni sono utilizzati i doppini telefonici. Questo schema è chiamato 10baseT. Con
10base-T non c’è nessun cavo condiviso : c’è solo l’hub al quale ogni stazione si collega
attraverso un cavo dedicato. Con questo tipo di cablaggio è semplice aggiungere o
rimuovere una stazione , inoltre è facile individuare interruzioni nella linea. Lo svantaggio è
rappresentato dalla lunghezza dei cavi che partano dall’hub. La lunghezza massima
dell'intera rete fra qualunque coppia di stazione non deve superare i 2,5 Km. Fra qualunque
coppia di stazioni non devono trovarsi più di 4 ripetitori. La rete supporta al massimo 1024
stazioni.

 Il quarto tipo di cablaggio è 10base-F che utilizza le fibre ottiche. Esso offre una eccellente
immunità alle interferenze.

43
Il protocollo del sottostrato Mac Ethernet
Abbiamo due tipi di frame. Quello originale Dix e quello 802.3. Nel primo, ogni frame inizia con un
campo preamble di 8 byte. Il frame contiene due indirizzi: uno rappresenta la destinazione e l’altro
la sorgente. Il bit di ordine più elevato nel campo Destination Address è 0 per gli indirizzi ordinari
oppure 1 per gli indirizzi di gruppo. Un’altra caratteristica dell’indirizzamento è legata al bit 46,
usato per distinguere gli indirizzi locali da quelli globali. Il campo successivo, Type, indica al
ricevitore cosa deve fare il frame, in maniera tale che il kernel sappia quale protocollo dovrà gestire
il pacchetto. Successivamente troviamo il campo Data che arriva fino a 1500 byte e contiene il
payload (quella parte dei Dati priva dell'header e del checksum) del livello superiore.
Per distinguere i frame validi da quelli non validi, Ethernet richiede che i frame validi siano lunghi
almeno 64 byte. Se la parte di dati è lunga meno di 64 byte, il campo Pad viene utilizzato per
riempire il frame ovvero per imporre una lunghezza minima. Ciò serve per il seguente motivo:
impedire a una stazione di completare la trasmissione di un frame breve prima che il primo bit ha
raggiunto la fine del cavo, dove potrebbe collidere con un altro frame.

Ad esempio al tempo 0, la stazione A, che si trova ad una estremità della rete, invia un frame. Sia τ
il tempo di propagazione del frame affinché raggiunga l’altra estremità del frame. Appena prima
che il frame aggiunga l’altra estremità al tempo τ-ε, la stazione B incomincia a trasmettere. Quando
si accorge di ricevere più potenza di quella emessa, B capisce che è avvenuta una collisione e
interrompe la trasmissione e genera un burst di rumore a 48bit per avvisare tutte le altre stazioni.
All’istante 2τ anche il trasmettitore vede il burst di rumore e interrompe la trasmissione, aspetta
dopo un tempo casuale prima di ritentare. Questo avviene perché la lunghezza minima del frame è
di 64byte. Se si inviasse un frame con lunghezza inferiore a 64byte accadrebbe che il trasmettitore
non rileverebbe il burst di rumore, e quindi che il frame che ha inviato è arrivato a destinazione.
L’ultimo campo è il cheksum a 32bit. Esso è in grado di rilevare gli errori ma non di correggerli.

Nel caso di 802.3 è stato introdotto quando IEEE ha introdotto lo standard Ehernet. Esso ha alcune
differenze rispetto al frame Dix: il campo Preamble è stato utilizzato come delimitatore di inizio
frame, il campo Lenght sostituisce type.

Codifica Manchester
Per evitare errori di stringhe di bit non si può distinguere tra segnale nullo (0 Volt) associato al bit 0
e segnale nullo linea libera.
Per risolvere il problema che si ha quando ricevitore e trasmettitore hanno velocità di clock diverse,
e quindi possono andare fuori sincronia facendo perdere l’informazione del punto in cui iniziano i
bit, sono state studiate due tecniche chiamate codifica Manchester e codifica Manchester
differenziale. Con la prima, ogni periodo di bit è diviso in due intervalli uguali. L’1 binario è inviato
scegliendo un livello basso durante il secondo. Lo schema contrario è utilizzato per trasmettere lo 0
binario. Con questo modo di procedere si ha la certezza che ogni periodo di bit ha una transizione
nel punto centrale, caratteristica che aiuta il ricevitore a sincronizzarsi con il trasmettitore, lo
svantaggio della codifica Manchester è che occupa il doppio della banda della codifica binaria

44
elementare, perché gli impulsi sono lunghi la metà. In altre parole, la codifica di Manchester
prevede una transizione del valore del segnale nel mezzo di ogni bit, zero o uno che sia. Quando c'è
1 il segnale è alto-basso, mentre quando è 0 il segnale è basso-alto.

Codifica Manchester

Nella codifica Manchester differenziale, derivato dalla codifica Manchester, il bit 1 è indicato
dall’assenza di una transizione all’inizio di un intervallo, il bit 0 è indicato dalla presenza di una
transizione all’inizio dell’intervallo.

codifica Manchester differenziale

In entrambi i casi c’è una transizione nel punto centrale. Esso richiede dispositivi più complessi ma
offre una maggiore immunità ai rumori.

45
Ethernet Commutata
Dato il modo di operare delle reti Ethernet, è facile comprendere quanto uno switch possa essere
efficiente nel risolvere i problemi di traffico, fornendo più “corsie” ai dati che viaggiano, rispetto
alle reti dove la banda è condivisa da tutti i computer. Gli switch svolgono la stessa funzione degli
hub, ma sono più potenti e intelligenti. In primo luogo, offrono una larghezza di banda maggiore
agli utenti, perché la banda non è condivisa,ma dedicata: se si tratta di 10 Mbps, ogni utente ha a
disposizione i propri 10 Mbps, da non dividere con nessuno.
Inoltre uno switch invia i pacchetti di dati solo alle porte specifiche dei destinatari, questo avviene
perché “legge” le informazioni con l'indirizzo di ogni pacchetto. Per isolare la trasmissione dalle
altre porte, lo switch stabilisce una connessione temporanea tra la sorgente e la destinazione,
chiudendola al termine della conversazione.

Fast Ethernet
Poco dopo l'introduzione della connessione a 10Mbps, la novità non fece più effetto, e si cercò di
aumentarne la velocità. Nel 1992 la IEEE riunì il comitato 802.3, incaricandolo di creare una Lan
più veloce. Il risultato fu 802.3u, meglio conosciuta come Fast Ethernet.
L’idea base è quella di mantenere il formato di tutti i vecchi frame, le interfacce e le regole
procedurali, riducendo il tempo di trasferimento di ogni bit da 100nsec a 10nsec. Con Fast Ethernet
si usò esclusivamente il cablaggio 100base-T, quindi tutti i sistemi utilizzano hub e commutatori.
Un’altra scelta importante fu la scelta dei cavi che Fast Ethernet doveva supportare. Una possibile
soluzione fu il doppino di categoria 3, vantaggioso perché la maggior parte degli edifici aveva
almeno quattro doppini di categoria 3. Lo svantaggio principale è la sua incapacità di trasportare
segnali di 200 megabaund (100Mbps con codifica Manchester) per 100 m. Mentre i doppini di
categoria 5 potevano facilmente arrivare ai 100 m, le fibre riuscivano a coprire distanze superiore.
Ecco i tipi di cavi utilizzati:
 100base-T4: utilizza cavi UTP di categoria 3; un segmento è lungo al massimo 100 m, ed
ha una velocità di segnali di 25MHz. Utilizzando la codifica Manchester il 100base-T4
richiede l’uso di quattro doppini. L’unico problema è che il sistema telefonico utilizza un
cablaggio di quattro doppini per cavo, quindi non si potrebbe più disporre del telefono. Con
clock moderni e distanze piccole la codifica Manchester non è più necessaria. Inoltre
vengono trasmessi segnali ternari, cioè durante un solo periodo di clock il cavo può
contenere i valori 0, 1, 2. Con tre doppini dedicati alla trasmissione è possibile trasmettere
3
un simbolo qualunque in un alfabeto da 27 ( 3 ).

 100base-TX: questo modello si basa su cavi UTP di categoria 5. Sono utilizzati solo due
doppini per stazione, uno diretto all’hub e l’altro proveniente dall’hub. Oltre ad approfittare
della più elevata qualità dei cavi, questa implementazione trae vantaggio dalla codifica
4B/5B del segnale, più complessa della codifica Manchester, ma dalle prestazioni più alte. In
questo tipo di codifica ogni serie di 4 bit viene sostituita da una serie di 5 bit utilizzando
delle corrispondenze che impediscano la trasmissione di più di un valore 0 iniziale o più di
due valori 0 finali. In questo modo vengono risolti i problemi relativi alla trasmissione di più
zeri consecutivi. Le sequenze così generate vengono poi trasmesse attraverso una codifica
NRZI (Senza ritorno a zero invertito), che elimina anche il problema della presenza di un
numero eccessivo di 1 consecutivi. Il risultato è che la codifica 4B/5B elimina ripetizioni
consecutive di un numero eccessivo di valori binari tutti uguali. Il sistema 100base-TX è full
duplex.

 100base-FX: questo modello si basa su cavi in fibra multimodale, uno per ogni direzione,
perciò il sistema è full duplex.

46
Gigabit Ethernet (4.3.8)
Dopo lo sviluppo di Fast Ethernet il comitato 802 iniziò a lavorare ad una Ethernet ancora più
veloce: la Gigabit Ethernet, o anche denominata 802.3z. Gli obiettivi erano quelli di rendere
Ethernet 10 volte più veloce mantenendo la compatibilità con tutti gli standard Ethernet esistenti. In
particolare Ethernet gigabit doveva offrire servizi datagram senza ack di tipo multicast e unicast,
adottare lo stesso schema di indirizzamento a 48 bit già in uso e mantenere lo stesso formato dei
frame. Qui tutte le configurazioni sono punto-punto.
Gigabit Ethernet supporta due modalità operative: full duplex e half duplex.

 La full duplex è la modalità più comune. Questa modalità è utilizzata in presenza di uno
switch centrale collegato ai computer. In questa configurazione tutte le linee hanno buffer,
perciò ogni computer o switch è libero di inviare frame quando vuole. Qui la contesa è
impossibile, quindi non si utilizza il protocollo csma/cd.

 La half duplex viene utilizzata quando i computer sono collegati ad un hub e non ad uno
switch, l’hub non ha un buffer dove memorizzare i frame in arrivo, esso collega
elettricamente tutte le linee per simulare un cavo multidrop. In questo caso si possono
verificare collisioni, quindi si utilizza il protocollo csma/cd.

Poiché il frame minimo di 64byte può essere trasmesso 100 volte più velocemente, la distanza
massima risulta 100 volte ridotta. Questa distanza è risultata inaccettabile e si sono aggiunte allo
standard due funzionalità che ne aumentano la portata. La prima funzionalità chiamata carrier
extension, non fa altro che aggiungere tramite hardware dati di riempimento dopo il frame normale
in modo da estendere la dimensione del pacchetto di 512byte. La seconda funzionalità chiamata
frame bursting, permette al trasmittente di inviare una sequenza concatenata di più frame in una
singola trasmissione. Ethernet gigabit usa cavi in rame e in fibra. Le categorie di cavi usati sono:

 1000base-SX: in fibra ottica, e utilizzata per le fibre multimodali (fino a 550mt).

 1000base-LX: in fibra ottica, utilizzata sia per le fibre monomodali che multimodali (fino a
5000mt).

 1000base-CX: utilizza cavi in rame schermati. E' poco utilizzata (fino a 25mt).

 1000base-T: utilizza 4 coppie UTP di categoria 5. In questo tipo di cablaggio si utilizza un


particolare schema di codifica. Con questa modalità si possono trasmettere in parallelo 4
simboli. Questo è il cosiddetto schema di Trellis, e funziona nella seguente maniera: ogni
singolo simbolo viene codificato in 00, 01, 10, 11. Pertanto si hanno quattro stati 0, 1, 2, 3,
ottenuti dagli ultimi due bit in ingresso ma scritti al contrario. Come abbiamo detto il bit 0 o
1 a seconda dello stato in cui si trova produce in output o 00, 10, 01, 11.

Esempio : ci troviamo nello stato 1, in binario 01, e arriva il bit 0. L'output verrà codificato
facendo lo XOR tra il bit di ingresso, nel nostro esempio lo 0, e il bit dello stato 01;

47
0 → bit in ingresso

0
1 → bit dello stato in cui si trova.
1

Poi si fa lo XOR tra il bit in ingresso (sempre lo 0) e il bit più vecchio dello stato (siamo
nello stato 1, quindi 01, dove il bit più vecchio è 1)

0 → bit in ingresso
1 → bit più vecchio
1

Quindi in output si ha la codifica 11.

Codifica di Viterbi
Con lo schema di Trellis, dati in input una sequenza di bit, in output otteniamo una sequenza di
simboli, che vengono fatti viaggiare lungo il cavo. A destinazione tale sequenza può subire delle
variazioni dovute a errori lungo il cavo. In questi casi viene usato l’algoritmo di Viterbi, un
decodificatore a massima verosimiglianza, che esamina l’intera sequenza ricevuta e trova il
percorso lecito che ha la minore distanza di Hamming dalla sequenza ricevuta. Se il messaggio
trasmesso è costituito da n bit si hanno 2ⁿ possibili percorsi. La codifica di Viterbi consente di
limitare il confronto dei percorsi. Quindi si parte dallo stato zero, si ha la sequenza di simboli in
input, e per ogni coppia di simboli di questa sequenza si calcola ogni possibile percorso e si sceglie
quello che ha distanza di Hamming minore rispetto alla sequenza di input. Alla fine si ottiene la
sequenza e si applica lo schema di Trellis per ottenere i bit che si volevano ricevere.

Esempio:

1 2

3 4

48
5 6

7 8

49
Reti Wireless (4.4)

Con i computer portatili è nata anche l’esigenza che essi si colleghino direttamente ad internet. Da
questa esigenza si è arrivati allo sviluppo delle reti Lan wireless. Lo standard fu denominato 802.11,
o semplicemente WiFi. Una Lan wireless può funzionare in due modi:

1. In presenza di una stazione base, che è collegata alla rete cablata, che prende il nome di
Access Point (AP).

2. In assenza di una stazione base, dove sono gli stessi computer che spediscono i dati
direttamente tra loro. Questa modalità viene chiamata ad hoc networking.

Tuttavia con la Lan wireless si presentano due problemi:

 il primo è quello della stazione esposta. Nel primo caso, ad esempio, supponiamo di avere
tre stazioni A, B, C e supponiamo che A voglia comunicare con B.
La portata del segnale radio di A copre la stazione B ma non C, quindi si può verificare che
C non rilevi la trasmissione di A a B rischiando quindi di generare una collisione.

 Il secondo problema si ha, ad esempio, quando supponendo di avere le stazioni A,B,C,D e


supponendo che B voglia trasmettere ad A, C rileva la portante e capisce che c’è una
trasmissione in atto e pensa erroneamente di non poter inviare dati a D. Quindi in entrambi i
casi non risulta sufficiente rilevare la portante, ma ci interessa sapere chi riceve, e non chi
trasmette. Quindi il protocollo CSMA, non viene utilizzato.

Per le Lan wireless è creato il protocollo MACA, il cui funzionamento è il seguente:

se una stazione vuole inviare dati ad un’altra stazione, prima di tutto invia un piccolo frame RTS
(Request to send), che contiene la lunghezza dei dati che la stazione vorrà trasmettere
successivamente. La stazione ricevente, dopo aver ricevuto il frame RTS, a sua volta invia un frame
CTS (Clear to send) alla stazione trasmittente, che contiene la lunghezza dei dati copiati dal frame

50
RTS.

Quando la stazione trasmittente riceve il frame CTS inizia la trasmissione.

Le stazioni che si trovano nelle vicinanze si comportano nella maniera seguente:

 quelle vicine a una stazione che vuole trasmettere, e quindi ricevono il frame RTS, devono rimanere
in silenzio per un tempo che consenta al frame CTS di raggiungere la stazione trasmittente senza
causare conflitti. Le stazioni che ricevono il frame CTS devono rimanere in silenzio durante la
trasmissione dei dati la cui lunghezza può essere determinata usando il frame CTS. Usando questo
protocollo si possono avere dei problemi di collisioni. Ad esempio, se due stazioni inviano
contemporaneamente un frame RTS alla stessa stazione, collideranno e i frame RTS andranno
perduti. Quindi si è arrivati ad una nuova versione del maca, il MACAW.
Con questo nuovo protocollo sono state introdotte nuove migliorie:

 Dopo ogni frame di dati è stato introdotto un frame ack, in quanto a causa dell’assenza di
ack nello strato Data Link, quando i frame vanno perduti non vengono ritrasmessi fino a che
lo strato trasporto non rileva la loro assenza;

 L’utilizzo del protocollo CSMA/CA, sia a livello fisico che virtuale;


Nel primo caso (livello fisico) si controlla se il canale è libero prima di trasmettere i dati;
infatti durante la trasmissione la stazione non controlla il canale ma emette l’intero frame,
che può rimanere danneggiato a causa delle interferenze sul ricevitore.
La seconda modalità (virtuale) funziona nella seguente maniera: quando una stazione invia
un frame RTS ad un’altra per chiedere il permesso di trasmettere un frame, la stazione
ricevente, a sua volta, invia un frame CTS per acconsentire. Dopo aver ricevuto il CTS la
stazione fa partire il frame di dati e attiva un timer ack. Dopo che la stazione ricevente
acquisisce il frame di dati, manda un ack che conclude lo scambio.

51
 quelle che si trovano vicino alla stazione che ha mandato il frame RTS, non inviano alcun dato fino
al termine dello scambio. Grazie al frame RTS le stazioni possono calcolare la durata dello
scambio, incluso l’ack finale, perciò rivendica per sé una sorta di canale virtuale con la sigla NAV.
Quelli che stanno vicini alla stazione ricevente, ricevono CTS e si comportano nella maniera
precedentemente descritta.

La differenza fondamentale tra CSMA/CD e CSMA/CA è che, mentre il primo è usato per IEEE
802.3 (che è full-duplex) e quindi le operazioni di ricezione e trasmissione vengono effettuate
contemporaneamente, il CSMA/CA viene usato dalle reti wireless (IEEE 802.11b) che sono half-
duplex. Ogni host prima di inizializzare effettivamente la trasmissione, avvisa il destinatario il quale
se risponderà affermativamente (con un pacchetto ACK) darà il via alla comunicazione. In caso
contrario, il mittente riproverà dopo un tempo arbitrario.

52
Le Reti ad Anello Token
Una rete ad anello consiste di una collezione di interfacce di rete, collegate a coppie da linee punto
a punto. Le reti ad anello hanno diverse attrattive:

•non sono reti basate su un mezzo trasmissivo broadcast;


•non c'e' una significativa componente analogica per la rilevazione delle collisioni (che non possono
verificarsi);
•l'anello e' intrinsecamente equo.

Ogni bit che arriva all'interfaccia è copiato in un buffer interno, poi rigenerato e ritrasmesso sul
ring. Può essere modificato prima di essere ritrasmesso.
L'interfaccia di rete può operare in due diverse modalità, listen mode e transmit mode:
In listen mode i bit in ingresso vengono copiati nel buffer interno (dove possono essere anche
modificati) e quindi ritrasmessi con un ritardo di un bit (1-bit delay).
In transmit mode l'anello è aperto, e i bit in arrivo vengono rimossi; nuovi bit vengono trasmessi
sull'anello. Una speciale configurazione binaria, detta token (gettone) circola in continuazione se
nessuno vuole trasmettere.
Quando una stazione vuole trasmettere, deve:

1.aspettare che arrivi il token (in listen mode);


2.rimuoverlo dal ring (in listen mode, vedremo come);
3.trasmettere i dati (in transmit mode);
4.rigenerare il token (in transmit mode);
5.rimettersi in listen mode.

Poiché c'e' un solo token, questo meccanismo risolve senza conflitti il problema dell'accesso al
mezzo.
Alcune considerazioni sono degne di nota:

•il token deve essere contenuto per intero sull'anello, il che non e' cosi' ovvio come sembra (qual'è
la lunghezza di un bit?);
•un frame, invece, non è necessario che ci stia tutto sull'anello (che in trasmissione e' aperto), quindi
non ci sono limiti alla dimensione dei frame;
•in genere esiste un tempo massimo entro il quale, una volta preso il token, si deve completare la
trasmissione; ciò permette di ottenere una schedulazione round-robin delle trasmissioni;
•quando tutte le stazioni hanno qualcosa da trasmettere, l'efficienza si avvicina al 100%;
•viceversa, quando non c'è traffico, una stazione deve attendere un pò più che in CSMA/CD per
trasmettere (mediamente dovrà attendere un tempo pari a quello di attraversamento di mezzo anello,
per ricevere il token).

La velocità di propagazione del segnale nel rame è circa 200 metri per microsecondo. Con un data
rate (ad esempio) di 1 Mbps, si genera un bit al microsecondo. Dunque, un bit è lungo in tal caso
circa 200 metri, per cui per contenere 10 bit un anello dovrebbe essere lungo almeno 2 km.
In realtà sul ring trovano posto:
•x bit sull'anello, in funzione della sua lunghezza totale;
•y bit nei buffer delle interfacce delle y stazioni presenti (1 bit delay).
In definitiva, è necessario che x + y sia maggiore del numero di bit del token. Ciò significa che, a
seconda delle caratteristiche dimensionali della rete in questione, può essere necessario ricavare un
ritardo addizionale, sotto forma di buffer aggiuntivi, in una stazione (che ha un ruolo particolare,
quello di monitor dell'anello).

53
Comunicazione nello strato Data Link
Molte Lan che devono essere interconnesse possono essere collegate da dispositivi chiamati bridge
che operano nello strato Data Link. Essi esaminano gli indirizzi dello strato Data Link per eseguire
l’instradamento; essi non esaminano il carico utile del frame. Bisogna subito precisare che risulta
abbastanza difficile costruire bridge tra differenti Lan. Infatti ogni Lan utilizza un diverso formato
di frame. Un secondo problema e che le Lan interconnesse non funzionano necessariamente alla
stessa velocità. Quando si invia una lunga sequenza di frame da una Lan veloce ad una più lenta, il
bridge non sarà in grado di trasmettere il frame alla stessa velocità con cui lo ha ricevuto.
Un terzo problema e che le Lan 802 diverse adottano differenti lunghezza massima del frame. Qui il
problema sorge quando un frame lungo deve essere inviato ad una Lan che non può accettarlo. In
questo strato non è possibile dividere il frame in più parti.

Internetworking locale
Un bridge trasparente opera in modalità promiscua, ossia accetta ogni frame trasmesso su ogni Lan
a cui è collegata. Vediamone il funzionamento: quando arriva un frame, il bridge deve decidere se
scartare i dati o inoltrarli. Supponiamo di avere 4 Lan, e la stazione A, che si trova sulla Lan1, deve
mandare un pacchetto alla stazione F, che si trova sulla Lan4

Quando il pacchetto arriva sul bridge B1, esso controlla l’indirizzo di destinazione con le
informazioni riportate nella tabella memorizzata nel bridge. La tabella può elencare ogni possibile
destinazione e dire a quale linea di output appartiene. Se una stazione deve mandare un pacchetto ad
un’altra stazione che si trova nella stessa Lan, ad esempio A deve mandare un pacchetto a B,
quando il pacchetto arriva al bridge controlla la tabella, vede che B si trova sulla sessa Lan di A e
scarta il messaggio. Appena i bridge si collegati alla rete per la prima volta, tutte le tabelle saranno
vuote poiché non sanno dove si trovano le varie destinazioni bridge utilizzano un algoritmo di
flooding: ogni frame che proviene da una destinazione sconosciuta viene inviato a tutte le Lan
connesse al bridge, tranne quella di input. Col tempo i bridge imparano dove si trovano le
destinazioni. Questo algoritmo è chiamato anche apprendimento all’indietro. La topologia può
cambiare quando le macchine e i bridge vengono accesi, spenti o spostati. Per gestire le topologie
dinamiche, ogni volta che crea una voce nella tabella di hash il bridge annota anche il tempo di
arrivo del frame. Periodicamente, un processo nel bridge esamina la tabella di hash e cancella le
voci che hanno più di qualche minuto. In questo modo un computer scollegato dalla sua Lan,
spostato in un’altro edificio e collegato ad un’altra Lan torna operativo in pochi minuti senza
necessità di intervento normale.

54
Bridge Spanning tree
Per aumentare l’affidabilità alcuni siti installano due o più bridge in parallelo tra coppie di Lan.
Questa soluzione introduce nuovi problemi. Infatti se viene inviato un frame la cui destinazione è
sconosciuta, succede questo: ogni bridge trasmette il frame su tutte le linee di uscita ad esso
collegate, generando un altro frame e così via(per la precisione l’ultimo frame che viene generato
viene trasmesso sull’altro bridge collegato in parallelo) formando un ciclo infinito. Per risolvere il
problema è necessario che i bridge comunichino tra di loro e coprano la topologia reale con una
struttura spanning tree. In questa struttura ad albero vi è un solo percorso da ogni Lan ad ogni altra
Lan. Poiché esiste un unico percorso che collega ogni sorgente ad ogni destinazione, i cicli sono
impossibili. Per costruire uno spanning tree, i bridge devono decidere tra loro quello che dovrà
fungere da nodo principale della struttura. Per fare ciò ogni bridge trasmette il proprio numero di
serie, installato dal produttore dell’hardware, e viene scelto come nodo principale il bridge che ha il
numero di serie più basso. Quindi viene costruita una struttura ad albero, basata sui percorsi più
brevi che uniscono il nodo principale ad ogni bridge e Lan.
Nella pagina seguente, abbiamo la figura di un hub e di un bridge.

Circolo vizioso in una LAN senza spanning tree


Spanning tree

55
Bridge Remoti
Nel suo insieme la rete ha caratteristiche di Local Area Network (LAN) estesa: il collegamento fra i
segmenti e' assicurato da bridge remoti (Translan), apparecchiature che collegano LAN fisicamente
diverse in modo trasparente a tutti i protocolli e che al contempo isolano il traffico locale. Questa
trasparenza e' essenziale in ambiente multi-protocollo. Vengono talvolta utilizzati al posto dei
router.
Rispetto ai router:
» Non gestiscono topologie di complessità molto elevata
» Non confinano i messaggi di multicast/broadcast
» Non permettono il bilanciamento ottimale del traffico su rete geografica
» Non gestiscono algoritmi sofisticati per uso di più link in parallelo.
I bridge sono collegati tra loro attraverso una rete punto-punto. Il bridge prende il campo MAC che
può essere differente tra mittente al ricevitore; quindi il calcolo del checksum può essere differente
ed è impossibile rilevare gli errori.

56
Ripetitori, Hub, Bridge, Switch, Router e Gateway
Questi dispositivi operano su strati diversi. Infatti utilizzano differenti porzioni di informazione per
decidere come eseguire la commutazione. Un utente genera dati da inviare ad una macchina remota.
Questi dati vengono passati allo Strato di Trasporto (Gateway) che aggiunge l'intestazione. Per
esempio un'intestazione TCP, e passa l'unità risultante al sottostante Strato Network (Router) per
esempio un pacchetto IP. Il pacchetto IP viene trasferito allo Strato Data Link e aggiunge la sua
intestazione e il suo checksum e passa il frame allo Strato Fisico attraverso una LAN. Nello strato
fisico abbiamo i ripetitori e gli hub. I primi sono dispositivi analogici collegati a due segmenti di
cavo. Un segnale che appare su un segmento viene amplificato e trasmesso sull’altro. I ripetitori
non sanno nulla di frame, dei pacchetti e delle intestazioni.

Un hub, invece ha diverse linee di input collegate elettricamente. I frame che arrivano su una di
queste linee sono trasmessi attraverso tutte le altre. Due frame che arrivano contemporaneamente
collidono; in altre parole l’intero hub forma un singolo dominio di collisione.
Le linee di input devono operare alla stessa velocità. Gli hub non amplificano i segnali in ingresso e
sono progettati per contenere schede di linea.

Nello strato Data Link abbiamo i bridge e gli switch.


Un bridge collega due o più Lan. Quando arriva il frame, il software che si trova nel bridge estrae
l’indirizzo di destinazione dall’intestazione e lo confronta con le voci della sua tabella per scoprire
la destinazione dei dati.

57
Lo switch ha la stessa funzionalità del bridge, cioè instradano i dati in base all’indirizzo del frame,
ma si differiscono dai primi i quanto lo switch è utilizzato prevalentemente per collegare singoli
computer. Quindi quando A deve inviare un frame a B, lo switch lo inoltra attivamente a differenza
del bridge che, vedendo nella sua tabella si accorge che B si trova sulla stessa Lan di A, e lo scarta.

Inoltre poiché ogni parte di uno switch conduce ad un singolo computer essi contengono un numero
maggiore di schede di linea rispetto ai bridge. Ogni scheda di linea è in grado di memorizzare in un
buffer i frame che arrivano attraverso le sue porte. Poiché ogni parte è un dominio di collisione
indipendente, gli switch non perdono mai i frame causa collisioni. Se i frame arrivano più
velocemente di quanto possano essere trasmessi, lo switch inizia a scartare quelli in eccesso. Per
attenuare questo problema gli switch moderni iniziano ad inoltrare il frame non appena arriva il
campo destinazione.

Nello strato network abbiamo i router. Quando un pacchetto raggiunge un router l’intestazione e la
coda del frame sono strappati via e il pacchetto contenuto nel carico utile del frame e passato al
software di instradamento, che sfrutta l’intestazione del pacchetto per scegliere la linea di output.

Nello strato applicazione abbiamo i gateway. Questi dispositivi collegano due computer che usano
protocolli di trasporto orientati alle connessioni differenti.

Lan Virtuali
Supponiamo che un utente all’interno dell’azienda venga spostato da un reparto all’altro senza
cambiare ufficio. Se si usano degli hub, per spostare l’utente nella giusta Lan è necessario che
l’amministratore di rete intervenga manualmente sulla centralina, il che può causare un po’ di
fastidi.

Nella progettazione delle Lan:

 un problema che si può riscontrare è che se si inseriscono persone dello stesso reparto su
Lan diverse, i pacchetti potrebbero essere catturati da persone di reparti diversi che
appartengono alla stessa Lan attivando la modalità promiscua. Per ovviare a questo
problema, si tende a mettere nella stessa rete tutte le persone che fanno parte dello stesso
reparto in modo che la comunicazione rimanga all'interno della rete, anche se le persone
fisicamente si trovano in edifici differenti.

 un secondo problema è il carico, in quanto alcune lan sono più utilizzate di altre. Pertanto è
preferibile separarle.

 un terzo problema è la trasmissione broadcast. Se, ad esempio, una scheda di rete si rompe
ed inizia a generare un flusso senza fine di frame broadcast il risultato è una tempesta
broadcast e quindi l'intera capacità della lan è occupata e tutte le macchine della lan

58
rimangono paralizzate in quanto occupate ad eliminare i frame trasmessi dalla tempesta.

Per rispondere agli utenti che chiedevano maggiore flessibilità, i produttori di dispositivi di rete
hanno studiato un metodo per ricablare gli edifici via software, ovvero sono state realizzate le Lan
virtuali o VLan. Le Lan si basano su switch VLan compatibili progettati in modo speciale, ma
possono avere anche hub lungo il perimetro esterno.

Quando si costruisce una VLan l’amministratore di rete decide di creare quante VLan, quali
computer collegare e quale nome assegnare alle Vlan (di solito si usano i colori). Per far funzionare
correttamente le VLan, negli switch o nei bridge devono essere impostate delle tabelle di
configurazione. Queste tabelle indicano quali VLan sono accessibili attraverso le varie porte. Per
esempio se arriva un frame dalla VLan grigia, il frame deve essere inoltrato su tutte le porte
contrassegnate dal colore grigio. Una porta può essere etichettata con più colori VLan.
Ora vediamo come i bridge o gli switch riconoscono le VLan di destinazione.

Vi sono 3 metodi:

1. Ad ogni porta è assegnato un colore VLan, ma funziona solo se tutti i computer collegati a
una porta appartengono alla stessa Vlan.

2. Ad ogni indirizzo mac è assegnato un colore VLan. Qui il bridge o lo switch ha una tabella
che elenca l’indirizzo mac a 48bit di ogni computer collegato al dispositivo, abbinato alla
indicazione della VLan di appartenenza di quel computer. In queste condizioni è possibile
mischiare le VLan su una Lan fisica. Quando arriva un frame non deve far altro che estrarre
l’indirizzo mac e cercarlo nella tabella interna.

59
3. Ad ogni protocollo di stato 3 oppure a ogni indirizzo IP è assegnato un colore VLan. Qui il
bridge o lo switch ha la possibilità di esaminare il carico utile del frame. Questa strategia è
particolarmente utile quando molte macchine sono computer portatili collegabili a docking
station diverse. L’unico problema di questo approccio è che viola la regola della
comunicazione di rete: l’indipendenza tra gli strati. Infatti il contenuto del carico utile non
riguarda lo strato Data Link.

Lo standard IEEE 802.1Q


Quello che importa realmente è la VLan del frame stesso, non la VLan della macchina trasmittente.
Se ci fosse un modo per identificare la VLan nel campo di intestazione del frame, non ci sarebbe
più bisogno di esaminare il carico utile. Così il comitato IEEE 802 ha cambiato l’intestazione
Ethernet e il nuovo formato prende il nome di 802.1Q. Questo nuovo formato contiene un campo
VLan che è utilizzato solo dai bridge o dagli switch e non dalle macchine degli utenti. Non è
realmente necessaria la loro presenza sulle linee in uscita collegate alle stazioni finali, a patto che
siano presenti sulla linea che collega i bridge o gli switch. Quindi, per utilizzare le VLan, i bridge e
gli switch devono essere VLan compatibili. Non sarà necessario sostituire tutte le vecchie schede di
rete, anche perché gli utenti finali sono restii a cambiare tutte le loro schede di rete. Quindi se il
trasmittente non genera il campo VLan, lo farà il primo bridge o switch compatibile VLan che tocca
il frame, mentre l’ultimo dispositivo sul percorso dei frame lo rimuoverà. Per poter invece
determinare la VLan di appartenenza del frame, il primo bridge potrebbe assegnare un numero
VLan alla porta, assumere l’indirizzo mac oppure esaminare il carico utile. Durante il processo di
transizione, molte installazioni avranno alcune macchine di vecchio tipo non compatibili con le
VLan e altre che lo saranno. Quelle installazioni che hanno schede Ethernet VLan compatibili
genereranno frame 802.1Q. Per eseguire la commutazione gli switch devono sapere quali VLan
sono raggiungibili attraverso ogni porta. Quindi lo switch ha bisogno di una tabella indicizzata in
base alle VLan che indichi le porte utilizzate e se sono, oppure no, compatibili con VLan. Quando
un vecchio pc invia un frame ad uno switch VLan compatibile, lo switch costruisce un nuovo frame
dotato di etichette basandosi sulla sua conoscenza della VLan del mittente usando la porta,
l'indirizzo MAC, o l'indirizzo IP. Vediamo ora il formato del frame 802.1Q dove, a differenza del
formato 802.3, si ha l’aggiunta di due campi lunghi 2byte. Il primo è VLan protocol ID, e il suo
valore è sempre 0x8100.

Poiché questo numero è maggiore di 1500 byte (che è la massima lunghezza del frame), tutte le
schede lo interpretano come una lunghezza. Il secondo campo di 2 byte contiene 3 sottocampi. Il
più importante è VLan identifier che occupa i 12 bit di ordine più basso. Esso permette di
identificare la VLan di appartenenza del frame. Il campo di 3 bit priorità permette di distinguere il
traffico pesante trasmesso in tempo reale, quello leggero trasmesso in tempo reale e quello
insensibile al tempo, in modo da migliorare la qualità del servizio su una Ethernet. L’ultimo bit si
chiama CFI e indica che il carico utile contiene un frame 802.5 liofilizzato che sta cercando di
raggiungere un’altra Lan 802.5 passando attraverso una Ethernet.

60
CAPITOLO 5

LIVELLO NETWORK

Questo strato si occupa del trasporto dei pacchetti lungo tutto il cammino percorso dall’origine alla
destinazione finale che, per essere raggiunta, può richiedere molti salti attraverso i router intermedi
lungo il tragitto. Ciò è molto diverso dal compito del livello data link, che è quello di muovere
informazioni solo da un capo all'altro di un singolo canale di comunicazione wire-like.

Le incombenze principali di questo livello sono:

 conoscere la topologia della rete;


 scegliere di volta in volta il cammino migliore (routing);
 gestire il flusso dei dati e le congestioni (flow control e congestion control);
 gestire le problematiche derivanti dalla presenza di più reti diverse (internetworking).

Nel progetto e nella realizzazione del livello network di una architettura di rete si devono prendere
decisioni importanti in merito ai servizi offerti al Livello Trasporto e all'organizzazione interna
della subnet di comunicazione.

Commutazione di pacchetto store-and-forward


Prima di iniziare a spiegare i dettagli dello strato network è bene ricordare il contesto in cui
operano i protocolli dello Strato Network, rappresentato nella Figura 5.1

Questo tipo di commutazione funziona in questo modo: un host con pacchetti da trasmettere invia i
dati al router più vicino attraverso la sua stessa LAN, oppure attraverso un collegamento punto-
punto con l’operatore delle telecomunicazioni. Qui il pacchetto viene memorizzato fino a quando
non è interamente arrivato, per verificare il checksum; quindi viene inoltrato al router successivo
che si trova lungo il percorso, fino a quando non raggiunge l’host di destinazione dove viene
consegnato.

Servizi forniti allo strato trasporto


Lo strato network fornisce i servizi allo strato trasporto attraverso l’interfaccia strato network/strato
trasporto.
I servizi dello strato network sono stati progettati per perseguire i seguenti obbiettivi:
 i servizi non dovrebbero essere collegati alla tecnologia del router;

61
 allo strato trasporto dovrebbero essere nascosti dettagli quali il numero, il tipo e la topologia
del router;
 gli indirizzi di rete disponibili allo strato trasporto dovrebbero utilizzare uno schema di
numerazione uniforme.

Da questi obiettivi nasce il problema di quale tipo di servizio allo strato superiore dovrebbe
fornire lo strato network. La scelta ricade su due tipologie fondamentali di servizi:
 servizi connection-oriented (orientati alla connessione)
 servizi connection-less (senza connessione)

Implementazione del servizio senza connessione


In questo tipo di implementazione, i pacchetti sono inoltrati nella sottorete individualmente e
instradati indipendentemente l’uno dall’altro; non occorre una configurazione anticipata. I pacchetti
di solito vengono chiamati datagramma e la sottorete è chiamata sottorete a datagrammi. Qui ogni
router ha una tabella interna che indica dove devono essere inviati i pacchetti diretti ad ogni
possibile destinazione. Ogni voce della tabella è costituita da una coppia di valori, che
rappresentano una destinazione e la linea di trasmissione da utilizzare per raggiungere tale
destinazione. Possono essere utilizzate solo linee collegate direttamente. Quello che si può
verificare con questo tipo di servizio è la cosiddetta congestione, ovvero troppo traffico su una
determinata linea di comunicazione.

62
Implementazione del servizio orientato alla connessione
In questo tipo di implementazione si utilizza una sottorete a circuito virtuale. L’idea di base è quella
di evitare di dover scegliere una nuova strada per ogni pacchetto inviato. Quando si stabilisce una
connessione, il percorso dal computer sorgente a quello di destinazione viene scelto a priori durante
l’impostazione della connessione, e archiviato nelle tabelle di router. Quel percorso è utilizzato per
tutto il traffico che scorre per quella connessione. Quando la connessione viene rilasciata, anche
il circuito virtuale viene terminato. Con un servizio orientato alla connessione, ogni pacchetto
contiene un identificatore che indica il circuito virtuale di appartenenza. Nella figura 5.3 viene
descritto il funzionamento: H1 e H2 si connettono entrambi alla sottorete. Questa connessione viene
memorizzata nelle tabelle di routing. La prima linea della tabella A dice che è arrivato un pacchetto
da H1 con identificatore 1, e lo stesso avviene per H3. Il router A, che è il primo, alla prima
richiesta di connessione, sceglie a priori il percorso che i pacchetti devono attraversare (nella figura
i dati vengono inoltrati nel circuito virtuale A, C, E, F). Poiché In questa situazione, si verificherà
un conflitto in A (perchè è arrivato 1 sia da H1 che da H3).

Confronto tra sottoreti a circuito virtuale e a datagramma


All’interno della sottorete esistono diversi compromessi tra circuiti virtuali e datagrammi. Un
compromesso va fatto tra spazio di memoria del router e banda.
Infatti, i circuiti virtuali permettono ai pacchetti di utilizzare i numeri di circuito al posto degli
indirizzi di destinazione completi. Se i pacchetti tendono ad essere corti, un indirizzo di
destinazione completo in ogni pacchetto inevitabilmente fa sprecare banda. Il prezzo da pagare per
l’utilizzo interno dei circuiti virtuali è rappresentato dallo spazio delle tabelle dei router. Un altro

63
compromesso è tra il tempo per la configurazione del circuito e il tempo di analisi dell’indirizzo.
L’utilizzo dei circuiti virtuali richiede una fase di configurazione che esige tempo e consuma
risorse. In una sottorete a datagrammi, di contro, per individuare la voce relativa alla destinazione
serve una procedura di ricerca più complessa. Un altro problema è la quantità di spazio di tabella
richiesto nella memoria del router. Una sottorete a datagrammi ha bisogno di una voce per ogni
possibile destinazione, mentre una sottorete a circuito virtuale si accontenta di una voce per ogni
circuito virtuale. I circuiti virtuali sono un vantaggio quando si tratta di dare garanzie sulla qualità
del servizio ed evitare congestioni nelle sottoreti perchè le risorse possono essere riservate in
anticipo al momento in cui si stabilisce la connessione (buffer, cpu, ecc.). I circuiti virtuali hanno
anche un problema di vulnerabilità. Se un router va in crash perde i dati in memoria. Se un router
per datagrammi si blocca, soffrono solo gli utenti che in quel momento avevano pacchetti nel
router.

Algoritmi di routing
L’algoritmo di routing è quella parte del software dello strato network che si preoccupa di scegliere
lungo quale linea di uscita vanno instradati i pacchetti in arrivo. Se la sottorete utilizza internamente
i datagrammi questa decisione va ripetuta per ogni pacchetto dati in arrivo, poiché il percorso
migliore può cambiare nel tempo. Se la sottorete utilizza internamente i circuiti virtuali, le decisioni
che riguardano il routing vengono prese solo quando viene impostato un nuovo circuito virtuale. E’
utile distinguere il concetto tra routing, cioè l’algoritmo che sceglie la strada da seguire, e inoltro,
cioè l’operazione eseguita all’arrivo di un pacchetto. Gli algoritmi si possono raggruppare in due
classi: non adattivi e adattivi. I primi non basano le loro decisioni su misure o stime del traffico e
della tipologia corrente. Il percorso da utilizzare viene calcolato in anticipo in modalità fuori linea
ed è scaricato nel router all'avvio della rete. Questa procedura si chiama anche routine statico. I
secondi (quelli adattivi) cambiano le loro decisioni secondo le modifiche apportate alla topologia, e
di solito anche al traffico.
Gli algoritmi vengono classificati anche in base al carico: quelli sensibili al carico,i costi dei link
variano dinamicamente per riflettere lo stato attuale di congestione del link in questione,se un link
in congestione viene associato 1 alto costo, un algoritmo di istradamento tenderà a scegliere
percorsi che evitano quel link in congestione.

Il Principio di Ottimalità
E' possibile fare una considerazione generale sull' ottimalità dei cammini, indipendentemente dallo
specifico algoritmo adottato per selezionarli.
Il principio di ottimalità dice che se il router j è nel cammino ottimo fra i e k, allora anche il
cammino ottimo fra j e k è sulla stessa strada:
Se così non fosse, ci sarebbe un altro cammino fra j e k migliore di quello che è parte del cammino
ottimo fra i e k, ma allora ci sarebbe anche un cammino fra i e k migliore di quello ottimo.
Una diretta conseguenza è che l'insieme dei cammini ottimi da tutti i router a uno specifico router di
destinazione costituiscono un albero, detto sink tree per quel router.
In sostanza, gli algoritmi di routing cercano e trovano i sink tree relativi a tutti i possibili router di
destinazione, e quindi instradano i pacchetti esclusivamente lungo tali sink tree.

Routing basato sul percorso più breve (algoritmo non adattivo, ovvero statico)
L’idea è quella di costruire un grafo della sottorete dove ogni nodo rappresenta un router e ogni
arco rappresenta una linea di comunicazione. Per scegliere un percorso tra una coppia di router,
l’algoritmo cerca semplicemente la strada più corta che collega i due nodi del grafo. Analizziamo il
concetto di cammino breve. La lunghezza del percorso può essere misurata con il numero di salti.
Un’altra metrica è basata sulla distanza geografica espressa in chilometri. Si possono usare molte
altre metriche: per esempio ogni arco potrebbe essere etichettato con i valori che rappresentano i
valori medi di accodamento e ritardo della trasmissione. Ritornando a parlare dell’algoritmo da noi
considerato, ogni nodo è associato a un'etichetta che riporta la sua distanza dal nodo d’origine
64
lungo il miglior percorso conosciuto. Inizialmente nessun percorso è noto, perciò tutti i nodi sono
etichettati con il simbolo che rappresenta l’infinito. Man a mano che l’algoritmo procede e si
trovano i percorsi migliori, le etichette cambiano indicando i percorsi migliori. Un’etichetta può
essere provvisoria o permanente. Inizialmente tutte le etichette sono provvisorie, e quando si scopre
che rappresenta il percorso più breve dall’origine a quel nodo viene resa permanente impedendo
successive modifiche. Si desidera trovare il percorso che collega A e B. Segnamo il nodo A come
nodo permanente (working node) e esaminiamo tutti i nodi che sono adiacenti ad A rietichettando
ogni nodo con il numero che rappresenta la distanza da A. Da questo si ricostruisce tutto il percorso
finale. Dopo aver esaminato ogni nodo adiacente ad A bisogna esaminare tutti gli altri nodi
etichettati dell'intero grafico, e si rende permanente quello con l'etichetta più piccola. Quest'ultimo
sarà il nuovo working node da cui si partirà nuovamente a visitare tutti i nodi ad esso adiacenti.
Questo procedimento viene effettuato fino ad arrivare a destinazione.

65
Flooding (inondamento)
Un altro algoritmo statico è quello di flooding, in cui ogni pacchetto in arrivo è inviato a tutte le
linee tranne quella da cui proviene. In questo modo si generano un elevato numero di pacchetti
duplicati. Per attenuare il verificarsi di questo inconveniente, si potrebbe utilizzare un contatore di
salti inserito nell’intestazione di ogni pacchetto, e decrementare il suo valore a ogni salto in modo
da scartare automaticamente il pacchetto quando il contatore raggiunge lo zero. Per fare ciò si
dovrebbe conoscere a priori la lunghezza del percorso dall’origine alla destinazione. Se il
trasmettitore non conosce la lunghezza del percorso può assegnare un valore che rappresenta il caso
peggiore, ossia il diametro dell’intera regione. Un’altra tecnica tiene traccia dei pacchetti trasmessi
nel flood, in modo da evitare una seconda trasmissione. Per ottenere questo risultato, il router
d’origine deve inserire in ogni pacchetto che riceve dai suoi host un numero di sequenza. Ogni
router ha bisogno di una lista per ciascuno dei router sorgenti, che indichi i numeri di sequenza già
trasmessi da quella origine. Se appare nella lista, il pacchetto non viene trasmesso.

Routing basato sul vettore delle distanze (algoritmo adattivo, ovvero dinamico)
Questo è un algoritmo dinamico ed opera facendo in modo che ogni router conservi una tabella che
definisce la migliore distanza conosciuta per ogni destinazione e la linea che conduce a tale
destinazione. Queste tabelle sono aggiornate scambiando informazioni con i router vicini. Nel
routing basato sul vettore delle distanze ciascun router conserva una tabella di routing indicizzata da
ogni router della sottorete, dove è memorizzata una voce per ogni router. Questa voce è composta
da due parti: la linea di trasmissione preferita da utilizzare per quella destinazione, e una stima del
tempo o della distanza associata a quella destinazione. La metrica utilizzata potrebbe essere il
numero di salti, il ritardo espresso in millisecondi. Una volta ogni T msec, ogni router invia ai suoi
vicini una lista delle proprie stime di ritardo relative a ciascuna destinazione. Il router riceve inoltre
una lista simile da ognuno dei suoi vicini. Quindi quando un router deve instradare un pacchetto ad
un altro determinato router, quello di destinazione, non fa altro che controllare la sua tabella di
routing e vedere il percorso, che è quello con ritardo più piccolo rispetto agli altri. Per ottenere
questo risultato il router sorgente fa il calcolo di tutti i possibili percorsi per raggiungere la
destinazione e sceglie la linea di comunicazione che ha il minor ritardo. Il routing basato sul vettore
delle distanze ha un serio difetto pratico: quello di reagire lentamente alle cattive notizie, ovvero il
problema del conto all’infinito. Ad esempio se abbiamo quattro ruoter (A,B,C,D) ed essi e tutte le
linee sono attive. La distanza tra i quattro router è rispettivamente 1,2,3,4. improvvisamente A si
spegne, oppure la linea tra A e B si interrompe. Quindi B non riceve nulla da A. Allora B vede che
C arriva ad A ed ha una distanza pari a due, ma non sa che il percorso di C passa da B. Di
conseguenza, B pensa di poter raggiungere A attraverso C con un percorso di lunghezza pari a tre.
Questo effetto si ripercuote su tutti i router, infatti aumenteranno di una unità la loro distanza,
raggiungendo il valore infinito.

66
Problema dell'conto all'infinito

Routing basato sullo stato dei collegamenti


A causa della lentezza di convergenza si è cercato 1 approccio diverso; l’idea alla base di questo
algoritmo dinamico è semplice. Ogni router deve:

 Scoprire i propri vicini e i relativi indirizzi di rete. Quando viene acceso, il router prima
di tutto cerca di scoprire chi sono i suoi vicini. Il dispositivo raggiunge il suo obiettivo
inviando uno speciale pacchetto HELLO su ogni linea punto-punto; il router all’altro capo
della linea deve rispondere fornendo la propria identità. Questi nomi devono essere
globalmente unici;

 Misurare il ritardo o il costo di ogni vicino. Il modo più diretto per determinare questo
ritardo consiste nell’inviare attraverso la linea uno speciale pacchetto ECHO, al quale l’altra
parte deve rispondere immediatamente. Misurando il tempo di andata e ritorno e dividendo
per due, il router trasmittente può ottenere una stima ragionevole del ritardo. E’ lecito
domandarsi se nel ritardo andrebbe incluso il carico. Per considerare il carico, il cronometro
che misura il tempo di andata e ritorno deve essere inviato nel momento in cui il pacchetto
ECHO viene inserito nella coda; per ignorarlo, il cronometro dovrebbe essere avviato
quando il pacchetto ECHO raggiunge il fronte della coda. Entrambi i metodi, però, sono
discutibili. Includere nelle misurazioni i ritardi indotti dal traffico significa che quando
dovrà scegliere tra due linee che hanno la stessa banda, una delle quali è caricata
pesantemente durante tutto il tempo e l’altra no, il router considererà più breve il percorso
che attraversa la linea non appesantita dal traffico. Ma dopo accadrà il viceversa, ossia che
la linea che si sta usando subirà una congestione, e si ritornerà a quella precedente, con il
risultato che le tabelle di routing iniziano ad oscillare paurosamente, causando instradamenti
irregolari.
Per evitare oscillazioni nella scelta del percorso migliore è una buona soluzione distribuire il
carico su più linee

67
 Costruire un pacchetto che contiene tutte le informazioni raccolte. Dopo aver raccolto le
informazioni necessario per lo scambio, ogni router deve costruire un pacchetto contenente
tutti i dati. Il pacchetto inizia con l’identità del trasmittente, seguito da un numero di
sequenza, dall’età, e da una lista di vicini. Per ogni vicino è riportato il ritardo misurato.

 Distribuzione dei pacchetti che contengono lo stato dei collegamenti. Durante la


distribuzione e l’installazione di questi pacchetti i router che ricevono i primi pacchetti
cambieranno i loro percorsi. L’idea fondamentale è quella di utilizzare il flooding per
distribuire i pacchetti contenenti le informazioni sullo stato dei collegamenti. Per tenere
sotto controllo il flusso dei dati in ogni pacchetto è inserito in numero di sequenza,
incrementato per ogni pacchetto inviato. I router tengono traccia di tutte le coppie (router
sorgente, sequenza) rilevate. Quando arriva un nuovo pacchetto contenente informazioni
sullo stato della connessione, il router confronta i dati con quelli già visti. Se è nuovo, il
pacchetto viene inoltrato attraverso tutte le linee, tranne quella di ricezione; se è un
duplicato, i dati sono scartati. Se arriva un pacchetto con un numero di sequenza inferiore a
quello visto in quel momento, i dati sono rifiutati in quanto obsoleti, cioè il router ha
informazioni più recenti. Questo algoritmo ha alcuni difetti: numeri di sequenza ripetitivi
potrebbero generare il caos; quando un router si blocca perde traccia dei suoi numeri di
sequenza. Se il conteggio ricomincia da 0, il pacchetto successivo viene rifiutato perché
ritenuto un duplicato; se un numero sequenza arriva danneggiato i successivi verranno
considerati obsoleti. Per risolvere questi problemi è necessario includere l’età di ogni
pacchetto subito dopo il numero di sequenza, e decrementare il suo valore una volta al
secondo. Quando l’età raggiunge lo zero le informazioni provenienti da quel router vengono
scartate. Il campo età è anche decrementato da ogni router durante il processo di flooding
iniziale, per garantire che nessun pacchetto possa andare perduto e duri per un periodo
indefinito di tempo.

 Elaborazione dei nuovi percorsi. Dopo aver accumulato una serie di pacchetti sullo stato
della connessione, il router può costruire l’intero grafo della sottorete poiché è rappresentato
ogni collegamento. A questo punto si può eseguire localmente l’algoritmo di Dijkstra per
costruire il percorso più breve verso tutte le possibili destinazioni. I risultati di questo
algoritmo possono essere installati nelle tabelle di routing, prima di riprendere le normali
operazioni.

Routing gerarchico
La dimensione delle tabelle di routing cresce proporzionalmente alla dimensione della rete. La
crescita della tabella non soltanto consuma la memoria del router, ma aumenta il tempo che la CPU
impiega ad analizzare i dati e la banda necessaria per inviare le informazioni sullo stato. In questo
caso il routing dovrà essere fatto gerarchicamente. I router sono divisi in regioni: ogni router

68
conosce i dettagli relativi al routine dei pacchetti diretti a destinazioni della stessa regione, ma non
sa nulla della struttura interna delle altre regioni.
Viceversa quando un router interno deve spedire qualcosa ad 1 router di un'altra regione sa soltanto
che deve farlo pervenire a un particolare router della propria regione, detto router di confine,che lo
invierà ad 1 altro router di confine
Quando si interconnettono reti diverse è naturale considerare ogni rete come una regione separata;
in questo modo, i router di una rete non sono costretti a conoscere la struttura topologica delle altre
reti.
Di conseguenza ci sono due livelli di routing un primo livello di routing all'interno di ogni regione
un secondo livello di routing fra tutti i routing di confine.
In questo modo la dimensione della tabelle di routing è notevolmente ridotta. Questi risparmi hanno
un costo: la penalità da pagare è rappresentata dalla crescita della lunghezza dei percorsi.
 I router interni mantengono nelle loro tabelle di routing:
1. un’ entrata per ogni altro router interno, con la relativa linea da usare per arrivarci
2. un’ entrata per ogni altra regione, con l'indicazione del relativo router di confine e
della linea da usare per arrivarci.
 I router di confine, invece, mantengono:
1. una entrata per ogni altra regione, con l'indicazione del prossimo router di confine da
contattare e della linea da usare per arrivarci.
Non e' detto che due livelli siano sufficienti. In tal caso il discorso si ripete su piu' livelli.

Routing broadcast
Alcune applicazioni gli host hanno bisogno d’inviare messaggi a molti o tutti gli altri host.
La trasmissione contemporanea di un pacchetto a tutte le destinazioni è chiamata trasmissione
broadcast.
Esistono 4 metodi:

 Un metodo di trasmissione è quello in cui la sorgente invia un pacchetto distinto a ogni


destinazione;questo metodo non si limita a sprecare banda ma obbliga la sorgente a
possedere una lista completa di tutte le destinazioni. Metodo meno desiderabile.

 Un altro ovvio candidato è il meccanismo di flooding anche se nn si adatta bene nelle


comunicazioni punto-punto in quanto genera troppi pacchetti e consuma troppa banda.

 Un terzo algoritmo è quello del multidestination routing (routing a più destinazioni) così
ogni pacchetto contiene una lista delle destinazioni o una mappa di bit che indica le
destinazioni desiderate. Quando riceve pacchetto, router controlla le destinazioni x sapere le

69
linee di trasmissioni richieste. Il router genera una copia del pacchetto per ogni linea di
output usata e include in ogni pacchetto solo quelle destinazioni che si trovano su quella
linea.
Dopo un numero sufficienti di salti, pacchetto conterrà una sola destinazione e viene trattato
come un pacchetto normale.(come se fossero indirizzati separatamente ma se ci sono diversi
pacchetti che eseguono lo stesso percorso uno solo paga il prezzo completo gli altri
viaggiano gratis)

 Un quarto algoritmo di trasmissione broadcast fa uso del sink tree (spanning tree).
Uno spanning tree è un sottoinsieme che comprende tutti i router ma che non contiene cicli.
Se ogni router sa quali le sue linee appartengono allo spanning tree, allora può copiare un
pacchetto brodcast in arrivo su tutte le linee dello spanning tree esclusa quella d'ingresso.
Questo metodo usa in modo eccellente la banda e genera in assoluto il minimo numero di
pacchetti necessari per svolgere il lavoro. L'unico problema sta nel fatto che, per rendere
applicabile il metodo, ogni router deve conoscere uno spanning tree. Qualche volta questa
informazione è disponibile (per esempio nel caso del routing basato sullo stato dei
collegamenti), altre volte invece non lo è (per esempio nel caso del routing basato sul vettore
delle distanze).

 L'ultimo algoritmo usato per trasmettere in modalità broadcast tenta di approssimare il


comportamento dell'algoritmo precedente anche quando i router non sanno nulla degli
spanning.
L'idea, chiamata reverse path forwarding. Quando riceve un pacchetto broadcast, il router
verifica se il pacchetto è giunto attraverso la linea che normalmente utilizzata per inviare i
pacchetti alla sorgente della trasmissione broadcast. In caso affermativo, c'è una forte
probabilità che il pacchetto brodcast stesso abbia seguito il percorso migliore dal router, e
che perciò sia la prima copia arrivata al router. In questo caso, il router inoltra le copie del
pacchetto attraverso tutte le linee esclusa quella di input. Se al contrario il pacchetto
broadcast è giunto attraverso una linea diversa da quella che viene preferita per raggiungere
la sorgente. il pacchetto è scartato in quanto è probabile che si tratti di un duplicato.

La parte (a) mostra una sottorete,la parte (b) mostra un sink tree per il router I della sottorete e la
parte (c) mostra in che modo funziona I'algoritmo del percorso inverso. Al primo salto, I invia
pacchetti a F,H, J e a N, come indicato nella seconda riga della struttura ad albero. Ognuno di questi
pacchetti giunge attraverso il percorso preferito associato a I (supponendo che il percorso
preferito cada lungo il sink tree) ed perciò indicato da un cerchietto intorno alla lettera.
Al secondo salto vengono generati otto pacchetti: ogni router che ha ricevuto un pacchetto al primo
salto ne genera due. Tutti e otto arrivano a router non visitati precedentemente, e cinque di questi
giungono attraverso la linea preferita. Dei sei pacchetti generati al terzo salto, solo tre giungono
attraverso il percorso preferito (C, E e K); gli altri sono duplicati. Dopo cinque salti e 24 pacchetti la
trasmissione broadcast termina, mentre il sink tree impiega esattamente quattro salti e 14 pacchetti.

70
il vantaggio principale del reverse path fonvarding è che si tratta di un sistema ragionevolmente
efficiente e facile da implementare. Non richiede che i router conoscano gli spanning tree né che si
debba elaborare una lista di destinazione o una mappa di bit per ogni pacchetto broadcast, come
invece accade nel routing a più destinazioni. Inoltre, non
è necessario alcun meccanismo speciale d'interruzione del processo, come richiesto dal
flooding (che adotta un contatore di salto in ogni pacchetto e una conoscenza a priori del
diametro della sottorete, oppure un elenco di pacchetti già visti per ogni sorgente).

Routing multicast
Alcune applicazioni richiedono che processi molto separati funzionino insieme a gruppi. In queste
situazioni, spesso è necessario che un processo invii un messaggio a tutti gli altri membri del
gruppo. La trasmissione di un messaggio a un gruppo è definita multicast e il suo algoritmo di
routing è chiamato routing multicast. La trasmissione multicast richiede la gestione dei gruppi:
occorre un sistema che consenta di creare e distruggere i gruppi e che permetta ai processi di entrare
e uscire dai gruppi. Il modo in cui queste operazioni sono eseguite non riguarda l’algoritmo di
routing; ciò che importa è che quando si unisce ad un gruppo, il processo informi il suo host di
questo fatto. E’ importante che i router sappiano quali sono gli host appartenenti a ogni gruppo,
quindi gli host devono comunicare ai loro router i cambi di gruppo oppure i router devono
interrogare periodicamente i loro host. In entrambi i casi, i router scoprono i gruppi di appartenenza
dei loro host. Per ottenere una trasmissione multicast, ogni router elabora uno spanning tree che
copre tutti gli altri router. Quando un processo invia un pacchetto multicast ad un gruppo, il primo
router esamina il suo spanning tree e lo accorcia, rimuovendo tutte le linee che non conducono agli
host che sono membri di quel gruppo. E’ possibile ridurre lo spanning tree in molti modi. Quello
più semplice può essere utilizzato se si adotta il routing basato sullo stato dei collegamenti e se ogni
router conosce la topologia completa, quindi sa quali host appartengono a ciascun gruppo.

Il Protocollo IP
Il punto giusto per iniziare lo studio dello strato network in Internet è l’esame del formato dei
datagrammi IP. Un datagramma IP è costituito da una parte di intestazione e da una parte di testo.
L’intestazione ha una parte fissa di 20 byte e una parte opzionale di lunghezza variabile. Il campo
version tiene traccia della versione del protocollo usato per il datagramma, le transazioni possono
avvenire lentamente nel corso degli anni, con alcune macchine che continuano a utilizzare la
vecchia versione e altre che usano la nuova. Poiché la lunghezza dell’intestazione non è costante,
l’intestazione contiene un campo IHL che indica la lunghezza dell’intestazione espressa in parole di
32 bit: il valore minimo, 5, si applica quando non sono presenti altre opzioni; il valore massimo di
questo campo di 4 bit è 15. Il campo type of service è uno dei pochi campi che nel corso degli anni
ha leggermente cambiato il suo significato. Era, ed è ancora, usato per distinguere diverse classi di
servizio. In origine, il campo di 6 bit conteneva, da sinistra a destra, un campo di 3 bit chiamato
precedence e tre segnalatori D, T, R. Essi permettevano all’host di indicare l’interesse nei confronti
dell’insieme costituito da ritardo, capacità di trasporto, affidabilità. In pratica questi sei bit del
campo type of service sono utilizzati per indicare la classe di servizio di appartenenza del pacchetto.
Il campo total lenght tiene conto di tutto il contenuto del datagramma, intestazione e dati; la
lunghezza massima è di 65.535 byte. Il campo identification serve all’host di destinazione per
determinare a quale datagramma appartiene il frammento appena arrivato. Tutti i frammenti di un
datagramma contengono lo stesso valore identification. Subito dopo c’è un bit inutilizzato, e poi
due campi lunghi rispettivamente 1 bit. Il primo DF, don’t fragment, ossia non frammentare;
rappresenta un ordine che impone al router di non dividere in frammenti il datagramma perché la
destinazione non è in grado rimettere insieme i pezzi. Il secondo MF, more fragments. Tutti i
frammenti, tranne l’ultimo, hanno questo bit impostato a 1. E’ fondamentale sapere quando sono
arrivati tutti i frammenti di un datagramma. Il campo fragment offset indica la posizione del

71
frammento nel datagramma corrente. Tutti i frammenti tranne l’ultimo in un datagramma devono
essere di 8 byte, che è la dimensione del frammento elementare. Il campo time to live è un
contatore utilizzato per limitare la vita di un pacchetto. Il contatore dovrebbe essere decrementato
ad ogni salto, oppure se rimane per lungo tempo accodato in un router. Nella realtà il valore riflette
il numero dei salti. Il campo protocol indica quale processo di trasporto è in attesa di quei dati. Il
campo header checksum verifica solo l’intestazione. Questo checksum aiuta a rilevare gli errori
generati da locazioni di memoria difettose nel router. I campi source adress e destinazion adress
indicano il numero di rete e il numero di host. Il campo option è usato quando nel protocollo IP si
vogliono specificare alcune opzioni. Ognuna di queste opzioni inizia con un codice di 1 byte che la
identifica; alcune sono seguite da un campo option lenght di 1 byte che precede uno o più byte di
dati. Ecco alcune opzioni: security indica il livello di segretezza delle informazioni; l’opzione strict
source routing, definisce il percorso completo dalla sorgente alla destinazione, attraverso una
sequenza di indirizzi IP. Il datagramma deve seguire quel percorso preciso; l’opzione loose source
routing costringe il pacchetto ad attraversare una serie di router specificati, nell’ordine indicato;
l’opzione record route costringe ogni router lungo la strada ad aggiungere il proprio indirizzo IP nel
al campo opzioni. Questo permette agli amministratori di sistema di individuare gli errori negli
algoritmi di routing; l’opzione timestamp costringe ogni router a registrare sia i 32 bit che
rappresentano l’inidirizzo IP sia i 32 bit che indicano la data e l’ora di elaborazione. Anche questa
opzione è utilizzata per correggere gli algoritmi di routing.

Quindi l’indirizzo 32 bit dell’indirizzo ip 193.32.216.9 in notazione binaria è:


11000001 00100000 11011000 00001001

Indirizzi IP
Ogni host e router di internet ha un indirizzo IP che codifica il suo indirizzo di rete e il suo numero
di host. Tutti gli IP sono lunghi 32bit e sono utilizzati nei campi indirizzo sorgente e indirizzo
destinazione dei pacchetti IP. Un indirizzo IP non si riferisce veramente a un host ma a una scheda
di rete, quindi se un host ha due schede di rete, deve avere due indirizzi IP. Per molti decenni, gli
indirizzi IP sono stati divisi in 5 classi, questa assegnazione è stata chiamata indirizzamento per
classi, questo sistema oggi non è più utilizzato. I formati di classe A,B,C o D supportano
complessivamente un numero massimo di 128 reti con 16 milioni di host ciascuna, 16.384 reti da
64000 host e 2 milioni di reti (Lan) da 256 host (alcune di queste riservate a utilizzi particolari). E’
supportato anche il multicast, cioè l’invio dei datagrammi verso più host. Gli indirizzi che iniziano
con 1111 sono riservati per applicazioni future. Per evitare conflitti i numeri di rete sono gestiti da
un ente no profit chiamato ICANN.

72
Gli indirizzi di rete, rappresentati da numeri a 32bit, sono di solito scritti in notazione decimale a
punti. In questo formato, ognuno dei 4 byte è rappresentato in forma decimale con un numero che
varia tra 0 e 255. Per esempio come 192.41.6.20. Il più basso indirizzo IP è 0.0.0.0, il più alto è
255.255.255.255. I valori 0 e -1 (tutti 1) hanno un significato speciale, 0 indica la rete corrente
(oppure l’host corrente), -1 è utilizzato come indirizzo broadcast e rappresenta tutti gli host sulla
rete indicata. Infine, tutti gli indirizzi nella forma 127.xx.yy.zz sono riservati per le prove di
loopback. I pacchetti diretti a quell’indirizzo non sono immessi nel cavo, ma elaborati localmente e
trattati come pacchetti in arrivo.

Sottoreti
Sappiamo che tutti gli host di una rete devono avere lo stesso numero di rete. Questa proprietà
dell’indirizzamento IP può causare problemi quando le reti crescono. La soluzione consiste nel
dividere internamente la rete in più parti, facendo in modo che il mondo esterno veda ancora una
singola rete. Una tipica rete potrebbe assomigliare a un router principale collegato a un ISP o a una
rete regionale, e numerose Ethernet sparse. Ogni Ethernet ha il proprio router collegato al router
principale, le parti della rete (in questo caso le Ethernet) sono chiamate sottoreti. Quando un
pacchetto raggiunge il router principale, come viene identificata la sottorete (Ethernet) di
destinazione di quei dati? Per esempio, in breve, invece di avere un singolo indirizzo di classe B
con 14 bit per il numero di rete e 16 bit per il numero di host, alcuni bit sono tolti al numero host
per creare un numero di sottorete.

Per implementare le sottoreti, il router principale ha bisogno di una maschera di sottorete (subnet
mask) che indichi il punto di demarcazione tra numero di rete (inclusivo di quello della sottorete) e
quello di host. Anche le maschere di sottorete sono scritte in notazione decimale a punti, oppure da
una barra seguita dal numero di bit della parte che rappresenta la rete più la sottorete. All’esterno
della rete la divisione in sottoreti non è visibile, perciò l’assegnazione di una nuova sottorete non
richiede l’approvazione di ICANN o la modifica di database esterni. Per capire le sottoreti, vediamo
in che modo i pacchetti IP sono elaborati dal router. Ogni router ha una tabella che elenca numeri di
indirizzi IP del tipo (rete,0) e numeri di indirizzi IP del tipo (questa rete, host). Il primo tipo indica
come raggiungere reti distanti; il secondo tipo indica come raggiungere host locali. A ogni tabella è
associata la scheda di rete da utilizzare per raggiungere la destinazione, insieme ad altre
informazioni. Quando riceve un pacchetto IP, il router cerca il suo indirizzo di destinazione nella
tabella di routing.

73
Se è indirizzato a una rete distante, il pacchetto viene inoltrato al router successivo sull’interfaccia
indicata dalla tabella; se la destinazione è un host locale (sulla Lan del router), il pacchetto viene
inviato direttamente alla destinazione. Se la rete non viene trovata nella tabella, il pacchetto viene
inoltrato a un router predefinito contenente tabelle più estese. In base a questo algoritmo, ogni
router deve tenere traccia solo delle altre reti e degli host locali, invece che di tutte le coppie (rete,
host): ciò riduce di molto le dimensioni della tabella di routing. Quando si introduce la tecnica della
divisione in sottoreti le tabelle di routing cambiano, con l’aggiunta di voci espresse nella forma
(questa rete, sottorete, 0) e (questa rete, questa sottorete, host). Perciò un router su una sottorete k sa
come raggiungere tutte le altre sottoreti e sa anche come raggiungere tutti gli host della sottorete k.
E’ stato sufficiente consentire a ogni router di eseguire una operazione AND booleana con la
maschera di sottorete. Vediamo più in dettaglio:
Quando il sistema operativo (più precisamente: il livello IP dello stack TCP/IP) riceve da un
programma la richiesta di inviare un pacchetto IP ad un certo indirizzo IP destinatario, per prima
cosa calcola l'AND logico fra la subnet mask e il proprio indirizzo ip, e lo confronta con l'AND
logico tra la subnet mask e l'indirizzo IP di destinazione. Se il risultato delle operazioni è identico
(cioè i bit che identificano l'id di rete, o net ID, sono identici, mentre variano solo i bit dell'id di
host) allora invierà il pacchetto nella rete locale indirizzandolo con l'indirizzo di rete locale del PC
destinatario (se non conosce tale indirizzo userà il protocollo ARP per trovarlo); se invece il
risultato delle operazioni è differente significa che il computer destinatario non appartiene alla rete
locale, e il pacchetto verrà trasmesso al gateway della rete locale affinché lo instradi verso la rete
remota che contiene il computer destinatario.
Subnet 0001
Ip sorgente 1011 confronta AND logico con ip destinazione IP des 0110
Subnet 0001 AND 0000 non
AND 0001
appartiene rete

Frammentazione
Ogni rete impone una dimensione massima ai suoi pacchetti. Questi limiti possono dipendere:
dall’hardware, dal sistema, dai protocolli, dalla conformità con qualche standard internazionale.
Quindi un problema che nasce si presenta quando un pacchetto grande tenta di viaggiare attraverso
una rete che supporta pacchetti di piccole dimensioni. Una soluzione è evitare l’insorgere del
problema a monte. Il problema può essere risolto consentendo ai gateway di suddividere i pacchetti
in frammenti, inviando poi ogni pacchetto internet separato. Si adottano due opposte strategie per
ricostruire il pacchetto originale partendo dai frammenti. In base alla prima strategia, la
frammentazione che è eseguita da una rete ‘a pacchetti piccoli’ viene resa trasparente a ogni altra

74
rete situata più a valle lungo il percorso che il pacchetto deve attraversare per raggiungere la
destinazione. In questo approccio, la rete a pacchetti piccoli ha gateway che si interfacciano con le
altre reti. Quando riceve un pacchetto troppo grande, il gateway suddivide i dati in frammenti. Ogni
frammento è indirizzato allo stesso gateway di uscita, dove i pezzi sono riassemblati. In questo
modo, il passaggio attraverso la rete a pacchetti piccoli diventa trasparente. Esso presenta alcuni
problemi: il gateway di uscita deve sapere quando ha ricevuto tutti i pezzi, perciò è necessario
fornire un campo contatore; poi, tutti i pacchetti devono uscire attraverso lo stesso gateway, facendo
diminuire le prestazioni. L’altra strategia di frammentazione si astiene dal ricombinare i frammenti
a ogni gateway intermedio. Una volta che il pacchetto è stato suddiviso, ogni frammento è trattato
come se fosse un pacchetto originale. Tutti i pacchetti passano attraverso il gateway di uscita, e la
ricostruzione viene eseguita solo dall’host di destinazione. IP funziona in questo modo. Anche
questo modo di procedere ha alcuni problemi: ad esempio, richiede che ogni host sia in grado di
ricostruire i pacchetti; un altro problema si presenta quando si spezza un pacchetto molto grande, in
quanto il tempo di elaborazione aumenta perché ogni frammento deve avere una intestazione.
Quando viene diviso in frammenti, questi vanno numerati in modo che alla fine si possa ricostruita
il flusso di dati originale. Per esempio, i frammenti possono essere numerati usando una struttura ad
albero:

se si scompone il pacchetto 0, ai frammenti sono assegnati i nomi 0.0, 0.1, 0.2 e così via. Tuttavia,
se anche una sola delle reti perde o scarta pacchetti, sono necessarie ritrasmissioni end-to-end che
sfortunatamente influenzano il sistema di numerazione. Per evitare questo, si usa un altro sistema di
numerazione che definisce una dimensione di frammento elementare così piccola da permettere al
frammento di passare attraverso tutte le reti. Quando un pacchetto è diviso in frammenti, tutti i
pezzi hanno la dimensioni del frammento elementare tranne l’ultimo, che può essere più corto. Un
pacchetto, può contenere diversi frammenti, per motivi di efficienza. L’intestazione internet deve
indicare il numero di pacchetto originale e il numero del primo frammento elementare contenuto nel
pacchetto. Ci deve essere anche un bit che indica che l’ultimo frammento elementare contenuto nel
pacchetto internet è l’ultimo del pacchetto originale. Questo approccio richiede due campi di
sequenza nell’intestazione internet: il numero di pacchetto originale e il numero di frammento.
Poiché la dimensione del frammento elementare è accettata da ogni rete, la successiva
frammentazione di un pacchetto internet contenente diversi frammenti non causa alcun problema.

ICMP

75
Il funzionamento di internet è monitorato attentamente dai router. Quando avviene qualcosa di
imprevisto, l’evento è comunicato da ICMP, internet control message protocol, che viene utilizzato
per testare internet. Sono stati definiti circa una dozzina di messaggi ICMP.
ICMP è spesso considerato parte dell’IP ma giace esattamente sopra l’IP, in quanto i messaggi
ICMP sono inseriti in pacchetti IP.

ARP
Anche se ogni macchina di Internet ha uno o più indirizzi IP, in realtà questi non possono essere
utilizzati per inviare pacchetti perché l’hardware che opera sullo strato Data Link non comprende
gli indirizzi internet. Ogni produttore di schede ethernet richiede a un’autorità centrale un blocco di
indirizzi, per garantire che nessuna coppia di schede utilizzi lo stesso indirizzo. Le schede inviano e
ricevono frame basati sugli indirizzi ethernet a 48 bit, e non sanno nulla degli indirizzi IP a 32 bit.
Allora in che modo gli indirizzi IP vengono associati agli indirizzi dello strato Data Link? Per
rispondere vediamo un esempio. Ci sono due ethernet, ad una è associatol’indirizzo IP 192.31.65.0,
e all’altra è associato l’indirizzo IP 192.31.63.0. Queste sono collegate a un anello principale,
FDDI, che ha un indirizzo IP 192.31.60.0. I computer sulle ethernet hanno i FDDI indicati da
F1,F2,F3. Supponiamo che l’host 1 invia un pacchetto all’utente dell’host 2, entrambi ovviamente
con dei propri indirizzi ethernet unici, indicati da E1, E2, E3, ecc., mentre quelli sull’anello FDDI
hanno indirizzi ethernet, E1 e E2. Si supponga che il trasmittente conosca il nome del ricevente
desiderato. La prima mossa consiste nel cercare l’indirizzo IP dell’host 2. Questa ricerca è eseguita
dal DNS(Domain Name System), che restituisce l’indirizzo IP dell’host 2(192.31.65.5). Il software
dello strato superiore dell’host 1 ora costruisce un pacchetto, che riporta nel campo destination
adress l’indirizzo IP dell’host 2(192.31.65.5), e lo passa al software IP che si occupa di trasmetterlo.
Il software IP esamina l’indirizzo e scopre che la destinazione si trova sulla sua stessa rete, ma ha
bisogno di trovare in qualche modo l’indirizzo Ethernet di destinazione. Per far ciò l’host 1
attraverso la ethernet un pacchetto broadcast per sapere che è il proprietario dell’indirizzo IP. La
trasmissione broadcast arriva a tutte le macchine della Ethernet 192.31.65.0, e ognuna controlla il
proprio indirizzo IP. Solo l’host 2 risponde inviando il proprio indirizzo ehternet (E2). In questo
modo l’host 1 scopre che l’indirizzo IP 192.31.65.5 è assegnato l’host che ha l’indirizzo ethernet
E2. il protocollo per fare questa domanda e ottenere una risposta si chiama ARP(adress resolution
protocol). A questo punto, il software IP sull’host 1 costruisce un frame Ethernet indirizzato a E2,
inserisce il pacchetto IP(indirizzato a 192.31.65.5) nel campo carico utile e scarica tutto sulla
ethernet. La scheda ethernet dell’host 2 rileva il frame, si accorge di essere il destinatario della
comunicazione, preleva i dati e genera un interrupt. Varie ottimizzazioni permettono ad ARP di
funzionare in modo molto più efficiente. Ad esempio, una volta eseguita l’operazione ARP. Il
computer memorizza in cache il risultato, caso mai dovesse essere necessario ricontattare lo stesso
computer. In questo modo non si dovrà generare nessun messaggio di broadcast. Un ulteriore

76
miglioramento si ottiene facendo in modo che ogni computer trasmetta in broadcast la propria
associazione durante l’accensione. Questa operazione ottiene l’effetto di inserire una voce nel cache
ARP di tutti gli altri computer. Per consentire la modifica delle associazioni, dovuta ad esempio a
schede ethernet sostituite, le voci nella cache ARP dovrebbero scadere dopo pochi minuti. Si
supponga che l’host 1 voglia inviare un pacchetto all’host 4(192.31.63.8). ARP non funziona perché
l’host 4 non riceve la trasmissione broadcast. Ci sono due modi per risolvere il problema. Il primo,
il router CS potrebbe essere configurato per rispondere alle richieste ARP di tutte le reti locali; se si
adotta questa soluzione, l’host 1 crea nella sua cache ARP una voce contenente la coppia di
valori(192.31.63.8,E3) e trasmette al router CS tutto il traffico diretto all’host 4. Questa soluzione è
chiamata ARP proxy. Il secondo modo consiste che l’host 1 si accorga immediatamente che la
destinazione si trova su una rete remota; in questo caso tutto il traffico viene trasmesso ad un
indirizzo ethernet predefinito (E3) in grado di gestire il traffico remoto.

DHCP
Questo protocollo(dynamic host configuration protocol) permette l’assegnazione automatica degli
indirizzi IP. DHCP si basa sull’idea di un server speciale che assegna indirizzi IP agli host che ne
richiedono uno. Questo server non deve risiedere necessariamente sulla stessa LAN dell’host
richiedente. Poiché il server DHCP potrebbe non essere raggiunto dalla trasmissioni broadcast, è
necessario installare in ogni LAN un agente di inoltro DHCP(DHCP relay agent). Per trovare il suo
indirizzo IP, una macchina appena accesa invia in modalità broadcast un pacchetto DHCP
DISCOVER. L’agente di inoltro DHCP (solitamente il router) presente sulla quella LAN intercetta
tutte le trasmissioni DHCP; quando individua un pacchetto DHCP DISCOVER, l’agente trasmette
il pacchetto in modalità unicast al server DHCP , che può anche trovarsi su una rete distante.
L’agente di inoltro ha bisogno di una sola informazione: l’indirizzo IP del server DHCP. Un
problema che si presenta quando si assegnano automaticamente indirizzi IP riguarda la durata
dell’allocazione. Se un host abbandona la rete e non restituisce il proprio indirizzo IP al server
DHCP, quell’indirizzo andrà definitivamente perduto. Per impedire che questo accada,
l’asseganzione dell’indirizzo IP può essere fissata per un periodo di tempo, mediante una tecnica
chiamata leasing. Poco prima della scadenza del leasing, l’host deve chiedere al server DHCP il
rinnovo dell’indirizzo.

Per un terminale appena arrivato il protocollo DHCP si comporta:


 Trovare 1 server DHCP con cui interagire utilizzando un messaggio DHCP in brodcast
utilizzando indirizzo 255.255.255.255 e indirizzo di sorgente per il terminale 0.0.0.0 in
quanto non conosce ancora IP della rete tanto meno indirizzo IP di un server DHCP. Il
messaggio è ricevuto da tutte le macchine della rete incluso server DHCP.

 Un server DHCP riceve messaggio di scoperta risponde al client con 1 messaggio di offerta
DHCP.Nella rete se ci sn più server DHCP il client si trova a dover scegliere tra diverse
offerte

77
 Sceglierà una delle offerte è manda un messaggio di richiesta DHCP che ripete all’indietro i
parametri di configurazione

 Il server risponde al messaggio di richiesta DHCP con un messaggio ACK DHCP che
conferma i parametri

NAT
L’idea di base di NAT è assegnare un singolo indirizzo IP(o al massimo un piccolo numero di
indirizzi) per il traffico internet. Prendiamo come esempio un azienda; dentro l’azienda, ogni
computer riceve un indirizzo IP unico utilizzato per instradare il traffico interno alla rete locale, ma
quando un pacchetto lascia l’azienda e si dirige verso l’ISP, viene eseguita una traduzione di
indirizzo. Per rendere fattibile questo schema, sono stati dichiarati privati tre intervalli di indirizzi
IP, che possono essere utilizzate internamente come si preferisce. I tre intervalli sono:
10.0.0.0 – 10.255.255.255 /8 (16.777.216 host)
172.16.0.0 – 172.31.255.255 /12 (1.048.576 host)
192.168.0.0 – 192.168.255.255 /16 (65.536 host) citati a titolo informativo.
Dentro i locali dell’azienda, ogni macchina ha un unico indirizzo espresso nella forma 10.x.y.z, ma
quando un pacchetto lascia l’azienda, passa attraverso un dispositivo NAT che converte l’indirizzo
IP 10.x.y.z nel vero indirizzo IP assegnato all’azienda 138.76.29.7. Il dispositivo NAT è spesso
abbinato a un firewall proteggendo la rete locale (almeno). Naturalmente i dati sono indirizzati a
138.76.29.7 e quindi il dispositivo NAT a scegliere l’indirizzo interno corretto.

I progettisti di NAT hanno osservato che la maggior parte dei pacchetti IP trasporta carichi utili
TCP o UDP, entrambi i protocolli hanno intestazioni che tengono una porta sorgente e una porta di

78
destinazione. Le porte sono numeri interi lunghi 16bit che indicano dove inizia e finisce la
connessione TCP, e offrono il campo che permette di far funzionare NAT. Quando un processo
desidera stabilire una connessione TCP con un processo remoto, si lega a una porta TCP inutilizzata
presente nella sua macchina; questa porta è chiamata porta sorgente e indica al codice TCP dove
devono essere inviati i pacchetti in arrivo appartenenti alla connessione. Il processo fornisce anche
una porta di destinazione che indica chi deve ricevere i pacchetti sulla parte remota; le porte da 0 a
1023 sono riservate a servizi noti. Quando un client di una rete locale contatta un host su Internet,
invia pacchetti destinati a quell'host. Questi pacchetti contengono tutte le informazioni di
indirizzamento necessari per raggiungere la loro destinazione. NAT interagisce con queste
informazioni:

 Indirizzo IP sorgente (per esempio, 192.168.1.35)


 Porta TCP o UDP sorgente (per esempio, 2132)

Quando i pacchetti attraversano il gateway NAT, questi saranno modificati così da apparire come se
venissero direttamente dal gateway NAT. Il gateway NAT registrerà i cambiamenti effettuati nella
sua tabella di stato così può a) eseguire le operazioni inverse sui pacchetti di ritorno e b) assicurarsi
che i pacchetti di ritorno siano passati attraverso il firewall e non siano bloccati. Per esempio
possono essere fatti i seguenti cambiamenti:

 Indirizzo IP sorgente: sostituito con l'indirizzo esterno del gateway (per esempio, 24.5.0.5)
 La porta sorgente: sostituita con una porta non usata del gateway scelta a caso (per esempio,
53136)

Sia l'host locale che quello di Internet non si accorgono di questi cambiamenti. Per il computer della
rete locale, il sistema NAT è semplicemente il gateway per Internet. L'host di Internet è
completamente ignaro dell'esistenza della workstation locale e il pacchetto apparirà come se venisse
direttamente dal sistema NAT.
Quando l'host di Internet risponde ai pacchetti ricevuti dalla workstation locale, lo fa indirizzando i
pacchetti all'IP del gateway NAT (24.5.0.5) e alla porta traslata (53136). Il gateway NAT cercherà
nella tabella di stato una corrispondenza tra i pacchetti in arrivo e una connessione già stabilita.
Verrà trovata un'unica corrispondenza basata sulla combinazione IP/porta che consente a PF di
capire che il pacchetto appartiene a una connessione esistente iniziata dall'host locale 192.168.1.35.
PF farà quindi gli opposti necessari cambiamenti e invierà i pacchetti di risposta alla workstation
interna.
Sebbene questo schema in un certo senso risolva il problema, molti non lo pensano affatto, ecco
alcune delle obiezioni: Primo, NAT viola i modello gerarchico di IP, che afferma che ogni indirizzo
IP identifica in modo univoco a livello mondiale una singola macchina. Secondo, NAT trasforma
internet da una rete ad assenza di connessione in un tipo di rete orientata alle connessioni, perché il
dispositivo NAT deve conservare le informazioni relativa a ogni connessione che lo attraversa.
Terzo, NAT viola la più importante regola della stratificazione dei protocolli: lo strato k non deve
essere costretto a fare alcuna ipotesi su ciò che lo strato k+1 ha inserito nel campo che rappresenta il
carico utile. Questo principio fondamentale serve a rendere gli strati indipendenti. Quarto, i processi
su internet non sono obbligati a utilizzare TCP o UDP. Quinto, alcune applicazioni inseriscono gli
indirizzi IP nel corpo del testo; il ricevente estrae questi indirizzi e li utilizza. Poiché NAT non sa
nulla di questi indirizzi, non è in grado di sostituirli, perciò qualunque tentativo di utilizzarli
fallirebbe.

79
IPV6
Al giorno d’oggi ormai gli indirizzi IPv4 stanno esaurendo. Per risolvere questo problema si è
lavorato su una nuova versione di IP che non avrebbe mai esaurito i suoi indirizzi. I suoi obiettivi
principali sono: supportare miliardi di host; ridurre la dimensione delle tabelle di routine;
semplificare il protocollo, per consentire ai router di elaborare più rapidamente i pacchetti; offrire
una sicurezza migliore; fare più attenzione al tipo di servizio; aiutare la trasmissione multicast
permettendo si specificare gli ambiti; dare all’host la possibilità di spostarsi senza cambiare
indirizzo; permettere al protocollo di evolversi in futuro; consentire ai vecchi e ai nuovi protocolli
di coesistere per diversi anni. IPv6 ha molte differenza rispetto a IPv4. Prima di tutto, IPv6 ha
indirizzi più lunghi del processore. Essendo lunghi 16 byte, risolvono il problema fondamentale che
IPv6 deve risolvere: fornire una scorta di indirizzi internet praticamente illimitata. Seconda
differenza, IPv6 semplifica di molto il campo intestazione. Contiene solo sette campi, a differenza
dei 13 di IPv4. questa modifica permette ai router di elaborare i pacchetti più velocemente e di
migliorare le capacità di trasporto e di ritardo. Terzo, IPv6 ha migliorato il supporto per le opzioni,
in quanto, con la nuova intestazione, i campi che precedentemente erano obbligatori ora sono
opzionali. Quarto, IPv6 ha migliorato la sicurezza. Autenticazione e riservatezza sono le chiavi del
nuovo IP.

L’intestazione principale di IPv6

Il campo version contiene sempre il valore 6, associato a IPv6. Durante il periodo di transizione da
IPv4 i router saranno in grado di esaminare questo campo e identificare il tipo di pacchetto in
transito. Il campo traffic class, classe del traffico, è utilizzato per distinguere i pacchetti con diversi
requisiti di distribuzione in tempo reale. Il campo flow label, etichetta di flusso, consente ad una
sorgente e a una destinazione di impostare una pseudoconnesione con particolari proprietà e
requisiti. Quando appare un pacchetto con flow label diverso da zero, il router cerca l’etichetta nella
sua tabella interna per scoprire il tipo di trattamento speciale richiesto dal pacchetto. Ogni flusso è
rappresentato dall’indirizzo sorgente, dall’indirizzo di destinazione e dal numero di flusso, perciò
tra una coppia di indirizzi IP possono essere attivi molti flussi. Inoltre, in questo modo, anche se
due flussi provenienti da due host diversi ma con la stessa etichetta di flusso passano attraverso lo
stesso router, il router sarà in grado di distinguerli usando gli indirizzi sorgente e destinazione. Il
campo payload lenght, lunghezza campo dati, indica il numero di byte che seguono l’intestazione di
40 byte. Il campo next header, intestazione successiva, indica quale delle sei delle intestazioni
estese, se presente, segue l’intestazione corrente. In questi intestazioni estese ci sono alcuni campi

80
di IPv4. Tali intestazioni estese sono:

 Opzioni hop per hop, danno informazioni varie per i router;


 Opzioni di destinazione, danno informazioni aggiuntive relative alla destinazione;
 Routing, da la lista di router da visitare;
 Frammentazione, se presente dice come gestire i frammenti di datagramma;
 Autenticazione, se presente verifica l’identità del trasmittente;
 Carico utile cifrato, se presente da informazioni relative al contenuto cifrato.

Il campo hop limit, limite di hop, è utilizzato per impedire ai pacchetti di vivere per sempre. Gli
ultimi campi rappresentano l’indirizzo sorgente e l’indirizzo di destinazione.
Per quanto riguarda gli indirizzi, vennero scelti 16 byte di lunghezza fissa. Per scrivere tali indirizzi
è stata escogitata una nuova notazione. Gli indirizzi sono scritti come otto gruppi di quattro cifre
esadecimali separate da due punti:

Poiché numerosi indirizzi possono contenere numerosi zero, sono state effettuate tre ottimizzazioni.
Primo, è possibile omettere gli zeri iniziali di un gruppo. Secondo, uno o più gruppi contenenti 16
bit a zero possono essere sostituiti da due punti. Perciò, l’indirizzo precedente diventa:

Infine, gli indirizzi IPv4 possono essere scritti in notazione decimale a punti dopo una coppia di due
punti:

Vediamo ulteriori differenze tra IPv6 e IPv4. In IPv6, soprattutto nel campo intestazione, sono stati
rimossi: il campo IHL, in quanto IPv6 ha una lunghezza fissa; il campo protocol, in quanto il campo
next header indica che cosa c’è dopo l’ultima intestazione IP. Tutti i campi che riguardano la
frammentazione sono stati rimossi, perché IPv6 gestisce la frammentazione in modo diverso. Infine
il campo checksum è stato eliminato perché l’elaborazione di questa informazione riduce
enormemente le prestazioni.

81
Migrazione IPV4 – IPV6
L’enorme dimensione di Internet e il grandissimo numero di utenti di IPv4 (la versione del
protocollo IP attualmente utilizzata su Internet) rendono impossibile una migrazione totale da IPv4
a IPv6 (la nuova versione del protocollo IP) in un preciso istante di tempo. Esistono caratteristiche
di IPv6 pensate esplicitamente per semplificare la migrazione. Gli obiettivi chiave della migrazione
sono:

 gli host IPv6 e IPv4 devono poter interoperare;


 gli host e i router IPv6 devono potersi diffondere su Internet in modo semplice ed
incrementale, con poche interdipendenze;
 i gestori delle reti e gli utenti finali devono percepire la migrazione come semplice da
comprendere e realizzare.

Alcuni meccanismi per la migrazione sono il tunneling e il dual stack; che elenchiamo di seguito.
Le tecniche di tunneling consentono di utilizzare il routing IPv4 per trasportare il traffico IPv6.Gli
host e i router dotati del dual stack (detti anche IPv4/IPv6) possono utilizzare i tunnel per instradare
i pacchetti IPv6 su porzioni di rete dotate unicamente di routing IPv4, come mostrato nell’esempio
di Figura 1.

Figura 1: Tunneling di IPv6 su IPv4


Nell’esempio, l’host A invia il pacchetto IPv6 nativo al router R1 che lo ritrasmette in un tunnel
IPv4 al router R2 che lo trasmette infine come pacchetto IPv6 nativo all’host B. In questo caso il
tunnel è gestito da R1 e R2.

Dal punto di vista dell’incapsulamento realizzare un tunnel significa incapsulare un pacchetto IPv6
in un pacchetto IPv4, come mostrato in Figura 2.

Nell’esempio precedente l’header IPv6 conterrà gli indirizzi A e B, mentre quello IPv4 gli indirizzi
R1 e R2.

Figura 2: Incapsulamento di IPv6 in IPv4

L’approccio dual stack consiste nel dotare gli host e i router degli stack di protocollo IPv6 e IPv4.

82
Nel caso di un host IPv6/IPv4 una possibile organizzazione degli stack di protocollo è illustrata in
Figura 3.

Si noti che l’approccio dual stack non richiede necessariamente la capacità di creare tunnel, mentre
la capacità di creare tunnel richiede l’approccio dual stack. In generale i due approcci sono entrambi
forniti dalle realizzazioni IPv6/IPv4.

Figura 3: Approccio Dual Stack

Una spiegazione semplicistica del modo di operare dell’approccio dual stack è la seguente:

 se l’indirizzo di destinazione utilizzato dall’applicazione è IPv4 allora si utilizza lo stack di


protocolli IPv4;
 se l’indirizzo di destinazione è IPv6 compatibile IPv4 allora si utilizza IPv6 incapsulato in
IPv4;

se l’indirizzo di destinazione è un indirizzo IPv6 di altro tipo si utilizza IPv6 eventualmente


incapsulato nel default configured tunnel.

83
R.P.F
La costruzione dei source-based trees è di solito basata sull’albero dei cammini (unicast) minimi,
costruibile dai router in modo analogo a quanto fatto con il routing unicast.
Reverse Path Forwarding (RPF): un router accetta un pacchetto multicast solo sull’interfaccia sulla
quale il router invierebbe un messggio unicast verso la sorgente del messaggio multicast ricevuto.

Il problema dei pacchetti che arrivano a nodi non coinvolti nel gruppo può essere risolto con la
tecnica detta di pruning i router che non hanno host associati al gruppo possono inviare dei
messaggi di prune risalendo al contrario lungo l’albero.

84
Firewall
La possibilità di connettere qualunque computer che si trova in qualunque posto a qualunque altro
computer in una qualsiasi località, può essere visto allo stesso tempo come una comodità e come
una fonte di problemi. Oltre al pericolo di vedere fuoriuscire delle informazioni, ci sono anche i
pericoli legati alla diffusione di informazioni verso l’interno. In particolare, virus, worm e altre
“pesti digitali” possono disturbare la sicurezza e distruggere dati importanti. Da qui sono nati i
firewall, vediamo una configurazione che ha due componenti: due router che fanno il filtraggio dei
pacchetti e un gateway applicativo. Esistono anche delle configurazioni più semplici, ma questa
struttura ha il vantaggio di obbligare ogni pacchetto a transitare attraverso n gateway applicativo sia
per entrare sia per uscire, non esistono altre strade.

Ogni packet filter (filtro di pacchetti) è un router standard equipaggiato con funzionalità extra.
Queste funzionalità permettono di ispezionare ogni pacchetto in arrivo o in uscita. I pacchetti che
rispondono a certi criteri vengono fatti passare, quelli che falliscono il test vengono scartati. I
pacchetti, dopo aver attraversato il primo ostacolo, proseguono verso il gateway applicativo per
un’ulteriore ispezione. I packet filter sono tipicamente gestiti tramite delle tabelle configurate
dall’amministratore di sistema. Queste tabelle elencano sorgenti e destinazioni accettabili e quelle
bloccate.

85
CAPITOLO 6

LIVELLO TRASPORTO

Lo strato trasporto è il cuore della gerarchia. Il suo compito è quello di fornire il trasporto dei dati,
affidabile ed efficiente in termini di costi, dal computer d’origine a quello di destinazione.

I servizi offerti agli strati superiori


L’obiettivo finale dello strato trasporto e fornire un servizio efficace ed efficiente in termini di costi
ai suoi utenti, che poi sono dei processi nello strato applicazione. Per raggiungere questo obiettivo,
lo strato trasporto utilizza i servizi forniti dallo strato network. L’hardware e il software dello strato
trasporto che svolge il lavoro è chiamato entità di trasporto. Esistono due tipi di servizio di
trasporto. Il servizio di trasporto orientato alla connessone viene effettuato in tra fasi: costituzione,
trasferimento dei dati e rilascio. Il servizio di trasporto senza connessione è simile al servizio di rete
senza connessione.

Le primitive del servizio di trasporto


Per consentire agli utenti di accedere al servizio di trasporto, lo strato trasporto deve fornire alcune
funzioni ai programmi applicativi, vale a dire una interfaccia per il servizio di trasporto. Il servizio
di trasporto è simile a quello network, ma vi sono alcune sostanziali differenze. Primo, che lo strato
network è destinato a modellare le reti reali, e quindi un servizio inaffidabile. Al contrario, il
servizio di trasporto è affidabile. Secondo, vi è una differenza fra i due strati per quanto riguarda i
destinatari. I messaggi inviati da entità di trasporto a entità di trasporto vengono chiamati TPDU
(transport protocol data unit). Di conseguenza, le TPDU (scambiate dallo strato trasporto) sono
contenute in pacchetti(scambiati dallo strato network). A loro volta, i pacchetti sono contenuti in
frame (scambiati nello strato Data Link). Vediamo come vengono utilizzate alcune primitive da un
servizio di trasporto.
 Il server esegue una primitiva LISTEN, che esegue una chiamata di sistema per bloccare il
server fino all’accensione di un client.

 Quando un client desidera comunicare con il server, esegue una primitiva CONNECT.
L’entità di trasporto esegue questa primitiva bloccando il chiamante e inviando un pacchetto
al server.

 Questa CONNECT provoca l’invio al server di una TPDU CONNECTION REQUEST.

 Quando arriva, l’entità di trasporto controlla se il server è bloccato su una chiamata


LISTEN.

 Sblocca poi il server ed invia una TPDU CONNECTION ACCEPTED al client. Quando
questa TPDU arriva al client, si sblocca e la connessione è stabilita. Ora i dati possono
essere scambiati con le primitive SEND e RECEIVE.

 Quando una connessione non è più necessaria, deve essere rilasciata per liberare spazio nella
tabella all’interno delle due entità di trasporto.

La disconnessione presenta due varianti. La prima, detta asimmetrica, ogni utente del trasporto può
emettere una primitiva DISCONNECT, che provoca l’invio di una TPDU DISCONNECT all’entità
di trasporto remota. Dopo l’arrivo, la connessione viene rilasciata. La seconda, detta simmetrica,
ogni direzione viene chiusa separatamente, indipendentemente dall’altra. In questo modello, una
connessione viene rilasciata quando entrambi i lati hanno inviato DISCONNECT.

86
I Socket Berkley
Un altro insieme di primitive di trasporto sono i socket Berkley utilizzate per TCP. Seguono
all’incirca il modello precedente, ma offrono maggiori caratteristiche e flessibilità. La primitiva
SOCKET crea un nuovo punto finale e alloca spazio nella tabella all’interno dell’entità di trasporto,
i parametri della chiamata specificano il formato d’indirizzamento da utilizzare, il tipo di servizio, e
il protocollo.

 I socket appena creati non hanno indirizzi di rete, che vengono assegnati con la primitiva
BIND.

 I client remoti possono connettersi al server dopo che ha associato un indirizzo a un socket.

 A questo punto viene la chiamata LISTEN, che alloca spazio per accodare le chiamate in
ingresso, nel modello socket LISTEN non è una chiamata bloccante.

 Per bloccarsi in attesa di una connessione in ingresso il server esegue una primitiva
ACCEPT.

 Quando arriva una TPDU che richiede una connessione, l’entità di trasporto crea un nuovo
socket con le stesse proprietà di quello originale, e restituisce un corrispondente descrittore
di file.

 Il server può quindi generare un processo o un thread per gestire la connessione sul nuovo
socket, e tornare ad attendere la connessione successiva sul socket originale.

 ACCEPT restituisce un normale descrittore di file, che può essere utile per leggere e
scrivere in modo analogo a un file.

Osserviamo ora il client:

 Anche qui è necessario creare un socket utilizzando la primitiva SOCKET, ma BIND non è
richiesto perché l’indirizzo utilizzato non è importante per il server.

 La primitiva CONNECT blocca il chiamante e avvia il processo di connessione. Una volta


completato (vale a dire quando la TPDU appropriata viene ricevuta dal server), il processo

87
del client è sbloccato e viene stabilita la connessione.

 Entrambi i lati ora possono utilizzare SEND e RECEIVE per trasmettere e ricevere dati sulla
connessione full-duplx.

 Con i socket il rilascio della connessione è simmetrico: la connessione viene rilasciata


quando entrambi i lati hanno eseguito una primitiva CLOSE.

Gli elementi dei protocolli di trasporto


Il servizio di trasporto è implementato da un protocollo di trasporto utilizzato tra due entità di
trasporto. I protocolli di trasporto ricordano quelli del livello Data Link, ma hanno delle sostanziali
differenze, dovute agli ambienti diversi in cui operano i protocolli. Ad esempio nello strato Data
Link due router comunicano direttamente tramite canale fisico, mentre nello strato trasporto il
canale fisico è sostituito dall’intera sottorete. Poi, nello strato Data Link non è necessario che il
router specifichi con quale router vuole comunicare. Nello strato trasporto è invece richiesto
l’indirizzamento esplicito delle destinazioni. Un’altra differenza tra i due strati è la potenziale
esistenza di capacità di memorizzazione della sottorete.

L’indirizzamento
Quando un processo applicativo vuole creare una connessione verso un processo applicativo
remoto, deve specificare a quale intende connettersi. Il metodo utilizzato consiste nel definire
indirizzi di trasporto su cui i processi possono restare in ascolto delle richieste di connessione. Su
internet questi punti finali vengono chiamate porte, denominate anche TSAP(transport service acces
point). I corrispondenti punti finali nello strato network sono chiamati NASP (ad esempio gli
indirizzi IP sono esempi di NASP).

I processi applicativi, client e server, possono collegarsi a un TSAP per stabilire una connessione
con TSAP remoto. Queste connessioni scorrono attraverso gli NASP su ogni host. Il motivo per cui
servono i TSAP è che in alcune reti ogni computer possiede un singolo NSAP, pertanto è necessario
distinguere in qualche modo i diversi punti finali di trasporto che condividono tale NASP.
I processi utente spesso vogliono comunicare con altri processi utente che esistono solo per un
breve periodo di tempo, e non possiedono un indirizzo TSAP conosciuto in anticipo. Inoltre, se
esistono molti processi del server di cui alcuni utilizzati raramente, è dispendioso mantenerli tutti
attivi e in ascolto su di un indirizzo IP stabile tutto il giorno. Per risolvere questo inconveniente si
utilizza uno schema noto come protocollo di connesione iniziale.

88
Anziché avere ogni server in ascolto su uno TSAP noto, ogni macchina che desidera offrire servizi
agli utenti remoti dispone di uno speciale process server che agisce da proxy per i server utilizzati
raramente. Ascolta un insieme di porte contemporaneamente, attendendo una richiesta di
connessione. I potenziali utenti di un servizio iniziano con una richiesta CONNECT, specificando
l’indirizzo TSAP desiderato. Se nessun server è in attesa, la connessione avviene con process
server. Dopo aver ottenuto la richiesta di ingresso, il process server crea il server richiesto,
consentendogli di ereditare la connessione esistente con l’utente. Il nuovo server svolge quindi il
lavoro, mentre il processo server torna ad ascoltare nuove richieste.

Stabilire la connessione
Sembra facile stabilire una connessione, ma in realtà l’operazione è complessa. Il problema si
verifica se la rete può perdere, memorizzare e duplicare i pacchetti. Questo comportamento provoca
serie complicazioni. Si immagini una sottorete così congestionata che gli ack non riescono quasi
mai a tornare indietro in tempo, ogni pacchetto subisce un timeout e viene ritrasmesso due o tre
volte. Il nodo del problema è l’esistenza di duplicati ritardati. Può essere affrontato in vari modi.
L’idea di base è assicurare che non siano mai in circolazione contemporaneamente due TPDU
numerate in modo identico. Per avere una numerazione univoca anche in caso di riavvio della
macchina, si usa un clock che assume tutti e soli i 2^32 valori possibili dei numeri di sequenza.
Diciamo T il tempo dopo il quale un pacchetto è da considerarsi definitivamente perduto, e
imponiamo che se il tempo corrente è X si possono generare solo numeri di sequenza a partire da(l
modulo di) X. Si definisce zona proibita la fascia contenente tutte le combinazioni di tempo e
numero di sequenza non valide. Rispettando questo limite sappiamo che, anche se la macchina
viene riavviata e perde la memoria, può ricominciare a generare numeri di sequenza a partire da(l
modulo di) X senza temere conflitti con pacchetti passati, perchè nel tempo T appena trascorso era
vietato generare questo stesso numero; pacchetti con questo numero più vecchi di T ormai saranno
gettati. La velocità massima non può superare un pacchetto per ogni battito del clock o
“toccheremo” la zona proibita.

Il metodo basato sull’orologio risolve per le TPDU dati il problema del duplicato in ritardo;
tuttavia, affinché questo metodo sia utile bisogna prima stabilire una connessione. Dal momento che
anche le TPDU di controllo possono essere ritardate, esiste un problema potenziale per accordare le
due parti sul numero di sequenza iniziale. Per risolvere questo problema è stato introdotto
l’handshake a tre vie. Questo protocollo non richiede a entrambe le parti d’iniziare la trasmissione

89
partendo dallo stesso numero di sequenza, pertanto può essere utilizzato con metodi di
sincronizzazione diversi dal metodo dell’orologio. L’host 1 sceglie un numero di sequenza, x, e
invia una TPDU CONNECTION REQUEST contenente x all’host 2. L’host 2 risponde con una
TPDU ACK che riconosce x e annuncia il suo numero di sequenza, y. Per finire, l’host 1 riconosce
la scelta del numero di sequenza iniziale dell’host 2 nella prima TPDU dati inviata.

(a) (b) (c)

Vediamo come funziona l’handshake a tre vie in presenza di TPDU di controllo duplicate e
ritardate. (b) la prima TPDU è una CONNECTION REQUEST duplicati e ritardata che si riferisce a
una vecchia connessione. Questa TPDU arriva all’host 2 senza che l’host 1 lo sappia. L’host 2
reagisce inviando all’host 1 una TPDU ACK, chiedendo in definitiva una conferma del fatto che
l’host 1 sta tentando di impostare una nuova connessione. Quando l’host 1 rifiuta il tentativo di
stabilire una connessione dell’host 2, l’host 2 comprende di essere stato ingannato da un duplicato
in ritardo, e abbandona la connessione: grazie a questo metodo un duplicato in ritardo non fa danni.
Il caso peggiore (c), si verifica quando nella sottorete circolano sia una CONNECTION REQUEST
ritardata sia un ACK. Come nell’esempio precedente, l’host 2 riceve una CONNECTION
REQUEST ritardata e risponde ad essa. A questo punto è fondamentale comprendere che l’host 2 ha
proposto l’utilizzo di y come numero di sequenza iniziale per il traffico dall’host 2 all’host 1,
sapendo bene che nessuna TPDU contenente il numero di sequenza y è ancora in circolazione.
Quando la seconda TPDU ritardata giunge all’host 2, il fatto che sia stato riconosciuto z al posto di
y comunica all’host 2 che anche questo è un vecchio duplicato. E’ importante osservare che non
esiste una combinazione di vecchie TPDU che può provocare il fallimento del protocollo o
l’instaurarsi accidentale di una connessione indesiderata.

Il Rilascio della Conessione


Rilasciare una connessione è più semplice che stabilirla, ma comunque qualche piccolo problema
c'è anche in questa fase. In questo contesto, rilasciare la connessione significa che l'entità di
trasporto rimuove le informazioni sulla connessione dalle proprie tavole e informa l'utente di livello
superiore che la connessione è chiusa. Ci sono due tipi di rilasci: asimmetrico, simmetrico.
Nel primo caso (esemplificato dal sistema telefonico) quando una delle due parti "mette giù" si
chiude immediatamente la connessione. Ciò però può portare alla perdita di dati, in particolare di
tutti quelli che l'altra parte ha inviato e non sono ancora arrivati.
Nel secondo caso si considera la connessione come una coppia di connessioni unidirezionali, che
devono essere rilasciate indipendentemente. Quindi, lungo una direzione possono ancora scorrere
dei dati anche se la connessione lungo l'altra direzione è stata chiusa. Il rilascio simmetrico è utile
quando un processo sa esattamente quanti dati deve spedire, e quindi può autonomamente decidere
quando rilasciare la sua connessione in uscita. Se invece le due entità vogliono essere d'accordo
prima di rilasciare la connessione, un modo di raggiungere lo scopo potrebbe essere questo:

90
Purtroppo, le cose non sono così semplici: c'è un problema famoso in proposito, il problema delle
due armate:

La definizione del problema è la seguente:

 i due eserciti che compongono l'armata A sono ciascuno più debole dell'esercito che
costituisce l'armata B;
 l'armata A però nel suo complesso è più forte dell'armata B;
 i due eserciti dell'armata A possono vincere solo se attaccano contemporaneamente;
 i messaggi fra gli eserciti dell'armata A sono portati da messaggeri che devono attraversare
il territorio dell'armata B, dove possono essere catturati.

Come fanno ad accordarsi gli eserciti dell'armata A sull'ora dell'attacco? Una possibilità è la
seguente:

 il comandante dell'esercito 1 manda il messaggio "attacchiamo a mezzanotte. Siete


d'accordo?";

 il messaggio arriva, un ok di risposta parte e arriva a destinazione, ma il comandante


dell'esercito 2 esita perché non può essere sicuro che la sua risposta sia arrivata.

Si potrebbe pensare di risolvere il problema con un passaggio in più (ossia con un three-way
handshake): l'arrivo della risposta dell'esercito 2 deve essere a sua volta confermato. Ora però chi
esita è il comandante dell'esercito 1, perché se tale conferma si perde, l'armata 2 non saprà che la
sua conferma alla proposta di attaccare è arrivata e quindi non attaccherà. Aggiungere ulteriori
passaggi non aiuta, perché c'è sempre un messaggio di conferma che è l'ultimo, e chi lo spedisce
non può essere sicuro che sia arrivato. Dunque, non esiste soluzione. Se ora sostituiamo la frase
"attacchiamo l'armata B" con "rilasciamo la connessione", vediamo che si rischia effettivamente di
non rilasciare mai una connessione. Per fortuna, rilasciare una connessione è meno critico che
attaccare un'armata nemica. Quindi, qualche rischio si può anche prendere.

91
Un protocollo di tipo three-way handshaking arricchito con la gestione di timeout è considerato
adeguato, anche se non infallibile:

 il mittente invia un disconn.request e, se non arriva risposta entro un tempo prefissato


(timeout), lo invia nuovamente per un massimo di n volte:

 appena arriva una risposta (disconn.request) rilascia la connessione in


ingresso e invia un ack di conferma;

 se non arriva nessuna risposta, dopo l'ultimo timeout rilascia comunque la


connessione in ingresso;

 il destinatario, quando riceve disconn.request, fa partire un timer, invia a sua volta un


disconn.request e attende l'ack di conferma. Quando arriva l'ack o scade il timer, rilascia
la connessione in ingresso.

Normalmente il funzionamento è il seguente:

se si perde l’ACK →

Se invece si perde la risposta alla prima proposta di chiusura (supponendo che il timeout del
destinatario sia molto più ampio di quello del mittente):

Infine, si può perdere la risposta alla prima proposta di chiusura e tutte le successive proposte di

92
chiusura:

Il protocollo fallisce se tutte le trasmissioni di disconn.request della peer entity che inizia la
procedura si perdono: in tal caso essa rilascia la connessione, ma l'altra entity non se ne accorge e la
tiene aperta. Il risultato è una half-open connection. Un modo per risolvere il problema è che le
parti rilascino una connessione quando passa un certo lasso di tempo (ad es. 60 secondi) senza che
arrivino dati. Naturalmente, in tal caso, i processi devono scambiarsi dei dummy TPDU, cioé dei
TPDU vuoti, con una certa frequenza anche se non c'è necessità di comunicare alcunché, per evitare
che la connessione cada.

Il Protocollo di Trasposto Interenet: UDP


UDP (user datagram protocol) è un protocollo senza connessione. Quindi offre un modo per inviare
datagrammi IP incapsulati senza dover stabilire una connessione. UDP trasmette segmenti costituiti
da una intestazione di 8 byte seguita dal carico utile. Le due porte servono per identificare i punti
finali all’interno dei computer origine e destinazione. Quando arriva un pacchetto UDP, il suo
carico utile è consegnato al processo associato alla porta di destinazione. La porta di origine serve
principalmente quando si deve inviare una risposta all’origine. Copiando il campo source port dal
segmento in ingresso nel campo destination port del segmento in uscita, il processo che invia la
risposta può specificare il processo sulla macchina sorgente che deve riceverla.

Il campo UDP lenght include l’intestazione di 8 byte e i dati. UDP checksum è facoltativo e
contiene 0 se non è elaborato ( un vero 0 elaborato e memorizzato con tutti 1). UDP non può
gestire il controllo del flusso, il controllo degli errori o della ritrasmissione dopo la ricezione di un
segmento errato. Questi compiti sono lasciati ai processi utente.

93
Il protocollo di trasporto internet: TCP
TCP (trasmission control protocol) è stato progettato per fornire un flusso di byte affidabile end-to-
end su una internetwork inaffidabile. Ogni computer che supporta TCP dispone di una entità di
trasporto TCP, che gestisce i flussi TCP e le interfaccie verso lo strato IP. Un’entità TCP accetta dai
processi locali i flussi dati dell’utente; li suddivide in pezzi di dimensione non superiore 64 KB:
infine invia ogni pezzo in datagramma IP autonomo. I datagrammi contenenti i dati TCP che
arrivano al computer vengono consegnati all’entità TCP che ricostruisce i flussi di byte originali.

Il modello di servizio TCP


Il servizio TCP è ottenuto con la creazione di punti finali da parte di mittente e ricevente, che
vengono chiamati socket. Ogni socket possiede un indirizzo (il numero di socket) composto
all’indirizzo IP dell’host e da un numero di 16 bit locale dell’host, chiamato porta. Un socket
supporta più connessioni contemporaneamente. Quindi due o più connessioni possono terminare
sulla stessa socket. Tutte le connessioni TCP sono full-duplex e punto-punto. Full-duplex nel senso
che il traffico procede in entrambe le direzioni. Punto-punto, nel senso che ogni connessione ha due
punti finali. Una connesione TCP è un flusso di byte, non un flusso di messaggi. I confini dei
messaggi non vengono conservati da una estremità all’altra della connessione. Per esempio, se il
processo mittente esegue quattro scritture di 512 byte su un flusso TCP, questi dati possono essere
consegnati al processo ricevente come quattro blocchi, due blocchi, un solo blocco.

Il protocollo TCP
Una funzionalità importante del TCP, consiste nel fatto che ogni byte in una connessione TCP ha un
proprio numero di sequenza a 32 bit. Le entità TCP di invio e ricezione scambiato i dati sotto forma
di segmenti. Un segmento TCP consiste di un’intestazione fissa di 20 byte (più una parte
facoltativa) seguita da zero o più byte di dati. Il software TCP decide la dimensione dei segmenti, e
può accumulare in un segmento i dati provenienti da più scritture. Ogni rete ha una MTU(maximum
transfer unit) e ogni segmento deve essere contenuto nella MTU. In pratica, la MTU è
generalmente lunga 1.500 byte (la dimensione del carico utile di Ethernet). Il protocollo di base
utilizzato dalle entità TCP è il protocollo sliding window.

94
L’intestazione del segmento TCP

Ogni segmento inizia con una intestazione di 20 byte con formato fisso; l’intestazione fissa può
essere seguita da alcune opzioni dell’intestazione. Dopo le opzioni, seguono fino a 65.535 – 20 – 20
= 65.495 byte di dati, dove i primi 20 fanno riferimento all’intestazione IP e i secondi
all’intestazione TCP. I campi source port e destination port identificano gli estremi locali della
connessione. Una porta e l’indirizzo IP del suo host formano un punto finale univoco di 48 bit. I
campi sequence number e ack number eseguono le loro solite funzioni. Entrambi sono lunghi 32 bit,
perché ogni byte di dati è numerato in un flusso TCP. Il campo TCP haader lenght indica quante
parole di 32 bit sono contenute nell’intestazione TCP. L’informazione è necessaria in quanto il
campo options ha una lunghezza variabile. Segue un campo di 6 bit inutilizzato. Seguono sei flag di
1 bit. URG è impostato quando si usa il campo urgent pointer, che indica l’offset in byte, partendo
dal numero di sequenza corrente, in cui si trovano i dati urgenti. Il bit ACK è impostato a 1 per
indicare che ack number è valido. Se ACK è 0, il segmento non contiene un ACK. Il bit PSH
segnala la presenza di dati PUSH. Al ricevitore viene chiesto di consegnare i dati all’applicazione
all’arrivo, e di non archiviarli nel buffer per poi trasmettere un buffer completo. Il bit RST viene
utilizzato per reimpostare una connessione che è diventata incongruente a causa di un crash
dell’host. Il bit SYN viene utilizzato per stabilire una connessione. La richiesta di connessione
presenta SYN = 1 e ACK = 0 per indicare che il campo ack non è utilizzato. La replica della
connessione porta un ack, pertanto possiede SYN = 1 e ACK = 1. Il bit FIN viene utilizzato per
rilasciare una connessione. Specifica che il mittente non ha altri dati da trasmettere. Il controllo di
flusso in TCP è gestito con una sliding window a dimensione variabile. Il campo window size indica
quanti byte possono essere inviati a partire da quello che ha ricevuto ack. Per una maggiore
flessibilità viene anche fornito un campo checksum, che esegue la somma di controllo
dell’intestazione, dei dati e della pseudointestazione.

La pseudointestazione contiene gli indirizzi IP a 32 bit delle macchine di origine e destinazione, il


numero di protocollo per TCP, contiene il numero 6, e il conteggio dei byte per il segmento
TCP(compresa l’intestazione). Includendo la pseudointestazione nel calcolo della somma di
controllo TCP è possibile rilevare i pacchetti consegnati in modo errato, ma si viola la gerarchia dei
protocolli. Il campo options è un modo per aggiungere caratteristiche extra non disponibili nella
normale intestazione. L’opzione più importante è quella che permette a ogni host di specificare il

95
carico utile massimo che TCP potrà accettare. Un’altra opzione è l’utilizzo della ripetizione
selettiva al posto del protocollo go back n. Infine l’introduzione dei NAK per consentire al ricevente
di chiedere uno o più segmenti specifici.

Costituzione della connessione TCP


Si usa il three-way handshake visto precedentemente: una delle due parti (diciamo il server) esegue
due primitive, listen() e poi accept() rimanendo così in attesa di una richiesta di connessione su
un determinato port number e, quando essa arriva, accettandola; l'altra parte (diciamo un client)
esegue la primitiva connect(), specificando host, port number e altri parametri quali la dimensione
massima dei segmenti, per stabilire la connessione; tale primitiva causa l'invio di un segmento TCP
col bit syn a uno e il bit ack a zero; quando tale segmento arriva a destinazione, l'entity di livello
transport controlla se c'è un processo in ascolto sul port number in questione: se non c'è nessuno in
ascolto, invia un segmento di risposta col bit rst a uno, per rifiutare la connessione; altrimenti,
consegna il segmento arrivato al processo in ascolto; se esso accetta la connessione, l'entity invia un
segmento di conferma, con entrambi i bit syn ed ack ad uno, secondo lo schema sotto riportato.

Nel caso in cui due host tentino contemporaneamente di stabilire una connessione tra gli stessi due
socket il risultato di questi eventi è la costituzione di una sola connessione, e non due, perché le
connessioni sono identificate dai loro punti finali. Se la prima attivazione genera una connessione
identificata da (x,y) e la seconda svolge la stessa operazione, viene creata una sola voce della tabella
per (x,y).

96
Il rilascio della connessione TCP
Anche se le connessioni TCP sono di tipo full-duplex, il rilascio della connessione viene effettuato
in modo indipendente da parte dei due host. Per rilasciare una connessione, entrambe le parti
possono inviare un segmento TCP con il bit FIN impostato, per indicare che non hanno più dati da
trasmettere. Quando FIN riceve l’ack la direzione viene chiusa per i nuovi dati. Quando entrambe le
direzioni saranno chiuse la connessione verrà rilasciata. Per evitare il problema dei due eserciti si
usano i timer. Se una risposta a FIN non arriva entro la durata massima di due pacchetti, il mittente
FIN rilascia la connessione, l’altro lato noterà che nessuno sembra ascoltarlo più e andrà in timeout.

Il modello della gestione della connessione TCP


I passaggi richiesti per stabilire e rilasciare le connessioni possono essere rappresentati in una
macchina a stati finiti con 11 stati. Le linee spesse mostrano il client che collegato in maniera attiva
al server, quest’ultimo ha le linee tratteggiate. Le linee sottili rappresentano sequenze di eventi.
Ogni linea è contrassegnata da una coppia evento\azione.

In ogni stato sono ammessi alcuni eventi. Quando un programma applicativo sulla macchina client
emette una richiesta CONNECT, l’entità TCP locale crea un record per la connessione, la
contrassegna nello stato SYN SENT e invia un segmento SYN. Quando arriva SYN + ACK, TCP
invia l’ACK finale dell’handshake a tre vie e passa nello stato ESTABILISHED. Ora è possibile
inviare e ricevere dati. Quando un’applicazione ha finito, esegue una primitiva CLOSE, che
provoca l’invio da parte dell’entità TCP locale di un segmento FIN e l’attesa dell’ACK
corrispondente. Quando arriva l’ACK, viene eseguita una transazione allo stato FIN WAIT 2 e una
direzione della connessione si chiude. Quando anche l’altro lato esegue la chiusura, viene ricevuto
un FIN che richiede l’invio di un ACK. Ora entrambi i lati sono chiusi, ma TCP attende per un
tempo uguale alla durata massima del pacchetto per garantire che tutti i pacchetti della connessione
siano scaduti. Alla scadenza del timer, TCP elimina i record della connessione. Ora esaminiamo la
gestione della connessione dal punto di vista del server. Il server esegue un LISTEN e attende che
qualcuno effettui l’attivazione. Quandi SYN arriva, provoca come risposta un ack e il server passa
allo stato SYN RCVD. Quando il SYN del server riceve un ack l’handshake a tre vie è completo e il
server passa allo stato ESTABILSHED. Ora può avvenire il trasferimento dei dati. Quando il client

97
ha terminato esegue CLOSE, che provoca l’arrivo di FIN al server. Il server riceve un signal.
Quando a sua volta esegue CLOSE, FIN viene mandato al client. All’arrivo dell’ack del client, il
server rilascia la connessione ed elimina i record della connessione.

Il criterio di trasmissione TCP


La gestione della finestra in TCP non è associata agli ack. Si supponga che il ricevente abbia un
buffer di 4.096 byte. Se il mittente trasmette un segmento di 2.048 byte che viene correttamente
ricevuto, il ricevente darà un ack al segmento. Tuttavia, dal momento che ora possiede solo 2.048
byte di spazio nel buffer (fino a quando l’applicazione rimuove alcuni dati dal buffer),
“pubblicizza” una finestra di 2.048 byte partendo dal successivo byte previsto.

Ora il mittente trasmette altri 2.048 byte, che ricevono ack; la finestra pubblicizzata è quindi 0. Il
mittente deve fermarsi fino a quando il ricevente ha rimosso alcuni dati dal buffer. Quando la
finestra è 0, il mittente non può di norma inviare segmenti, con due eccezioni. Prima: è possibile
inviare dati urgenti, per esempio per consentire all’utente di interrompere il processo in esecuzione
sulla macchina remota. Seconda: il mittente può inviare un segmento di 1 byte, per fare in modo che
il ricevente annunci di nuovo il successivo byte previsto e la dimensione della finestra. I mittenti
non sono obbligati a trasmettere i dati appena li ricevono dall’applicazione, e i riceventi non hanno
l’obbligo di inviare gli ack il prima possibile. Nell’esempio TCP sapeva di avere a disposizione una
finestra di 4 KB all’arrivo dei primi 2 KB di dati, quindi si sarebbe comportato in modo legittimo se
avesse inserito dati nel buffer fino all’arrivo di altri 2 KB, in modo da trasmettere un segmento con
carico utile di 4 KB.

Il controllo della congestione


Quando il carico applicato a una rete è superiore a quello che può gestire, si verifica una
congestione. Lo strato network tenta di gestire le congestioni, anche se la maggior parte del lavoro è
svolta da TCP, perché la vera soluzione alle congestioni è la diminuzione della velocità dei dati.
L’idea è d’impedire l’inserimento di un nuovo pacchetto nella rete fino a quando un pacchetto
vecchio non la lascia (vale a dire viene consegnato). TCP tenta di raggiungere l’obbiettivo
manipolando dinamicamente la dimensione della finestra. Il primo passo per la gestione delle
congestioni è il rilevamento. La maggior parte dei timeout di trasmissione su internet è dovuta alla
congestione. Tutti gli algoritmi TCP Internet presumono che i timeout siano provocati dalla
congestione, e controllano i timeout per riscontrare i problemi. TCP cosa fa per impedire il
verificarsi delle congestioni? Quando viene stabilita una connessione si deve scegliere una
dimensione adatta per la finestra in base alla dimensione del suo buffer; se il mittente si attiene a
questa dimensione, non si verificheranno problemi dovuti al traboccamento del buffer all’estremità
ricevente, ma potrebbero ancora verificarsi a causa della congestione interna alla rete.

98
La soluzione Internet consiste nel comprendere l’esistenza di due distinti problemi potenziali
(capacità della rete e capacità del ricevente) e nel gestirli separatamente. A questo scopo ogni
mittente mantiene due finestre: quella che il ricevente ha garantito e una seconda, la finestra di
congestione. Ognuna riflette il numero di byte che il mittente può trasmettere. Il numero di byte che
possono essere inviati corrisponde alla più piccola delle due finestre. Se il ricevente afferma “invia
8 KB” ma il mittente sa che un pacchetto con dimensione superiore a 4 KB congestionerebbe la
rete, viene inviato un pacchetto di 4 KB. D’altra parte, se il ricevente afferma “invia 8 KB” e il
mittente sa che l’invio di un pacchetto di 32 KB non provocherebbe problemi, vengono inviati
comunque 8 KB richiesti. Quando viene stabilita una connessione, il mittente inizializza la finestra
di congestione alla dimensione del segmento usato sulla connessione, poi invia un segmento
massimo.
Se questo segmento riceve ack prima della scadenza del timer, aggiunge al valore della finestra di
congestione un numero pari alla dimensione del segmento, in modo che la sua dimensione sia il
doppio della dimensione massima del segmento. In pratica ogni gruppo che riceve ack raddoppia la
dimensione della finestra di congestione. La finestra di congestione continua a crescere in modo
esponenziale fino a un timeout o al raggiungimento della finestra del ricevente. L’idea è quella di
aumentare il valore della finestra di congestione fino al valore precedente di quello che ha
provocato il timeout. Questo algoritmo è chiamato avvio lento, ma non è per nulla lento: è
esponenziale. Tutte le implementazione TCP devono supportarlo. Osserviamo ora l’algoritmo della
congestione Internet. Utilizza un terzo parametro, una soglia iniziale pari a 64 KB, oltre alle finestre
di congestione e del ricevente. Al verificarsi di un timeout, la soglia viene impostata alla metà della
finestra di congestione corrente, e la finestra di congestione viene reimpostata alla dimensione
massima di un segmento. L’avvio lento viene quindi utilizzato per determinare che cosa può gestire
la rete, ma la crescita esponenziale termina al raggiungimento della soglia. Da quel punto in poi, le
trasmissioni avvenute con successo aumentano la finestra di congestione in modo lineare. In
definitiva l’algoritmo suppone che sia probabilmente accettabile tagliare a metà la finestra di
congestione, e poi lavora gradualmente partendo da questo valore.
Un esempio è mostrato di seguito:
La finestra aumenta sempre raddoppiando fino ad arrivare alla soglia massima e torna al valore
iniziale. TCP tahoe più vecchia; TCP Reno elimina partenza lenta.

99
Fairness
Se abbiamo k connessioni TCP ciascuno con 1 diverso percorso ma tutte passanti attraverso un link
colo di bottiglia con un ritmo di trasmissione r bit/s. se ogni connessione stia trasferendo un grande
file e che non ci sia traffico UDP. Un meccanismo di controllo della congestione è detto fair (equo)
Se il ritmo di trasmissione è pari a R/K cioè un’uguale porzione della banda del link.
Se abbiamo due connessioni TCP che condividono un singolo link con velocità trasmissione R se le
due connessioni hanno gli stessi MSS e RTT (hanno la stessa dimensione di congestione e lo stesso
throughput).

Se le due connessioni TCP condividono equamente la larghezza di banda del link, allora il
throughput ottenutò sarà a 45 gradi. Idealmente la somma dei throughput sarebbe uguale a R. Si
ottine una pari suddivisione della larghezza di banda e completa utilizzazione della larghezza di
banda.
Se le dimensioni della finestra TCP siano quelle per cui a un certo tempo, le connessioni 1 e 2
realizzano i throughput nel punto A. poiché l’ammontare della larghezza di banda delle due
connessioni e inferiore a R non ci saranno perdite, e entrambe le connessioni aumenteranno la
finestra di 1.
Il throughput delle due connessioni segue una linea a 45 gradi a partire dal punto A. alla fine la
larghezza di banda supererà R e si potrebbe avere la perdita di pacchetti. Se si perdono i pacchetti
quando realizzeranno i throughput al punto B le connessioni 1 e 2 diminuiscono le loro finestre di
un fattore due e si ritorna al punto C che sarà inferiore ad R, le due connessioni cresceranno ancora.
Alla fine la larghezza di banda realizzata dalle due connessioni fluttuerà lungo la linea di pari
suddivisione della larghezza di banda.

100
CAPITOLO 6

LIVELLO APPLICAZIONE

Lo strato applicazione fornisce, oltre ad alcuni protocolli, delle applicazioni reali utilizzate dagli
utenti. Né il TCP né UDP danno garanzia sui ritardi; le applicazioni sono sensibili al tempo.

Protocolli dello strato di applicazione


Bisogna distinguere tra applicazioni di rete e protocolli dello strato applicazione.
Protocollo dello strato applicazione è n pezzo di 1 applicazione di rete.
Il principale protocollo dello strato applicazione per la posta elettronica è l’SMTP (Simple Mail
Transfer Protocol).
Un protocollo dello strato applicazione definisce:
 i tipi di messaggi scambiati, es: richiesta e risposta
 la sintassi dei vari tipi di messaggi es: campi del messaggio e come sono caratterizzati
 la semantica dei campi, cioè significato dell’informazione
 le regole per determinare quando e come un processo invia messaggi o risposte a messaggi

Alcuni protocolli sono di pubblico dominio per esempio http, è disponibile come RFC;molti altri
protocolli sono riservati come quelli utilizzati dalla telefonia.

Lati client e server di un’applicazione


Un’applicazione ha 1 lato client e 1 lato server. Il lato client di un terminale comunica con il lato
server di un altro terminale. Nella posta elettronica il server che invia la posta implementa il lato
client dell’ SMTP e il server ricevente ne implementa il lato server.

Processi di comunicazione attraverso la rete


Applicazioni coinvolgono 2 processi in due diversi host che comunica tra loro attraverso la rete.
I due processi comunicano tra loro spedendo e ricevendo messaggi.
Un processo invia messaggi nella rete e riceve messaggi dalla rete attraverso il proprio socket.
Funziona con l’invio del messaggio fuori dalla propria porta (socket). Il messaggio verrà trasportato
attraverso internet fino alla porta del destinatario.
Socket costituisce l’interfaccia fra gli strati di applicazione e di trasporto all’interno di 1 host.

Indirizzamento dei processi


Affinché avviene la comunicazion tra gli host il processo che trasmette deve identificare il processo
ricevente quindi bisogna specificare 2 tipi di informazioni:
 il nome e l’indirizzo della macchina host
 un identificatore che specifichi l’identità del processo ricevente sull’host di destinazione

Nelle applicazioni Internet, l’host di destinazione è specificato dall’indirizzo ip.


IP è una quantita a 32 bit che identifica in modo univoco il terminale. Oltre a conoscere l’indirizzo
del terminale a cui il messaggio è destinato l’applicazione trasmittente deve anche specificare
informazioni che permettono all’host ricevente di inviare il messaggio all’appropriato processo su
quell’host.In internet il numero di porta del lato ricevente assolve a questo scopo es: http numero
porta 80; server posta SMTP numero porta 25.

101
Trasferimento affidabile dei dati
Alcune applicazioni come posta elettronica, trasferimento file,transazione finanziaria, richiedono
trasferimento di dati affidabile,cioè senza perdita di dati.
Altre applicazioni perdite tollerabili soprattutto x quanto riguarda applicazioni multimediali

Tempismo
Il requisito del servizio riguarda anche il tempismo.le applicazioni come telefonia,internet..
richiedono dei ritardi dell’ordine dei millisecondi.

Servizi forniti dai protocolli di trasporto Internet


Internet e le reti TCP/IP rendono disponibili 2 protocolli di trasporto: UDP e TCP
Chi crea applicazioni per internet una delle prime decisioni che deve prendere è se usare udp o tcp
offre un modello di servizio diverso dalle applicazioni che lo invocano

Servizi TCP
Comprende un servizio orientato alla connessione e un servizio di trasferimento affidabile dei dati.
Servizio orientato alla connessione: TCP effettua lo scambio tra client e server e li allerta
permettendo loro di prepararsi per l’arrivo massiccio di pacchetti.
La connessione e di tipo full-duplex perché i due processi possono inviare messaggi uno dopo
l’altro contemporaneamente sulla connessione. Quando l’applicazione ha concluso l’invio dei
messaggi, essa deve interrompere la connessione.
Servizio di trasporto affidabile: i processi possono confidare sul TCP per il recapito di tutti i dati
spediti senza errori e nell’ordine appropriato
TCP include un modello di controllo della congestione; tentando di limitare ciascuna connessione
TCP alla sua equa porzione della larghezza di banda. lo strozzamento della velocità di trasmissione
può avere un effetto molto dannoso sulle applicazioni audio e video in tempo reale
I servizi che il modello TCP non supporta:
1. non garantisce una velocità minima di trasmissione dei dati
2. non è permesso trasmettere a qualsiasi velocità che è regolata dal servizio di controllo della
congestione del TCP,che forza il mittente a spedire i pacchetti ad 1 bassa velocità
3. TCP nn dà nessuna garanzia sul ritardo

Servizi UDP
Protocco di trasporto leggero; è senza connessione, ma non è affidabile non dà garanzie che il
messaggio raggiungerà la destinazione oppure non arrivare in ordine.
L’UDP non comprende un meccanismo di controllo della congestione, quindi può andare a
qualsiasi velocità.
Vediamo che e-mail trasferimento file usano tutti il TCP. Queste applicazioni hanno scelto TCP
soprattutto perchè fornisce affidabilità nel trasferimento

Comunicazione tra processi


Una applicazione di rete (o distribuita) è un insieme di programmi che operano concorrentemente,
scambiandosi informazioni attraverso una rete. Per poter comunicare, una applicazione di rete
necessita di un supporto da parte dei sistemi. Il supporto sistemico per le applicazioni di rete è
offerto dal livello di applicazione dello stack Internet. Ogni processo che opera su un nodo della
rete, può scambiare messaggi con gli altri processi della medesima applicazione utilizzando i servizi
offerti dal livello di applicazione

102
E’ importante distinguere tra applicazioni e protocolli di applicazione. Un protocollo di
applicazione è implementato dal livello di applicazione. Quindi, un protocollo è una parte
(importante) di una applicazione.
Un protocollo del livello di applicazione definisce: i tipi di messaggi scambiati, per esempio,
messaggi di richiesta o di risposta; la sintassi dei vari tipi di messaggio, per esempio, i campi del
messaggio e come questi campi vengono codificati; la semantica dei messaggi, ovvero il significato
dell’informazione dei messaggi, e quale è il modo corretto di interpretarla; le regole per determinare
quando e come un processo invia messaggi o risponde a messaggi.
Il software del livello applicazione che realizza un protocollo si preoccupa di rispettare la specifica
data dal protocollo stesso.

Indirizzamento nella comunicazione tra processi


Affinché un lo strato di applicazione di un processo possa inviare un messaggio ad un altro
processo su di un altro nodo, è necessario identificare lo strato di applicazione del processo
ricevente.
Questo indirizzamento è composto di due parti: una identificazione del nodo su cui opera il
processo con cui si desidera comunicare; una identificazione del particolare processo all’interno di
quel nodo. L’indirizzamento di un processo è una funzione che viene fornita dallo strato di
trasporto. Nell’indirizzamento, il nome dell’host viene codificato in modo univoco su tutta Internet
mediante un indirizzo IP che è una parte del protocollo di livello rete IP. Il processo da indirizzare
viene identificato con una coppia di valori: il protocollo di trasporto che si intende utilizzare (TCP,
UDP o altro); l’unico processo (se esiste) sull’host indirizzato che sia associato ad un certo valore di
porta.

Requisiti delle applicazioni


Ogni applicazione di rete ha bisogno di servizi specifici. Ogni servizio specifico viene realizzato da
un opportuno protocollo, che può essere standard oppure progettato e realizzato ad hoc. Sebbene
ogni protocollo di livello applicativo abbia le proprie specificità, tuttavia il trasporto dei messaggi
da un punto ad un altro della rete è una caratteristica comune di tutte le applicazioni. Tuttavia esiste
più di un protocollo di trasporto. Quindi a seconda del tipo di applicazione, viene associato un tipo

103
di protocollo di trasporto. Infatti alcune applicazioni (ad esempio, audio) possono sopportare una
perdita di alcuni dati, altre applicazioni (ad esempio, trasferimento di files) richiedono un
trasferimento di informazione affidabile al 100%. Nel primo caso il protocollo di trasporto può
essere senza connessione: nello stack Internet, UDP. Nel secondo caso, il protocollo deve essere
orientato alla connessione, ovvero essere affidabile: nello stack Internet, TCP.
Poi alcune applicazioni (ad esempio, telefonia su Internet, giochi interattivi) richiedono ritardi
molto contenuti per essere efficaci. Se si utilizza il protocollo di trasporto TCP, non è affidabile dal
punto di vista temporale: un pacchetto è garantito che giunga integro a destinazione, ma non entro
un tempo stabilito a priori. Mentre il protocollo UDP è più veloce di TCP, dovendo effettuare meno
controlli, tuttavia non è temporalmente affidabile. Delle possibili soluzioni sono: usare un
protocollo in tempo reale, come RTP (Real Time Protocol); studiare i ritardi di rete e calibrare gli
apparati ed i collegamenti per garantire di restare nei limiti di tempo prefissati, quindi usare UDP o
TCP.
Infine, alcune applicazioni (ad esempio, multimedia) richiedono una quantità minima di larghezza
di banda per poter essere efficaci, altre applicazioni (elastiche) fanno uso della quantità di banda
che hanno a disposizione. Su Internet, proprio per la sua natura eterogenea, non è possibile garantire
la presenza di una certa quantità di banda per trasmettere un messaggio. Una soluzione consiste
nell’implementare un protocollo applicativo che realizza un circuito virtuale, oppure costruire un
protocollo flessibile, che fallisce o si adatta se la banda è insufficiente.

World Wide Web


Il World Wide Web (noto anche come www) è un’infrastruttura per l’accesso ai collegamenti sparsi
su milioni di macchine che appartengono a Internet.

Una panoramica dell’architettura


Dal punto di vista degli utenti, il Web è una vasta accolta mondiale di documenti o pagine Web.
Ogni pagina può contenere collegamenti ad altre pagine in modo che ogni pagina punti a
un’altra(l’ipertesto) situate ovunque nel mondo. Le pagine sono visualizzate con un programma
chiamato browser. Il browser preleva la pagina richiesta, interpreta il testo e i comandi di
formattazione, quindi visualizza la pagina correttamente formattata sullo schermo.

104
Il browser visualizza una pagina Web sulla macchina client. Quando l’utente fa clic una riga di testo
collegata a una pagina sul server abcd.com, il browser segue il collegamento ipertestuale inviando
un messaggio al server abcd.com per richiedere la pagina. All’arrivo della pagina, questa viene
visualizzata. Se la pagina contiene un collegamento ipertestuale a una pagina sul server xyz.com e
l’utente vi fa clic, il browser invia una richiesta a tale macchina, proseguendo così indefinitamente.

Il lato Client
Quando viene selezionato un elemento, il browser segue il collegamento ipertestuale e preleva la
pagina selezionata. Le pagine sono denominate utilizzando gli URL (Uniform Resource Locator).
Un URL tipico è http//www.abcd.com/products.html. Quando un utente fa clic su un collegamento
ipertestuale, il browser esegue una serie di passaggi per recuperare la pagina indicata, che sono:
 Il browser determina ‘URL (osservando che cosa è stato selezionato).
 Il browser chiede a DNS l’indirizzo IP della pagina indicata, es www.dmi.unict.it
 DNS risponde ad es con 156.106.192.32
 Il browser esegue una connessione TCP alla porta 80 su 156.106.192.32
 Invia quindi una richiesta per il file /home/index.html
 Il server www.dmi.unict.it invia il file /home/index.html
 La connessione TCP viene rilasciata
 Il browser visualizza tutto il testo in /home/index.html
 Il browser preleva e visualizza tutte le immagini in questo file

Per essere in grado di visualizzare la nuova pagina, il browser deve comprenderne il formato,
es (HTML).

Il lato Server
Quando l’utente digita un URL o fa clic su una riga dell’ipertesto, il browser analizza
sintatticamente l’URL e interpreta la parte tra http// e la barra successiva come il nome DNS da
ricercare. Preso l’indirizzo IP del server, il browser stabilisce una connessione TCP sulla relativa
porta 80. Invia poi un comando contenente il resto dell’URL, vale a dire il nome di un file sul
server, che quindi restituisce il file per la visualizzazione da parte del browser. Al server Web, viene
fornito il nome di un file da cercare e restituire. In entrambi i casi, i passaggi eseguiti dal server nel
suo ciclo principale sono i seguenti:
 Accettare una connessione TCP da un Client (un browser)
 Ottenere il nome del file richiesto
 Ottenere il file (dal disco)
 Restituire il file al Client
 Rilasciare la connessione TCP

PROTOCOLLO HTTP (HyperText Transfer Protocol)


Un protocollo è un insieme di regole che permettono di trovare uno standard di comunicazione tra
diversi computer attraverso la rete, dove per rete si intende un insieme di due o più computer
connessi tra di loro ed in grado di condividere informazioni. Quando due o più computer
comunicano tra di loro si scambiano una serie di informazioni. Per potersi scambiare informazioni, i
vari computer devono avere dei protocolli che permettano di attribuire ad un determinato comando
un significato univoco per tutte le macchine. Un protocollo descrive : il formato che il messaggio
deve avere e il modo in cui i computers devono scambiarsi messaggi. Ad esempio il protocollo
HTTP serve per la trasmissione di informazioni attraverso il WEB. L'HTTP è un protocollo
"stateless" (senza memoria) che permette sia la ricerca che il recupero dell'informazione in maniera
veloce, e permette quindi di seguire i rimandi ipertestuali . La scelta di un protocollo "stateless",

105
cioè di un protocollo che non "conserva memoria" della connessione fatta, è stata necessaria
affinché fosse possibile saltare velocemente da un server ad un altro attraverso i "links" ipertestuali.
HTTP ad ogni richiesta effettua una nuova connessione al server che viene chiusa al termine del
trasferimento dell'oggetto richiesto (pagina HTML, immagine, ecc.).È gestito da un software (server
HTTP) residente sugli host che intendono essere fornitori di informazioni. Chi vuole accedere alle
informazioni fornite dal server HTTP deve utilizzare un software client (browser) in grado di
interpretare le informazioni inviate dal server.IL SERVER, informalmente, è un programma che
"gira" in attesa di una richiesta di connessione sul suo socket (la porta assegnatagli, tipicamente la
80). Il protocollo viene utilizzato da un processo daemon (cioè sempre in esecuzione)Questo
protocollo è invocato da TCP/IP ogni qualvolta l'URL (che è una stringa che specifica la risorsa a
cui riferirci) istanziata contiene nel primo campo la parola http. I comandi utilizzati per comunicare
con esso sono detti Metodi.

106
Richiesta HTTP

Una volta che si è instaurata una connessione tra il browser ed il server, tramite il protocollo http il
client effettua la sua richiesta. In questo protocollo per dare una certa formattazione alla richiesta e
alla risposta vengono usati dei caratteri speciali : CR LF e SP (Carriage Return, Line Feed, Space).
La richiesta di un client ha la seguente struttura : Request-Line +
((general header field or request header field or entity header field) CRLF)
CRLF
[corpo del messaggio]
Il corpo del messaggio è costituito dai dati effettivi da trasmettere: input di programmi o
informazioni da salvare sul server destinatario per conto del client.
Request line
Ha la seguente struttura : Metodo SP Request-URI SP Versione-HTTP CRLF
Metodi
I metodi indicano l’operazione che deve essere eseguita sulla risorsa identificata dal Request-URI.
Nel campo Metodo della Request-Line appare uno solo dei seguenti metodi :
"OPTIONS", "GET" ,"HEAD", "POST", "PUT" ,"DELETE" ,"TRACE", "CONNECT".
IL metodo utilizzato viene riconosciuto dal server se è implementato su di esso altrimenti il server
restituisce un intero che indica la non implementazioe del metodo specificato.
Il metodo "GET" è sempre supportato da qualsiasi server mentre gli altri sono opzionali.

Request-URI
Il Request-URI (Uniform Resource Identifier) indica la risorsa su cui applicare la richiesta.
In questo campo può apparire una delle seguenti opzioni :
"*", absoluteUri, AbsolutePath.
L’asterisco "*" indica che la richiesta non deve essere applicata ad una particolare risorsa, ma al
server stesso.
L’absolurìteURI è usato quando la richiesta è stata fatta ad un proxy, per questo si indica sia il Dns
che il path della risorsa.
L’absolutePath invece viene usato per inoltrare la richiesta ad un server o ad un gateway.
Esso indica solo il path della risorsa sul server originario ed il Dns del server viene scritto nel
campo "Host" nel Request-header -field .
Si noti che se l’absolute path è vuoto gli viene assegnato per defoult lo "/" per indicare la root del
server.

107
Versione http
Nella comunicazione Client/Server è necessario che sia chiaro la versione del protocollo usato per
convenire sul formato del messaggio.
Nella prima linea del messaggio nel campo HTTP-Version field abbiamo :
HTTP" "/" 1*digit "." 1*digit Es. : HTTP/1.1

Risposta HTTP

Una volta ricevuta la richiesta il server risponde con un messaggio di risposta.


Esso ha il seguente formato :
Status-Line +
( (general-header or response-header or entity header) CRLF)
CRLF
[ corpo del messaggio ]
Il corpo del messaggio contiene i dati effettivamente richiesti dal client: i documenti ipertestuali.

Status Line
Ha la seguente struttura : Versione-HTTP SP Status-Code SP Reason-Phrase CRLF

Status-Code e Reason-Phrase
Lo Status-Code è un codice a tre cifre che ha la funzione di fornire al client delle informazioni di
stato riguardo all’esito della ricezione della richiesta.
Associato ad ogni codice abbiamo la "reason-Phrase" che è una piccola descrizione del significato
del codice destinata all’uso umano.
Il primo digit dello Status-Code definisce 5 classi di risposta, mentre gli ultimi due digit non hanno
nessuna categorizzazione.
-1xx : Informazione - richiesta ricevuta e continuo processo
-2xx : Successo - L’azione è stata ricevuta, capita e accettata
-3xx : Ridirezione - C’è bisogno di altre informazioni per completare la richiesta
-4xx : Client Error - Errori nella richiesta
-5xx. Server Error - Il server fallisce

General header field


Questi campi sono generali nel senso che sono applicabili sia alla richiesta che alla risposta del
server. Essi vengono applicati solo al messaggio trasmesso :
Cache-control, Connection, Date,Pragma, Trailer, Transfer-Encoding, Upgrae, Via, Warning.
Request header field
I request-header-field passano al server ricevente delle informazioni addizionali inerenti alla
richiesta ed al client stesso. Esse sono:
Accept, Accept-charset,Accept-Encoding, Accept-Language, Autorization, Expect, From, Host, If-
Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-

108
Autorization, Range, Referer, TE, User-Agent.

Response header field


Questi campi servono per passare al client ulteriori informazioni che non possono risiedere nello
Status-Code . Essi sono:
Accept-Ranges, Age, Etag, Location, Proxy-Authenticate, Retri-After, Server, Vary, WWW-
Authenticate.

Entity header field


Questi campi danno delle informazioni inerenti all’entità da trasferire identificata dalla richiesta :
Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5,
Content-Range, Content-Type, Expires, Last-Modified, extension-header.

Definizioni metodi

OPTION
Il metodo OPTION rappresenta una richiesta di informazioni inerenti alle opzioni di comunicazione
disponibili sul canale definito dal Request-URI. Queste opzioni sono riferite alla risorsa da
utilizzare o alle capacità del server.

GET
Il metodo GET tende di recuperare le informazioni localizzate dal Request-URI. Se il Request-URI
fa riferimento ad un processo che produce dati, saranno restituiti dalla risposta i dati prodotti da
questo processo.
Questo metodo diventa un "GET condizionale" se nel messaggio di richiesta ci sono i campi If-
Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, o If-Range. Quindi la risposta sarà
limitata solo a ciò che è definito nei campi suddetti riducendo l’uso della rete e il traffico di dati
superflui.
Anche con l’inclusione dei campi del "Range header" il metodo riduce il traffico sulla rete
diventando un "GET parziale", cioè si richiede solo parte dell’entità che può essere trasferita.

HEAD
Il metodo HEAD è identico al GET eccetto il fatto che il server non deve ritornare il corpo del
messaggio. Questo metodo è usato per ottenere informazioni inerenti all’entità riferita dalla
richiesta senza trasferire l’entità stessa. Il metodo viene usato spesso per testare links ipertestuali,
per testare la loro accessibilità e le loro recenti modifiche.

POST
Con il metodo POST il client può spedire al server una serie di coppie nome=valore che
corrispondono all'input del programma indicato nella request-URI. Ovviamente il programma
residente sul server girerà sul server stesso per poi restituire l'output sottoforma di risposta.
Questo metodo serve anche a far sì che il server accetti l’entità contenuta nella richiesta per
ampliare la risorsa identificata dal Request-Uri.
Spesso è usato per effettuare annotazioni sulle risorse già esistenti o estendere dei database. La
funzione che deve essere svolta in seguito al metodo POST, è determinata dal server.

PUT
Il metodo PUT serve per allocare nuove risorse sul server passategli dal client.
Le nuove risorse sono memorizzate in relazione al Request-URI. Se una risorsa già esiste in
corrispondenza all’URI specificato, la nuova risorsa verrà considerata come un aggiornamento della
prima. Il server restituisce al client delle informazioni di stato sempre tramite lo Status-Code.

109
DELETE
Il metodo DELETE richiede che il server ricevente elimini la risorsa specificata dal Request-URI. Il
client non ha nessuna garanzia che l’operazione vada in porto, anche se lo Status-Code restituito
indica successo, perché il server può eliminare la risorsa oppure la può spostare in una locazione
inacessibile.

TRACE
Il metodo TRACE indica la richiesta di alcuni dati sul canale per testare e diagnosticare
informazioni. Il ricevente può essere sia il server originale che il primo proxy o gateway sul canale.

CONNECT
In genere questo metodo viene usato per instaurare una semplice connessione con un proxy.

Un esempio di transizione HTTP


Supponiamo che un utente debba recuperare una risorsa posta su un server Web il cui URL è
http://www.host.it/path/doc.html

 Il browser inizia analizzando l'URL e scopre che:


 il protocollo da usare per la comunicazione con il server è l'http
 l'URL contiene un indirizzo host di Internet www.host.it che deve essere convertito in indirizzo IP
numerico
 la risorsa è /path/doc.html ed è nel formato HTML

 Il browser "domanda al DNS di convertire l' indirizzo host in indirizzo IP numerico.

 Il DNS replica con un indirizzo IP numerico, per esempio 131.114.189.11

 Il browser stabilisce una connessione con il server sulla porta TCP 80 il cui indirizzo IP è
131.114.189.11

 A questo punto il browser compone la richiesta secondo il formato HTTP e la invia al


server: GET /path/doc.html HTTP/1.0
User-Agent: Internet Explorer/3.02
Accept: text/plain
Accept: text/html
Accept: image/*

 Il server riceve la richiesta ed analizza la prima parte (GET /path/doc.html HTTP/1.0)


 Il comando GET dice al server di individuare e leggere il file e restituirlo al client.
 L'analisi di /path/doc.html dice al server il percorso, il nome del file e il formato del documento
(HTML).

110
 L'HTTP/1.0 dice quale protocollo di comunicazione usare per "colloquiare" con il client.

 Il server, se necessario, analizza il resto della richiesta. In questo caso estrapola le seguenti
informazioni:
 il client accetta normale testo, testo formattato HTML e qualsiasi codifica digitale dimmagine
(text/plain, text/html, image/*)
 Il software del client è Internet Explorer/3.02

 Se non ci sono stati errori, il server esegue il metodo richiesto: cerca il file avvalendosi del
file system del sistema operativo e:
 se il file è stato trovato: il server invia una risposta del tipo:
HTTP/1.0 200 document follows
Server: NCSA/2.4
Date: sab, 20 gen 1997, 23:20:02 GMT
Content-Type: text/html
Content-length: 2024
Last-Modified: ven, 19 gen 1997, 23:40:02 GMT
<corpo del documento>
questa risposta dice al browser che è andato tutto bene (codice di stato 200) che il
software utilizzato è NCSA/2.4, la data di invio del documento è sab, 20 gen 1997,
23:20:02 GMT, il documento è nel formato HTML, la lungezza del documento è di
2024 Kb e la data di ultima modifica è ven, 19 gen 1997, 23:40:02 GMT.

 se il file non è stato trovato o c'è qualche errore: il server invia una risposta che spiega l'errore. Nel
caso che il file non è stato trovato la risposta potrebbe essere del tipo:
HTTP/1.0 404 Not found
Server: NCSA/2.4
Date: sab, 20 gen 1997, 23:20:02 GMT
Content-Type: text/html
Content-length: 0

 Il server dopo la risposta chiude la connessione.

 Il browser dopo aver memorizzato ed analizzato la risposta, mostra sullo schermo il


documento utilizzando l'applicazione opportuna.

C'è da aggiungere che se il documento HTML avesse contenuto delle immaggini in-line, il browser,
per il recupero di ognuna di esse, avrebbe dovuto stabilire una nuova connessione TCP con il server
e ripetere ogni passo.

111
I Documenti Web Dinamici: DHTML

Agli esordi del web tutto il contenuto era statico. Negli ultimi tempi buona parte del contenuto è
divenuta dinamica, vale a dire generata su richiesta anziché archiviata su disco. La generazione del
contenuto può avvenire sia sul lato server che su lato client.
Nel primo caso, quando un utente quando compila un modulo e lo invia, al server viene inviato un
messaggio con il contenuto del modulo. Questo messaggio viene elaborato da un programma o uno
script. Solitamente, il processo usa le informazioni fornite dall’utente per cercare un record in un
database sul disco del server, e generare una pagina HTML personalizzata da restituire al client.

Il metodo tradizionale per gestire i moduli e altre pagine interattive è un sistema chiamati
CGI(common gateway interface). È un’interfaccia standardizzata che consente ai server web di
comunicare con script e programmi di back-end che possono accettare l’input (per esempio dai
moduli) e generare pagine HTML in risposta.

FTP
L’FTP (File Transfer Protocol) è un protocollo per muovere file da host a host. È modello
client/server, dove: il client inizia la comunicazione; il client richiede di trasferire un file sul server;
il client richiede di trasferire un file dal server; il client può richiedere di ottenere la lista dei file
disponibili sul server; il client può muoversi nelle directory del server.
Un client è dotato di un programma che implementa una parte di comunicazione: il protocollo FTP
e interfaccia utente: permette di svolgere le funzioni che il protocollo offre.
Il programma svolge le seguenti funzioni: connessione al server remoto; trasferimento di un file dal
server al client; trasferimento di un file dal client al server; lettura dei files presenti nella directory
corrente sul server; cambiamento di directory corrente sul server; disconnessione.
Il server è dotato di un programma, detto ftp server (ftp daemon) che implementa una parte di
comunicazione: il protocollo FTP e una parte user agent: implementa l’accesso al file system;
implementa l’autenticazione del client; permette la configurazione del servizio (chi può leggere che
cosa, chi può scrivere nel file system e dove, politica di logging, ...).
Il server svolge le seguenti funzioni: riceve le richieste di connessione e verifica se sono
ammissibili in base alla propria configurazione; riceve i comandi relativi alle varie funzioni del
client e le espleta, se sono autorizzate.
Ecco una serie di passi che vengono fatti quando si instaura una connessione FTP: il client esegue
una connessione al server collegandosi alla porta TCP 21; il server risponde; Il client invia i dati
necessari per identificare l’utente che sono USER login e PASS password; il server risponde che
l’utente è correttamente autenticato, oppure nega l’accesso; se l’utente è autenticato, il client può
dare i vari comandi previsti dal protocollo; l’utente si disconnette. La connessione deve essere
affidabile, quindi il flusso dei comandi e delle risposte avviene su un canale TCP. Il server resta in
ascolto su una porta ben nota al client, porta TCP 21. dopo che è avvenuta la procedura di
autenticazione da parte del server, il client deve aspettarsi di ricevere una connessione sulla porta
TCP 20.

112
il protocollo FTP trasferisce i dati (file) su una connessione TCP differente da quella usata per
trasmettere i comandi. Questo modo di operare è detto trasmettere i comandi fuori dalla banda.
Questa definizione è giustificata poiché è presumibile che il maggior consumo di banda sia dovuto
al trasferimento dei file, mentre i comandi non consumano la banda destinata al trasferimento dei
dati.
La connessione di controllo (porta 21) è persistente. Essa dura tutto il tempo della sessione di
lavoro tra client e server. La connessione dati (porta 20) è transiente (non persistente) ,essa dura
solo il tempo necessario a trasmettere un file .

L’agente Utente (Agent User)


I sistemi di posta elettronica presentano due parti fondamentali: gli agenti utente e gli agenti di
trasferimento dei messaggi; Un agente utente è di norma un programma (a volte chiamato lettore di
posta) che accetta una varietà di comandi per comporre, ricevere e rispondere ai messaggi, nonché
per manipolare le caselle di posta. Per gli agenti di trasferimento dei messaggi ne parleremo in
seguito.

I formati dei messaggi (RFC 822)


I messaggi sono costituiti da un primitivo involucro, alcuni campi di intestazione, una riga vuota e il
corpo del messaggio.

Il campo to: indica l’indirizzo DNS del destinatario principale; è consentito indicare più destinatari.
Il campo cc: indica gli indirizzi dei destinatari secondari. In termini di consegna non vi è una
distinzione tra destinatari principali e secondari.Il campo bcc: (copia per conoscenza nascosta) è
simile al campo cc:, tranne per il fatto che la riga viene eliminata da tutte le copie inviate ai
destinatari principali e secondari. I due campi successivi, from e sender:, indicano rispettivamente
chi ha scritto e inviato il messaggio. Non devono necessariamente avere lo stesso contenuto. Una
riga contenente received: viene aggiunta da ogni agente di trasferimento dei messaggi lungo il
percorso. La riga contiene l’identità dell’agente, la data e l’ora di ricezione del messaggio. Il campo
return-path: viene aggiunto dall’agente di trasferimento dei messaggi finale e ha lo scopo di
spiegare come ritornare al mittente. Oltre a questi campi i messaggi possono contenere diversi
campi d’intestazione utilizzati dagli agenti utente o dai destinatari umani.

113
Il campo reply-to: viene a volte utilizzato quando né la persona che compone il messaggio né la
persona che lo invia desiderano vedere la risposta.

Il trasferimento dei messaggi


Il sistema di trasferimento di messaggi si occupa della trasmissione dei messaggi dal mittente al
destinatario. Il modo più semplice per svolgere questa operazione è stabilire una connessione di
trasporto dalla macchina di origine a quella di destinazione per poi trasferire semplicemente il
messaggio.

SMTP (Simple Mail Transfer Protocol)


All’interno di Internet, la posta elettronica viene consegnata costituendo una connessione tra la
macchina di origine e la porta 25 della macchina di destinazione. In ascolto su questa porta esiste un
daemon di posta elettronica che utilizza SMTP.

Questo daemon accetta le connessioni in ingresso e copia nelle caselle di posta appropriate i
messaggi ricevuti da queste connessioni. SMTP è un semplice protocollo ASCII, per questo la
comunicazione tra un client ed un server SMTP consiste nello scambio di comandi in caratteri
ASCII (è quindi leggibile). Dopo avere stabilito la connessione TCP alla porta 25, la macchina di
invio (che opera come client) attende la comunicazione da parte della macchina ricevente (che
opera come server). Il server inizia inviando una riga di testo che comunica la sua identità e la
possibilità di inviare la posta. Se il server è pronto ad accettare la posta elettronica, il client
annuncia da chi proviene il messaggio e a chi è destinato. Se tale destinatario esiste nella
destinazione, il server comunica al client di inviare il messaggio. Dopo di che, il client invia il
messaggio e il server fornisce l’ack.

Vediamo un tipico esempio

 il client si presenta, inviando una stringa del tipo: "HELO Fabio", nella quale indica il suo
nome. Il server risponde con un "250 +OK" che é il codice utilizzato dai server SMTP per
segnalare l'avvenuta ricezione e l'elaborazione del messaggio;
 il client specifica che si tratta di una e-mail e dovrebbe ora fornire il proprio indirizzo di
posta. I nuovi software di ricezione (Outlook Express, Eudora, ecc...), però, ignorano di pari
passo questo campo. Essendo comunque obbligatorio, é necessario inserire la stringa:
"MAIL FROM:<>";
 il client specifica quindi l'indirizzo del destinatario della e-mail. Una stringa di esempio può
114
essere: "RCPT TO:<F_Ruini@hotmail.com>";
 é terminata la fase di autenticazione e può quindi cominciare quella di scrittura e
trasmissione del messaggio. Prima di tutto é necessario il comando "DATA";
 ora si può indicare l'indirizzo del mittente. Ad esempio: "FROM:fabietto2@libero.it";
 é quindi necessario ripetere l'indirizzo del destinatario: "TO:F_Ruini@hotmail.com";
 il messaggio dovrebbe contenere un soggetto; per specificarlo: "SUBJECT:soggetto prova";
 ora serve una riga vuota, per indicare al server che l'intestazione della e-mail é conclusa e
che ora inizia il corpo del messaggio. Il testo può essere inviato tutto insieme o anche riga
per riga. Il server provvede ad inoltrare la e-mail quando riceve la stringa ".";
 il client si scollega: "QUIT".

Consegna fnale
Con l’avvento delle persone che accedono a Internet chiamando l’ISP tramite un modem, il sistema
è diventato inadeguato. Il problema è che quando l’host 1 desidera inviare un messaggio di posta
elettronica all’host 2, ma l’host 2 al momento non è online, l’host 1 non può stabilire una
connessione TCP con l’host 2, e quindi non può eseguire il protocollo SMTP. Una soluzione
consiste nell’avere un agente di trasferimento dei messaggi su una macchina dell’ISP, che accetta la
posta elettronica per i suoi clienti e la archivia nelle caselle di posta sulla macchina dell’ISP. Dal
momento che questo agente può essere sempre online, la posta elettronica può essere inviata in
qualsiasi momento. Sfortunatamente, questa soluzione crea un altro problema. Vediamo in POP3.

POP3 (Post Office Protocol version 3)


Come può l’utente ricevere la posta elettronica dall’agente di trasferimento dei messaggi dell’ISP?
La soluzione a questo problema è creare un altro protocollo, che consente agli agenti di
trasferimento dell’utente (sui pc client) di contattare l’agente di trasferimento dei messaggi (sulla
macchina dell’ISP) per effettuare la copia della posta elettronica dall’ISP all’utente. Uno di questi
protocolli è POP3.

POP3 viene avviato quando l’utente apre il lettore della posta. Il lettore della posta chiama l’ISP (a
meno che sia già disponibile una connessione) e stabilisce una connessione TCP con l’agente di
trasferimento dei messaggi alla porta 110. Una volta stabilita la connessione, il protocollo POP3
attraversa sequenzialmente tre stati:

115
 Autorizzazione
 Transzioni
 Aggiornamento

Lo stato di autorizzazione si occupa del login dell’utente; lo stato delle transazioni consente
all’utente di raccogliere la posta e cancellarla dalla casella dell’ISP. Lo stato di aggiornamento
provoca l’effettiva eliminazione dei messaggi.

Vediamo un tipico esempio

 il client si identifica, inserendo il proprio username. La stringa da inviare deve essere ad


esempio: "USER fabietto@libero.it". Il server risponde con un +OK ed un codice che indica
la corretta ricezione ed elaborazione della stringa trasmessa;
 una volta fornito il proprio username, l'utente deve farsi riconoscere mediante una password.
La stringa da inviare è del tipo "PASS 5info2" (NB: la mia password non é questa, ma a
titolo esemplificativo credo possa andare bene). Il server risponde inviando il solito +OK,
seguito però dal numero di messaggi presenti nella mailbox;
 il client può quindi iniziare la ricezione dei messaggi, con la stringa "RETR numero
messaggio". Ad esempio: "RETR 1" provoca l'invio dal server al client del primo messaggio
(in ordine temporale basato sulla spedizione) presente nella casella di posta;
 nonostante venga trasmesso al legittimo destinatario, il messaggio rimane memorizzato
anche nell'hard disk del server. Per eliminarlo il client può usare la forma: "DELE numero
messaggio";
 per chiudere la connessione, come nel caso dell'SMTP, è sufficiente l'invio della stringa:
"QUIT".

IMAP
Il successo e il diffondersi della posta elettronica, ha portato a richiedere altre funzionalità da parte
delle persone la utilizzano. Per esempio molte persone che disponevano di un singolo account di
posta elettronica desideravano accedervi a lavoro, sul computer di casa. Anche se POP3 lo
consente, di norma scarica tutti i messaggi archiviati ad ogni contatto: il risultato è che la posta
dell’utente viene rapidamente dispersa su più macchine, più o meno casualmente. Questo
svantaggio a portato alla nascita di un protocollo di consegna alternativo, IMAP (internet message
acces protocol). Questo protocollo permette che tutti i messaggi rimangano sul server all’infinito, in
più cartelle di posta. L’impostazione generale del protocollo IMAP è simile a quella di POP3. il
server IMAP è in ascolto sulla porta 143. nella seguente figura sono elencante le differenze tra
IMAP e POP3.

116
DNS: Il Sistema dei Nomi di Dominio
Serve per identificare un host è il suo hostname come www.yahoo.com sono mnemonici e quindi
apprezzati dagli uomini, ma nn danno nessuna informazione sulla dislocazione degli host all’interno
di internet. Per queste ragioni,gli host sono identificati anche dal cosiddetto indirizzo ip che ci
fornisce molte informazioni specifiche sulla collocazione dell’host.

Servizi forniti dal DNS

I router preferiscono l’indirizzo ip per identificare un host, abbiamo bisogno di un servizio che
converte gli hostname in indirizzi IP; questo è il compito principale del sistema dei nomi di dominio
DNS di internet.
Il DNS gira su UDP ed usa la porta 53 è utilizzato:
1. una database distribuito implementato in una gerarchia di server
2. un protocollo dello strato applicazione che permette agli host di comunicare con i server dei
nomi in modo da fornire il servizio di traduzione
Perché la macchina dell’utente possa inviare un messaggio di richiesta http al server Web www.jjj.it
la macchina stessa deve ottenere l’indirizzo IP di www.jjj.it . sulla stessa macchina dell’utente gira
il lato client dell’applicazione DNS. Il browser estrae l’host name www.jjj.it dall’URL e lo passa al
lato client dell’aplicazione DNS. Il client DNS invia una richiesta contenente l’hostname a un
server DNS . il client DNS riceve infine una risposta che include l’indirizzo IP per l’hostname. Il
browser allora apre una connessione con il server http situato a quell’indirizzo IP .
Le persone, per fare riferimento a host e caselle di posta, ricordano con difficoltà gli indirizzi IP.
Per questo motivo sono stati introdotti nomi ASCII per separare i nomi dei computer dai rispettivi
indirizzi. Ciò nonostante, la rete in sé sa interpretare solo indirizzi numerici, pertanto sono richiesti
meccanismi per convertire stringhe ASCII in indirizzi di rete. Da questa esigenza fu inventato il
protocollo DNS(domina name system). L’essenza di DNS è l’invenzione di uno schema di
denominazione gerarchico basato su domino, e di un sistema di database distribuito per
l’implementazione di questo schema di denominazione. È principalmente utilizzato per associare
nomi di host e destinazioni di posta elettronica agli indirizzi IP.

DNS viene utilizzato come segue. Per associare un nome ad un indirizzo IP, un programma
applicativo chiama una procedura di libreria chiamata risolutore, passando il nome come parametro.

117
Il risolutore invia un pacchetto UDP a un server DNS locale, che quindi cerca il nome e restituisce
l’indirizzo IP al risolutore, che a sua volta lo restituisce al chiamante. Armato dell’indirizzo IP, il
programma può stabilire una connessione TCP con la destinazione oppure inviarle pacchetti UDP.

Lo spazio dei nomi DNS


Il DNS funziona come il sistema postale. Concettualmente, internet è divisa in oltre 200 domini di
primo livello, dove ogni dominio copre molti host. Ogni dominio è partizionato in sottodomini, che
sono a loro volta divisi e così via. Tutti questi domini possono essere con una struttura ad albero. Le
foglie rappresentano i domini che non hanno sottodomini (ma naturalmente contengono computer).
I domini di primo livello sono di due tipi: generici e per nazioni. I domini generici sono com, edu,
gov, int,org. Ogni dominio è denominato dal percorso compreso tra esso e la radice (non
denominata). I nomi di dominio assoluto termina sempre con un punto, al contrario di un nome
relativo. I nomi relativi devono essere interpretati in un contesto per determinare univocamente il
reale significato. Per creare un nuovo dominio è necessaria l’autorizzazione del dominio in cui sarà
incluso.

I record delle risorse


A ogni dominio, che sia rappresentato da un singolo host o sia un dominio di primo livello, può
essere associato un insieme di resource records (record delle risorse). Per un singolo host, il record
delle risorse più comune è solo l’indirizzo IP, ma possono esistere molti altri tipi di record delle
risorse. Quando un risolutore fornisce un nome di dominio a DNS, ciò che ottiene sono i record
delle risorse associati a tale nome. Di conseguenza, la funzione principale di DNS e associare i
nomi di dominio ai record delle risorse.

I server dei nomi


In teoria, un singolo server dei nomi potrebbe contenere l’intero database DNS e rispondere a tutte
le interrogazioni. In pratica, questo server sarebbe troppo sovraccaricato per essere utile. Se dovesse
incontrare un problema, l’intera internet sarebbe bloccata. Per evitare questo, lo spazio dei nomi
viene diviso in zone non sovrapposte. Ogni zona contiene alcune parti della struttura e contiene
anche i server dei nomi con le informazioni su tale zona. Di norma, una zona avrà un server dei
nomi primario, che ottiene le sue informazioni da un file su disco, e uno o più server dei nomi
secondari che ottengono le loro informazioni dal server dei nomi primario. Quando un risolutore ha
un’interrogazione su un nome di dominio, passa l’interrogazione a uno dei server dei nomi locali.
Se il dominio è all’interno della giurisdizione del server dei nomi, restituisce i record autorevoli
delle risorse. Un record autorevole è un record fornito dall’autorità che gestisce il record. Se invece
il dominio è remoto e non sono disponibili localmente informazioni su di esso, il server dei nomi
invia un messaggio d’interrogazione al server dei nomi di primo livello per il dominio richiesto.
Questo metodo di interrogazione è conosciuto come interrogazione ricorsiva, perché ogni server che
non possiede le informazioni richieste deve trovarle altrove e poi restituirle.
Vediamone alcuni esempi.

118
Esempio 1.

Esempio 2.

Esempio 3.

119
DNS: Root Name Servers

Questi root name servers sono conatattati dai local name server che non possono risolvere un nome.
Il root name server contatta un authoritative name server se non conosce il mapping per quel nome;
dopo ottiene il mapping; restituisce il mapping al local name server.

Protocollo DNS: Messaggi

Sia i messaggi di richiesta che di risposta hanno lo stesso formato.


Si ha un campo identificazione lungo 16 bit che identifica la richiesta, la risposta usa lo stesso
numero. Il campo etichette, anche esso di 16 bit, può contenere i seguenti valori: richiesta o
risposta, recursion desired, recursion avialable, reply is authoritative.

120