Sei sulla pagina 1di 37

Capitolo 2

Contenuti per il secondo


esonero

2.1 Livello di rete


Il livello di rete nello stack TCP/IP è responsabile della consegna dei datagram-
mi tra gli host. Questo procedimento comprende numero si aspetti, come ad
esempio la progettazione degli indirizzi logici necessari per identificare in manie-
ra univoca gli host connessi ad Internet, o l’applicazione di opportuni protocolli
di instradamento che permettano ai pacchetti del livello di rete di giungere dalla
sorgente fino alla destinazione.

2.1.1 Servizi a livello di rete


Prima di analizzare il livello id rete così com’è nella Internet odierna si discu-
teranno brevemente i servizi che ci si attende siano forniti da un protocollo di
questo livello.

Suddivisione in pacchetti (packetizing)


Il primo compito del livello di rete è sicuramente la suddivisione dei dati in pac-
chetti: alla sorgente i dati ricevuti dal livello superiore (payload) in un pacchetto
del livello di rete e alla destinazione decapsulare il payload dal pacchetto. La
sorgente non è autorizzata a modificare il payload a meno che esso non sia troppo
grande per il trasferimento e quindi necessita di essere suddiviso in frammenti
più piccoli (frammentazione). Se il pacchetto è stato frammentato alla sorgente
o dai router lungo il percorso, il livello di rete deve attendere l’arrivo di tutti i
frammenti di quel pacchetto, riassemblarli e solo a questo punto consegnare il
payload al protocollo di livello superiore.

49
Instradamento (routing)
Un altro compito del livello di rete è l’instradamento. Il compito del livello
di rete è quello di instradare il pacchetto dalla sua sorgente alla destinazione.
Normalmente c’è più di un percorso che va dalla sorgente alla destinazione. Il
livello di rete deve trovare il migliore tra tali possibili percorsi per mezzo di
opportune strategie conosciute come protocolli di routing (o di instradamento).
Il risultato è la creazione di tabelle di instradamento che verranno utilizzare per
decidere come instradare i pacchetti al momento del loro arrivo nei router.

Inoltro (forwarding)
Se routing significa applicare strategie di instradamento, l’inoltro si può definire
come l’azione eseguita dai router quando un pacchetto arriva ad una delle sue
interfacce. Per completare tale azione vengono utilizzate apposite tabelle di
inoltro. Infatti, quando un router riceve un pacchetto da una delle reti cui
è collegato direttamente, deve inoltrare il pacchetto ad un’altra delle reti a
cui è collegato. Per prendere questa decisione il router utilizza l’indirizzo di
destinazione, che si trova nell’intestazione del pacchetto, per trovare la giusta
interfaccia di output all’interno della tabella di inoltro.

Controllo degli errori


Sebbene il controllo degli errori possa essere realizzato anche a livello di rete,
i progettisti in Internet hanno deciso di ignorare questo aspetto. Infatti, il
fatto che i pacchetti possano essere frammentati in ciascun router renderebbe il
controllo degli errori inefficiente visto che dovrebbe lavorare su dati parziali. Il
campo checksum all’interno dei pacchetti serve solo per controllare la presenza
di eventuali errori all’interno dell’intestazione, nessuna verifica sul payload.
Nonostante il livello di rete in Internet non fornisca direttamente il controllo
degli errori, Internet utilizza un protocollo ausiliario (ICMP) che fornisce una
sorta di controllo degli errori nel caso un pacchetto venga scartato o contenga
informazioni sconosciute nell’intestazione.

Controllo di flusso
Il controllo di flusso regola la quantità di dati che una sorgente può inviare
senza sommergere il ricevente. In Internet, il livello di rete non fornisce alcun
controllo di flusso. I pacchetti vengono inviati dal mittente quando sono pronti,
senza porre attenzione al fatto che il ricevente possa essere pronto o meno.
Il controllo di flusso quando necessario, viene fornito dai protocolli di livello
superiore.

50
Controllo della congestione
La congestione nel livello di rete avviene quando troppi pacchetti sono presenti
in una certa area della rete. In tale situazione alcuni router potrebbero scartare
alcuni pacchetti. Tale aspetto non è attualmente implementato in Internet.

Sicurezza
Un’altra questione relativa alla comunicazione a livello di rete è la sicurezza.
Questa non era un problema quando Internet è stata progettata originariamente,
gli utenti erano solamente pochi universitari che usavano la rete per scopi di
ricerca. Oggi la sicurezza è fonte di un enorme preoccupazione. Per fornire
sicurezza ad un livello di rete privo di connessione, una possibilità è quella
di aggiungere un altro livello virtuale in grado di trasformare il servizio senza
connessione in un servizio orientato alla connessione (IPSec).

2.1.2 Packet switching


Dalla discussione su instradamento e inoltro deduciamo che a livello di rete av-
viene una qualche forma di switching (spostamento). Un router infatti è un
commutatore di rete che crea un collegamento tra una porta di input e una
di output. Nelle comunicazioni le tecniche di switching sono divise in circuit
switching e packet switching, solo quest’ultimo viene utilizzato a livello di rete
in quanto l’unità dei dati, a questo livello, è il pacchetto. I dispositivi di inter-
connessione, in una rete basata su commutazione di pacchetto, dovranno anche
determinare come instradare i datagrammi dalla sorgente alla destinazione fina-
le. Oggi, una rete basata su packet switching può utilizzare due approcci diversi
per lo switching: l’approccio a datagramma e l’approccio a circuito virtuale.

Approccio a datagramma: servizio senza connessione


Internet è stata progetta con un livello di rete in grado di fornire un servizio
senza connessione, dove il protocollo di rete tratta ogni datagramma in modo
del tutto indipendente ed i singoli datagrammi non hanno alcuna relazione con
gli altri. Secondo questo approccio i datagrammi che formano un messaggio
possono viaggiare tutti lungo lo stesso percorso verso la destinazione oppure no.
I commutatori in questo tipo di rete sono normalmente chiamati router.
Ogni datagramma viene instradato sulla base delle sole informazioni con-
tenute nella sua intestazione: gli indirizzi sorgente e destinazione. L’indirizzo
destinazione definisce dove il datagramma deve andare, l’indirizzo sorgente da
dove viene. Quest’ultimo può essere utilizzato per inviare un messaggio di errore
alla sorgente nel caso di datagramma scartato.

Approccio a circuiti virtuali


In un servizio orientato alla connessione c’è una relazione tra tutti i datagrammi
che appartengono a un messaggio. Prima che tutti i datagrammi di un messag-

51
gio possano essere inviati, è necessario impostare una connessione virtuale per
definire il percorso degli stessi. Dopo aver impostato la connessione, i data-
grammi seguono tutto lo stesso percorso. In questo tipo di servizio, non solo
il datagramma deve contenere gli indirizzi di sorgente e destinazione, ma de-
ve anche contenere un’etichetta di flusso che identifichi il circuito virtuale che
definisce il percorso virtuale che il datagramma deve seguire.

2.1.3 Congestione a livello di rete


A livello di rete la congestione di riferisce principalmente a due questioni, il
throughput ed il ritardo.
Quando il carico è molto inferiore rispetto alla capacità della rete, il delay
(ritardo) è minimo ed è composto dal ritardo di propagazione e dal ritardo di
elaborazione. Quando il carico raggiunge la capacità della rete, il ritardo au-
menta bruscamente perché ora è necessario aggiungere il ritardo di accodamento
al ritardo totale.

Controllo della congestione


Il controllo della congestione si riferisce alle tecniche e ai meccanismi che possono
evitare la congestione prima che avvenga o rimuoverla dopo che si è verificata.
In generale possiamo dividere i meccanismi per il controllo della congestione in
due ampie categorie: controllo della congestione a ciclo aperto (prevenzione) e
controllo della congestione a ciclo chiuso (rimozione).

Controllo della congestione a ciclo aperto


Nel controllo della congestione a ciclo aperto vengono applicate delle politi-
che per evitare la congestione prima che questa avvenga. Elenchiamo alcune
politiche che possono essere usate.

Politica di ritrasmissione La ritrasmissione di un pacchetto può aumentare


la congestione nella rete. Tuttavia una buona politica di ritrasmissione può
prevenirla. Ad esempio studiare in dettaglio parametri come il tempo di attesa
prima del re-invio dei pacchetti è utile a massimizzare l’efficienza e allo stesso
tempo prevenire la congestione.

Politica di gestione delle finestre Il meccanismo usato dal mittente per


la gestione dell’affidabilità della connessione può influenzare la congestione. Un
approccio basato su Selective Repeat è migliore di quello Go-Back-N per il
controllo della congestione.

Politica di riscontro Una buona politica di scarto dei pacchetti da parte


dei router può prevenire la congestione salvaguardando al contempo l’integrità
della trasmissione.

52
Controllo della congestione a ciclo chiuso
I meccanismi di controllo della congestione a ciclo chiuso cercano di alleviare la
congestione una volta che è avvenuta.

Backpressure (contropressione) La tecnica di backpressure si riferisce ad


un meccanismo di controllo della congestione in cui un nodo congestionato smet-
te di ricevere dati dal nodo immediatamente a monte. Ciò può far sì che il nodo
a monte divenga a sua volta congestionato e che quindi inizi a rifiutare i dati
da proprio nodo a monte e così via. La backpressure è un controllo della con-
gestione da nodo a nodo che inizia con un singoolo nodo e si propaga, nella
direzione opposta rispetto al flusso di dati, fino alla sorgente. La tecnica della
contropressione è applicabile solamente in reti a circuito virtuale, nelle quali
ogni nodo conosce il nodo a monte da cui proviene il flusso di dati. La tecnica
non può essere implementata in una rete a commutazione di pacchetto poiché
un router non è detto che sia a conoscenza di quale router lo preceda lungo il
percorso seguito dai datagrammi.

Choke packet Un choke packet è un pacchetto inviato da un nodo alla sor-


gente per informarla della congestione. Nella backpressure l’avviso parte da un
nodo verso il suo nodo a monte fino a raggiungere la sorgente. Nel metodo del
choke packet invece l’avviso parte dal router che ha riscontrato la congestione e
raggiunge direttamente la stazione sorgente.

Segnalazione implicita Nella segnalazione implicita non c’è comunicazione


tra il nodo e la sorgente. La sorgente deduce che c’è congestione in un punto
della rete solamente osservandone i sintomi, ad esempio quando una sorgente
invia numerosi pacchetti e non c’è riscontro per un pò di tempo.

Segnalazione esplicita Il nodo che ha riscontrato la congestione può inviare


esplicitamente un segnale alla sorgente o alla destinazione. Il metodo di segna-
lazione esplicita, tuttavia, è diverso dal choke packet. In quest’ultimo metodo si
utilizza un pacchetto specifico per segnalare la congestione, invece nella segna-
lazione esplicita il segnale viene semplicemente inserito all’interno dei pacchetti
che trasportano dati in senso opposto.

2.1.4 Protocolli di livello rete


Nel corso del tempo i protocolli di livello rete hanno avuto molte versioni
differenti. Vedremo l’attuale versione (4) e la nuova versione (6).
Nella versione 4 il livello di rete può essere visto come formato da un proto-
collo principale e da tre protocolli ausiliari. Il protocollo principale, l’Internet
Protocol versione 4 (IPv4) è responsabile della suddivisione in pacchetti, del-
l’inoltro e della consegna dei datagrammi a livello di rete. L’Internet Control
Message Protocol versione 4 (ICMPv4) aiuta l’IPv4 a gestire alcuni errori che

53
Figura 2.1: Formato di un datagramma IPv4

