Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Prof. S. Riccobene
1
CAPITOLO 1
TECNOLOGIA DI TRASMISSIONE
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
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.
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:
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:
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.
senza connessione
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.
Il client esegue una CONNECT per stabilire una connessione con il server specificando a
chi connettersi.
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.
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
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);
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.
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.
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.
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.
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.
∞ ∞
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
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.
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.
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 è:
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).
la sorgente luminosa
il mezzo di trasmissione
il rilevatore
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.
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.
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.
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.
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.
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.
19
Modulazione avviene attraverso la formula:
A sen (wt + y)
Commutazione (2.5.5)
Il sistema telefonico è diviso in due parti principali:
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.
21
CAPITOLO 3
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.
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.
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.
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).
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
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
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.
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.
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.
Il protocollo consiste in due procedure: un mittente e un destinatario, entrambi a livello Data Link.
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.
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).
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).
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.
Mittente Destinatario
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ì:
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;
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
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.
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.
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
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.
• 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.
• 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
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.
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-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).
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
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.
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.
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.
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;
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:
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:
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.
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.
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.
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.
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.
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.
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.
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)
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).
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
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.
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 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).
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.
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.
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:
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.
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:
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:
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.
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.
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.
Una spiegazione semplicistica del modo di operare dell’approccio dual stack è la seguente:
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.
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.
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.
Anche qui è necessario creare un socket utilizzando la primitiva SOCKET, ma BIND non è
richiesto perché l’indirizzo utilizzato non è importante per il server.
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.
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.
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.
90
Purtroppo, le cose non sono così semplici: c'è un problema famoso in proposito, il problema delle
due armate:
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:
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:
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 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 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.
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.
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.
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.
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.
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.
Alcuni protocolli sono di pubblico dominio per esempio http, è disponibile come RFC;molti altri
protocolli sono riservati come quelli utilizzati dalla telefonia.
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 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
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.
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.
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
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
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
108
Autorization, Range, Referer, TE, User-Agent.
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.
Il browser stabilisce una connessione con il server sulla porta TCP 80 il cui indirizzo IP è
131.114.189.11
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
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 .
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.
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.
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 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.
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.
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.
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.
120