possono avvenire nella consegna a livello di rete. L’Internet Group Manage-


ment Protocol (IGMP) viene utilizzato per supportare l’IPv4 nella gestion del
multicasting. Infine, l’Address Resolution Protocol (ARP) viene usato per far
interagire il livello di rete e quello di collegamento. ARP ha il compito specifico
di permettere l’associazione tra indirizzi di livello di rete ed indirizzi di livello
di collegamento.
L’IPv4 è un protocollo inaffidabile e senza connessione, basato su datagram-
mi. IPv4 offre un servizio di consegna di tipo best-effort, ovvero il protocollo fa
del suo meglio per consegnare i dati che sono stati spediti ma non offre alcuna
garanzia. Se è importante l’affidabilità allora è necessario associare ad IPv4 un
protocollo di livello trasporto che sia in grado di garantirla, ad esempio TCP.
IPv4 è un protocollo a commutazione di pacchetto basato su datagram-
mi. Questo significa che ogni datagramma viene gestito in modo del tut-
to indipendente e quindi può seguire un percorso diverso tra l’origine e la
destinazione.

2.1.5 Formato di datagrammi IPv4


I pacchetti usati dal protocollo IP vengono definiti datagrammi IP. Un data-
gramma è un pacchetto di lunghezza variabile composto da due parti: un’inte-
stazion (header)e e un campo dati (payload). L’intestazione contiene informa-
zioni essenziali per il routing e la consegna dei datagrammi.
Discutere il significato e il motivo dell’esistenza di ogni singolo campo del-
l’intestazione è essenziale per capire il funzionamento di IPv4.

Numero versione Questo campo (VER), formato da 4 bit, definisce la ver-


sione del protocollo IP, 0100 per la v4 e 0110 per la v6.

54
Lunghezza dell’intestazione Il campo lunghezza intestazione (HLEN), for-
mato da 4 bit, definisce la lunghezza totale dell’intestazione del datagramma.
Dal momento che un datagramma IPv4 ha intestazione di lunghezza variabi-
le, un dispositivo che riceve un datagramma ha bisogno di sapere dove finisce
l’intestazione e dove iniziano i dati incapsulati nel datagramma.

Lunghezza totale Questo campo, da 16 bit, definisce la lunghezza totale del


datagramma IP.

Identificazione, flag e scostamento di frammentazione (offset) Questi


tre campi riguardano la frammentazione dei datagrammi IP che avviene quan-
do la loro dimensione è maggiore rispetto a quella che la tecnologia di livello
collegamento sottostante è in grado di trasportare.

Time-to-live (TTL) A causa di alcuni malfunzionamenti dei protocolli, può


accadere che un datagramma circoli su internet senza raggiungere la destina-
zione finale. Il campo TTL viene usato per controllare il numero massimo di
salti (hop), cioè il numero di router visitati dal datagramma. Quando un host
sorgente invia il datagramma, esso memorizza un valore iniziale in questo cam-
po. Ogni router che elabora il datagramma descrementa di una unità questo
numero. Se il TTL giunge a zero allora il router scarta il datagramma.

Checksum dell’intestazione IP è un protocollo non affidabile, lascia l’onere


del controllo degli errori nei dati trasmessi al protocollo che è proprietario del
payload, come ad esempio UDP o TCP. L’intestazione del datagramma tuttavia
viene aggiunta dall’IP e il controllo degli errori è quindi di sua responsabilità.
Gli errori nell’intestazione IP possono essere un grosso problema in quanto po-
trebbero causare la consegna di un pacchetto ad un host sbagliato, o ad un
protocollo sbagliato, o causare un errato riassemblaggio dei frammenti del data-
gramma. Per tali ragioni IP aggiunge un campo checksum che riguarda la sola
intestazione. Dal momento che il valore di alcuni campi, come il TTL, possono
cambiare da router a router, il checksum deve essere ricalcolato in ogni router.

Indirizzi sorgente e destinazione Questi campi, lunghi 32 bit, definisco-


no rispettivamente l’indirizzo IP della sorgente e quello della destinazione. Il
valore di questi campi deve rimanere immutato durante tutto il tragitto del
datagramma IP dall’host sorgente a quello di destinazione.

Payload (dati) Il paylaod costituisce il contenuto del pacchetto.

2.1.6 Frammentazione
Per giungere alla destinazione, un datagramma IP può dover viaggiare attraverso
varie reti, ognuna con caratteristiche diverse. Una delle caratteristiche che può
variare è la dimensione del payload che può essere incapsulato nel frame, detto

55
Maximum Transfer Unit (MTU). Pertanto, un datagramma frammentato può
essere frammentato ulteriormente se incontra una rete con una MTU ancora più
piccola.

Campi relativi alla frammentazione


Tre campi nell’intestazione del datagramma IP si riferiscono alla frammentazio-
ne: identificazione, flag e scostamento di frammentazione (offset).
Il campo identificazione identifica un datagramma che ha origine da un host
sorgente. La combinazione tra indirizzo IP sorgente e campo identificazione deve
definire in modo univoco un datagramma. Per garantire l’unicità il protocollo
IP utilizza un contatore per etichettare i datagrammi. Quando un datagramma
viene frammentato un il valore del campo di identificazione viene copiato in
tutti i frammenti ottenuti.
Il campo flag, da 3 bit, in realtà definisce due flag distinti. Dei tre bit, quello
all’estrema sinistra è inutilizzato. Il secondo bit, chiamato bit D è definito do
not fragment e se il suo valore è 1 allora il dispositivo non deve frammentare il
datagramma, eventualmente scartandolo se non riesce ad inviarlo della dimen-
sione attuale ed inviando un messaggio ICMP alla sorgente. Se il suo valore è
0, se necessario, il datagramma può essere frammentato. Il terzo bit, chiamato
bit M è definito more fragments, nel caso sia impostato a 1 indica che questo
datagramma non è l’ultimo frammento della serie e che ci sono altri frammenti
dopo di lui. Se il suo valore è 0 significa che è l’ultimo (o l’unico) frammento.
Il campo scostamento di frammentazione (offset) mostra la posizione relativa
di questo frammento rispetto all’intero datagramma.

2.1.7 Indirizzi IPv4


Un indirizzo IPv4 è un indirizzo formato da 32 bit che definisce in modo univoco
e universale il collegamento di un host o un router ad Internet. L’indirizzo
IP è l’indirizzo del collegamento, non dell’host o del router, in quanto se il
dispositivo viene spostato in un’altra rete, molto probabilmente l’indirizzo IP
verrà cambiato.
Gli indirizzi IP sono unici nel senso che ogni indirizzo definisce uno e un solo
collegamento a Internet.
IPv4 usa indirizzi a 32 bit, il che significa che lo spazio degli indirizzi è 232
bit (più di 4 miliardi).
Esistono tre notazioni comunemente usate per rappresentare gli indirizzi
IPv4: la notazione binaria, la notazione decimale puntata e quella esadecimale.
Nella notazione binaria un indirizzo IPv4 viene rappresentato con 32 bit.
Per facilitare la lettura dell’indirizzo normalmente vengono inseriti uno o più
spazi tra ogni ottetto. Per rendere l’indirizzo IPv4 più compatto e facile da
leggere normalmente viene scritto in forma decimale, con un punto che separa i
byte. Questo formato viene definito notazione decimale puntata. Da notare che
siccome ogni byte (ottetto) è formato da soli 8 bit, ogni numero nella notazione
decimale puntata è compreso tra 0 e 255.

56
Gli indirizzi IPv4 sono gerarchici, divisi in due parti. La prima parte dell’in-
dirizzo, chiamata prefisso, identifica la rete, mentre la seconda parte dell’indiriz-
zo, chiama suffisso, identifica il nodo della rete. Un prefisso può avere lunghezza
fissa o variabile. Il sistema di identificazione delle reti in IPv4 è stato inizial-
mente progettato come prefisso a lunghezza fissa. Questo schema, che ormai è
obsoleto, viene indicato come indirizzamento con classi (classfull addressing). Il
nuovo schema, chiamato indirizzamento senza classi (classless addressing) usa
un prefisso di rete di lunghezza variabile.

Indirizzamento con classi


L’intero spazio degli indirizzi era stato diviso in cinque classi: A, B, C, D ed E.
Nella classe A la lunghezza della parte di rete è di 8 bit, ma siccome il
primo bit, che è 0, identifica il tipo di classe, possiamo avere solo 7 bit per
l’identificazione delle reti. Ciò significa che ci sono solo 27 = 128 reti al mondo
che possono avere un indirizzo di classe A. Nella classe B la lunghezza della parte
di rete è di 16 bit, ma siccome i primi due bit, che sono solo 214 = 16.384 reti al
mondo che possono avere un indirizzo di classe B. Tutti gli indirizzi che iniziano
con (110)2 appartengono alla classe C, nella quale la lunghezza della parte di
rete è di 24 bit, ma siccome tre bit definiscono la classe, si sono s21 = 2.097.152
reti al mondo che possono avere un indirizzo di classe C.
La ragione per cui l’indirizzamento con classi è diventato obsoleto è l’esau-
rimento degli indirizzi. Pensiamo alla classe A. Tale classe può essere assegnata
solo a 128 organizzazioni al mondo, ma a causa della struttura della classe A
ognuna deve avere una singola rete con 16.777.216 nodi. Siccome ci sono ben
poche organizzazioni così grandi, la maggior parte degli indirizzi in questa classe
è andata sprecata.

Subnetting e Supernetting Per mitigare il problema dell’esaurimento degli


indirizzi sono state proposte due strategie: subnetting e supernetting. Nel sub-
netting un blocco di classe A o B viene diviso in varie sottoreti (subnet). Questa
idea non ha funzionato in quanto la maggior parte delle grande organizzazioni
non era disponibile a dividere il proprio blocco di indirizzi per darne alcuni ad
organizzazioni più piccole.
Il supernetting è stato ideato per combinare numerosi blocchi di classe C in
un blocco più grande, che potesse soddisfare organizzazioni per le quali un blocco
di classe C era troppo piccolo. Questa idea nella pratica non ha funzionato
perché complicava il routing dei pacchetti.

Indirizzamento senza classi


In questa forma di indirizzamento vengono utilizzati dei blocchi di lunghezza
variabile che non appartengono a nessuna classe. Possiamo avere un blocco da
1, 2, 4, 128 indirizzi e così via. Il prefisso di un indirizzo definisce il blocco
(individua la rete), mentre il suffisso definisce il nodo (individua il dispositivo).
In teoria possiamo avere un blocco di 20 , 21 , 22 , . . . , 232 indirizzi.

57
Notiamo che: il numero degli indirizzi deve essere potenza di 2, la dimensione
della rete è inversamente proporzionale alla lunghezza del prefisso. Un prefisso
piccolo implica una rete più grande (con molti nodi), mentre un prefisso grande
implica una rete più piccola (con pochi nodi).

Lunghezza del prefisso: notazione slash La lunghezza del prefisso, n,


viene aggiunta all’indirizzo separata da una barra (slash). La numerazioni vie-
ne informalmente definita notazione slash e formalmente classless interdomain
routing (CIDR).

Estrazione delle informazioni da un indirizzo


Dato un indirizzo IP appartenente ad un blocco di indirizzi, normalmente vo-
gliamo ricavare tre informazioni riguardo il suo blocco di appartenenza: il nu-
mero di indirizzi che contiene, il primo indirizzo del blocco e l’ultimo. Siccome
la lunghezza del prefisso, n, è nota, possiamo facilmente ottenere queste tre
informazioni.

1. Il numero di indirizzi nel blocco è dato da N = 232−n


2. Per trovare il primo indirizzo, teniamo invariati i primi n bit partendo da
sinistra e impostiamo a 0 tutti i bit restanti a destra (sono 32-n).
3. Per trovare l’ultimo indirizzo, teniamo invariati i primi n bit partendo da
sinistra e impostiamo a 1 tutti i bit restanti a destra (anche in questo caso
sono 32-n).

Maschera dell’indirizzo (address mask) Un altro modo per trovare il pri-


mo e l’ultimo indirizzo del blocco è usare la maschera dell’indirizzo, cioè un
numero composto da 32 bit in cui i primi n bit a sinistra sono impostati a 1 e
il resto dei bit (32 − n) sono impostati a 0. In questo caso:

1. Il numero degli indirizzi nel blocco è N = NOT(maschera)+1


2. Il primo indirizzo nel blocco = (qualsiasi indirizzo del blocco) AND (ma-
schera)
3. L’ultimo indirizzo nel blocco = (qualsiasi indirizzo nel blocco) OR (NOT(maschera))

Il primo indirizzo, detto indirizzo di rete (o network address), è particolar-


mente importante in quanto è usato nell’instradamento dei datagrammi verso
la rete di destinazione. Quando un datagramma giunge al router da un qual-
siasi host sorgente, il router deve sapere a quale rete va inviato il datagramma
e quindi da quale interfaccia va inviato. Dopo che il network address è stato
trovato, il router consulta la sua tabella di inoltro per trovare l’interfaccia cor-
rispondente dalla quale inviare il datagramma. Quindi, il network address è in
realtà lo strumento per l’identificazione delle reti: ogni rete è identificata per
mezzo del suo network address.

58
Subnetting per indirizzamento senza classi Più livelli di gerarchia pos-
sono essere creati utilizzando il subnetting. Un’organizzazione a cui viene as-
segnato un blocco di indirizzi può dividerlo in vari sottoblocchi ed assegnare
ognuno di questi ad una sottorete (subnet).

Esempio
Ad un’organizzazione viene assegnato il seguente blocco di indirizzi
185.195.192.0/18. L’organizzazione ha bisogno di creare le seguenti 3 sottoreti:
• Sottorete1 con 400 indirizzi IP

• Sottorete2 con 300 indirizzi IP


• Sottorete3 con 1084 indirizzi IP
Il blocco di indirizzi va da 185.195.11000000.0/18 a 185.195.11111111.255/18
per un totale di 2(32−18) = 16.384 indirizzi.
Il subnetting inizia con l’attribuzione degli indirizzi alla sottorete che ha fatto
richiesta del numero maggiore di indirizzi IP.
IP3 richiesta:
• 1084 indirizzi non è una potenza di 2, quindi gli verranno assegnati
2048 = 211 indirizzi, con parte network formata da 32 − 11 = 21 bit

• Blocco indirizzi attribuiti a IP3: da 185.195.11000000.0/21 a


185.195.11000111.255/21 cioè da 185.195.192.0/21 a 185.195.199.255/21
IP1 richiesta:
• 400 indirizzi non è una potenza di 2, quindi gli verranno assegnati
512 = 29 indirizzi, con parte network formata da 32 − 9 = 23 bit
• Blocco indirizzi attribuiti a IP1: da 185.195.11001000.0/23 a
185.195.11001001.255/23 cioè da 185.195.200.0/23 a 185.195.201.255/23
IP2 richiesta:

• 300 indirizzi non è una potenza di 2, quindi gli verranno assegnati


512 = 29 indirizzi, con parte network formata da 32 − 9 = 23 bit
• Blocco indirizzi attribuiti a IP2: da 185.195.11001010.0/23 a
185.195.11001011.255/23 cioè da 185.195.202.0/23 a 185.195.203.255/23

Aggregazione degli indirizzi (Supernetting) Uno dei vantaggi della stra-


tegia CIDR è la possibilità di aggregare gli indirizzi. Quando alcuni blocchi
d’indirizzi vengono combinati per creare un blocco più grande, l’instradamento
può essere effettuato sulla base del prefisso del blocco combinato.

59
Esempio
Si supponga di aver bisogno di 1000 indirizzi IP non avendo però a
disposizione una rete abbastanza grande. Si potrebbe, allora, acquistare
quattro network address:
5.5.0.0/24,
5.5.1.0/24,
5.5.2.0/24,
5.5.3.0/24
i cui rispettivi indirizzi binari sarebbero:
5.5.00000000.00000000,
5.5.00000001.00000000,
5.5.00000010.00000000,
5.5.00000011.00000000
ed unificarli utilizzando una maschera di rete che rappresenti la porzione di
indirizzo invariata per tutti gli indirizzi. In questo caso i bit invariati in tutti e
quattro gli indirizzi acquistati sono 22, pertanto si avrebbe il blocco di
indirizzi 5.5.0.0/22

Indirizzi speciali Esistono indirizzi speciali che vengono usati per scopi par-
ticolari. Tra questi vi sono:

• Indirizzo this host, è l’unico indirizzo del blocco 0.0.0.0/32 e viene usato
ogni volta che un host ha la necessità di inviare un datagramma IP.
• Indirizzo limited-broadcast, è l’unico indirizzo nel blocco 255.255.255.255/32
e viene usato ogni volta che un router o un host devono inviare un data-
gramma a tutti i dispositivi che si trovano all’interno della rete.

Dynamic Host Configuration Protocol (DHCP)


Dopo che un blocco di indirizzi è stato assegnato ad un’organizzazione, l’am-
ministratore di rete può assegnare manualmente gli indirizzi ai singoli host o
router. Tuttavia l’assegnazione degli indirizzi può anche essere automatizzata
usando il Dynamic Host Configuration Protocol (DHCP). Il DHCP è un pro-
gramma di livello di applicazione, basato sul paradigma client/server, che in
pratica aiuta il TCP/IP a livello di rete. Questo protocollo spesso viene definito
protocollo plug-and-play. Un amministratore di rete può configurare DHCP sia
per assegnare indirizzi IP permanenti sia indirizzi IP temporanei (ad esempio
ad un ospite di un hotel che vole collegare ad internet il proprio laptop).

Funzionamento del DHCP Il DHCP è un protocollo client/server nel quale


il client invia un messaggio di richiesta e il server invia un messaggio di risposta.

1. L’host che vuole entrare in rete crea un messaggio di tipo DHCPDISCO-


VER nel quale solo il campo transaction-ID viene impostato usando un
numero generato casualmente. Questo messaggio viene incapsulato in un

60
Figura 2.2: Scambio di messaggi Client-Server.

datagramma utente UDP a sua volta incapsulato in un datagramma IP


con indirizzo sorgente impostato a 0.0.0.0 (“this-host”) e l’indirizzo di de-
stinazione impostato a 255.255.255.255 (indirizzo broadcast), infatti l’host
al momento non conosce né il proprio indirizzo né quello del server.
2. Il server o i server DHCP rispondono con un messaggio di tipo DHCPOF-
FER nel quale il campo your-IP-address contiene l’indirizzo IP offerto per
l’host che ne ha fatto richiesta e il server-IP-address contiene l’indirizzo
IP del server. Il messaggio contiene anche un lease time (tempo di con-
cessione), cioè per quanto tempo l’host potrà far uso di quell’indirizzo IP.
Questo messaggio viene incapsulato in un datagramma utente UDP con
indirizzi invertiti e a sua volta incapsulato in un datagramma IP con l’in-
dirizzo del server come indirizzo IP sorgente, ma l’indirizzo di destinazione
è ancora broadcast. Questo è utile anche per consentire agli altri server
DHCP di ricevere l’offerta e fornire un’offerta migliore, qualora possano.
3. L’host richiedente riceve una o più offerte e seleziona la migliore. A questo
punto l’host deve inviare un messaggio di tipo DHCPREQUEST al server
che ha inviato l’offerta migliore. Il messaggio viene incapsulato in un
datagramma UDP con gli stessi indirizzi del primo messaggio e a sua volta
incapsulato in un datagramma IP con l’indirizzo sorgente impostato al
nuovo indirizzo assegnato al client, ma l’indirizzo di destinazione è ancora
impostato all’indirizzo broadcast. Questo serve per annunciare a tutti gli
altri indirizzi che la loro offerta non è stata accettata.

4. Infine, il server selezionato risponde con un messaggio di tipo DHCPACK


al client se l’indirizzo IP offerto è valido. Se il server non è più in grado di

61
mantenere la sua offerta, il server invia un messaggio di tipo DHCPNACK
e il client deve ripetere il procedimento.

NAT
Il Network Address Translation (NAT) è una tecnologia che consente di usare
una serie di indirizzi privati per la comunicazione interna e una serie di indirizzi
Internet globali (almeno uno) per la comunicazione con il resto del mondo.
In questo modo, la rete interna necessita di un solo collegamento all’Internet
globale, per mezzo di un router in grado di effettuare operazioni di NAT.
La rete privata utilizza solamente indirizzi IP privati, il router che collega la
rete interna ad internet utilizza due indirizzi IP, uno privato ed uno pubblico,
pertanto la rete privata risulta invisibile al resto di Internet.
Tutti i pacchetti in uscita dalla rete privata passano tramite il router NAT,
che sostituisce l’indirizzo IP sorgente presente nel datagramma con l’indirizzo
NAT pubblico del router. Anche tutti i pacchetti in entrata passano tramite il
router NAT, che in questo caso sostituisce l’indirizzo destinazione con l’indirizzo
privato appropriato. Per svolgere questa funzione il router NAT viene dotato
di una tabella di traduzione composta da due colonne: l’indirizzo privato e
l’indirizzo esterno. Quando il router traduce l’indirizzo sorgente del datagramma
in uscita prende anche nota dell’indirizzo destinazione. Quando torna la risposta
dalla destinazione, il router usa l’indirizzo sorgente del datagramma per trovare
l’indirizzo privato del datagramma.

2.1.8 Inoltro dei datagrammi IP


Inoltrare significa collocare il pacchetto nel giusto percorso che lo porterà a
destinazione, ovvero inviare il pacchetto al salto (hop) successivo.
L’indirizzamento senza classi richiede che l’host o il router che deve effettuare
il forwarding abbia una tabella d’inoltro e, poiché l’intero spazio degli indirizzi
è una entità unica, l’inoltro richiede una riga di informazioni per ciascun blocco
coinvolto. Le informazioni nella tabella devono essere cercate in base all’indi-
rizzo di rete (il primo indirizzo del blocco). Poiché l’indirizzo di destinazione
presente nel datagramma non fornisce alcun indizio in merito all’indirizzo di
rete, occorre includere la maschera di rete nella tabella. Pertanto una tabella
di inoltro per l’indirizzamento senza classi deve includere quattro informazio-
ni: la maschera, l’indirizzo di rete, il numero dell’interfaccia e l’indirizzo IP del
router successivo. Tuttavia, abbiamo visto che le prime due informazioni sono
combinate.
Il compito del modulo di inoltro è quello di effettuare le ricerche nella tabella.
In ciascuna riga, gli n bit a sinistra nell’indirizzo di destinazione (prefisso) sono
lasciati invariati e il resto dei bit (suffisso) sono impostati a 0. Se l’indirizzo
risultante (chiamato indirizzo di rete) combacia con l’indirizzo nella prima co-
lonna, allora l’informazione nelle successive due colonne viene estratta. In caso
contrario la ricerca continua.

62
Routing gerarchico Per risolvere il problema delle tabelle d’inoltro di di-
mensione eccessiva è possibile implementare una sorta di gerarchia nelle tabelle
d’inoltro. Oggi Internet ha una struttura in qualche modo gerarchica, essendo
divisa in dorsali e ISP nazionali. Gli ISP nazionali sono suddivisi in ISP regiona-
li, che a loro volta sono partizionati in ISP locali. Se la tabella d’inoltro ha una
qualche forma di gerarchia, analoga all’architettura di Internet, può diminuire
di dimensione.

Routing geografico Per diminuire ulteriormente la dimensione delle tabelle


di inoltro, l’instradamento gerarchico può tener conto anche della suddivisione
geografica. In questo caso l’intero spazio degli indirizzi deve essere suddiviso in
pochi grandi blocchi, ciascuno di questi assegnato ad un diverso continente. I
router degli ISP al di fuori dell’Europa avranno solamente una riga per i data-
grammi destinati all’Europa all’interno della loro tabella d’inoltro, e lo stesso
avviene per tutti i continenti.

2.1.9 ICMPv4
L’IPv4 non implementa alcun meccanismo per segnalare gli errori o correggerli.
Cosa accede se qualcosa va storto? L’Internet Control Message Protocol versione
4 (ICMPv4) è stato creato per porre rimedio a queste carenze. I messaggi
ICMP vengono incapsulati all’interno di datagrammi IP prima di essere passati
al livello inferiore. Quando un datagramma IP incapsula un messaggio ICMP,
il valore del campo protocollo nel datagramma IP è impostato a 1, per indicare
che nel payload del datagramma è presente un messaggio ICMP.
I messaggi ICMPv4 sono suddivisi in due grandi categorie: messaggi di se-
gnalazione errori e messaggi di richiesta. I primi riportano i problemi che router
o host possono incontrare quando elaborano un datagramma IP, i secondi per-
metto ad un host o ad un amministratore di rete di chiedere informazioni ad un
router o ad un altro host.
È importante sottolineare che ICMP non corregge gli errori, si limita a se-
gnalarli. La correzione è delegata ai protocolli di livello più alto. ICMP utilizza
l’indirizzo IP della sorgente per inviare un messaggio di errore all’host mittente.
ICMP segue alcune semplici regole:
1. Nessun messaggio di errore sarà generato da un datagramma che ha come
destinazione un indirizzo multicast o un indirizzo speciale
2. Nessun messaggio di errore ICMP sarà generato in risposta a un data-
gramma che contiene un messaggio di errore ICMP.
3. Nessun messaggio di errore ICMP sarà generato per un datagramma fram-
mentato che non sia il primo frammento di una serie, i frammenti successivi
al primo non generano errori ICMP.
Il messaggio di errore più ampiamente usato è quello di destinazione non rag-
giungibile. Un altro messaggio comune è di tempo scaduto che viene inviato alla
sorgente in seguito allo scarto di un datagramma con TTL sceso a 0.

63
Tipici messaggi di richiesta sono la coppia di messaggi richiesta eco e ri-
sposta eco, utilizzata da un host o da un router per verificare il funzionamento
di un altro host o router. La coppia di messaggi richiesta timestamp e rispo-
sta timestamp è utilizzata per verificare se gli orologi nei due dispositivi sono
sincronizzati.

2.1.10 Routing unicast


In una rete come Internet lo scopo del livello di rete è quello di consegnare un
datagramma alla destinazione o alle destinazioni. Se un datagramma è destinato
ad una sola destinazione si parla di routing unicast. Se il datagramma è destinato
a numerose destinazioni si parla di routing multicast.
Nel routing unicast un pacchetto viene instradato, salto dopo salto, dalla sua
sorgente alla sua destinazione con l’aiuto delle tabelle d’inoltro. L’host sorgente
non ha bisogno di alcuna tabella d’inoltro visto che si limita a consegnare il
proprio pacchetto al router di default della sua rete locale. Neanche l’host
di destinazione ha bisogno di una tabella d’inoltro, poiché riceve il pacchetto
direttamente dal router di default della sua rete locale. Questo significa che solo
i router che collegano tra loro le diverse reti hanno bisogno di tabelle d’inoltro.
Per trovare il percorso migliore, una rete di reti può essere modellata per
mezzo di un grafo dove ogni router è un nodo e ogni coppia di router sia un
arco al quale può essere associato un costo, quest’ultimo ha un valore diverso a
seconda dei diversi protocolli di routing.
Quando una internet viene rappresentata con un grafo pesato, uno dei nodi
per interpretare il percorso migliore dal router sorgente al router destinazione
è trovare il minor costo tra i due, ovvero il percorso con il minimo costo totale
tra tutti quelli possibili. Ciò significa che ogni router deve trovare il percorso a
costo minimo tra se stesso e tutti gli altri router.
Se in una rete ci sono N router allora ci sono N − 1 percorsi a costo minimo
da ogni router a ogni altro router. Un modo migliore per vedere questi percorsi
è combinarli in un albero di costo minimo, cioè un albero con il router sorgente
che fa da radice e che visita tutti gli altri nodi dell’albero seguendo sempre il
percorso meno costoso tra quelli possibili.

Figura 2.3: Rappresentazione sotto forma di grafo di una rete.

2.1.11 Algoritmi di routing


Come abbiamo accennato le differenze tra i vari metodi consistono nel modo
in cui essi interpretano il costo minimo e creano l’albero a costo minimo per
ciascun nodo.

64
Figura 2.4: Alberi a costo minimo per i nodi nella rete della Figura 2.3.

In generale, gli algoritmi di instradamento sono classificabili come centraliz-


zati o decentralizzati.

• Un algoritmo di routing centralizzato calcola il percorso a costo mini-


mo tra una sorgente e una destinazione avendo una conoscenza globale e
completa della rete. Appartiene a questa categoria l’algoritmo Link-State.
• In un algoritmo di instradamento decentralizzato, il percorso a costo mini-
mo viene calcolato in modo distribuito e iterativo. Nessun nodo possiede
informazioni complete sul costo di tutti i collegamenti di rete. Inizialmen-
te i nodi conoscono soltanto i costi dei collegamenti a loro incidenti. Poi
attraverso un processo iterativo e lo scambio di informazioni con i nodi
adiacenti, un nodo gradualmente calcola il percorso a costo minimo verso
una destinazione. Un algoritmo che appartiene a questa categoria è chia-
mato Distance-Vector (DV), poiché ogni nodo elabora un vettore di stima
dei costi verso tutti gli altri nodi nella rete.
Un secondo criterio per classificare gli algoritmi di instradamento riguarda
il fatto di essere statici o dinamici. Negli algoritmi di instradamento statici i
percorsi cambiano molto raramente. Gli algoritmi di instradamento dinamici
invece determinano al variare del volume di traffico o della topologia della rete.

Routing basato su vettore distanza


Il distance-vector (DV) routing è un metodo di instradamento distribuito, nel
senso che ciascun nodo riceve parte dell’informazione e dopo aver effettuato i
calcoli, restituisce il risultato, iterativo nel senso che questo processo si ripete si-
no a quando non avviene ulteriore scambio di informativo tra vicini, e asincrono
nel senso che non richiede che tutti i nodi operino al passo con gli altri.
Nell’instradamento basato su vettore distanza per prima cosa ogni nodo
crea il proprio albero di costo minimo con le informazioni di base che possiede
sui suoi soli nodi vicini. Il risultato sono degli alberi incompleti che vengono a

65
Figura 2.5: Rappresentazione grafica dell’equazione di Bellman-Ford.

questo punto scambiati tra nodi vicini per rendere l’albero sempre più completo e
rappresentare così l’intera rete. Questa comunicazione tra nodi vicini è continua.
Prima di vedere come funziona il completamento degli alberi incompleti,
discutiamo dell’equazione di Bellman-Ford e del concetto di vettore distanza.

Equazione di Bellman-Ford Il fulcro del routing basato su vettore distanza


è la famosa equazione di Bellman-Ford. Questa equazione viene usata per tro-
vare il costo minimo tra un nodo sorgente, x, e un nodo destinazione, y, tramite
dei nodi intermedi dove sono noti:
• i costi tra il nodo sorgente e i nodi intermedi
• i costi minimi tra i nodi intermedi

• la destinazione

Dxy = min{Dxy , (cxz + Dzy )} (2.1)

Vettore distanza Il concetto di vettore distanza è alla base del distance-


vector routing. Un albero a costo minino è una combinazione di percorsi a
costo minimo dalla radice dell’albero verso tutte le destinazioni. Il routing a
vettore distanza scinde tali percorsi e crea quello che viene chiamato un vettore
distanza, cioè un array monodimensionale che rappresenta l’albero.
Per migliorare questi vettori, i nodi della rete devono aiutarsi scambiandosi
informazioni. Dopo che ogni nodo ha creato il suo vettore ne invia una copia
a tutti i suoi vicini. Dopo che ogni nodo ha creato il suo vettore ne invia una
copia a tutti i suoi vicini. Quando un nodo riceve un vettore distanza da un
vicino provvede ad aggiornare il suo vettore distanza applicando l’equazione di
Bellman-Ford. Tuttavia bisogna aggiornare non solo un costo minimo ma N
costi minimi, dove N è il numero di nodi nella rete.

Conteggio all’infinito Il problema con il routing basato su vettore distanza è


che i decrementi di costo si diffondono rapidamente, mentre gli aumenti di costo
propagano lentamente, Affinché un protocollo di routing lavori correttamente,
se un collegamento assume valore infinito, ogni altro router dovrebbe venirne a
conoscenza immediatamente, ma nel routing DV sere un pò di tempo. Questo
problema è chiamato conteggio all’infinito.

66
Figura 2.6: Vettore distanza di un albero.

Figura 2.7: Vettori distanza iniziali dei nodi di una rete.

Un esempio di conteggio all’infinito è il ciclo a due nodi. Supponiamo che


all’inizio sia il nodo A che il nodo B sappiano come raggiungere il nodo X.
Improvvisamente si guasta il collegamento tra A e X. A di conseguenza modifica
la sua tabella. Se A invia immediatamente la sua tabella aggiornata a B non c’è
problema, ma se B invia la sua tabella di inoltro ad A prima di ricevere quella di
A, il sistema diventa instabile. In nodo A riceve l’aggiornamento e, credendo che
B sappia come raggiungere X, aggiorna la sua tabella. Ora A invia nuovamente
l’aggiornamento a B che, a sua volta, aggiorna la propria tabella. Pertanto, il
costo per raggiungere X aumenta gradualmente sino ad arrivare all’infinito (16
hop solitamente). Questo stato del sistema comporta un rimbalzo dei pacchetti
tra i nodi rendendo il sistema inefficiente.
Presentiamo due possibili soluzioni. Una soluzione all’instabilità viene chia-
mata split horizon. Se il nodo B ritiene che il percorso ottimale per raggiungere
X passi tramite A, allora non deve fornire questa informazione ad A. In effet-
ti tale informazione è arrivata da A, quindi la conosce già. Quindi nel caso
descritto in precedenza, B, prima di comunicare la sua tabella ad A, rimuove
l’informazione ricevuta da A. Quindi A mantiene il valore di infinito come di-

67
stanza verso X e quando A invia la sua tabella a B, anche il nodo B corregge
la sua tabella. Il problema di questo metodo sta nel fatto che il protocollo che
implementa l’algoritmo di routing utilizza un timer: se per un certo periodo non
ci sono novità circa un percorso, elimina il percorso verso X dai suoi annunci
ad A, il nodo A non può sapere se ciò è dovuto alla strategia spit-horizon o
se dipende dal fatto che B recentemente non ha ricevuto alcuna notizia di X.
Nella strategia dell’inversione avvelenata, o poisoned reverse, B può condividere
il valore per X, ma se la sorgente delle informazioni è A, allora sostituisce la
distanza con valore infinito. In questo caso l’infinito viene usato come avverti-
mento: “Non usare questo valore, quello che so circa questo percorso viene da
te”.

Routing a stato del collegamento


In un algoritmo a stato del collegamento, o Link-State (LS), la topologia della
rete e tutti i costi dei collegamenti sono noti. Per creare un albero a costo
minimo utilizzando questo metodo ogni nodo deve avere una mappa completa
della rete, il che significa che deve conoscere lo stato di ciascun collegamento.
Ciò si ottiene facendo inviare a ciascun nodo pacchetti (Link-State packet, LSP)
sullo stato dei suoi collegamenti a tutti gli altri nodi della rete, tale procedura
si chiama flooding (inondazione). La raccolta di stati per tutti i collegamenti
viene chiamata Link-state Database (LSDB), che è unico per l’intera rete, ma
ogni nodo deve averne un duplicato per poter essere in grado di creare l’albero
a costo minimo.

Costruzione degli alberi a costo minimo Per costruire il suo albero a


costo minimo utilizzando l’LSDB condiviso, ogni nodo deve eseguire il famoso
algoritmo di Dijkstra. Questo algoritmo iterativo è composto dai seguenti passi:
1. Il nodo sceglie se stesso come radice dell’albero, crea un albero con un
singolo nodo e imposta il costo totale di ogni nodo sulla base delle infor-
mazioni che trova nell’LSDB
2. il nodo seleziona un altro nodo, tra tutti quelli che non sono presenti
nell’albero, in modo che sia il più vicino possibile alla radice, e lo aggiunge
all’albero. Dopo che questo nodo è stato aggiunto all’albero, il costo dei
nodi non presenti nell’albero deve essere aggiornato in quanto i percorsi
potrebbero essere cambiati
3. il nodo ripete il passaggio 2 finché tutti i nodi non sono stati aggiunti
all’albero.
I tre passaggi sopra riportati alla fine creano un albero a costo minimo (Figu-
ra 2.8).

68
Figura 2.8: Albero a costo minimo.

Path-vector routing
Sia il routing a stato del collegamento che a vettore distanza si basano sul costo
minimo. Tuttavia, ci sono dei casi in cui il costro non è l’obiettivo prioritario.
Ad esempio, supponiamo che nella rete ci siano dei router tramite i quali un
mittente non vuole che passino i suoi pacchetti. Per soddisfare queste richieste
è stato ideato un terzo algoritmo di routing, chiamato path-vector (PV) routing
in cui il percorso migliore viene determinato dalla sorgente utilizzando la politica
che essa stessa decide di imporre al percorso.

2.1.12 Protocolli di routing unicast


Nella sezione precedente si è parlato degli algoritmi di routing unicast, in questa
sezione invece si analizzano i protocolli di routing unicast utilizzati in Internet:
• il Routing Information Protocol (RIP), che si basa sull’algoritmo distance-
vector
• l’Open Shortest Path First (OSPF), basato sull’agoritmo link state
• il Border Gateway Protocol (BGP), che si basa sull’algoritmo path-vector

Routing Gerarchico
Implementare un ruoting gerarchico significa considerare ogni ISP come un siste-
ma autonomo (AS). Ogni AS può eseguire un protocollo di routing che soddisfa

69
le sue esigenze. A livello di Internet globale, questo non è possibile, è necessario
un protocollo di routing globale in grado di unire assieme tutti gli AS. Il pro-
tocollo di routing usato all’interno degli AS viene definito protocollo di routing
intra-AS, mentre il protocollo di routing globale viene definito protocollo di rou-
ting inter-AS. Ogni AS è libero di scegliere un qualsiasi protocollo intra-AS, ma
ci deve essere un solo protocollo inter-AS a livello globale. Attualmente i due
protocolli di routing intra-AS più comuni sono RIP e OSPF; l’unico protocollo
di routing inter-AS è il BGP.
I sistemi autonomi vengono classificati a seconda del modo in cui sono
connessi agli altri AS.
• AS stub: ha un solo collegamento verso un altro AS. Il traffico dati può
essere generato da o destinato ad un AS stub ma non può accadere che i
dati transitino attraverso l’AS.
• AS multihomed: ha più di una connessione con altri AS ma non consente
al traffico dei dati di passare attraverso di esso.
• AS di transito: è collegato a vari AS e consente anche il transito del traffico
dati.

Routing Information Protocol (RIP)


Il Routing Information Protocol (RIP) è uno dei protocolli di routing intra-
dominio più utilizzato ed è basato sull’algoritmo Distance-Vector. Il peso degli
archi viene definito come il numero di salti (hop), cioè il numero di sottoreti, che
un pacchetto deve visitare per andare dal router sorgente all’host di destinazione.
Chiaramente la rete di partenza non viene considerata in questo calcolo. In RIP
il costo massimo di un percorso è di 15 hop, il che significa che il valore 16
rappresenta l’infinito.
Abbiamo visto che l’algoritmo a vettore distanza, su cui RIP si basa, ha lo
scopo principale di scambiare vettori distanza tra i nodi vicini. Nel caso dei
router di un AS il loro obiettivo èw di costruire delle tabelle d’inoltro per far
giungere i pacchetti alla loro rete di destinazione. In RIP, una tabella d’inoltro è
formata da tre colonne: nella prima c’è l’indirizzo della rete di destinazione, nella
seconda l’indirizzo del prossimo router al quale il pacchetto deve essere inoltrato
e nella terza il costo (numero di hop) per raggiungere la rete di destinazione.
RIP si basa su una coppia di processi client-server e sul loro scambio di
messaggi RIP. In RIP ci sono due tipi di messaggi: richieste e risposte. Un
messaggio di richiesta viene inviato da un router appena acceso o da un router
che ha delle voci scadute in memoria (dove per voci si intende l’informazione
relativa ad una riga della tabella di inoltro). I messaggi di risposta possono
essere sollecitati oppure no. Un messaggio di risposta non sollecitato viene
inviato periodicamente o quando c’è un cambiamento nella tabella di inoltro.
Anche se RIP è un protocollo di routing i suoi messaggi vengono incapsulati
all’interno di datagrammi utente UDP. Questo significa che RIP lavola a livello
di applicazione ma crea delle tabelle di inoltro di IP che servono al livello di
rete. Da questa caratteristica deriva un decremento della sua efficienza.

70
Timer in RIP Per il suo funzionamento, RIP utilizza tre timer. Il timer
periodico controlla l’invio dei messaggi di aggiornamento. Quando arriva a zero
viene inviato un messaggio d’aggiornamento. Il timer di scadenza regola la
validità dei percorsi. Se non viene ricevuto alcun aggiornamento nell’arco dei
180 secondi assegnati, il percorso viene considerato come scaduto e il suo conto
dei salti viene impostato a 16. Il timer per la garbage collection viene usato per
eliminare i percorsi dalla tabella d’inoltro. Quando il contatore raggiunge lo 0,
il percorso viene definitivamente eliminato dalla tabella. Questo timer consente
ai vicini di venire a conoscenza di un percorso che non è più valido, prima che
sia eliminato.

Open Shortest Path First (OSPF)


L’Open Shortest Path First (OSPF) è anch’esso un protocollo di routing intra-
AS come il RIP, ma si basa sull’algoritmo Link-State. Nell’OSPF, come nel RIP,
il costo per raggiungere una destinazione dall’host si calcola dal router sorgente
alla rete di destinazione, tuttavia, ad ogni collegamento può venire assegnato
un peso a seconda del suo throughput, RTT, affidabilità, . . .
Ogni router OSPF crea una tabella d’inoltro dopo aver trovato l’albero a
percorso minimo tra se stesso e la destinazione usando l’algoritmo di Dijkstra
(implementato nel LS appunto). Confrontando le tabelle d’inoltro per l’OSPF e
il RIP nello stesso AS, troviamo che l’unica differenza sono i valori di costo. In
altre parole se usiamo il conteggio dei salti per l’OSPF allora le tabelle saranno
esattamente identiche.
L’OSPF è stato progettato per poter gestire il routing in AS di tutte le
dimensioni. Tuttavia, la costruzione degli alberi a percorso minimo nell’OSPF
richiede che tutti i router inondino (flooding) l’intero AS con i loro LSP per
creare l’LSDB globale. Per evitare che, per AS di medie e grandi dimensioni,
questa procedura crei un enorme volume di traffico, l’AS può essere diviso in
settori più piccoli chiamati aree in cui applicare flooding indipendente.
Ogni router che si trova in un’area ha bisogno di conoscere lo stato dei
collegamenti non solo dell’area ma anche delle altre aree. Per tale ragione una
delle aree dell’AS viene definita area dorsale (backbone area), il cui compito è
proprio quello di collegare tra loro le varie aree. I router nell’area dorsale hanno
la responsabilità di raccogliere le informazioni delle varie aree e comunicarle.
Anche se OSPF è un protocollo di routing usato per permettere l’instrada-
mento dei datagrammi all’interno di un AS, esso stesso è incapsulato diretta-
mente all’interno di datagrammi IP.

Border Gateway Protocol Versione 4 (BGP4)


Il Border Gateway Protocol Versione 4 è l’unico protocollo di routing inter-AS
ora utilizzato in Internet. Il BGP4 si basa sull’algoritmo a vettore distanza
(path-vector), in altri termini il percorso che un datagramma deve seguire è
deciso a priori in maniera non democratica.

71
Ogni router all’interno degli AS sa come raggiungere tutte le reti che si
trovano nel suo AS, ma non sa come raggiungere una rete che si trova in un
altro AS. Per permettere ad ogni router di instradare correttamente i pacchetti,
qualsiasi sia la destinazione, è necessario installare su tutti i router di confine
dell’AS una variante del BGP chiamata BGP esterno (eBGP). Tutti i router
(non solo quelli di confine) dovranno invece usare la seconda variante del BGP,
chiamata BGP interno (iBGP). Questo significa che i router di confine devono
eseguire ben tre protocolli d’instradamento (intra-AS, eBGP, iBGP) e che tutti
gli altri router ne eseguono due (intra-AS e iBGP).
La variante eBGP del BGP permette a due router di confine che si trovano
in due diversi AS di formare coppie di speaker eBGP e di scambiarsi messaggi.
La connessione tra queste coppie viene stabilita attraverso connessione logica
TCP. Ogni connessione logica viene definita sessione.
Il protocollo BGP usa quattro tipi di messaggi per la comunicazione tra
speaker, sia attraverso gli AS che all’interno di un AS: open, per collegarsi ai
router vicini, update per l’aggiornamento dei percorsi, keepalive, per mantenere
aperta la connessione, notification, per notificare una condizione di errore e
chiudere la sessione.

2.1.13 IP versione 6
L’Internet Protocol versione 6 (IPv6) è nata con lo scopo di aumentare lo spazio
degli indirizzi rispetto a IPv4. Infatti un indirizzo IPv6 è lungo 128 bit, contro
i 32 bit della versione 4.
Ciascun datagramma è composto da un’intestazione di base seguita dai dati
(payload). L’intestazione di base occupa 40 byte, mentre il payload può arrivare
fino a 65.535 byte.
L’intestazione è divisa in campi, tra i quali vi sono:
• Versione: definisce il numero di versione del protocollo IP, per IPv6 è il
6.
• Etichetta di flusso: permette la gestione dei dati sotto forma di flusso
di datagrammi, rispetto ai singoli datagrammi indipendenti come accade
con IPv4. Serve per stabilire che i vari datagrammi seguano uno stesso
percorso.
• Lunghezza del payload : definisce la lunghezza del datagramma IP esclu-
dendo l’intestazione. Al contrario del IPv4 l’intestazione è fissa, quindi
non occorre un campo che ne indichi la lunghezza.
• Hop limit: ha la stessa funzione del TTL in IPv4
• Indirizzo sorgente e indirizzo destinazione: indicano appunto l’indirizzo
di sorgente e destinazione del datagramma
• Payload : dati che si vogliono trasmettere.
Notiamo l’assenza del campo di checksum, in quanto nella versione 6 il
controllo degli errori è delegato ai protocolli di livello superiore.

72
2.1.14 Frammentazione e riassemblaggio
In IPv6 la frammentazione e il riassemblaggio esistono ancora ma rispetto ad
IPv4 c’è una differenza fondamentale. I datagrammi IPv6 possono essere fram-
mentati solo dalla sorgente e non dai router lungo il percorso. Il riassemblaggio
avviene solo alla destinazione. In IPv6 l’host sorgente può verificare la dimensio-
ne del datagramma e verificare se fammentarlo o meno. Quando un router riceve
un datagramma, controlla la sua dimensione e lo scarta nel caso sia maggiore
rispetto a quanto consentito dalla MTU della rete in cui deve inoltrarlo.
Un computer memorizza un indirizzo IPv6 in binario ma si utilizza una rap-
presentazione in esadecimale per una maggiore leggibilità da parte di un umano.
Inoltre, un indirizzo che prevede molti zero può essere abbreviato sostituendo
tali zero con il simbolo ‘::’.

Tre tipi di indirizzo In IPv6, un indirizzo di destinazione può essere unica-


st, anycast o multicast. Un datagramma inviato ad un indirizzo unicast sarà
inoltrato al destinatario desiderato. Un indirizzo anycast definisce un gruppo di
computer che condividono un singolo indirizzo. Un datagramma con un inirizzo
di destinazione anycast è consegnato ad un solo membro del gruppo, quello più
raggiungibile. Anche un indirizzo multicast definisce un gruppo di computer,
tuttavia, ciascun membro del gruppo riceve una copia del datagramma.

2.2 Livello di Collegamento


I nodi all’interno delle reti sono fisicamente collegati da un mezzo trasmissivo,
come un cavo o l’aria. Compito del livello di collegamento è controllare come
viene usato tale mezzo. I collegamenti si distinguono in punto-punto o broadcast.
In un collegamento punto-punto, il collegamento è dedicato a due soli dispositivi.
Viceversa, in un collegamento broadcast, il collegamento è condiviso tra varie
coppie di dispositivi.
Questo livello può essere diviso in due sotto-livelli: il Data-Link Control
(DLC) ed il controllo dell’accesso al mezzo trasmissivo (Media Access Control,
MAC).

2.2.1 Data-Link Control (DLC)


Il Data-Link Control si occupa delle procedure per la comunicazione tra due
nodi adiacenti, indipendentemente dal fatto che il collegamento sia dedicato o
broadcast. Le funzioni del DLC comprendono il framing, il controllo di flusso,
il rilevamento e correzione degli errori.

Framing
Il livello di collegamento svolge la funzione di raggruppare i bit all’interno di
frame, questo per fare in modo che sia possibile stabilire un ordine tra i bit e
distinguerli gli uni dagli altri.

73
Il framing a livello di collegamento, ha il compito di separare i vari mes-
saggi durante la trasmissione da una sorgente a una destinazione. Opera ag-
giungendo a singoli frame sia l’indirizzo del mittente che quello destinazione.
L’indirizzo di destinazione indica dove deve andare il pacchetto, quello del mit-
tente serve invece al ricevente per generare un riscontro dell’avvenuta ricezione
(acknowledgment).

Controllo degli errori


A livello di collegamento, il controllo degli errori comprende sia il rilevamento
che la correzione. A questo livello, il termine errore non si riferisce alla perdita
di un pacchetto, ma ad un errore di trasmissione nei bit. La politica applicata è
semplice, ogni volta che viene rilevato un errore in uno scambio di dati, i frame
danneggiati vengono ritrasmessi.

2.2.2 Media Acces Control (MAC)


Quando viene usato un collegamento dedicato, come una linea telefonica, è suffi-
ciente utilizzare un protocollo DLC per gestire il trasferimento dei dati tra le due
estremità del collegamento. Nel caso invece si stia condividendo con altri utenti
un mezzo trasmissivo come ad esempio un cavo o l’aria, è necessario un proto-
collo aggiuntivo sia per la gestione della condivisione che per il trasferimento
dati.
Quando i nodi o le stazioni utilizzano un collegamento comune, chiama-
to collegamento broadcast o multi-punto, è necessario un protocollo di accesso
multiplo per coordinare l’accesso al collegamento. Bisogna accertarsi che ogni
nodo abbia la possibilità di accedere al canale, evitando le collisioni tra i nodi,
cioè che due noti trasmettano in contemporanea, e qualora dovesse accadere,
gestire tale collisione nel modo più appropriato. I protocolli per garantire l’ac-
cesso ad un canale condiviso si dividono in: accesso causale, accesso controllato
e suddivisione in canali.

Accesso casuale
Nell’accesso casuale nessuna stazione è superiore alle altre e nessuna ha il
controllo sulle altre, essere competono una con l’altra per accedere al mezzo
trasmissivo.
I metodi ad accesso casuale si sono evoluti a partire da un protocollo noto
come ALOHA. Questo protocollo usava una procedura molto semplice chiamata
accesso multiplo (MA). Il metodo iniziale è poi stato migliorato con l’aggiunta
di una procedura che forza la stazione a rilevare lo stato del mezzo trasmissi-
vo prima di iniziare a trasmettere. Questo metodo è chiamato Carrier Sense
Multiple Access (CSMA). Successivamente l’evoluzione ha portato a due metodi
paralleli: il Carrier Multiple Access with Collision Detection (CSMA/CD) e il
Carrier Multiple Access with Collision Avoidance (CSMA/CA). La versione CD
è absata sul rilevamento delle collisioni, il CA cerca di evitarle.

74
Figura 2.9: tempo di vulnerabilità nel protocollo ALOHA puro.

ALOHA puro Il protocollo ALOHA puro prevede che ogni stazione può in-
viare un frame ogni volta che ha qualcosa da inviare. Se nel canale condiviso si
verifica una collisione e le stazioni reinviassero il frame subito dopo il time-out la
collisione si verificherebbe nuovamente, pertanto il protocollo prevede che ogni
stazione attende un ulteriore periodo di tempo casuale dopo il time-out. Questo
lasso di tempo viene chiamato back-off time. Inoltre superato un certo numero
massimo di tentativi, la stazione deve riprovare in un secondo momento.
Per tempo di vulnerabilità, nei protocolli di accesso, si intende la lunghezza
dell’intervallo durante il quale c’è la possibilità che avvengano collisioni. Sup-
poniamo che le stazioni inviino dei frame di lunghezza fissa con ogni frame che
impiega Tf secondi per essere inviato. La stazione B inizia ad inviare un frame
al tempo t. Ora immaginiamo che la stazione A abbia iniziato ad inviare il suo
frame dopo t − Tf . Ciò comporta una collisione tra i frame della stazione B e
quelli della stazione A. Inoltre, supponiamo che la stazione C inizi ad inviare un
frame prima del tempo t + Tf . Anche in questo caso ci sarà una collisione tra
i frame della stazione B e quelli della stazione C. Per questo motivo l’ALOHA
puro presenta un tempo di vulnerabilità pari a due volte il tempo di trasmissione
del frame:
Tempo di vulnerabilità ALOHA puro = 2 × Tf

Slotted ALOHA Lo Slotted ALOHA è stato inventato per rendere più effi-
ciente la sua versione di origine (ALOHA puro).
Nello Slotted ALOHA il tempo viene diviso in slot, ovvero intervalli di tempo
di dimensione fissa, di Tf secondi e le stazioni vengono forzate a trasmettere
solo all’inizio degli slot. Se una stazione non riesce a trasmette all’inizio di uno
slot, deve attendere l’inizio dello slot successivo. Naturalmente c’è ancora la
possibilità che avvengano le collisioni quando due stazioni cercano di trasmettere
all’inizio dello stesso slot. Tuttavia il tempo di vulnerabilità ora è ridotto a metà
ed equivalente a Tf .
Tempo di vulnerabilità dello Slotted ALOHA = Tf

Carrier Sense Multiple Access (CSMA) Per ridurre al minimo la proba-


bilità di collisioni e, quindi, aumentare le prestazioni è stato sviluppato il metodo

75
CSMA. La probabilità di collisione di può ridurre se una stazione verifica prima
lo stato del mezzo trasmissivo prima di cercare di utilizzarlo. Il CSMA richiede
che ogni stazione ascolti il mezzo trasmissivo prima di trasmettere. Questo non
elimina del tutto la probabilità che una collisione avvenga. Infatti, quando una
stazione invia un frame, serve ancora del tempo affinché il primo bit del frame
raggiunga ogni stazione ed essa lo rilevi. In altre parole, una stazione può ascol-
tare il mezzo trasmissivo e trovarlo inattivo, ma questo solo perché il primo bit
inviato da un’altra stazione non è ancora stato ricevuto.
Il tempo di vulnerabilità per il CSMA è pari al tempo di propagazione Tp .
È il tempo necessario affinché un segnale si propaghi da un’estremità all’altra
del mezzo.
Per stabilire il comportamento di una stazione in seguito ad una collisione
sono stati ideati tre metodi: 1-persistente, non persistente, p-persistente.
• Secondo il metodo 1-persistente, se una stazione trova il canale attivo
continua a controllarlo fino a quando non diviene inattivo. Quando il
canale diviene inattivo, la stazione invia immediatamente il suo frame.
Questo metodo ha la più alta probabilità di generare collisioni in quanto
due o più stazioni possono trovare il mezzo trasmissivo inattivo ed inviare
immediatamente i loro frame.
• Secondo il metodo non persistente, se una stazione rileva che il mezzo è
inattivo, trasmette. Se è attivo, attende un lasso di tempo casuale e poi
effettua nuovamente la rilevazione. Tale metodo presenta una inefficienza
intrinseca in quanto potrebbe accadere che il mezzo che il mezzo resti
inattivo mentre ci sono stazioni in attesa di inviare.
• Secondo il metodo p-persistente, dopo che la stazione ha trovato il mezzo
trasmissivo inattivo, segue i seguenti passi:

– con probabilità p, la stazione invia il suo frame


– con probabilità q = 1 − p, la stazione attende l’inizio del prossimo
slot e controlla nuovamente il mezzo trasmissivo

CSMA/CD Il metodo CSMA non specifica la procedura da seguire a seguito


di una collisione. Il CSMA/CD a partire dall’algoritmo CSMA aggiunge una
parte relativa alla gestione delle collisioni. In questo modo una stazione, durante
l’invio di un frame, continua a controllare il mezzo trasmissivo per verificare se
la trasmissione ha avuto successo. Se è così la trasmissione è finita, in caso
contrario il frame dovrà essere nuovamente inviato.
Il Collision Detect si basa sul fatto che nelle reti locali cablate come Ethernet
l’attenuazione del segnale è piccola per cui il livello del segnale ricevuto dalle
altre stazioni è simile al proprio, ci si può, dunque, accorgere se c’è più di una
trasmissione (collisione), ricavandone un NACK implicito.

76
Accesso controllato
Nell’accesso controllato, le stazioni prima di trasmettere si accordano per deter-
minare quale di essere ne ha il diritto. Usualmente vengono utilizzati tre metodi
distinti per implementare i meccanismi ad accesso controllato: la prenotazione,
il polling e il passaggio del token, quest’ultimo utilizzato nelle reti con topologia
ad anello.

2.2.3 Indirizzamento a livello di collegamento


Si è parlato degli indirizzi IP come identificatori del livello di rete che indivi-
duano con esattezza i punti di Internet dove sono connessi gli host sorgente e
destinazione. Tuttavia, in una rete senza connessione come Internet non è pos-
sibile far sì che un datagramma raggiunga la sua destinazione solamente usando
gli indirizzi IP. La ragione è che ogni datagramma in Internet, dallo stesso host
sorgente allo stesso host destinazione, può prendere un percorso diverso. Gli
indirizzi IP sorgente e destinazione definiscono le due estremità della rete, ma
non dicono attraverso quali collegamenti deve passare il datagramma.
Sulla base di queste considerazioni è necessario avere un ulteriore meccani-
smo di indirizzamento: gli indirizzi di livello collegamento, spesso chiamati MAC
address. Quando un datagramma passa dal livello di rete al livello di collegamen-
to, esso viene racchiuso all’interno di un frame e viene aggiunta un’intestazione
che contiene due indirizzi di livello collegamento. Questi due indirizzi vengono
cambiati ogni volta che il frame passa da un collegamento ad un altro.
Per determinare la coppia di MAC address ad ogni salto si deve considerare
che, dalla sorgente, ogni router conosce il suo indirizzo, mentre quello di desti-
nazione viene determinato usando l’Address Resolution Protocol (ARP). Tale
protocollo non viene utilizzato dall’IPv6 in quanto il MAC address è contenuto
nell’indirizzo IP.

Address Resolution Protocol (ARP)


L’ARP è uno dei protocolli ausiliari definiti a livello di rete. Questo protocollo
accetta in input un indirizzo IP, individua l’indirizzo sorgente di collegamento
corrispondente e lo passa al livello di collegamento.
Ogni volta che un host deve trovare l’indirizzo di collegamento di un altro
host o router che si trova all’interno della sua rete, invia un pacchetto di richie-
sta ARP che comprende MAC address mittente, l’indirizzo IP del mittente e
l’indirizzo IP del ricevente. Il MAC address del ricevente è sconosciuto, motivo
per cui il la richiesta viene inviata in broadcast.
Ogni host nella rete locale riceve ed alobara il pacchetto di richiesta ARP, ma
solo il ricevente designato riconosce il suo indirizzo IP e restituisce un pacchetto
di risposta ARP che contiene i suoi indirizzi IP e di collegamento. Il messaggio
di risposta viene inviato in modalità unicast direttamente al nodo che ha inviato
la richiesta.

77
2.2.4 LAN cablate: protocollo Ethernet
Le LAN sono reti progettate per funzionare in aree geografiche di dimensione
limitata come un edificio o un piccolo gruppo di edifici. La maggior parte delle
LAN oggi non sono reti isolare bensì sono collegate a WAN oppure direttamente
a Internet. Negli anni ottanta e novanta si utilizzavano diverse tecnologie per la
costruzione delle LAN, ad oggi sono tutte scomparse ad eccezione di Ethernet,
tale tecnologia è riuscita a mantenere il passo con i tempo fornendo velocità di
navigazione sempre maggiori.

Ethernet Standard
Il frame Ethernet contiene sette campi:
• Preambolo: questo campo è composto da bit con valori 0 e 1 alternati.
Il suo compito è quello di allertare il sistema ricevente circa l’arrivo del
frame e permettere di sincronizzare il suo orologio con la trasmissione, nel
caso non lo sia già. Il preambolo viene aggiunto a livello fisico e quindi
non è propriamente parte del frame.
• Start Frame Delimier (SFD): segnala l’inizio del frame con due bit a 1
consecutivi.
• Destination Address (DA): indirizzo di collegamento della stazione di de-
stinazione.
• Source Address (SA): indirizzo di collegamento del mittente.
• Type: definisce il tipo di protocollo del livello superiore.
• Data and Padding: questo campo trasporta i dati incapsulati. Ha un
minimo di 46 byte e se i dati sono meno di 46 byte si aggiungono tanti 0
quanti sono necessari ad arrivarci.
• CRC : contiene informazioni per il rilevamento degli errori.
Ethernet fornisce un servizio senza connessione, ogni frame è inviato indi-
pendentemente dal precedente e dal successivo. In Ethernet non c’è alcuna
fase di apertura o chiusura della connessione. È dovere dei protocolli di livello
superiore riscontrare la perdita dei dati e porvi rimedio.

Trasmissione degli indirizzi MAC


Tutte le stazioni che fanno parte di una rete Ethernet sono dotate di una scheda
di rete (NIC) che fornisce un MAC address.
Un indirizzo sorgente è sempre un indirizzo unicast, l’indirizzo di destina-
zione può essere unicast, multicast o broadcast.Se il bit meno significativo del
primo byte nell’indirizzo di destinazione è 0 allora l’indirizzo è unicast, in caso
contrario è multicast. L’indirizzo broadcast è un caso particolare di indirizzo
multicast, formato da soli 1.

78
Quando gli indirizzi Ethernet vengono trasmessi, la loro codifica è diversa
rispetto a come vengono rappresentati quando vengono scritti. Infatti gli indi-
rizzi vengono trasmessi da sinistra verso destra, byte per byte, ma per ciascun
byte il bit meno significativo vine inviato per primo e quello più significativo
per ultimo. In questo modo il ricevente è in grado di capire già dal primo bit se
il frame che sta ricevendo è unicast o multicast.
Unicast, multicast e broadcast sono trattati diversamente dai riceventi:
• in una trasmissione unicast, tutte le stazioni ricevono il frame, il destina-
tario designato lo memorizza e lo gestisce, tutte le altre lo scartano
• in una trasmissione multicast, tutte le stazioni ricevono il frame. Quelle
che appartengono al gruppo multicast lo memorizzano e gestiscono, le altre
lo scartano
• in una trasmissione broadcast, tutte le stazioni ricevono il frame, lo me-
morizzano e lo gestiscono.

2.2.5 LAN virtuali


Possiamo definire una Virtual Local Area Network (VLAN) come una rete locale
configurata per mezzo del software, anziché del cablaggio fisico. Ogni VLAN
può rappresentare un gruppo di lavoro all’interno della ditta. Ciò significa che
se una stazione si sposta dalla VLAN 1 alla VLAN 2, riceve i messaggi broadcast
inviati alla VLAN 2, ma non riceve più quelli inviati alla VLAN 1.

2.2.6 Dispositivi di interconnessione


I dispositivi di interconnessione si dividono in tre tipi: i repeater o hub, gli
switch di livello collegamento e i router.

Repeater o hub
Un repeater è un dispositivo che opera soltanto a livello fisico. I segnali che
trasportano informazioni all’interno di una rete possono viaggiare per una di-
stanza ben definita prima che l’attenuazione del segnale metta a repentaglio
l’integrità dei dati. Un repeater riceve un segnale e, prima che esso diventi trop-
po debole o danneggiato, rigenera la sequenza di bit originale. Successivamente
il repeater invia il segnale rigenerato. Un ripetitore non ha alcuna capacità di
filtraggio, cioè non è abbastanza intelligente da capire attraverso quale porta il
frame debba essere inviato e non effettuano alcuna verifica sugli indirizzi.
Oggi le LAN Ethernet usano la topologia a stella, e in questo caso il repeater
è un dispositivo multi-porta (spesso chiamato hub) che può essere utilizzato per
l’interconnessione delle varie stazioni collegate e allo stesso tempo fungere da
ripetitore.

79
Switch di livello collegamento
Uno switch di livello collegamento opera sia a livello fisico che di collegamento.
Come dispositivo di livello fisico rigenera il segnale che riceve, come disposi-
tivo di collegamento è in grado di verificare gli indirizzi MAC contenuti nel
frame. Uno switch ha dunque una capacità di filtraggio, cioè verifica l’indirizzo
di destinazione del frame e decide da quale porta in uscita deve essere inviato.
Per offrire questo servizio, uno switch utilizza una tabella di inoltro che associa
gli indirizzi MAC alle interfacce, costruita dinamicamente analizzando i frame
che vengono spediti nella rete1 . Analizzare i frame significa osservare indirizzi
di sorgente e destinazione. I primi servono per aggiungere nuove righe nella
tabella, i secondi per decidere su quale interfaccia inoltrare il frame.

2.2.7 LAN Wireless


Confrontiamo l’architettura delle LAN cablate e di quelle wireless.
La prima differenza che possiamo notare è il mezzo trasmissivo. Nelle reti
cablate usiamo dei cavi per connettere gli host. In una LAN wireless, il mezzo
trasmissivo è l’aria e il segnale normalmente è broadcast. Quando gli host in
una LAN wireless comunicano l’uno con l’altro, essi condividono lo stesso mezzo.
Inoltre in una LAN wireless un host pu‘o muoversi liberamente, ottenendo una
mobilità nettamente maggiore.
Una LAN cablata si può connettere a un’altra rete o a Internet tramite
un router. Una LAN wireless si può connettere a una rete cablata con una
infrastruttura wireless o un’altra LAN wireless mediante una base station che
prende il nome di Access Point (AP).

Controllo dell’accesso al mezzo


Un grosso problema che va affrontato nell’ambito delle LAN wireless è il control-
lo d’accesso al mezzo, ovvero come un host wireless può avere accesso al mezzo di
trasmissione condiviso. L’Ethernet standard usava l’algoritmo CSMA/CD, ma
questo non funziona nelle LAN wireless in quanto la rilevazione delle collisioni
è resa impossibile dall’attenuazione del segnale. Inoltre, a causa del problema
del terminale nascosto una collisione potrebbe avvenire senza essere rilevata.

IEEE 802.11
Lo standard IEEE 802.11 definisce due tipi di architetture: il basic service set
(BSS) e l’extended service set (ESS). L’architettura BSS è costituita da una o
più stazioni wireless e da un access point facoltativo. Se l’access point è presente
allora si parla di BSS con infrastruttura, dove l’infrastruttura è costituita dal-
l’AP e dal cavo Ethernet che collega l’AP con il router. Se l’AP non è presente,
si parla di BSS ad hoc (ad esempio il Bluetooth), che non può inviare dati ad
1 Inizialmente gli switch operavano usando delle tabelle di commutazione. Questo significa

che l’amministratore di rete era costretto ad inserire manualmente ciascuna voce della tabella
durante la configurazione dello switch.

80
altri BSS. L’ESS è costituito da due o piu BSS con infrastruttura, i BSS sono
collegati tramite un sistema di distribuzione, che è una rete cablata o wireless.
L’architettura IEEE 802.11 prevede che una stazione wireless si associ a un
AP per accedere a Internet. Lo standard 802.11 prevede che un AP invii dei
segnali periodici detti beacon, che includono il suo MAC address. La stazione
wireless sceglie l’AP da cui ha ricevuto il beacon con il segnale più potente e gli
invia una frame con la richiesta di associazione.

Protocollo MAC 802.11


Poiché nelle reti wireless la rilevazione delle collisioni non può essere eseguita
durante la trasmissione, è stato definito il protocollo CSMA/CA che ha lo scopo
di evitare che si verifichino collisioni, grazie all’uso di tre strategie: lo spazio
interframe, la finestra di contesa e i riscontri.

• Rilevata la portante, se il canale risulta libero, la stazione non trasmet-


te immediatamente, ma attende un lasso di tempo chiamato interframe
space, così da verificare che una stazione distante non abbia già iniziato a
trasmetter.
• La finestra di contesa consiste in un lasso di tempo diviso in slot, detto
back-off time. Una stazione che vuole trasmettere sceglie come tempo di
attesa una quantità casuale di slot. Il numero di slot nella finestra cambia
ad ogni trasmissione.
• Poiché questi meccanismi non garantiscono che non avvenga una collisione,
è necessario utilizzare riscontri positivi e timer per capire se la trasmissio-
ne del frame è andata a buon fine. Questa comunicazione avviene tramite
uno scambio di messaggi di Request to send (RTS) e clear to send (CTS).
Due o più stazioni possono cercare di inviare dei frame RTS contempora-
neamente finendo per collidere. Tuttavia, siccome non c’è un meccanismo
per rilevare la collisione, il mittente suppone che ci sia stata una collisione
se non ha ricevuto un CTS dal destinatario. Se durante l’handshaking
avviene una collisione si applica la strategia del back-off time e il mittente
prova di nuovo.

2.3 La sicurezza nelle reti


L’informazione è divenuta una risorsa preziosa che deve essere protetta da qual-
siasi possibile attacco. In particolare è necessario proteggerla da accessi non au-
torizzati (riservatezza o segretezza) e da modifiche non autorizzate (integrità),
al fine di poterla rendere disponibile quando necessario alle entità autorizzate
(accessibilità).
Gli obiettivi della sicurezza sono:
• La riservatezza, è necessario proteggere le informazioni considerate con-
fidenziali. Un’organizzazione deve cautelarsi da possibili azioni ostili che

81
mettano a rischio la riservatezza delle proprie informazioni, riservatezza
relativa sia all’archiviazione che alla trasmissione.
• Garantire l’integrità, ovvero assicurare che le modifiche possano essere
apportate esclusivamente dalle entità autorizzate e solo rispettando le
procedure previste.

• L’accessibilità, ovvero garantire l’accesso dell’informazione alle entità au-


torizzate.

2.3.1 Cifratura a chiave simmetrica


La cifratura a chiave simmetrica garantisce la riservatezza dei dati. Nella ci-
fratura a chiave simmetrica si utilizza la medesima chiave si per l’operazione di
cifratura che per quella di decifratura, per questo motivo si chiama simmetrica.
Il messaggio originale è chiamato testo in chiaro, diventa testo cifrato in segui-
to all’applicazione di un algoritmo di cifratura e una chiave segreta condivisa.
L’azione inversa utilizza un algoritmo di decifratura. La chiave segreta deve esse-
re concordata tra mittente e destinatario, lasciando l’algoritmo potenzialmente
pubblico.
Gli algoritmi crittografici a chiave simmetrica possono essere classificati come
algoritmi tradizionali o algoritmi moderni. Gli algoritmi tradizionali si distin-
guono in algoritmi a sostituzione e a trasposizione. Gli algoritmi a sostituzione
sostituiscono un simbolo con un altro e possono essere mono alfabetici, se ogni
carattere nel testo in chiaro viene sostituito sempre dallo stesso carattere nel
testo cifrato indipendentemente dalla sua posizione nel testo. Oppure polial-
fabetici, se le diverse occorrenze di uno stesso carattere possono corrispondere
a un sostituto differente. I cifrari a trasposizione non sostituiscono un simbolo
con un altro, ma ne cambia la posizione.

2.3.2 Cifratura a chiave asimmetrica


La differenza concettuale fra i due sistemi è relativa alla modalità con cui gesti-
scono l’informazione segreta. Nel caso della crittografia simmetrica l’informa-
zione segreta deve essere condivisa fra due persone. Nel caso della crittografia
asimmetrica l’informazione segreta è personale: ciascuna persona crea e conserva
privatamente la propria informazione riservata.
La crittografia a chiave simmetrica si basa sulla condivisione della chiave
segreta. La crittografia a chiave asimmetrica si basa sulla segretezza della
chiave personale.
Mentre la cifratura simmetrica si basa sulla sostituzione e sulla permutazio-
ne di simboli, la crittografia asimmetrica si basa sull’applicazione di funzioni
matematiche a numeri.
La crittografia a chiave asimmetrica impiega due chiavi separate: una privata
e una pubblica. Si può pensare alla cifratura in termini di chiusura e apertura di

82
un lucchetto: se questo viene chiuso con la chiave pubblica, potrà essere aperto
solo con quella privata corrispondente. Il destinatario di deve creare due chiavi:
una privata e una pubblica da distribuire alla comunità. ciascun membro della
comunità deve creare la propria coppia di chiavi pubblica e privata. La critto-
grafia asimmetrica comporta che il destinatario abbia bisogno di una sola chiave
privata per poter ricevere comunicazioni da qualsiasi membro della comunità,
mentre il mittente deve utilizzare n chiavi pubbliche per poter comunicare con
n membri della comunità, una per ciascuno di essi.

2.3.3 Message digest


Vi sono casi in cui pur non essendo richiesta la riservatezza, risulta fondamentale
l’integrità: un messaggio pubblico non deve poter essere modificato. Un modo
per preservare l’integrità è quella di inviare insieme al messaggio un codice gene-
rato dal mittente e dipendente dal messaggio. Questo codice viene elaborato con
una funzione hash crittografica. Questa funzione crea una immagine compressa
del messaggio, chiamata digest. Il destinatario, applicando la stessa funzione al
messaggio ricevuto e confrontando il digest generato con quello inviato insieme
al messaggio, può capire se ci sono state modifiche illecite.

2.3.4 Message Authentication Code


Il digest può essere utilizzato per verificare che il messaggio non sia stato mo-
dificato. Per garantire anche l’autenticazione del messaggio (ovvero garantire
che un determinato mittente, e non qualcun altro, abbia originato il messaggio)
è necessario includere nel processo un’informazione segreta e condivisa da mit-
tente e destinatario: si deve creare un codice MAC (Message Authentication
Code).
Mittente e destinatario condividono una stessa chiave segreta K. Il mitten-
te crea un MAC applicando la funzione hash alla concatenazione della chiave
segreta e del messaggio h(K + M ). Il destinatario, separa il MAC ricevuto, a
partire dalla concatenazione di chiave e messaggio che ha ricevuto elabora un
nuovo MAC e lo confronta con il MAC ricevuto: se sono identici il messaggio è
autentico e non è stato modificato.

2.3.5 Firma Digitale


Un altro modo per garantire l’integrità e l’autenticazione di un messaggio è
la firma digitale. Il MAC utilizza una chiave segreta per proteggere il digest,
mentre la firma digitale utilizza una coppia di chiavi pubblica-privata.
Il mittente firma il messaggio M cifrandolo con la sua chiave privata. La
cifratura del messaggio M costituisce proprio la firma S del mittente. A questo
punto il mittente invia sia il messaggio M che la firma S al destinatario, il quale
verifica l’autenticità del messaggio applicando la chiave pubblica del mittente.
Se il messaggio che il destinatario ottiene è uguale a quello inviato dal mittente
allora il messaggio è autentico.

83
Da notare che nei sistemi crittografici per garantire la sicurezza vengono
utilizzare le chiavi pubbliche e private del destinatario, mentre nel caso della
firma digitale vengono invece implementate le chiavi del mittente.

2.3.6 Autenticazione di entità


L’autenticazione di entità è una tecnica progettata per consentire a una parte
di verificare l’identità di una seconda parte. L’entità può essere un processo,
una persona, un client o un server. Nell’autenticazione di entità il pretendente
deve identificarsi al verificatore. L’utilizzo di una password è una delle forme di
identificazione più semplici e antiche, ma presenta un inconveniente: la password
deve essere fornita dall’utente esponendola ad intercettazione.

Autenticazione con chiave simmetrica


L’autenticazione di un’entità può avvenire mediante la crittografia a chiave sim-
metrica. In questo caso il segreto è al chiave condivisa. Il verificatore genera
un numero casuale (nonce) e lo invia al pretendente, il quale lo crittografa con
la chiave simmetrica e invia il risultato al verificatore. Il verificatore decifra il
messaggio: se il nonce così ottenuto è identico a quello inviato, il pretendente è
autenticato.

Autenticazione con chiave asimmetrica


È possibile effettuare l’autenticazione anche con una chiave asimmetrica. In
questo caso l’informazione segreta è la chiave del pretendente. Il verificatore,
quindi, cifra un nonce da lui generato con la chiave pubblica del pretendente, e
lo invia al pretendente. Ricevuto il nonce cifrato, il pretendente lo decifra con
la propria chiave privata e lo invia al verificatore, il quale dichiara autentico il
pretendente se il nonce ricevuto è uguale a quello che aveva inviato.

2.3.7 Accordo con chiave simmetrica


Mittente e destinatario possono creare una chiave di sessione senza utilizzare un
KDC (Key Distribution Center). Questo metodo di creazione della chiave è noto
come simmetric-key agreement. Una modalità per ottenere questo risultato è il
metodo Diffie-Hellman Key Agreement.
Secondo questa tecnica i due utenti scelgono due numeri primi molto grandi
p e g, non necessariamente segreti e seguire la seguente procedura:
1. L’utente A sceglie un numero grande x tale che 0 ≤ x ≤ p − 1 e calcola
R1 = g x mod p. L’utente B sceglie un altro numero grande y tale che
0 ≤ y ≤ p − 1 e calcola R2 = g y mod p.

2. L’utente A invia R1 a B.
3. L’utente B invia R2 ad A.

84
4. L’utente A calcola K = (R2 )x mod p, B calcola K = (R1 )y mod p
K è la chiave simmetrica cercata.

K = (g x mod p)y mod p = (g y mod p)x mod p = g xy mod p (2.2)

2.3.8 Reti private virtuali (VPN)


Una VPN è una rete che è privata ma virtuale: privata perché garantisce la
riservatezza all’organizzazione, virtuale poiché non utilizza realmente dei colle-
gamenti WAN privati, la rete fisicamente resta pubblica. Il datagramma priva-
to, inclusa la sua intestazione, viene incapsulato in un pacchetto ESP. Il rou-
ter al confine del sito mittente usa nel nuovo datagramma il proprio indirizzo
IP e l’indirizzo IP del router nel sito destinatario. Eventuali osservatori non
possono decifrare i contenuti del pacchetto e nemmeno gli indirizzi mittente e
destinatario.

2.3.9 I firewall
La prima misura di sicurezza adottata per proteggere una rete LAN è costituita
dal firewall. Un firewall è un dispositivo (router o computer) installato fra la
rete interna di un’organizzazione e Internet. È progettato per inoltrare alcuni
pacchetti e filtrarne (scartare) altri. I firewall sono solitamente classificati in
firewall a filtraggio di pacchetti o proxy. La prima categoria funziona filtrando
i pacchetti IP in base alle informazioni contenute nelle intestazioni dei livelli di
rete e trasporto, utilizzando una tabella che permette di decidere quali pacchetti
inoltrare e quali eliminare.
I firewall proxy filtrano i pacchetti a livello di applicazione. Quando il pro-
cesso client dell’utente richiede una pagina web, il proxy apre il pacchetto a
livello applicazione per determinare la legittimità della richiesta. In caso positi-
vo il server agisce da processo client e invia il messaggio al vero server all’interno
dell’azienda. In caso contrario ignora la richiesta e invia un messaggio di errore
all’utente esterno.

85

Potrebbero piacerti anche