Premessa Ringraziamenti Lo strato datalink (livello 2 ISO/OSI)

Appunti del corso Reti
di telecomunicazione e Internet ∗
< daniele.iamartino at mail.polimi.it >
Revisione del 2 Marzo 2012
Premessa
Questo documento contiene i miei appunti relativi al corso di Reti di telecomunicazione ed Internet seguito presso il
Politecnico di Milano nel primo semestre dell'anno scolastico 2011/2012. Ho pensato, man mano che seguivo il corso,
che sarebbe stato molto utile preparare degli appunti chiari, utili non solo a me ma anche eventualmente ad altri.
Mi sono reso conto che nella mia carriera potrebbe essermi molto utile anche avere una semplice reference per questi
argomenti, motivo in più per scrivere. Ho pensato quindi di renderlo più approfondito possibile integrando il materiale
di vari libri, che trovate nella bibliograa.
errori (avendo scritto questo documento tra notti insonni e la
non vi do quindi nessuna garanzia sulla correttezza dei contenuti. Segnalatemi pure eventuali
Sono ben consapevole che potrebbero esserci svariati
sera dopo le lezioni),
errori se ne trovate. Se volete inserire un paragrafo o fare grosse modiche sono ovviamente (in pieno spirito open
source ) disponibile per integrare le vostre modiche e aggiungere un vostro riferimento negli autori.
Vi prego di ricordare le regole di licenza Creative Commons nel caso voleste ridistribuire questo documento.
Ringraziamenti
Ringrazio Eugenio Guidetti per la realizzazione delle immagini vettoriali dei primi paragra e la segnalazione di alcuni
errori.
Lo strato datalink (livello 2 ISO/OSI)
Servizi oerti agli strati superiori
ˆ Gestione del collegamento
ˆ Delimitazione
ˆ Indirizzamento
ˆ Controllo di errore:
ˆ Controllo di usso
ˆ Buer di ritrasmissione
dati per lo scambio di trame
delle trame
a livello di rete interna (tra gli altri che possono ricevere la stessa trama)
mostrare agli strati superiori un canale di comunicazione ideale senza errori
: Evitare la perdita di trame a causa di saturazione della destinazione
Procedure per il controllo d'errore
Esistono due metodi per il controllo di errore:
ˆ FEC - Forward Error Correction
ˆ ARQ - Automatic Repeat reQuest
(Correzione dell'errore in avanti)
(Richiesta di ripetizione automatica)
∗ Quest'opera è sotto licenza Creative Commons Attribuzione - Condividi allo stesso modo 2.5 Italia License.
1
FEC - Forward Error Correction
Viene aggiunta dell'informazione a livello 2 per correggere gli errori. Si parla di codice a correzione d'errore. Non è
prevista la necessità di invio di un riscontro per confermare la corretta ricezione. La quantità di informazione trasferita
sul collegamento dati è indipendente dal tasso di errore.
Un esempio di tecnica FEC utilizzabile con canali con tassi di errore di 1 bit per pacchetto dati è l'utilizzo di un
bit di parità.
ARQ - Automatic Repeat reQuest
Ai dati in ogni pacchetto si aggiunge un campo che contiene un codice a rivelazione d'errore, capace di rilevare la
presenza di errore ma non di correggerlo. Si richiede poi al trasmettitore di rinviare il pacchetto corrotto. È necessario
un
canale di ritorno anche per comunicazioni monodirezionali. La quantità di dati trasferiti sul canale è
dipendente dal tasso di errore. È inoltre necessario un buer di ritrasmissione.
I protocolli
di tipo ARQ sono così suddivisi:
ˆ Stop & Wait
ˆ Continuous ARQ
Go-back-n
Selective repeat
Tassonomia sui tempi di trasmissione
I vari tempi sono quindi:
ˆ T tempo di trasmissione della trama
ˆ τ tempo di propagazione del segnale
ˆ T tempo di processing della trama
ˆ T tempo di trasmissione del riscontro
f
p
a
Lf
Tf =
=
C
TON
τ=
dove
v∼
=
2
3
· c = 2 · 108 m
s
Lf
=
P
d
v
per segnali guidati all'interno di un mezzo
2
Tp
e
Ta
sono spesso approssimati a 0
Il tempo totale viene spesso espresso come
TT OT = Nf · (Tf + Ta + 2 · Tp + 2 · τ )
Nf è il numero delle trame.
tempo di propagazione normalizzato viene spesso utilizzato per comodità ed è denito come:
dove
Il
a=
τ
Tf
Protocolli Stop & Wait
ˆ
ˆ
Trasmetto una trama e aspetto il riscontro positivo (ACK) (Non
esiste NACK)
Il destinatario eettua controllo di usso rallentando i riscontri
In assenza di errori:
Calcoliamo le prestazioni tenendo conto della quantità di tempo in cui stiamo eettivamente inviando dati utili
In generale abbiamo che l'ecienza del protocollo è data quindi da:
η=
Tf
TT OT
E quindi in questo caso particolare:
η=
Supponendo
Tp = Ta ' 0
allora
η=
ˆ
ˆ
Tf
Tf + Ta + 2 · Tp + 2 · τ
Tf
1
=
Tf + 2 · τ
1+2·a
Aumentiamo l'ecienza aumentando la lunghezza della trama.
Un'altra stima di ecienza,
il throughtput viene fatta tenendo conto anche della frequenza di cifra:
T HR = η · C
In presenza di errori:
ˆ
ˆ
ˆ
Denisco un tempo di timeout
To
tra l'invio della trama e un suo nuovo reinvio.
Utilizzando un timeout risolviamo il problema dei riscontri persi o trame totalmente perse (e non corrotte)
Il tempo di timeout non può essere scelto a caso ma deve essere almeno di un valore minimo
To ≥ Ta + 2 · Tp + 2 · τ
che considerando
Tp = Ta ' 0
diventa:
To ≥ 2 · τ
3
ˆ
ˆ
Per denizione il tempo di timeout parte ad essere conteggiato dopo il completo invio del pacchetto (Tf )
Per evitare di ricevere due volte la stessa trama e pensare che la seconda sia nuova (se viene perso il riscontro),
è necessaria una numerazione di pacchetti ad almeno 1 bit.
ˆ Calcoliamo le prestazioni
:
p
errore sul singolo bit.
P
è la probabilità di
errore nella trasmissione di una trama.
ai
è la probabilità di
successo alla trasmissione della i-esima trama.
NS
è la probabilità di
è il numero medio di tentativi di trasmissione per trama ricevuta con successo.
Ipotizzando gli errori sui bit statisticamente indipendenti, sappiamo che una trama sarà ritrasmessa quando
c'è almeno un bit sbagliato nella trama o nel riscontro. Abbiamo quindi che:
P = 1 − (1 − p)
*L
*L
* (1 − p)
Lf +La
f è la lunghezza della trama
a è la lunghezza del riscontro
è la probabilità di successo nell'invio di 1 bit,
Lf +La
(1 − p)
è la probabilità di successo nell'invio
di trame e riscontri, sottraendo a 1 si ottengono tutti gli altri casi.
Calcoliamo ora il numero medio
NS di tentativi di trasmissione per trama trasmessa
(di cui solo
l'ultimo tentativo ha successo):
NS =
*
*P
*
∞
X
i · ai =
i=0
∞
X
i · P i−1 · (1 − P ) = (1 − P ) ·
i=1
La prima sommatoria
∞
X
i · P i−1 = (1 − P ) ·
i=1
P∞
i=0
i · ai
1
(1 − P )
2
=
1
(1 − P )
è la somma pesata del numero di tentativo e la relativa probabilità di
successo.
i−1
è la probabilità di fallimento per le precedenti,
La serie
∞
P
i·P
i−1
(1 − P )
è la probabilità di successo per l'ultima
è una serie nota: è la derivata della somma della serie geometrica.
i=1
Quindi il tempo di invio di una trama lunga
Lf è:
TT OT = (NS − 1) · (Tf + To ) + Tf + Ta + 2 · Tp + 2 · τ
*
Dove
(NS − 1) · (Tf + To )
sono tutti i tentativi precedenti in cui scatta il timeout.
4
L'ecienza è quindi:
η=
dove considerando che
Tf
TT OT
NS =
=
Tf
(NS − 1) · (Tf + To ) + Tf + Ta + 2 · Tp + 2 · τ
1
(1−P ) :
η=
Tf · (1 − P )
Tf + To · P + (Ta + 2 · Tp + 2 · τ ) · (1 − P )
Per calcolare l'ecienza massima ci poniamo nella condizione limite di timeout (To
). L'ecienza diventa quindi:
η = ηM AX =
ipotizzando poi come al solito
Ta = Tp ' 0
= Ta + 2 · Tp + 2 · τ
Tf · (1 − P )
Tf + Ta + 2 · Tp + 2 · τ
abbiamo che
ηM AX =
1−P
1+2·a
Notiamo che l'ecienza è fortemente legata al timeout scelto.
Protocolli Continuous ARQ:
ˆ
ˆ
Tentiamo di aumentare l'ecienza permettendo la trasmissione di più trame consecutive in attesa dei riscontri
delle prime trasmesse.
È necessaria una numerazione delle trame in modulo N. Di solito
ˆT
T OT
N = 2b
= Nf · Tf + Ta + 2 · τ
L'ecienza può quindi essere calcolata come
η=
Tf
TT OT
=
Tf
Nf · Tf + Ta + 2 · τ
Come sempre il throughtput è calcolato come:
T HR = η · C
5
Sliding Window
ˆ
Si stabiliscono due nestre di trasmissione e ricezione che memorizzano la lista di trame che possono essere
ricevute e inviate:
WS = Numero
WR = Numero
ˆ
di trame che posso inviare (send )
di trame che posso ricevere (recive )
Dobbiamo tenere conto anche degli estremi delle due nestre:
LR = Estremo
inferiore della nestra di ricezione
LS = Estremo
ˆ
Il
inferiore della nestra d'invio
trasmittente è autorizzato ad inviare tante trame n tali che:
LS ≤ n ≤ (LS + WS − 1)(mod N )
ˆ
Il
ricevente è autorizzato a ricevere le trame n tali che:
LR ≤ n ≤ (LR + WR − 1)(mod N )
ˆ
ˆ
ˆ
ˆ
ˆ
Il ricevitore all'invio del riscontro relativo alla trama numero
LS ,
incrementa il valore di
LS
di una unità (in
LR
di una unità (in
modulo N ).
Il trasmettitore alla ricezione del riscontro per la trama numero
LR ,
incrementa il valore di
modulo N ).
L'incremento di
LR
e
fa ruotare le rispettive nestre (in senso antiorario).
n = 23
Solitamente nel caso
Per
LS
si rappresenta così:
garantire che ci sia un invio continuo di trame no all'arrivo del primo riscontro, è necessario imporre
un valore minimo per
WS :
WS · Tf ≥ Tf + Ta + 2 · τ
WS · Tf
Tf + Ta + 2 · τ
è il tempo totale di trasmissione di tutte le trame della nestra
è il tempo necessario alla ricezione del primo riscontro
Se questa relazione non è soddisfatta, si dice che il meccanismo a nestra strozza la piena
utilizzazione del collegamento.
Nel caso in cui
Ta ' 0
abbiamo:
WS · Tf ≥ Tf + 2 · τ
e ricordando ancora che
strozzatura è:
a =
τ
Tf
, riscriviamo più semplicemente che
WS ≥ 1 + 2 · a
6
la condizione per evitare la
Piggybacking
Notare che nei canali bidirezionali non è sempre necessario inviare un riscontro separato, ma è
possibile semplicemente inserirlo insieme ai dati che si stanno inviando, in questo modo il riscontro si procura un
passaggio gratis a bordo di un pacchetto dati già in trasmissione.
Vincolo sulla apertura delle nestre
Per evitare ambiguità sui numeri di sequenza ricevuti ed evitare di
confondere quindi una ritrasmissione con un nuovo pacchetto, è necessario soddisfare la relazione:
WS + WR ≤ N
Protocolli go-back-n
Accetto le trame inviate solo se le ho ricevute strettamente in sequenza ciclica modulo N. Quindi sempre
ˆ
Per il vincolo prima discusso abbiamo quindi:
WS ≤ N −1
⇒
WR = 1.
WS ≤ 2b −1 , dove il caso migliore da scegliere
è sempre
WS = 2b − 1
ˆ ACK i
ˆ NACK i
: sinica ho ricevuto la trama i è tutte le precedenti.
ˆ
ˆ
ˆ
signica non ho ricevuto i ma ho ricevuto le precedenti no a i-1, ora aspetto che mi rimandi i e
scarto eventuale altra roba in arrivo no a quando non mi arriva i .
C'è un
timeout
che scatta alla sorgente dopo che un pacchetto non ha ancora ricevuto un ACK dopo
La sorgente non ruota la nestra no a quando non riceve l'ACK di
LS
To
secondi.
alla destinazione.
Ipotizzeremo che la trasmissione di una trama venga sempre portata a termine, anche se intanto mi sta arrivando
un NACK o altro.
Protocollo selective repeat
ˆW
ˆ
R
>1
e ricordiamo che
W S + WR ≤ N .
Per l'ecienza massima del protocollo conviene scegliere
WS = WR =
ˆ ACK i
ˆ NACK i
N
2
: Ho ricevuto i e anche tutte le precedenti
: Non ho ricevuto la trama i, non ti dico niente sulle precedenti. Accetto eventuali trame seguenti che
rientrano nella nestra (senza però ruotarla quando le ricevo).
ˆ Timeout
che scatta dopo
To
secondi dall'invio della trama come per il protocollo go-back-n.
Ecienza dei protocolli Continuous ARQ
In assenza di errori:
In base alla condizione di strozzatura (che in questo caso è l'unico vincolo di ecienza):
ˆ η=
(
1
WS ·Tf
Tf +2·τ
se
se
WS ≥ 1 + 2a
WS < 1 + 2a
In presenza di errori:
Ricordiamoci che
Lf +La
P = 1 − (1 − p)
.
η=
NS
Tf
1
=
NS · Tf
NS
è il numero medio di trasmissioni per trasmettere una trama.
7
Selective repeat
ˆ
ˆ
Non c'è perdita di ecienza legata alla latenza (a dierenza di Stop & Wait )
Poichè la ritrasmissione interessa
solo una trama e non altre:
NS =
1
(1 − P )
e quindi
η = (1 − P )
Go-back-n
ˆK=
Numero di trame consecutive che devono essere ritrasmesse in seguito ad un errore (è esclusa dal conto la
trama con successo).
Con 1 errore: k+1 trame
Con 2 errori: k+2 trame
ˆP
...
i
· (1 − P ) = Probabilità
di accumulare i errori su i trasmissioni ripetute della stessa trama.
NS = 1 · (1 − P ) + (K + 1) · P · (1 − P ) + (2K + 1) · P 2 · (1 − P ) + ...
NS =
ˆ
∞
X
(i · K + 1) · P i · (1 − P ) =
i=0
con
K '2+2·a
si ottiene
η=
ˆ
1 + (K + 1) · P
K ·P
+1=
1−P
1−P
1−P
1−P +2·a·P
Otteniamo quindi in ne che:
(
η=
1−P
1+P +2·a·P
WS ·(1−P )
(1+2·a)·[1+(WS −1)·P ]
se
se
WS ≥ 1 + 2a
WS < 1 + 2a
Conclusioni sull'ecienza in caso di errori:
ˆ Sotto ipotesi di non strozzatura W
η=
ˆ Sotto ipotesi di strozzatura W
S
≥ 1 + 2a :
(
(1 − P )
S
Selective Repeat
(1−P )
1+P +2·a·P
Go-back-n
< 1 + 2a :
( W ·(1−P )
S
η=
ˆ
ˆ
ˆ
1+2·a
WS ·(1−P )
(1+2·a)·[1+(WS −1)·P ]
Selective Repeat
Go-back-n
Selective repeat è meglio di go-back-n ma la dierenza tra i due si riduce man mano che diminuisce la distanza.
In caso di
tasso di errore particolarmente basso però go-back-n diventa paragonabile o anche meglio di
Selective repeat, a causa della
WS
maggiore.
Stop & Wait ha praticamente sempre pessime prestazioni.
Protocollo HDLC
Tipi di stazioni
ˆ
ˆ
ˆ
Stazione
primaria (controllo del collegamento mediante comandi)
Stazione
secondaria (Opera sotto una stazione primaria ed emette risposte)
Stazione
combinata (Combina operazione primaria e secondaria, emette comandi e risposte)
8
Tipi di congurazione
ˆ
ˆ
Congurazione
bilanciata: Sono presenti due stazioni combinate
Congurazione
sbilanciata: Sono presenti una stazione primaria e una o più stazioni secondarie
Tre modalità di trasferimento
ˆ ABM - Asynchronous Balanced Mode (Full-Duplex)
Utilizzato in congurazioni bilanciate
Ognuna delle due stazioni combinate può iniziare a trasmettere
ˆ NRM - Normal Response Mode (Half-Duplex)
Utilizzato in congurazioni sbilanciate
La primaria può iniziare a trasmettere, una secondaria può solo rispondere
ˆ ARM - Asyncronous Response Mode (chiamato anche LAP-B)
Utilizzato in congurazioni sbilanciate
ˆ
La primaria e le secondaria possono iniziare a trasmettere
In tutte le modalità è sempre la stazione primaria ad essere responsabile dell'inizializzazione del collegamento
Struttura della trama HDLC
8·n
ˆ Flag
ˆ Address 8 · n
Flag
Address
(8 bit)
(
bit)
Control
(8/16 bit)
Information
(8
·n
bit)
FCS
(16/32 bit)
Flag
(8 bit)
(8 bit): Presente in testa e in coda, svolge la funzione di delimitatore della trama, vale
(
01111110.
bit): Campo a 8 bit, estendibile a multipli di 8, specica la stazione secondaria ricevente (nel
caso di comandi emessi dalla primaria), oppure la stazione secondaria trasmittente nel caso di risposte.
L'indirizzo composto da tutti 1 è un indirizzo di broadcast
Possiamo indirizzare no a 128 stazioni
Il campo address diventa ridondante per congurazioni punto-punto
ˆ Control
(8/16 bit): Campo a 8 bit, estendibile a 16
Specica il tipo di trama in trasmissione
Gestisce i meccanismi di numerazione e riscontro
Ci sono tre tipi di campo di controllo, a seconda dei primi due bit:
* Information (I)
: Informazione utente, contiene il numero della trama trasmessa e il numero della
prossima trama che si aspetta di ricevere, N(R), mandando l'acknowledge implicito di N(R)-1.
Il
campo P/F sarà descritto in seguito
·
Nella versione a 8 bit:
Contenuto:
0
Numerazione:
0
·
N(S)
1
2
P/F
3
4
N(R)
5
6
7
6
7
8
Nella versione a 16 bit:
Contenuto:
0
Numerazione:
0
* Supervisory (S)
N(S)
1
2
3
4
5
N(R)
P/F
9
10
11
12
13
14
15
: Utilizzato per gestire i riscontri di trama ed eventuale stato di fuori servizio. N(R)
indica la prossima trama in attesa di essere ricevuta. A seconda del protocollo ARQ può signicare
anche ACK no a N(R)-1.
S è un campo utilizzato per specicare altre informazioni che verranno
descritte in seguito.
·
Nella versione a 8 bit:
Contenuto:
1
0
Numerazione:
0
1
·
S
2
N(R)
P/F
3
4
5
6
7
Nella versione a 16 bit:
Contenuto:
1
0
Numerazione:
0
1
* Unnumbered (U)
S
2
3
0
0
0
0
P/F
4
5
6
7
8
N(R)
9
10
11
12
13
14
15
: Gestione del collegamento dati: inizializzazione, chiusura, reset per errore.
9
·
Nella versione a 8 bit:
Contenuto:
1
1
Numerazione:
0
1
·
M
2
P/F
3
4
M
5
6
7
Nella versione a 16 bit:
Contenuto:
1
1
Numerazione:
0
1
M
2
3
0
0
0
0
P/F
4
5
6
7
8
M
9
10
11
12
13
14
15
Il campo P/F presente in varie trame del campo Control serve a identicare se il messaggio signica
domanda o risposta:
*
*
P/F posto ad 1 serve a sollecitare una risposta (poll ) da parte della stazione primaria.
P/F posto a 0 serve per segnalare una risposta ad un poll (nal ) da parte di una stazione secondaria.
ˆ Information
ˆ FCS
(
8 · n bit ):
Può avere lunghezza variabile multipla di 8 bit. È sempre presente in trame di tipo
I.
(16 o 32 bit): Campo a 16 o 32 bit che svolte la funzione di rivelazione d'errore per la trama, utilizzando
ˆ
CRC .
il checksum di tipo
Nota: Il piggybacking viene sempre eettuato quando possibile.
Bit stung per il ag
Per poter riconoscere l'inizio di una trama viene utilizzata una sequenza di sei 1 consecutivi,
preceduta e seguita da zeri. Cosa accade se questa sequenza è però già presente nella trama o nei dati? Come evitiamo
di confondere la ne della trama con un dato?
Ci sono vari modi per risolvere questo problema.
Quello scelto da
HDLC è il bit stung, che funziona nel seguente modo:
ˆ
ˆ
In invio, aggiungo un bit 0 dopo ogni occorrenza di 5 bit 1 (eccetto che nel ag )
In ricezione, dopo ogni gruppo di cinque 1, tolgo lo zero (se c'è) che segue.
CRC - Cyclic redundancy check
ˆ k=
ˆ n=
ˆ Messaggio [b , b , b , ..., b , b , b ]
ˆ Deniamo un polinomio P (x)
Lunghezza in bit del checksum CRC
Lunghezza in bit del messaggio da proteggere
:
n
n−1
n−2
2
1
0
di grado
n−1
P (x) = bn · X n−1 + bn−1 · X n−2 + ... + b1 · X + b0 · 1
ˆ Polinomio divisore D (x)
Esempio per
Per
k=4
di grado k, preassegnato dal protocollo.
abbiamo
D (x) = x4 + x3 + 1
k = 16:
* D (x) = x
* D (x) = x
16
+ x12 + x5 + 1 CRC-16EU
16
+ x15 + x2 + 1 CRC-16US
1. Moltiplico:
P (x) · xk
2. Divido il risultato per
è
D (x) con l'operazione di divisione tra polinomi e mi segno il resto R (x).
Il mio checksum
R (x).
(a) Possiamo esprimere l'intero messaggio (checksum compreso) con la notazione:
P 0 (x) = P (x) · xk + R (x)
3. In ricezione al posto di ricalcolare e confrontare, posso dividere
P 0 (x)
per
D (x),
se
R (x) = 0
è corretto.
ˆ
ˆ
Nella divisione tra polinomi in modulo 2, i segni non contano nulla (1
Ricordarsi di sottrarre gli esponenti nella divisione tra polinomi.
10
+ 1 = 0 , 0 − 1 = 1).
allora il checksum
Esempio
k = 4 , n = 10 , Messaggio: 1001000101 , Divisore D (x) = x4 + x3 + 1
ˆ
ˆ P (x) · x
P (x) = x9 + x6 + x2 + 1
Il nostro polinomio è quindi
x13
x13
\
k
= x13 + x10 + x6 + x4
x10
12
x
x12
x12
\
x
x9
x10
11
x
x11
x11
x10
x10
x9
\
\
x9
x9
x8
x8
\
\
ˆ
ˆ P (x) = x
Dunque il resto è
0
x
x8
\
\
ˆ
x4
x3
x6
x4
x9
x8
x6
x4
1
13
x7
x5
x3
x1
7
x
x7
x6
x4
5
x7
x7
x6
x6
R (x) = x3 + x
\
x
x5
x4
5
4
x
x5
x
x4
\
\
e quindi l'FCS è
x3
x3
x
x
x3
01010
+ x10 + x6 + x4 + x3 + x Divisore D (x) = x4 + x3 + 1
x10
x12
x12
x12
x4
8
\
x13
x13
x6
9
x10
x9
x9
x11
x11
x11
x10
x10
x9
\
\
x9
x9
x8
x8
\
\
Avendo quindi
x8
x8
R (x) = 0
x7
x7
x6
x4
x3
x
x4
x3
x6
x4
x3
x
x9
x8
x6
x4
x3
x
x6
x7
x7
x6
x6
\
\
x4
x3
x
x5
x5
x4
x3
x3
x
x5
x5
x4
x4
\
x
x
\
\
1
x7
x5
x3
x1
\
il checksum è corretto.
Tipi di errori rilevabili
ˆ
ˆ
ˆ
ˆ
Errori su singolo bit, se
D (X)
ha almeno due termini
D (X) non rappresenta
( 1 ≤ m < n+k )
Errori su due bit, se
lunghezza di trama
Errori su un numero dispari di bit, se
D (X)
un fattore di
Xm + 1
per ogni valore di
è esprimibile come fattore di
m
minore della massima
X +1
Errori a burst, con lunghezza del burst inferiore o uguale a quella dell'FCS, cioè a
k
bit.
Tipi di trame S nel protocollo HDLC
Vengono utilizzate per il controllo di usso e di errore.
ˆ Recive
ready (RR): Si tratta del messaggio di acknowledgement/riscontro utilizzato quando non faccio
piggybacking. Indico un ACK di N(R), cioè ho ricevuto no a
ˆ Recive not ready (RNR)
N (R) − 1
e ora mi aspetto l'arrivo di
: Si tratta del messaggio di acknowledgement/riscontro no a
N (R) − 1
N (R)
, però non
posso più ricevere! (Ad esempio perché ho il buer pieno)
ˆ Reject (REJ)
: Messaggio NACK : mi manca la trama
N (R),
ma ho ricevuto no a
N (R) − 1
.
Messaggio
utilizzato nel protocollo go-back-n
ˆ Selective Reject (SREJ)
: NACK , mi manca la trama
N (R),
rimandala!
Non ti dico niente sulle trame
precedenti. È possibile richiedere la ritrasmissione di più trame (ad esempio SREJ,7,0: rimandami le trame tra
0 e 7)
11
Tipi di trame U nel protocollo HDLC
ˆ SNRM/SNRME ˆ SARM/SARME ˆ DISC ˆ UA Abilita NRM o NRM esteso (la versione estesa utilizza numerazione delle trame a 7 bit)
Abilita ARM o ARM esteso
Richiesta di disconnessione
Informazioni di conferma (riscontro per messaggi di inizializzazione )
Protocollo ABM
ˆ
ˆ
ˆ I, 0, 1
ˆ
ˆ
ˆ
È di tipo
full duplex.
Si fa piggybacking dei riscontri sulle unità informative
signica trama informativa con
N (S) = 0
e
N (R) = 1
È possibile scegliere di sfruttare un protocollo go-back-n oppure selective repeat.
C'è il solito timeout
To
È un protocollo pensato per una comunicazione punto-punto tra due stazioni
Protocollo NRM
ˆ
ˆ
ˆ
ˆ
ˆ
È un protocollo
half-duplex multiplato, dove c'è una stazione primaria e altre secondartie
L'inizializzazione del protocollo viene fatta con ciascun client della rete
Il bit P/F viene settato a P (poll ) dalla sorgente quando si aspetta una risposta dalla destinazione, viene invece
inviato il bit F (nal ) quando la destinazione manda l'ultimo pacchetto di risposta.
Una stazione secondaria aspetta di essere interrogata da una stazione primaria.
La scelta go-back-n/selective repeat è arbitraria.
Ecienza dei collegamenti HDLC ABM
Prendiamo a confronto l'utilizzo di go-back-n e selective repeat su un collegamento
ˆ
Caso 1:
b = 3 bit ⇒ N = 23 = 8
Con go-back-n
ˆ
terrestre e uno satellitare.
WR = 1
Con selective repeat
WS = 7
e
WR = WS = 4
Caso 2:
b = 7 bit ⇒ N = 27 = 128
Con go-back-n
WR = 1
Con selective repeat
e
WS = 127
WR = WS = 64
Caso di un collegamento terrestre con probabilità di errore media
ˆ
ˆ
Per
b=3
il protocollo di tipo
nestra d'invio
Per
b = 7
WS
go-back-n
risulta leggermente più eciente di
selective repeat
perché la sua
è più ampia.
il protocollo di tipo
selective repeat
è sempre meglio di
go-back-n .
I due protocolli tuttavia si
eguagliano all'eccessivo aumento della lunghezza della trama.
Caso di un collegamento satellitare con probabilità di errore media
o molto grandi,
Go-back-n
go-back-n
e
selective repeat
si eguagliano, però per
Per la lunghezza di trama molto piccole
b = 7 selective repeat
è nettamente superiore.
ha prestazioni pessime perché manda un molte trame inutili perdendo parecchio tempo.
Caso di un collegamento con bassa probabilità di errore
p = 10−6 ), go-back-n
è peggio di
selective repeat
In caso di bassa probabilità di errore (ad esempio
ma non moltissimo. Per lunghezze di trama brevi
migliore.
12
go-back-n
è
Reti locali LAN (Local
Area Network )
Spesso sono implementate con mezzo trasmissivo condiviso.
Tecniche ad accesso multiplo
ˆ Canalizzazione
FDMA (Suddivisione delle frequenze)
TDMA (Suddivisione a slot di tempo)
CDMA (Suddivisione a divisione di codice)
ˆ Accesso dinamico
Prenotazione: Si suddivide il tempo in slot in cui ciascuna stazione può segnalare la propria volontà di
trasmettere prenotandosi, poi ogni stazione in ordine inizia a trasmettere. È eciente ma richiede una
buona sincronia (costosa).
Trasferimento di permesso: Usato nelle arcaiche reti token ring. C'è un gettone di permesso che ruota
tra i vari client e gli dà il permesso di trasmettere sulla rete.
Accesso a contesa (o anche accesso casuale ) Ogni stazione ha la liberà di decidere quando trasmettere,
se avviene una collisione di dati è necessario fermarsi è riprovare. Il canale di comunicazione è solitamente
a bus.
CSMA/CD (Carrier Sense Multiple Access / Collision Detection )
ˆ
ˆ
ˆ
ˆ
Il canale viene utilizzato in modo
half-duplex .
Prima di iniziare qualunque comunicazione, la stazione ascolta il canale di comunicazione per vedere se è già
occupato (funzionalità di carrier sense ).
Rivelazione di collisioni dei segnali sul bus ed emissione di una sequenza di jamming.
Algoritmo di backo esponenziale binario:
In seguito ad una collisione aspetto
di slot . i
ˆ
ˆ
k
i · T secondi
prima di trasmettere nuovamente. T = 51, 2µs è
0, ..., 2k − 1 dove k è il numero di collisioni avvenute.
il
tempo
è un numero scelto a caso tra
resta sso a 10 come valore massimo. Dopo 16 collisioni consecutive viene dichiarato errore.
Se la trama trasmessa dalla sorgente non è abbastanza lunga, si rischia che la collisione torni quando ormai ho
terminato la trasmissione della trama e quindi penso che quella collisione non la riguardi.
Per evitare questo problema la condizione che
deve essere soddisfatta, è che:
dmax
Lmin
=2·τ =2·
C
v
ˆ
dove
dmax
è la distanza massima tra due stazioni e
Nel caso di
Ethernet classico abbiamo
Lmin
è la lunghezza minima delle trame trasmesse.
Lmin = 64Byte , C = 10 Ms b
e quindi
dmax = 5, 12
Km
Progetto IEEE802
Strati superiori
Rete
(802.2) LLC
802.3
802.5
802.11
altro
CSMA/CD
Token ring
WiFi
...
Fisico
UTP,STP,bra ottica,radio,...
ˆ
802.1
ˆ LLC - Logical Link Control
Nel documento
Collegamento dati
viene denita la struttura generale delle trame
802 e lo schema qui sopra disegnato
: Ha il compito della gestione dei collegamenti logici tra i vari protocolli di
livello 2.
ˆ MAC - Medium Access Control
: È specico per ogni tipo di LAN, anche se hanno caratteristiche comuni
tra loro (vedi MAC address in 802.3 e 802.11). Governa le procedure di accesso al mezzo trasmissivo.
13
Strato LLC (Logical Link Control )
ˆ
ˆ
ˆ
ˆ
Ha il compito di mostrare allo strato network una interfaccia unicata per tutti i vari protocolli di livello 2.
Il livello LLC è implementato a software (mentre il livello MAC solitamente è implementato in hardware)
Prende spunto da HDLC.
Fornisce servizi di:
Servizio connectionless senza riscontro
Servizio connection-oriented
Servizio connectionless con riscontro
Struttura della trama
LLC DA
LLC SA
Control
Information
1 Byte
1 Byte
1/2 Byte
Variable
ˆ LLC DA
(1 Byte): Indirizzo LLC di destinazione. Si tratta di indirizzi a livello applicativo all'interno delle
stazioni
ˆ LLC SA
ˆ Control
(1 Byte): Indirizzo LLC sorgente
(1 o 2 Byte a seconda del tipo di PDU): Sono denite PDU informative e supervisive, in cui il campo
di controllo è di 2 byte, mentre le PDU non numerate sono caratterizzate da un campo di controllo di 1 byte.
La struttura di questo campo è uguale a quella del protocollo HDLC
ˆ Information
: Payload
Strato MAC (Medium Access Control ) generico
ˆ
ˆ
Provvede alla consegna delle unità informative LLC sulla rete
Gestisce l'indirizzamento tramite un indirizzo univoco chiamato MAC Address Struttura della trama
MAC DA
MAC SA
Information
FCS
6 Byte
6 Byte
Variable
4 Byte
ˆ MAC DA
ˆ MAC SA
ˆ Information
ˆ FCS
: Indirizzo MAC di destinazione
: Indirizzo MAC sorgente
: Payload
: checksum
Indirizzi MAC
I MAC address sono indirizzi da 6 Byte (48 bit) univoci per ciascuna scheda di rete al mondo.
suddiviso in due parti:
OUI
ˆ OUI
ˆ Serial number
ˆ
(48 bit)
Il mac address è
Serial number
: È l'identicatore del produttore della scheda di rete (24 bit)
: È un numero di serie univoco assegnato dal produttore alla scheda di rete (24 bit).
L'ultimo bit consente di distringuere tra indirizzi singoli di broadcast, globali o locali.
ˆ
ˆ
FF : FF
FF : FF : FF : FF :
è l'indirizzo di broadcast per inviare a tutte le stazioni della rete locale.
L'ordine di trasmissione è dal bit meno signicativo
Gli indirizzi universally administered e locally administered si distinguono per mezzo del settaggio del secondo
bit meno signicativo del byte più signicativo dell'indirizzo.
Se il bit è a 0, l'indirizzo è universally locally
administered o local scope ; se viceversa è a 1, esso è globally administered o global scope.
14
Ethernet 802.3
Contenuto:
Preamble
SFD
Destination Address
Source Address
Lenght
LLC/PDU
Padding
FCS
Dimensione (Byte):
7
1
6
6
2
0-1500
0-46
4
ˆ Preamble
ˆ SFD
: è una sequenza di bit stabilita a priori, destinata alla sincronizzazione del segnale.
10101011
: è la sequenza
che contiene una violazione della codica Manchester. Viene utilizzato come Flag
per indentifcare l'inizio del frame.
ˆ Destination/Source Address
ˆ Lenght
: sono i MAC address destinazione e sorgente.
: è la lunghezza del campo informativo seguente. Se il valore rappresentato è maggiore di 1500, si assume
PDU pari a 1500 e si ignora Lenght.
ˆ Padding
: è un campo utilizzato per garantire che la lunghezza delle trame inviate sia sempre pari alla lunghezza
minima di
64 Byte
.
ˆ FCS
ˆ IFG (Inter Frame Gap)
: è un codice a controllo di errore (checksum ) di tipo CRC-32.
: Non si tratta di un campo della trama. È il tempo di attesa tra la ne di una trama
e l'inizio della seguente. Per Ethernet classico abbiamo
IF G = 9, 6µs
Mezzi trasmissivi per Ethernet a 10Mb/s (802.3)
XBaseY dove
X =velocità
in Mb/s , Base signica in banda base, Y è la lunghezza massima del cavo o altro.
10Base5
10Base2
10Base-T
10Base-FP
10Base-FL
10Base-FB
Cavo coassiale
Cavo coassiale
Doppino UTP
Fibra ottica
Fibra ottica
Fibra ottica
500m max.
185m max.
100m max.
500m max.
2000m max.
2000m max.
100 stazioni max
30 stazioni max.
2 senza hub
33 con hub
2 stazioni max
2 stazioni max
Link segment
Link segment
Link segment
Dettagli per 10Base5
ˆ
ˆ
Due stazioni devono essere distanti almeno 2,5m tra di loro
Il cavo che collega la stazione al bus (cavo AUI ) non può essere più lungo di 50m.
Dettagli per 10Base2
ˆ
ˆ
Due stazioni devono essere distanti almeno 0,5m tra di loro.
Il cavo che collega la stazione al bus (cavo AUI ) non può essere più lungo di 50m.
Regole di interconnessione
ˆ
ˆ
ˆ
ˆ
Nel seguito considereremo un hub come un repeater con più porte. In realtà l'hub emette anche jamming per
aiutare CSMA/CD.
Ethernet classico utilizza sempre la codica manchester
Un
dominio di collissione è una zona dove sicamente le stesse trame ethernet possono collidere tra loro.
In base ad alcune
regole empiriche:
Tra due stazioni qualunque ci possono essere al massimo:
*
*
*
5 segmenti
4 repeater
2 transreciver
Nel caso di 5 segmenti e 4 ripetitori:
*
Massimo 3 mixing segmenti
15
Fast Ethernet (802.3u) - Ethernet a 100Mb/s (1995)
ˆ
Trama uguale a Ethernet classimo, cambiano i tempi:
Tf M IN = 5, 12µs , Lf M IN = 64 Byte
Limite teorico:
ˆ
ˆ
Introdotto il
, Slot time
= 5, 12µs , C = 100 Ms b
500m , limite reale: 250m
full-duplex
utilizzando due canali di comunicazione con
switch
Viene aggiunto uno strato di riconciliazione dei mezzi sici sotto a CSMA/CD
100Base-TX
100Base-FX
100Base-T4
100Base-T2
2 UTP CAT5
Fibra ottica
4 UTP CAT3
2 UTP CAT3
ˆ
Stella
Stella
Stella
Stella
4B5B-MLT-3
4B5B-NRZ-I
8B6T
PAM5x5
Full-duplex
Full-duplex
Half-duplex
Full-duplex
100m
100m
100m
100m
Gigabit Ethernet (802.3z) - Ethernet a 1Gb/s (1998)
ˆ
Viene aggiunto alla trama ethernet un campo extension dopo FCS, per garantire una lunghezza minima della
trama di 512 Byte.
ˆL
ˆ
ˆ
ˆ
ˆ
ˆ
f M IN
= 512
Byte ,
Tf M IN = 4, 096µs , dteorica = 400m
La distanza massima reale è
200m
È possibile trasmettere più trame consecutive senza interporre l'IFG.
Full duplex solo se uso switch-switch oppure switch-endsys.
1000Base-T = 25m
1000Base-SX = 550m
10 Gigabit Ethernet (802.3ae) - Ethernet a 10Gb/s (2003)
ˆ
ˆ
ˆ
Solo full-duplex
Vietato l'uso di hub
Permesso solo l'utilizzo di bra ottica come mezzo trasmissivo.
100 Gigabit Ethernet (802.ba) - Ethernet a 100Gb/s e 40Gb/s (2010)
ˆ
Richiede apparati molto potenti, permette di scegliere tra 40Gb/s e 100Gb/s.
LAN Wireless - WiFi (802.11)
Con la diusione di dispositivi mobili, si è pensato di standardizzare dei protocolli a livello 2 per utilizzare le onde
radio come mezzo trasmissivo.
L'utilizzo delle onde radio porta numerosi problemi che non è possibile risolvere
interferenze
piccola quantità di spettro elettromagnetico a disposizione, la variabilità della potenza
del segnale e la necessità di gestire problemi relativi al risparmio di energia.
applicando le stesse idee utilizzate per Ethernet standard. Basti pensare ai problemi dei disturbi e delle
elettromagnetiche, alla
Lo sviluppo delle wireless LAN ha avuto luogo facendo uso di porzioni dello spettro elettromagnetico non soggette
per denizione a regolamentazione e quindi utilizzabili da chiunque (senza bisogno di licenze).
spettro sono chiamate
Queste porzioni di
ISM (Instrumental, Scientic, Medical ) e sono in tre gruppi: 900 MHz, 2.4GHz, 5GHz.
Gli standard sviluppati per le reti wireless sono tutti sottostandard del più generale IEEE 802.11 (la cui prima
versione risale al 1997), spesso chiamato informalmente WiFi (Wireless Fidelity ).
Strato sico di 802.11
Lo strato sico di 802.11 è stato suddiviso concettualmente in due parti:
ˆ Physical Layer Convergence Procedure (PLCP)
ˆ Physical Medium Dependent (PMD)
16
Phyisical Layer Convergence Procedure
In questa parte dello strato sico si specica come riuscire a trasmettere ecaciemente le trame MAC sul mezzo sico.
A dierenza di Ethernet, sul mezzo sico non viene inviata la trama MAC direttamente, ma è incapsulata a sua
volta all'interno di una PLCP PDU strutturata come segue:
PLCP Preamble
PLCP Header
ˆ PLCP Preamble
ˆ PLCP Header
PLCP SDU
: realizza la funzione di sincronizzazione in ricezione e segnala l'inizio della trama
: specica i parametri utilizzati nella trasmissione, come ad esempio la
frequenza di cifra, la
lunghezza della PLCP SDU e fornisce funzionalità di controllo d'errore.
ˆ PLCP SDU
(Physical Layer Convergence Procedure - Service Data Unit ): è la parte che contiene la trama del
sottostrato MAC.
Si noti che l'header della trama PLCP svolge funzioni speciche ed aggiuntive rispetto a quelle svolte a livello MAC.
Physical Medium Dependent
In questa parte dello strato sico si descrivono i vari metodi di trasmissione sica.
Come già accennato, IEEE 802.11 utilizza come bande radio le frequenze ISM; in particolare sono utilizzate le
frequenze 2,4GHz e 5GHz.
Nel primo standard IEEE 802.11 i metodi di trasmissione erano tre e operavano nell'ordine dei 1-2Mb/s:
ˆ
ˆ
ˆ
Infrared
Frequency Hopping Spread Spectrum ( FHSS )
Direct Sequence Spread Spectrum ( DSSS )
I due metodi a spettro diuso (spread spectrum ) eettuano la trasmissione di un usso di dati di B bit/s utilizzando
una banda W molto più grande della frequenza di cifra del segnale numerico da trasmettere. Questo signica che il
W
B è molto maggiore di
interessare il segnale trasmesso.
rapporto
Infrared
1
. Il motivo di questa scelta è tentare di combattere le interferenze che possono
È un metodo di trasmissione a infrarossi che funziona in modo simile ai telecomandi operando su lunghezza
d'onda 850-950 nm con modulazione PPM (Pulse Position Modulation ) ed uno schema di codica chiamato codice
Gray che riduce gli errori dovuti alla sincronizzazione. La trasmissione può avvenire in modalità punto-punto o in
modalità diusa.
In questo secondo caso si ha lo svantaggio di una bassa copertura (10-20 metri) e l'interferenza
dovuta ai raggi solari.
Frequency Hopping Spread Spectrum (FHSS)
Vengono utilizzati 79 canali larghi 1Mhz ciascuno, che iniziano
dal margine inferiore della banda ISM a 2,4GHz. La sequenza numerica da trasmettere viene modulata con tecnica
FSK (Frequency Shift Keying )
su una portante che viene cambiata frequentemente in modo pseudocasuale. Tutte le
stazioni conoscono il seme casuale utilizzato per generare le frequenze, quindi possono mantenere la sincronizzazione.
La quantità di tempo spesa in ogni frequenza, ossia il
minore di 400 msec.
tempo di rotazione, è un parametro regolabile che deve essere
La rotazione della frequenza portante permette di ottenere un po' di sicurezza contro inter-
cettazioni (un attaccante deve conoscere il seme di rotazione) e rende il sistema abbastanza insensibile alle interferenze
radio. Ha buone prestazioni anche per collegamenti su lunghe distanze. Il suo svantaggio principale è la banda ridotta.
Direct Sequence Spread Spectrum (DSSS)
In questa tecnica ogni bit viene trasformato in una sequenza di
segnali elementari chiamati
chip
PSK (Phase Shift Keying ).
Per la trasmissione dei ussi a 2Mb/s viene utilizzata la modulazione
(utilizzando la sequenza Barker ), che vengono trasmessi mediante modulazione
QPSK (Quaternary
Phase Shift Keying).
Physical Medium Dependent - I nuovi standard
Successivamente a questi primi metodi di trasmissione, sono stati standardizzati nuovi metodi che utilizzano velocità
superiori: 802.11a, 802.11b, 802.11g, 802.11n.
802.11a
Utilizza la banda ISM intorno ai
multiportante utilizzata è
5 GHz per distribuire no a 54 Mb/s. La tecnica di modulazione
OFDM (Orthogonal Frequency Division Multiplexing ),
che utilizza 52 frequenze (48 dati e
4 per la sincronizzazione) e trasmette contemporaneamente su più frequenze nello stesso momento. Anche se la velocità
massima è 54Mb/s, sono state denite altre velocità operative tra cui scegliere, ed è possibile operare anche a 6Mb/s.
Viene utilizzata la modulazione PSK per le velocità no a 18Mb/s,
velocità superiori.
QAM
(Quadrature Amplitude Modulation ) per
OFDM era stato scelto per garantire la compatibilità con un altro standard europeo chiamato
HiperLAN/2.
17
802.11b
Nonostante il nome, questo standard è stato approvato e messo sul mercato prima di 802.11a.
standard viene chiamato anche
Questo
HR-DSSS (High Rate Direct Sequence Spread Spectrum ).
Si basa sulla modulazione spread spectrum come DSSS, utilizza però una tecnica di codica più complessa chiamata
CCK (Complementary Code Keying ).
Sono denite quattro velocità possibili per il usso dati: 1, 2, 5.5 e 11 Mb/s. La velocità da utilizzare viene scelta
automaticamente analizzando la qualità del canale. Per garantire la retrocompatiblità con DSSS, alle velocità 1 e 2
Mb/s si utilizza lo stesso metodo di codica di DSSS. Per le ultime due velocità si opera a 1,375 Mbaud con 4 e 8 bit
per baud, usando i codici Walsh/Hadamard .
802.11b è più lenta di 802.11a, ma il suo campo d'azione è circa sette volte più ampio.
802.11g
Nel Novembre 2001 è stato pubblicato questo nuovo standard, derivato da 802.11b.
Viene utilizzato il metodo di modulazione
OFDM
(come in 802.11a) ma opera nella più ristretta banda ISM del
2,4 GHz. La velocità massima utilizzabile è 54 Mb/s.
Struttura della rete
In una rete radiomobile si distinguono due tipi di congurazioni: servizio radiomobile base e il servizio radiomobile
esteso.
Nel servizio di tipo base le stazioni, il cui insieme è chiamato
BSS (Basic Service Set ), possono comunicare l'una
AP (Access Point ) agisce da stazione radio base
con l'altra senza restrizioni. Se presente, un'altra stazione chiamata
che consente la comunicazione delle altre stazioni con altri apparati remoti di rete. Se non è presente nessun Access
Point, la rete prende il nome di rete
ad-hoc .
È possibile collegare tra loro più insiemi di BSS in un
ESS
(Extended Service Set ).
Ciò viene realizzato con
l'interconnessione degli AP delle varie BSS mediante un sistema di distribuzione (DS , Distribution System ), che è
tipicamente una LAN cablata (per esempio una rete Ethernet).
Il problema della stazione nascosta/esposta
Nonostante il successo delle reti Ethernet, le reti wireless non utilizzano il protocollo CSMA/CD. Il motivo principale
è che con i collegamenti radio, la potenza del segnale ricevuto è strettamente dipendente dalla positizione del terminale
e quindi non si ha più la certezza di poter rilevare collisioni.
Il problema più noto nelle reti radiomobili è il problema della stazione nascosta . Poiché non tutte le stazionisono
all'interno del campo radio delle altre, le trasmissioni che avvengono in una parte della cella possono non essere ricevute
in un'altra parte della stessa cella. Può dunque succedere che una stazione, che non riceve i segnali di altre che stanno
comunicando tra loro, pensi erroneamente che il canale di comunicazione sia libero e inizi a trasmettere.
Il problema complementare, cioè quello della stazione esposta accade quando una stazione rileva del traco adiacente e decide di non trasmettere, anche se la sua destinazione è pronta a ricevere e la trasmissione non inuenzerebbe
il traco adiacente.
Protocollo CSMA/CA
È un protocollo di accesso diverso che cerca di prevenire le collisioni. Il nome CSMA/CA signica
Carrier Sense
Multiple Access with Collision Avoidance .
Dunque abbiamo ancora la funzione di sensing del canale ma la possibile presenza di collisioni viene gestita in
modo diverso. CSMA/CA supporta due modalità operative:
ˆ
Nella
prima modalità la stazione controlla se il canale è libero prima di trasmettere. Durante la trasmissione la
stazione non controlla il canale ma emette l'intero frame, che può comunque rimanere danneggiato. Se il canale
è occupato la stazione rimanda l'operazione no a quando il canale non diventa libero e poi invia i dati. In caso
di collisione, le stazione coinvolte rimangono in attesa per un tempo casuale adottando l'agoritmo di backo
ˆ
esponenziale binario, quindi ritentano.
Nell'altra
modalità operativa di CSMA/CA (basata su MACAW ), viene utilizzato un meccanismo di controllo
di presenza del canale virtuale più sosticato.
Viene introdotta la procedura di esplicita autorizzazione alla
trasmissione da una stazione all'altra, eseguita mediante l'invio di una trama Request To Send (RTS ) , cioè
richiedo invio e risposta positiva con una trama Clear To Send (CTS ) cioè puoi inviare.
Naturalmente
pur adottando questo meccanismo le collisioni possono comunque avvenire. Si prevede quindi che le trame dati
ricevute correttamente siano esplicitamente riscontrate inviando una trama di acknowledgement (ACK ) cioè
di riscontro.
Di seguito ci riferiremo sempre a questa seconda modalità operativa (la prima è poco
utilizzata).
A causa di svariati motivi, il tasso di errore sulle reti wireless è nettamente superiore a quelle cablate. Per questo motivo
si prevede che le trame dati di lunghezza superiore ad una data soglia vengano suddivise in
frammenti consecutivi.
In questo modo si limita il numero delle trame da ritrasmettere in caso di errore. Ogni trama ha il proprio checksum,
i frammenti sono numerati e inviati con una sorta di protocollo stop-and-wait.
18
Protocollo di accesso
Lo standard 802.11 prevede due modalità di accesso al canale radio condiviso:
ˆ
Distributed Coordination Function (DCF ): Modalità distribuita di accesso al mezzo secondo il protocollo
ˆ
Point Coordination Function (PCF ): Procedura aggiuntiva che può essere eettuata in presenza di un Access
CSMA/CA che può dar luogo a collisioni.
Point per evitare l'occorrenza di collisioni. Questa seconda modalità è
utilizzata molto raramente.
La seconda modalità operativa prima discussa si basa tutta su un discorso di dierenziazione dei tempi di ritardo,
quattro diversi intervalli minimi di
tempo tra le trasmissioni di trame consecutive, detti InterFrame Spacing (IFS ) che elenchiamo qui dal più breve al
per gestire la priorità nell'accesso al mezzo trasmissivo. Vengono identicati
più lungo:
ˆ
Short Interframe Spacing (SIFS ): Minimo tempo di attesa dopo la rivelazione della ne trasmissione di una
trama. È anche il tempo atteso prima di trasmettere
trame ad alta priorità, che sono:
Trame CTS, ACK
Trame di risposta a interrogazioni dell' AP
Frammenti successivi di altri frammenti trasmessi con successo
ˆ
ˆ
ˆ
PCF InterFrame Spacing (PIFS ): Intervallo di tempo intermedio utilizzato per garantire priorità di accesso al
mezzo nella
modalità PCF.
DCF InterFrame Spacing (DIFS ): Intervallo di tempo più lungo adottato dalle stazioni che operano in modalità
DCF per trasmettere il primo frammento delle trame dati e trame di gestione.
Extended InterFrame Spacing (EIFS ): L'intervallo di tempo dopo cui una stazione che ha ricevuto un frammento
danneggiato/sconosciuto può annunciarlo alle altre stazioni.
Questi tre tipi di ritardi sono calcolati a partire dal momento in cui termina l'occupazione del canale. All'intervallo
DIFS soltanto segue un intervallo di tempo, detto nestra di contesa, in cui le stazioni che operano in
modalità DCF tentano di prendere il controllo del canale mediante l'utilizzo del protocollo CSMA/CA. Lo slot di
di tempo
contesa
τ
è nell'ordine dei
5 − 50µs.
Di seguito è illustrato il diagramma a stati delle operazioni su CSMA/CA (riferito alla modalità
Descriamo ora il funzionamento del protocollo nei due casi DCF e PCF
Modalità DCF
È la modalità maggiormente utilizzata.
Partiamo dall'esempio della comunicazione rappresentato in gura:
19
DCF):
In questo esempio ipotizzeremo l'assenza di collisioni di cui comunque parleremo dopo.
ˆ
ˆ
ˆ
ˆ
La stazione A ha una trama da inviare alla stazione B. Aspetta un intervallo di tempo DIFS in cui si assicura
che il canale sia libero e poi trasmette una trama
RTS di richiesta trasmissione destinata alla stazione B.
La stazione B attende un tempo SIFS e acconsente alla trasmissione inviando ad A una trama
CTS.
La stazione A attende un tempo SIFS dalla ricezione della trama CTS e inivia i dati.
Dopo un intervallo di tempo SIFS successivo all'invio dei dati, la stazione B invia una trama ACK per confermare
l'avvenuta ricezione dei dati.
Al ne di evitare altre trasmissioni mentre la stazione A sta inviando, che possono provocare collisioni, le trame RTS e
CTS contengono al loro interno l'informazione sull'intervallo di tempo di occupazione del mezzo trasmissivo per l'invio
e il riscontro della trama in questione (compresi gli intervalli SIFS). Questa informazione di occupazione è chiamata
NAV
(Network Allocation Vector ).
Le altre stazioni che ricevono queste trame (RTS e CTS) restano inattive durante l'intervallo di tempo NAV
(signicato dei blocchi NAV per le stazioni C e D nella gura precedente). Il fatto che l'indicazione del tempo sia
anche all'interno della trama CTS (oltre a quella RTS) permette di fare in modo che se ad esempio D non riceve il
segnale di A ma riceve quello di B, riesce ad accorgersi comunque che è in corso una trasmissione. Questo meccanismo
risolve il problema della stazione nascosta.
Caso del canale occupato
Una stazione che rivela il canale occupato, attende che il canale permanga libero per
un tempo DIFS. Ciò garantisce che le trasmissioni a priorità superiore (cioè tutte quelle che attendono un intervallo
di tempo inferiore a DIFS) possano essere eettuate. Se il canale risulta libero dopo un tempo DIFS, viene trasmessa
la trama RTS di richiesta di trasmissione. Altrimenti la stazione applica l'algoritmo di backo.
Algoritmo di backo di CSMA/CA
Se si entra in fase di backo, la trasmissione viene ritardata di un tempo
casuale di i slot, selezionato a caso all'interno di un intervallo di durata massima di K slot. K cresce man mano con
il numero di tentativi di trasmissione che non hanno successo. Il valore iniziale dell'intervallo è
ritardo iniziale è un numero di slot tra
Una
0
e
7.
K = 7 slot, così che
22+i − 1 slot.
il
Al tentativo i -esimo, l'intervallo ha ampiezza massima
particolarità dell'algoritmo di backo utilizzato da CSMA/CA è che gli slot di attesa vengono calcolati solo
durante le eettive nestre di contesa, cioè quando il mezzo è libero. Il conteggio degli slot di attesa viene sospeso
se si rivela una nuova trasmissione in corso.
Il conteggio viene ripreso un intervallo di tempo DIFS dopo la ne
dell'occupazione del canale. Esaurito il backo si trasmette la trama RTS.
Collisioni Nonostante il protocollo implementi i meccanismi di permesso con RTS, CTS e il backo, possono
comunque avvenire delle collisioni tra le trame. Può infatti succedere che due stazioni emettano una trama RTS
nello stesso slot temporale. In questo caso la stazione destinataria non emette (come previsto) la trama CTS entro un
tempo SIFS e quindi la stazione che ha emesso la trama RTS applica l'algoritmo di backo.
Questo meccanismo si applica anche quando una trama dati non viene riscontrata da una trama ACK dopo un
tempo SIFS. In quest'ultimo caso si noti che è possibile che ci sia un errore sulla trama dati (quindi scartata dalla
destinazione ricevente che non conferma con ACK), sia una collisione che ha interessato la trama di riscontro ACK,
che non torna al mittente.
Per risolvere questi problemi le trame e i frammenti sono numerati, cosa che permette di riconoscere duplicati in
caso di ritrasmissioni.
Frammenti
Come già accennato prima, la trasmissione del primo frammento dati richiede un tempo di attesa DIFS,
mentre i successivi frammenti vengono inviati dopo un intervallo di tempo libero SIFS. In questo modo si dà priorità
al completamento della trasmissione di tutti i frammenti di una trama rispetto all'invio di nuove trame.
20
Modalità PCF
Nella modalità PCF (raramente utilizzata), una stazione agisce da coordinatore (Coordination Point, P C) e controlla
in modo
centralizzato l'accesso al mezzo trasmissivo. Questo meccanismo di controllo centralizzato avviene in modo
simile a quanto già visto per la modalità NRM del protocollo HDLC. Quindi in modalità PCF non possono vericarsi
collisioni a priori, dato che è la stazione centrale a gestire tutti i permessi. La stazione PC risiede su un Access Point
e attiva la modalità PCF inviando una trama speciale dopo un tempo PIFS dall'ultima occupazione del canale. La
stazione PC invia poi delle trame di interrogazione poll a cui le stazioni rispondono con una distanza temporale pari
ad un intervallo SIFS.
Servizi e trama di 802.11
Nel protocollo 802.11 ci sono tre tipi principali di trame:
ˆ Trame di gestione
Autenticazione
Associazione
Sincronizzazione
...
ˆ Trame di controllo
RTS, CTS, ACK
ˆ Trame dati
Servizi oerti
Lo standard 802.11 stabilisce nove servizi che ogni LAN wireless deve fornire. I primi cinque sono servizi di distribuzione (riguardano la gestione dell'appartenenza alla cella), gli altri quattro sono servizi stazione (si occupano
dell'attività all'interno della singola cella).
1.
Associazione: Servizio utilizzato dalle stazioni mobili per eettuare la connessione alla stazione base.
La
stazione annuncia la propria identità e le funzionalità (velocità, servizi PCF, gestione alimentazione), la stazione
base può decidere se accettare o meno. Se accetta il passo successivo è l'autenticazione
2.
Separazione: La stazione mobile o quella base possono separarsi interrompendo la relazione. Una stazione
mobile dovrebbe utilizzare questo tipo di messaggio per avvisare la stazione base prima di lasciare la cella.
3.
Riassociazione: Con questo servizio una stazione mobile può cambiare la propria stazione base da una cella
all'altra. Se viene sfruttata correttamente, questa funzionalità permette di evitare la perdita di dati nel passaggio
da un access point all'altro.
4.
Distribuzione: Servizio che stabilisce come instradare i frame verso la stazione base. Se la stazione base è
direttamente accessibile verranno inviati via radio, altrimenti via rete cablata.
5.
Integrazione: Servizio che permette la traduzione tra indirizzi di tipo diverso per instradare un frame attraverso
una rete non 802.11.
(seguono le operazioni interne alle celle aettuate solo dopo l'associazione)
1.
Autenticazione: Per garantire la sicurezza nell'accesso alla rete, la stazione base manda un frame challenge per
vedere se la stazione mobile conosce la risposta, se la conosce la stazione mobile risponde con un frame cifrato
alla stazione base, per confermare di conoscere il segreto condiviso. Se il risultato è corretto la stazione mobile
viene denitivamente registrata all'interno della cella.
2.
Invalidamento: Quando si desidera abbandonare la rete, si invalida l'autenticazione precedentemente eettuata.
3.
Riservatezza: Le informazioni trasmesse sulla LAN wireless possono essere cifrate per garantirne la riservatezza.
Questo servizio gestisce la codica e decodica dei dati. Il sistema che gestisce la riservatezza, integrato nello
standard 802.11 è WEP (Wired Equivalent Privacy ) che fa uso di RC4 come algoritmo di cifratura.
Questo
sistema ha soerto di seri problemi di progettazione, che permettono ad un attaccante di violare la sicurezza di
una rete WEP nel giro di pochi minuti. In risposta a questi problemi di sicurezza sono stati inventati i sistemi
WPA (Wi-Fi Protected Access ).
4.
Trasferimento dei dati: 802.11 fornisce ovviamente un modo per trasmettere e ricevere dati. Così come
Ethernet però la trasmissione non è adabile e gli strati superiori devono gestire il rilevamento e la correzione
degli errori.
21
Formato di trama
La trama del sottostrato MAC del protcollo 802.11 è strutturata come segue:
Contenuto:
FC
Duration/ID
Address 1
Address 2
Address 3
Seq.Control
Address 4
Info
FCS
Byte
2
2
6
6
6
2
6
0-2312
4
Discuteremo dei vari campi Address nel segito, vediamo il signicato dei vari campi:
ˆ FC
ˆ
Frame Control (2 Byte): Comprende un sottinsieme di informazioni strutturate come segue:
,
Prot.Ver.
Type
Sub Type
To DS
From DS
More Flag
Retry
Pwr Mng
More Data
WEP
Order
2 bit
2 bit
4 bit
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
I cui campi sono:
Protocol Version (2 bit): Specica la versione del protocollo (quella corrente è la 0)
Type (2 bit): Distingue tra 3 tipi di trama: gestione (00), controllo (01) e dati (10)
SubType (4 bit): Specica ulteriormente il sotto tipo di trama: (sotto-)trama di assocazione (trama di
gestione), (sotto-)trama RTS (trama di controllo)
To DS (1 bit): Specica come interpretare i campi indirizzo
From DS (1 bit): Specica come interpretare i campi indirizzo
More Flag (1 bit): Settato se si tratta di un frame frammento
Retry (1 bit): Specica se la trama è una ritrasmissione o è la prima volta che viene trasmessa
Power Management (1 bit): Indica lo stato attivo o in risparmio energetico della stazione radiomobile.
More Data (1 bit): Indica alla stazione in stato di risparmio energia che ci sono altre trame in attesa
nell'AP indirizzate alla stessa stazione.
WEP (1 bit): Indica che l'informazione trasportata dalla trama è cifrata mediante il sistema WEP.
Order (1 bit): Specica alla stazione destinazione che le trame devono essere elaborate nell'ordine inviato.
ˆ Duration/ID
(2 Byte): Indica la durata di occupazione prevista del canale (NAV ), espressa in microsecondi. Se
si utilizza la modalità
PCF, nel caso di trame di controllo per interrogazione (poll) indica invece l'identicazione
dell stazione sorgente della trama che sta rispondendo ad una interrogazione.
ˆ Sequence Control
numero del frammento della trama in corso di
numero di sequenza (tra 0 e 4095). Ovviamente il numero di trama è
(2 Byte): Indica, con i primi 4 bit il
trasmissione e con i successivi 12 bit il
lo stesso per più frammenti della stessa trama.
ˆ Information
(0-2312 Byte): Contiene le informazioni del protocollo superiore trasportate dalla trama (il livello
LLC ).
ˆ FCS
,
Frame Check Sequence (4 Byte): Contiene il codice di controllo d'errore (checksum) di tipo CRC-32.
I diversi signicati dei quattro campi Address dipendono dai valori assunti dai campi to DS e From DS. In ogni
caso gli indirizzi sono MAC address a 48 bit, strutturati allo stesso modo di quelli Ethernet.
Di seguito una tabella riassuntiva con le varie congurazioni:
ˆ
ˆ
ˆ
ˆ
Caso
To DS
From DS
Address 1
Address 2
Address 3
Address 4
A
0
0
Dest. Addr.
Source Addr.
BSS ID
-
punto-punto
B
0
1
Dest. Addr.
BSS ID
Source Addr.
-
Uscente dal DS
C
1
0
BSS ID
Source Addr.
Dest. Addr.
-
Entrante nel DS
D
1
1
Reciver Addr.
Transmitter Addr.
Dest. Addr.
Source Addr.
Da BSS a BSS
Nel
Il
Tipo di trama
caso A il trasferimento della trama avviene all'interno della BSS, di cui viene specicato l'identicatore.
caso B si riferisce ad una trama inviata dal sistema di distribuzione (DS) a una stazione di cui si specica
l'indirizzo all'interno di un dato BSS.
Il
caso C, speculare al precedente, si riferisce ad una trama inviata da una stazione all'interno di un dato BSS
verso il sistema di distribuzione (DS)
Il
caso D si riferisce alla trasmissione di una trama tra stazioni di BSS dierenti. Il reciver address indica
l'indirizzo MAC dell'AP di transito nel BSS sorgente che riceve, allo stesso modo trasmitter address indica
l'indirizzo dell'AP del BSS di destinazione.
22
Prestazioni delle reti LAN
Metriche
ˆ
ˆ
ˆ
Traco smaltito
Probabilità di perdita
Tempo di attraversamento
Ritardo causato dal buer
Ritardo di trasmissione
Ritardo di propagazione
Parametri
ˆN=
ˆ λ=
ˆ C=
ˆ L=
Numero dei nodi (esclusi i punti di attraversamento)
Frequenza media di arrivo in una generica stazione delle unità informative
Velocità della rete
bit s
Lunghezza ssa del pacchetto trasmesso
Conseguenze
ˆ Traco oerto alla rete (da tutti): A = N · (λ · L)
ˆ Traco smaltito dalla rete: A = (N · λ · L) · (1 − π )
o
S
ˆ
ˆ
πp
bit s
p
è la proababilità di errore per pacchetto
Se ipotizziamo
πp = 0
0≤ρ≤1
T HR = S · C
allora
il throughtput di rete normalizzato è
S=ρ=
(N ·λ·L)
C
[Erlang] = [1]
indica la quantità di tempo in cui la rete è occupata
bit s
Nel seguito considereremo il mezzo trasmissimo ideale e privo di errori
Traco su una rete TDMA
Trama 1
1
2
Trama 2
3
...
NL
C
N
ˆ
ˆ S=ρ=
ˆ
1
2
3
...
NL
C
Trama 3
N
1
Per ogni slot il tempo di trasmissione è
2
...
TT =
L
C
N ·λ·L
C
Trascurando il tempo di propagazione, abbiamo 3 componenti di ritardo:
TT tempo di trasmissione nel mezzo
TW tempo di attesa nella stazione
TSync tempo di sincronizzazione, di attesa per l'arrivo dello slot assegnato
ˆ
T
ˆT =
· =
·
ˆT = ·
ˆ Delay di attraversamento medio
Il tempo
W
Sync
(attesa che i pacchetti nel buer vengano inviati)
W è determinato da una coda di tipo
ρ
2·(1−ρ)
N ·L
C
1
µ
ρ
2·(1−ρ)
M/D/1
N ·L
C
1
2 mediamente
:
DT DM A =
L
ρ
N ·L N ·L
+
·
+
C
2 · (1 − ρ)
C
2·C
ˆ Delay di attraversamento medio normalizzato:
D̂T DM A =
DT DM A
N ·ρ
N
=1+
+
TT
2 · (1 − ρ)
2
23
Traco su una rete FDMA
Stazione 1
Stazione 2
C
N
C
N
...
...
C
Stazione N
C
N
t
ˆ
1
ˆT =
=
=
[s]
[
] = [1]
ˆ S =ρ=λ·T =λ·
ˆ
M/D/1
ˆ Delay di attraversamento medio:
Assumiamo
bit
Hz
L
V elocità
T
N ·L
C
L
C
N
N ·L
C
T
Erlang
con sempre
0≤ρ≤1
Ipotizziamo ancora una coda di tipo
DF DM A =
N ·L
ρ
N ·L
+
·
C
2 · (1 − ρ)
C
Il termine NC·L è da intendere come il tempo di trasmissione
ρ
Il termine 2·(1−ρ)
·
N ·L
C è il tempo
TW
TT
nel buer
Non c'è tempo di sync
ˆ Delay di attraversamento medio normalizzato:
D̂F DM A =
N · (2 − ρ)
2 · (2 − ρ)
osserviamo quindi che rispetto al caso TDMA:
D̂F DM A = D̂T DM A +
ˆ
N
−1
2
Quindi TDMA è soprendentemente più eciente di FDMA.
Protocollo ALOHA
ˆ
ˆT =
ˆ S=
ˆ G=
ˆ
ˆ S={
Niente carrier sensing, niente collision detection
T
Tempo di trasmissione del pacchetto
Numero medio di trasmissioni con successo in un intervallo di tempo
Numero medio di trasmissioni tentate in un intervallo di tempo
Arrivo dei pacchetti con distribuzione di Poisson con
Probabilità di passare}
= G · {Probabilità
Il massimo si ottiene per
G=
1
2
Λ=
che in
⇒ S = 0, 184
T
T
G
T
2·T
non trasmette nessuno}
cioè passa
al massimo solo il
= G · e−2·G
18% del traco!
ˆ In base alla metrica del ritardo:
DALOHA = e2·G − 1 · TT + 2 · τ + k−1
2 · TT + TT + τ
2·G
Il termine e
− 1 rappresenta il numero di tentativi
*
*
senza successo per ottenere una trasmissione
che vada a buon ne.
Il termine
k−1
2
· TT
rappresenta la media del tempo di backo.
Abbiamo quindi un delay di attraversamento medio normalizzato pari a
k+1
2
+2·a +1+a
Se aumento
S
e
k,D
tende ad esplodere
24
D̂ALOHA = e2·G − 1 ·
Interconnessione di reti locali
ˆ Dominio di collisione
: È una zona della rete dove due trame provenienti da due stazioni, possono collidere
tra di loro.
ˆ Dominio di broadcast
: È l'insieme delle stazioni di una rete a cui viene consegnata una trama con indirizzo
broadcast generata da una qualunque delle stazioni stesse.
Interconnessione tramite repeater o hub
Si tratta di due tipi di dispositvi hardware che lavorano a livello protocollare 1 (sico)
ˆ
ˆ
Quando è semplicemente necessario amplicare il segnale attenuato dai limiti sici del mezzo, possiamo utilizzare
un repeater che legge il segnale in ingresso e lo ritrasmette amplicato.
Quando dobbiamo connettere più stazioni allo stesso mezzo condiviso, con i cavi UTP è necessario utilizzare
un hub. Un hub è sostanzialmente un repeater con più porte. Un hub legge il segnale ricevuto su una porta
e lo ritrasmette su tutte le altre. In realtà c'è una piccola dierenza: quando un hub intercetta una collisione,
provvede ad emettere la sequenza di jamming su tutte le porte, cosa che il repeater non fa.
Un hub unisce domini di collisione e broadcast.
Interconnessione tramite bridge (e switch)
Un bridge è ben più evoluto di un hub. Esso infatti non si limita a ritrasmettere segnali a livello sico, ma si occupa
anche di leggere le trame informative di livello 2 che vengono ricevute.
Un bridge può interconnettere sia reti che
utilizzano lo stesso protocollo di livello 2, cioè lo stesso protocollo MAC, sia reti che utilizzano protocolli MAC diversi
(ad esempio 802.3u e 802.11g).
Sostanzialmente un bridge interconnette tra loro reti diverse per costituire un unico dominio di broadcast senza
tuttavia unire i domini di collisione.
Il bridge di tipo più diuso è il così detto transparent
bridge .
Esiste un altro tipo di bridge, utilizzato nelle
sole reti token ring, chiamato source routing bridge.
Tra i compiti del bridge abbiamo l'unicazione di reti con:
ˆ
ˆ
ˆ
Dierente frequenza di cifra
Dierente dimensione massima del campo informativo
Dierenti meccanismi di gestione di priorità e riscontro delle trame
Passiamo ora a vedere come funziona un bridge. Per sapere dove inviare le trame, ogni bridge dispone di una
di inoltro
tabella
dove memorizzare l'associazione tra l'identicatore di una stazione (l'indirizzo MAC) e la porta del bridge
attraverso cui la stazione può essere raggiunta. Per evitare la crescita incontrollata della tabella, ad ogni voce della
tabella è associato un campo età, che consente di eliminare dalla tabella quelle voci che non sono aggiornate entro
un intervallo di tempo massimo (per esempio 10 minuti).
La dierenza tra bridge e switch è abbastanza sottile.
Solitamente per switch si intendono dei bridge a più porte che lavorano solo su rete Ethernet 802.3 (e non tra diversi
tipi di reti) e solitamente ogni porta comunica con un solo host, e non con una rete a bus.
La tabella di inoltro potrebbe quindi apparire in modo simile a questo:
Porta
MAC address
Età
1
00:12:34:03:AB:01
3 min
4
01:44:AF:41:E7:02
1 min
Operazioni svolte dal bridge
Vediamo in che modo il bridge popola le proprie tabelle di inoltro.
Fase di inoltro
Dopo aver vericato l'assenza di errori nella trama per mezzo del campo FCS, il bridge esamina il
campo destinazione della trama stessa. Se la destinazione è presente nella tabella di inoltro, la trama viene inviata su
quella porta. Se invece la destinazione non è presente nella tabella di inoltro (oppure se l'indirizzo coincide con quello
di broadcast), la trama viene inviata su tutte le porte eccetto quella da cui è stata ricevuta.
Fase di apprendimento
La popolazione della tabella di inoltro avviene in modo automatico nella fase di apprendi-
mento, osservando il campo dell'indirizzo sorgente nella trama ricevuta. Se il mittente non è presente nella tabella di
inoltro, viene aggiunto. Se il mittente è già presente nella tabella, viene aggiornato il campo età e eventualmente
l'identicatore della porta, nel caso in cui fosse diverso da quello memorizzato precedentemente (ad esempio quando
una stazione si sposta da una rete all'altra).
25
MAC ooding
Esiste un tipo di attacco con il quale un possibile attaccante potrebbe riempire le tabelle di
inoltro di un bridge (rallentandone le prestazioni) emettendo molte trame con indirizzi sorgente fasulli.
Spanning tree
È abbastanza ovvio che, in presenza di diversi bridge possono venire a formarsi dei cicli (loop )
all'interno della rete.
Questi cicli devono essere evitati per eliminare il fenome dei broadcast storm (tempeste di
broadcast).
La rimozione del loop viene attuata mediante la costruzione dello spanning tree , che consiste nell'etichettare
opportunamente le porte dei bridge in modo che alcune di queste possano essere disabilitate, con il risultato di
identicare un albero che unisce tutti i bridge. Si ricorda in proposito che gli alberi sono per denizione aciclici.
Ciascun bridge è individuato mediante un unico identicatore (ID) e in particolare si denisce root-bridge
quello con ID più basso. Questo identicatore è ricavato a partire da un indirizzo MAC del bridge come vedremo
in seguito.
Le porte di ogni bridge possono assumere uno tra i seguenti ruoli:
ˆ root R
ˆ designated
ˆ blocked B
(
): la porta che individua il percorso più breve che porta dal bridge al root-bridge
(
(D): la porta che determina il percorso più breve della LAN interfacciata verso il root-bridge
): identica una porta disabilitata
Vediamo alcune caratteristiche:
ˆ
ˆ
ˆ
Un root-bridge è dotato solo di porte di tipo D.
Se più bridge interfacciano la stessa LAN, solo uno di essi ha una porta di tipo D verso la LAN
Ogni bridge ha solo una porta marcata come B.
La costituzione dello spanning tree è realizzata mediante lo Spanning Tree Protocol STP [IEEE
802.1D]. Questo
standard denisce lo scambio di apposite unità informative denominate Bridge Protocol Data Unit (BPDU), che
permettono di eleggere il root bridge e l'etichettatura delle porte di tutti i bridge.
Trama BPDU
(22 Byte, 176 bit)
Contenuto
Root Identier (ID)
Root Path Cost (RPC)
Bridge Identier (BI)
Port Identier (PI)
Byte
8
4
8
2
Vediamo la descrizione dei vari campi:
ˆ Root Identier, RI
(8 byte): identicatore (ID) del root bridge secondo il bridge emittente (BI) che invia la
trama BPDU. Questo identicatore è composto di due parti:
Bridge Priority (2 Byte): È un valore che può essere modicato dall'amministratore di rete per cambiare
le priorità dei vari birdge. Il valore di default è 32768.
MAC address (6 Byte)
ˆ Root Path Cost, RPC
(4 Byte): costo della via dal bridge
BI che emette la BPDU, al (presunto) root-
bridge RI, espresso con opportuna metrica. Una regola comunemente utilizzata consiste nel porre il costo di
1000
attraversamento di una rete con frequenza di cifra di C Mbit/s uguale al valore
C (ad esempio per una rete
Fast Ethernet si ottiene 10).
ˆ Bridge Identier, BI
(2 Byte): identicatore del bridge che emette la trama
BPDU. È suddiviso in due parti
uguali a quelle presenti nel campo root identier ˆ Port Identier, PI
(2 Byte): identicatore della porta attraverso cui la
BPDU viene trasmessa. È suddiviso
in due campi:
Port priority (1 Byte): È un valore che può essere modicato dall'amministratore di rete per cambiare le
priorità delle porte (vedremo in seguito a cosa può servire). Il valore di default è 128.
Port number (1 Byte): Identicatore della porta sica.
massimo 256 porte.
26
Essendoci 1 Byte abbiamo a disposizione al
Meccanismo di scambio delle trame BPDU
ˆ
Ogni bridge che riceve una BPDU ne aggiorna il valore y del campo RPC ricevuto sommandovi il costo n
dell'ultima rete attraversata per ottenere un nuovo vaore y+n del campo RPC. In caso di dubbi sul costo,
sommare 1 può essere una scelta adeguata.
ˆ
Inizialmente ogni bridge ritene di essere il root bridge, quindi invia in rete delle BPDU del tipo
x
(x, 0, x, −)
dove
è l'identicatore del bridge in questione. Un birdge che riceve su una porta una BPDU in cui il valore di RI è
più piccolo del proprio BI, capisce di non essere il root bridge e imposta il valore di RI ricevuto come valore
del root bridge e marca la porta come R. Nel caso di più BPDU ricevute, viene scelta quella con priorità più
il più piccolo valore di RPC ricevuto, a parità di questo con il più piccolo valore di BI ricevuto,
alta: con
a parità di questo con il pià piccolo valore di Port Identier del bridge stesso.
ˆ
Un bridge che non sia root bridge provvede a ritrasmettere le BPDU che riceve sulla porta R verso tutte le altre
porte D, aggiornando i campi BI, RPC e PI.
ˆ
Se la
BPDU emessa su una porta ha una priorità più bassa (secondo le stesse regole citate prima per la
elezione della porta root di un bridge), di almeno una delle BPDU ricevute sulla stessa porta, la porta viene
etichettata come B, e quindi disabilitata per elimitare il loop. In caso contrario la porta resta etichettata come
D.
ˆ
ˆ
ˆ
Attenzione: questo confronto di priorità viene fatto prima di aggiornare il valore RPC della trama BPDU!
Le porte R ricevono trame BPDU, non si invia su porte R.
Il root bridge etichetta tutte le sue porte come D e sarà l'unico ad inviare trame BPDU.
Le porte bloccate B non possono essere utilizzate per inviare, ma si può ricevere dati per aggiornarsi.
Lan virtuali (802.1Q)
Per svariati motivi, ad esempio di congestione della rete, di suddivisione in gruppi lavorativi etc.. Può essere utile
suddividere una rete locale in più reti locali virtuali, dette anche
VLAN (Virtual Local Area Network) .
Le VLAN sono assolutamente indipendenti dalla congurazione sica della struttura di una LAN. È quindi possibile
eettuare lo spostamento di una stazione da una LAN a un'altra senza dover operare alcuna modica di cablatura
sica della stazione stessa.
Esistono svariati modi per identicare una stazione all'interno di una LAN:
ˆ
ˆ
ˆ
In base alla porta del bridge/switch su cui arriva la trama
In base all'indirizzo MAC della stazione
Per il tipo di protocollo di livello 3 utilizzato
Lo standard 802.1Q ha fatto alcune piccole modiche alla trama standard Ethernet, al ne di poter meglio identicare
1
a quale rete appartiene una stazione. Vediamo la nuova struttura della trama :
Contenuto
Preamble
SFD
Destination Address
Source Address
VLAN prot.
Priority, CFI, VLAN ID
Byte
7
1
6
6
2
2
Length
LLC/PDU
Padding
FCS
2
0-1500
0-42
4
Vediamo nel dettaglio le aggiunte fatte dallo standard:
ˆ VLAN protocol
(2 Byte): In realtà questo campo, che ha sempre valore esadecimale 0x8100, permette di
identicare che si tratta di una trama di tipo 802.1Q. In una trama Ethernet normale infatti, al suo posto ci
sarebbe il campo Length, che non può superare il valore 1500, quindi grazie a questo campo aggiunto non c'è il
rischio di confondere una nuova trama 802.1Q con una vecchia 802.3
ˆ Priority
(3 bit): Permette di associare un livello di priorità ad un usso di traco a livello 2. In realtà questa
è considerabile una leggera violazione della straticazione protocollare, secondo la quale sarebbe più consono
gestire la qualità del servizio a livelli superiori. Dato che la modica della trama Ethernet è un evento molto
raro, qualcuno ha pensato di aggiungere questo campo.
ˆ Canonical Format Indicator, CFI
(1 bit): Specica, se posto ad 1, che la trama è di tipo Token Ring, ed è
quindi necessaria una elaborazione particolare.
ˆ VLAN Identier, VLAN ID
(12 bit): Indica la VLAN a cui appartiene la trama, con valori ammessi da 1 a
4094 (i valori 0x000 e 0xFFF sono riservati).
1È
stata qui rappresentata su due righe per motivi di impaginazione
27
In realtà molte delle apparecchiature non supportano ancora questo standard, ed è quindi necessario, sugli switch/bridge,
eettuare una conversione prima di consegnare la trama Ethernet. Poi, volendo guardare alla sicurezza, è meglio evitare
di ricevere trame 802.1Q dalle stazioni connesse agli switch, perché esse potrebbero ngersi parte di un'altra VLAN.
È meglio invece assegnare le VLAN a ciascuna porta sica dello switch (via software) e inviare trame Ethernet standard
ai client, utilizzando trame Ethernet 802.1Q solo per la comunicazione tra switch. Questa è una pratica abbastanza
diusa.
Congurazione delle VLAN sui sistemi GNU/Linux
Sui sistemi GNU/Linux (e tutti gli altri sistemi che implementano la suite di comandi iproute2 ) è possibile creare una
scheda di rete virtuale associata ad una determinata vlan con un comando tipo:
ip link add link eth2 name eth2.5 type vlan id 5
Con questo comando si crea una interfaccia di rete virtuale chiamata eth2.5 , che è in realtà la interfaccia sica eth2
per tutte le trame Ethernet con identicatore VLAN 5. Il comando dovrebbe occuparsi di abilitare automaticamente
il modulo del kernel 8021q che gestisce le trame 802.1Q.
Per cancellare l'interfaccia:
ip link delete eth2.5
Lo strato di rete (livello 3 ISO/OSI)
Qualità del servizio
Le esigenze di un usso dati possono essere svariate e sono caratterizzate principalmente da quattro parametri
fondamentali:
ˆ Adabilità
:
Il fatto di ricevere informazioni non corrotte ed essere sicuri che arrivino a destinazione.
Il
trasferimento di les, posta elettronica e pagine web è importante che sia adabile, mentre per applicazioni
multimediali audio/video, telefonia etc..
possiamo anche permetterci di ricevere dati parzialmente errati o
perdere qualche pacchetto.
ˆ Ritardo:
Abbastanza importante in quasi tutte le applicazioni eccetto la posta elettronica e la navigazione web,
tuttavia è essenziale per la telefonia. Un ritardo superiore al secondo nell'invio o ricezione dei dati rende una
telefonata pessima.
ˆ Jitter
: Si tratta della variabilità del ritardo. È molto importante per applicazioni come video in streaming, le
telefonate e le videoconferenze. Se un video è in ritardo anche di qualche secondo non è essenziale, è importante
però che questo ritardo resti costante. Se il ritardo continua a variare non sarà possibile neanche utilizzare dei
buer per compensare l'eetto del ritardo.
ˆ Banda
: Importante in tutte le applicazioni, anche se si fa sentire maggiormente su quelle audio/video.
Trac shaping
Esaminiamo la tecnica del trac shaping, cioè la uidicazione del traco di rete. Il trac shaping regola la velocità
media della trasmissione dei dati. Al contrario, i protocolli a nestra scorrevole studiati precedentemente limitano la
quantità di dati in transito in ogni momento, e non la velocità di trasmissione.
Tecnica isaritmica
Viene utilizzata principalmente per gestire l'accesso alla rete. Consiste nello stabilire che all'interno della rete debba
circolare un numero sso di pacchetti. Ogni nodo ha un certo numero di permessi. Ogni volta che invia una pacchetto
consuma un permesso, ogni volta che riceve un pacchetto acquisisce un nuovo permesso.
L'algoritmo leaky bucket
Non si tratta d'altro che di un sistema che permette di prendere un usso irregolare di pacchetti in ingresso e lo
trasforma in un usso regolare di pacchetti in uscita.
Si immagini un secchio con un piccolo buco sul fondo. Qualunque sia la velocità d'ingresso dell'acqua, e per quanto
possa essere irregolare, l'uscita di acqua dal foro sottostante sarà sempre costante. Se l'acqua raggiunge la cima del
secchio esce (viene scartata).
Lo stesso concetto viene applicato anche nel caso delle reti:
i pacchetti in ingresso
vengono accodati in una coda nita (con logica FIFO ) e man mano rilasciati in uscita a intervalli regolari. Se la coda
è piena i pacchetti in ingresso vengono scartati. Il problema dell'algoritmo leaky bucket è che si potrebbe aumentare
pericolosamente il ritardo dei dati che lo attraversano, che può risultare svantaggioso per molte applicazioni.
28
Nel leaky bucket c'è una coda di capacità
Ps
W
pacchetti, che riceve pacchetti dalla sorgente a frequenza di cifra
bit . I pacchetti vengono accettati a condizione di trovare spazio nella coda, altrimenti vengono scartati. La
s
1
coda si svuota a frequenza costante v : ogni
v secondi viene generato il permesso per trasmettere un pacchetto. Se ci
sono pacchetti in coda viene preso quello più vecchio e trasmesso, se la coda è vuota non si fa nulla.
Se ogni pacchetto trasmesso è grande
Lb
bit e la frequenza di svuotamento della coda è
v
, abbiamo che la frequenza
media di trasmissione in uscita dal nostro token bucket sarà
Ab max = Lp · v
Pacchetti a lunghezza variabile
In realtà questo algoritmo opera bene con pacchetti a lunghezza costante. Se i pacchetti sono a lunghezza variabile è
meglio operare lo stesso meccanismo con un conteggio di Byte anzichè di pacchetti.
Poichè ogni pacchetto deve essere trasmesso per intero, si pongono delle condizioni sul numero minimo di Byte.
L'algoritmo token bucket
Con la tecnica leaky bucket siamo in grado di controllare rigidamente la frequenza in uscita dei pacchetti indipendentemente dal fattore di burstness della sorgente. Questo signica che aumentiamo la latenza della connessione e se
dobbiamo mandare anche solo un pacchetto, esso verrà rallentato.
L'algoritmo token bucket si adatta meglio a sorgenti che emettono segnali bursty .
W , questa volta però
1
, quindi ogni
s
v secondi viene
generato un nuovo permesso e inserito all'interno della coda. Quando la coda è piena di permessi, non ne vengono
Come prima utilizziamo un secchio a capacità nita: una coda (sempre FIFO ) di capacità
la coda raccoglie dei permessi. Un permesso viene generato con la frequenza
v
permessi aggiunti altri.
Quando arriva un pacchetto dalla sorgente, esso viene immagazzinato in una memoria separata (sempre in logica
FIFO ) e viene trasmesso non appena c'è un permesso disponibile nella coda.
Questo meccanismo permette di accumulare permessi e trasmettere tanti pacchetti in successione quando c'è un
burst. C'è eventualmente anche la possibilità di accumulare
picco in uscita
Pb .
W
permessi e inviare quindi
W
pacchetti alla velocità di
In questo modo si riduce anche il ritardo del bucket.
Si presti attenzione al fatto che nell'algoritmo token bucket sono solo i permessi ad essere scartati, i pacchetti
possono potenzialmente essere acumulati senza limiti.
Anche in questo caso abbiamo:
Ab max = Lp · v
Ovviamente
Ab max
non può mai eccedere la frequenza di trasmissione sulla linea di uscita, cioè
Ab max ≤ Pb .
Pacchetti a lunghezza variabile
Anche con token bucket è possibile gestire i pacchetti a lungehezza variabile.
Per farlo è possibile trasformare il
permesso per il pacchetto in un permesso per un certo numero di byte.
Politiche store and forward e cut-through Ci sono due modalità in cui può operare un algoritmo di tipo bucket.
In modalità store
and forward la trasmissione di un pacchetto non può avere inizio prima che tutti i suoi bit
siano stati ricevuti.
In modalità cut-through , invece, la trasmissione avviene senza nessun ritardo. Si noti che in questo secondo
caso la modalità può essere applicata
solo se la frequenza di uscita non è superiore alla frequenza di ingresso.
Altri metodi di trac shaping
Solitamente si preferisce adottare insieme token bucket e leaky bucket mettendoli in cascata uno dopo l'altro.
Protocollo IP
Principi generali dello strato network di Internet2
ˆ Assicurarsi che funzioni
ˆ Mantenerlo semplice
ˆ Fare scelte chiare
: non ultimare il progetto o lo standard no a quando non è stato testato a dovere.
: eliminare le funzionalità non strettamente necessarie.
: Se la stessa cosa può essere fatta in modo diversi, sceglierne uno. Fare la stessa cosa in
due modi signica andare a cercare guai.
2 Riassunto
dei punti citati da A.Tanenbaum in Reti di calcolatori
29
ˆ Sfruttare la modularità
ˆ Aspettarsi l'etereogenità
: separare il progetto in varie parti distinte di modo da non dover modicare tutto.
: aspettarsi l'utilizzo di diversi tipi di hardware, diversi tipi di applicazioni, attrez-
zature di trasmissione...
ˆ Evitare opzioni e parametri statici
: Se i parametri sono inevitabili, invece di fare scelte sse è meglio lasciare
che trasmettitore e ricevitore concordino tra loro un valore.
ˆ Mirare ad un buon progetto, non è necessario che sia perfetto
: Non è necessario progettare qualcosa
che funziona sempre bene, ma almeno funziona bene nella stragrande maggioranza dei casi. Rari casi speciali
gestiti male sono poco rilevanti.
ˆ Essere rigorosi nella trasmissione e tolleranti nella ricezione
: Inviare pacchetti che si attengono rig-
orosamente agli standard ma aspettarsi di tutto in ingresso.
ˆ Pensare alla scalabilità
: Se il sistema deve poter gestire sia pochi host che milioni o miliardi in modo ecacie.
Il carico deve essere il più distribuito possibile.
ˆ Considerare le prestazioni e i costi
: Se una rete ha scarse prestazioni e/o alti costi nessuno la utilizzerà.
Caratteristiche generali di IP
ˆ
best eort (perciò non garantito e connection-less )
traspostare i datagrammi inviati da una sorgente a una destinazione, senza tener conto della posizione
Lo scopo dello strato network è fornire un mezzo di tipo
per
delle macchine (che possono trovarsi su reti diverse) e della eventuale presenza di reti intermedie (poste tra le
ˆ
ˆ
macchine).
A dierenza della maggior parte dei protocolli di strato network più vecchi, IP è stato progettato n dall'inizio
pensando alla
comunicazione tra reti.
Lo strato di trasporto prende i ussi da inviare e li sperara in datagrammi che passa allo strato network. In
teoria ogni datagramma può essere grande
64KB, ma in realtà nella pratica la dimensione dei datagrammi
non supera i 1500 byte (per poter essere incapsulata in un frame Ethernet).
ˆ
ˆ
Lo strato network si concentra
sull'instradamento delle informazioni.
Ogni datagramma che attraversa Internet può essere frammentato in unità più piccole e a destinazione deve
essere riassemblato per riottenere il datagramma originale.
La consegna dei datagrammi non è garantita. Non c'è nessun meccanismo di riscontro
Struttura del datagramma IP (versione 4 - IPv4)
Version (4 bit)
HLEN (4 bit)
32 bit
Service type (8 bit)
Identication (16 bit)
Time to live (8 bit)
Total length (16 bit)
Flags (3 bit)
Protocol (8 bit)
Fragmentation oset (13 bit)
Header checksum (16 bit)
Source IP address (32 bit)
Destination IP address (32 bit)
Options
Data
La parte ssa dell'instazione è lunga 20 Byte, estendibile con opzioni. Viene trasmessa in ordine big endian: da
dinistra a destra, a partire dal bit di ordine più elevato del campo version.
I campi dell'header sono:
ˆ Version
(4 bit): Tiene traccia della versione del protocollo usato per il datagramma.
Grazie a questa infor-
mazione è possibile pensare nuove versioni del protocollo. La versione attualmente più utilizzata è la 4, anche
se è in corso una migrazione alla versione 6 (IPv6) a causa della scarsità di indirizzi. IPv5 è stato un protocollo
sperimentale di streaming in tempo reale, mai utilizzato nella realtà.
ˆ HLEN
(4 bit): Viene utilizzato per indicare la lunghezza dell'instazione espressa in parole di 32 bit (poiché
essa non è costante a causa del campo opzioni). Il valore massimo di questo campo è 15, quindi la dimensione
massima dell'instazione è 60 Byte, che escludendo i 20Byte ssi si traduce in un massimo di 40Byte di opzioni.
In realtà alcune opzioni (come ad esempio quella record route ) necessitano più di 40 Byte, quindi sono costretti
ad ignorare questo campo.
ˆ Service type
(8 bit): Era utilizzato per distinguere diverse classi di servizio, sono ammesse diverse combinazioni
di adabilità e velocità.
30
Originariamente era strutturato come segue:
Precedence (3 bit)
* Precedence
*D
*T
*R
* Not used
(8 bit)
D
T
(3 bit):
R
Not used (2 bit)
indica la priorità del datagramma.
Priorità 0 signicava pacchetto normale,
priorità 7 signicava pacchetto di controllo.
(1 bit): Signica minimize delay
(1 bit): Signica maximize throughtput
(1 bit): Signica maximize raliability (massimizza l'adabilità)
(2 bit): Sono due bit inutilizzati.
È stato poi aggiunto anche il bit C minimize cost :
Precedence (3 bit)
(8 bit)
D
T
R
C
Not used (1 bit)
In seguito, IETF ha deciso di cambiare il signicato del campo:
(8 bit)
Service class (6 bit)
Not used (2 bit)
Dove il campo service class identica il tipo di servizio.
Nella pratica i router di Internet ignorano completamente il campo Service type.
Viene sfruttato solo
all'interno delle reti locali o con gli host nali.
ˆ Total length
(16 bit): tiene conto di tutto il contenuto del datagramma, intestazione e dati. Grazie a questo
campo è possibile capire dove terminano i dati. La lunghezza massima è 65535 Byte. Questo limite superiore
oggi è tollerabile, ma le reti gigabit del futuro potrebbero trovarlo limitante.
ˆ Identication
(16 bit): Serve all'host di destinazione per determinare a quale datagramma appartiene il fram-
mento appena arrivato. Tutti i frammenti di uno stesso datagramma contengono lo stesso valore identication.
ˆ Flags
(3 bit):
3 bit
Not used
D
M
Not used (1 bit)
D (1 bit): Do not fragment (non frammentare).
Indica ai router di non dividere in frammenti il
datagramma perchè la destinazione non è in grado di di rimettere insieme i pezzi.
M (1 bit): More fragments (altri frammenti).
Non può essere usato per l'ultimo frammento di un
datagramma frammentato (ovviamente).
ˆ Fragment oset
(13 bit): Indica la posizione del frammento nel datagramma corrente. Tutti i frammenti tranne
l'ultimo in un datagramma devono essere multipli di 8 byte, che è la dimensione del frammento elementare. Poiché
ci sono 13 bit, ci sono al massimo 8192 frammenti per ogni datagramma.
ˆ Time To Live, TTL
(8 bit): È un contatore che viene utilizzato per limitare il tempo di vita di un pacchetto.
Ogni router su cui passa il datagramma decrementa di una unità questo valore. Nello standard originale questo
valore veniva decrementato ogni secondo se il datagramma stazionava su un router. Nella realtà al giorno d'oggi
viene solo decrementato negli hop che attraversa. Quando questo valore raggiunge lo zero il pacchetto deve essere
scartato. Questa funzionalità impedisce a datagrammi errati di girare a vuoto per sempre in Internet (evento
che potrebbe facilmente accadere in caso di danneggiamento delle tabelle di routing).
ˆ Protocol
(8 bit): È un identicatore del protocollo di trasporto utilizzato all'interno dei dati trasportati dal
pacchetto IP. TCP e UDP sono delle possibilità. Un'altra è ad esempio ICMP. La numerazione dei protocolli è
univoca e assegnata dall'ente IANA. Con 8 bit ci sono 256 possibili protocolli di trasporto. Di seguito una lista
dei più famosi:
Nome
Valore decimale
0
Riservato
RFC
/
1
ICMP
RFC792
2
IGMP
RFC1112
4
IP (per incapsulazione IP over IP)
/
5
TCP
RFC793
8
EGP
RFC888
9
IGP
/
17
UDP
RFC768
41
SIP
/
...
...
...
31
ˆ Header checksum
(16 bit): È un codice a controllo di errore che verica la correttezza della sola intestazione
(non dei dati). Questo checksum aiuta a rilevare errori generati da locazioni di memoria difettose nel router. Il
metodo di calcolo è analogo a quello utilizzato in TCP e UDP, si rimanda ai paragra successivi sul metodo di
calcolo. Si noti poi che questo checksum deve essere ricalcolato da ogni router su cui transita il pacchetto, dal
momento che almeno un campo cambia sicuramente (Time To Live ).
ˆ Source IP address
(32 bit): È l'indirizzo sorgente dell'host che ha trasmesso il pacchetto. Gli indirizzi IP sono
univoci in tutta Internet.
ˆ Destination IP address
(32 bit): È l'indirizzo sorgente dell'host a cui è destinato il pacchetto. Gli indirizzi
IP sono univoci in tutta Internet.
ˆ Options
: È un campo di estensione dell'header per aggiungere delle opzioni. Tra le più note ci sono:
Record route option: costringe ogni router che riceve il pacchetto IP ad aggiungere il proprio indirizzo IP
in coda ad una lista di indirizzi di transito all'interno dell'header. Questa opzione è solitamente supportata
dai router di Internet. Il formato di questa opzione è il seguente:
Code 7
Length
00000111
(Total length)
Pointer
First IP address (32 bit)
...
Last IP address (32 bit)
Strict source routing option: Si specica all'interno del pacchetto IP inviato, l'intero percorso che deve
seguire per arrivare a destinazione. Il formato di questa opzione è il seguente:
Code 137
Length
10001001
(Total length)
Pointer
First IP address (32 bit)
...
Last IP address (32 bit)
Loose source routing option: Si specica all'interno del pacchetto IP inviato, alcuni punti di passaggio
forzati che il pacchetto deve seguire per arrivare a destinazione:
Code 131
Length
10000011
(Total length)
Pointer
First IP address (32 bit)
...
Last IP address (32 bit)
Timestamp option: Viene richiesto ad ogni host su cui transita il pacchetto IP di inserire in coda ad una
lista il proprio indirizzo IP ed un timestamp.
Code 68
Lenght
01000100
(Total lenght)
Pointer
O-Flow
Flags
(4 bit)
(4 bit)
First IP address (32 bit)
...
Last IP address (32 bit)
Security option: era stata introdotta una opzione per specicare che dei dati erano condenziali (ad
esempio dati militari,...) in realtà non è mai stata usata ed è attualmente ignorata.
Struttura del datagramma IPv6
Nuova versione, introdotta principalmente per ovviare al problema della mancanza di indirizzi IPv4, ma anche per
semplicare e migliorare il datagramma IP.
Version (4 bit)
(32 bit)
Trac class (8 bit)
Payload lenght (16 bit)
Flow label (20 bit)
Next header (8 bit)
Hop limit (8 bit)
Source IP address (128 bit)
Destination IP address (128 bit)
Extension headers (variable)
32
ˆ Version
ˆ Trac class
(4 bit): Specica la versione del protocollo IP utilizzata, in questo caso 6.
(8 bit): Specica il tipo di servizio distinguendolo in varie classi: dati che necessitano basso ritardo,
alto throughtput,etc..
ˆ Flow label
(20 bit): Viene utilizzato per specicare ai router che è necessario un trattamento speciale per il
pacchetto. Può essere utilizzato per specicare particolari modalità di trattamento dei datagrammi.
ˆ Payload lenght
(16 bit): Indica la lunghezza del payload del datagramma in numero di Byte. Quindi il payload
può essere lungo no a 65535 Byte.
A diernza di IPv4, i 40 Byte dell'intestazione non sono conteggiati nel
calcolo della lunghezza.
ˆ Next header
(8 bit): È un campo che serve a specicare il tipo di campo che segue i 40 Byte di intestazione.
È infatti possibile aggiungere opzioni/estensioni all'intestazione, una incatenata dopo l'altra. L'ultima di queste
(o nel caso in cui non ce ne fossero) deve avere in next header un identicatore che specica cosa contiene il
payload (TCP/UDP/...)
ˆ Hop limit
(8 bit): Denisce il numero di salti che possono essere fatti per raggiungere la destinazione. Ogni
host su cui transita il pacchetto decrementa questo valore. Funziona come il vecchio TTL di IPv4.
ˆ Source address/Destination address
ˆ Extension headers:
(128 bit): indica l'indirizzo IP sorgente/destinazione.
Header
Tipo di informazione
Hop-by-hop options
Richieste per elaborazione nodo per nodo
Routing
Percorso di rete richiesto per il datagramma
Fragment
Tipo di frammentazione eettuata (dal mittente)
Destination options
Informazioni addizionali per la destinazione
Authentication
Informazioni di autenticazione sul mittente
Encapsulating security payload
Informazione di sicurezza per la destinazione
Nella progettazione di IPv6 si è deciso di rimuovere il campo checksum, poiché molto costoso sui router e
relativamente inutile (altri controlli vengono già fatti a livelli superiori).
Non viene utilizzata più la frammentazione. Tutti gli host IPv6 compatibili devono determinare dinamicamente la
dimensione del datagramma da utilizzare. La
dimensione minima del datagramma è stata portata a 1280 Byte.
Quando un router non è in grado di inoltrare un pacchetto troppo grande, invia un messaggio di errore al mittente
(ICMPv6 packet too big ) al posto di frammentarlo. Solo la sorgente può frammentare il datagramma. Probabilmente
si continuerà ad utilizzare
1500 Byte come dimensione massima di modo da contenere l'intero pacchetto in una trama
Ethernet.
Una sotto-opzione che fa parte dell'opzione hop-by-hop options è l'intestazione estesa per grandi datagrammi
(jumbogrammi). Quando è utilizzata, il campo payload lenght nell'intestazione è impostato a 0. La struttura di questa
opzione è:
(32 bit)
next header
0
194
4
jumbo payload lenght
Questa opzione è importante per alcune applicazioni che devono inviare gigabytes di dati attraverso Internet.
Indirizzamento IPv4
Il protocollo IP (versione 4) adotta un meccanismo di indirizzamento a 32 bit. Ogni host connesso in rete è identicato
da uno o più indirizzi IP. In teoria non possono esistere su Internet due host con lo stesso indirizzo IP. Ogni indirizzo IP
è formato da una parte che rappresenta l'identicatore di rete (net-id ) e da una parte che rappresenta l'identicatore
dell'host (host-id ). Possiamo pensare a queste due parti come a un presso e un susso.
Solitamente per comodità gli indirizzi IP vengono rappresentanti con la cosiddetta notazione decimale puntata del
tipo x.y.z.w, in cui ognuno di questi quattro elementi (anche detti teti a volte) può assumere un valore tra 0 e 255. In
eetti ognuno dei quattro elementi decimali dell'indirizzo, rappresenta un byte. Per esempio l'indirizzo esadecimale
C0290614 corrisponde all'indirizzo 192.41.6.20, decisamente più comodo da ricordare.
Indirizzamento per classi
Tutti i possibili indirizzi IP (che sono
232
nella versione 4 di IP), sono stati suddivisi per comodità in cinque
classi, che
si dierenziano per la diversa congurazione e lunghezza delle due parti net-id e host-id. Questo tipo di suddivisione
non è più attualmente in uso (vedremo tra poco il metodo utilizzato ad oggi), ma è didatticamente molto utile a
comprendere il resto.
33
°
(1
Byte)
°
(2
(32 bit)
Byte)
net-id
°
(3
Byte)
°
(4 Byte)
host-id
Classe A
0
Classe B
1
0
Classe C
1
1
0
Classe D
1
1
1
0
indirizzi multicast
Classe E
1
1
1
1
riservato per usi futuri
net-id
host-id
net-id
host-id
Nel dettaglio:
ˆ Classe A
(0.0.0.0 - 127.255.255.255): 7 bit di net-id, preceduti da un bit sso sempre posto a 0.
Denisce
poche reti (125 quelle utilizzabili su Internet), ognuna contenente un grande numero di host (al massimo
16'777'214 host).
Gli indirizzi compresi in 0.0.0.0 - 0.255.255.255 sono utilizzati per identicare la rete stessa
Gli indirizzi compresi in 127.0.0.0 - 127.255.255.255 sono utilizzati come indirizzi di loopback , non possoo
essere utilizzati come indirizzi di rete esterni, sono riservati per le comunicazioni locali internet all'host.
ˆ Classe B
(128.0.0.0 - 191.255.255.255): 14 bit di net-id, preceduti da due bit ssi, sempre posti a 1 0. Denisce
16'384 reti (16'368 quelle utilizzabili su Internet), ciascuna contenente al massimo 65534 host.
ˆ Classe C
(192.0.0.0 - 223.255.255.255): 21 bit di net-id, preceduti da tre bit ssi, sempre posti a 1 1 0. Denisce
molte reti (2'096'896 quelle utilizzabili su Internet), ciascuna contenente solo 254 host.
ˆ Classe D
(224.0.0.0 - 239.255.255.255): Si tratta di indirizzi riservati per servizio di tipo multicast.
Questi
indirizzi iniziano sempre con una parte ssa composta dai quattro bit 1 1 1 0.
ˆ Classe E
(240.0.0.0 - 255.255.255.255): Si tratta di indirizzi riservati per utilizzi futuri. Sono sempre preceduti
da una parte ssa composta dai quattro bit 1 1 1 1.
Indirizzi speciali
In ciascuna rete, ci sono due sussi host-id che non vengono utilizzati mai. L'indirizzo composto da tutti zeri nel
campo host-id è un identicatore per riferirsi alla rete stessa. L'indirizzo composto invece da tutti 1 nel campo host-id
è un identicatore per riferisti a tutti gli host di quella rete (indirizzo di broadcast ). Questi due speciali indirizzi non
possono essere assegnati a host sici della rete. Quando facciamo i calcoli sul numero di host disponibili dobbiamo
quindi sempre assicurarci di sottrarli dal conteggio. Inoltre l'indirizzo 255.255.255.255 è un indirizzo di broadcast per
riferirsi a tutti gli host della rete stessa (nel caso in cui non si conosca l'indirizzo della rete ad esempio). Spesso gli
amministratori di rete disabilitano questo indirizzo su alcuni protocolli (ex: ICMP ping a 255.255.255.255 spesso è
bloccato dal router).
L'indirizzo 0.0.0.0 è invece utilizzato per identicare l'host sorgente di una connessione e la rete corrente, quando
non ne si conosce l'indirizzo.
Indirizzi privati
Esistono poi una serie di indirizzi delle classi A,B e C che non possono essere utilizzati su Internet, perché riservati
ad utilizzo privato. In una rete interna di una azienda potrebbero essere utilizzati per sfruttare il protocollo IP pur
non avendo assegnati degli indirizzi. In teoria questi indirizzi non sono pensati per poter essere connessi ad Internet,
tuttavia come vedremo in seguito, mediante la tecnica del NAT è possibile farlo.
ˆ
ˆ
ˆ
Blocco
Indirizzo iniziale
Indirizzo nale
1
10.0.0.0
10.255.255.255
Il
2
172.16.0.0
172.31.255.255
3
192.168.0.0
192.168.255.255
primo blocco è composto da 16'777'216 indirizzi della classe A, di cui 16'777'214 utilizzabili (escludendo
l'indirizzo di rete e quello di broadcast).
Il
secondo blocco è composto da 16 reti di classe B adiacenti tra loro. Ciascuna di queste 16 reti può contenere
65534 host, per un totale di 1'048'544 host nelle 16 reti.
Il
terzo blocco è composto da 256 reti di classe C adiacenti tra loro. Ciascuna di queste 256 reti può contenere
254 host, per un totale di 65'024 host nelle 256 reti. (Come vedremo, utilizzando una maschera /16 possiamo
arrivare ad avere 65534 host in questo blocco)
34
Registers
L'univocità degli indirizzi IP in Internet è garantita da una organizzazione centrale denominata
Assigned Number Authority
IANA - Internet
che provvede ad assegnare gli indirizzi. Poiché tutti gli interessati ad ottenere un
indirizzo dovrebbero contattare la IANA, è stata istituita una gerarchia di registers, cioè di organizazioni che ricevono
dalla IANA grandi blocchi di indirizzi, che risuddividono in blocchi più piccoli da assegnare.
Nome
Aree gestite
ARIN
Nord America
RIPE
Europa, Medio Oriente, Asia centrale
APNIC
Asia e Pacico
LACNIC
America Latina
AFRINIC
Africa
Subnetting e routing
Il meccanismo di indirizzamento per classi descritto precedentemente, si è rivelato negli anni particolarmente rigido.
Può succedere ad esempio che una università prenda una classe B di indirizzi per il dipartimento di Ingegneria Informatica. Quando anche il dipartimento di Ingegneria Elettronica desidera accedere ad Internet si potrebbe estendere
la LAN mettendo una serie di ripetitori. A breve però il limite dei quattro ripetitori verrebbe raggiunto. Servirebbe
un'altra rete separata ma l'università ha già abbastanza indirizzi con la sua classe B. La soluzione consiste nel dividere
internamente la rete in più parti, chiamate subnets.
Nella RFC950 è stato proposto il meccanismo di subnetting, che consente di suddividere una rete generica
in più sottoreti, la cui struttura resta un fatto interno all'organizzazione proprietaria e non deve essere comunicata
ad altri.
La denizione di sottoreti all'interno di una rete, viene fatta utilizzando un identicatore chiamato netmask, che
accompagna l'indirizzo IP dell'host, e gli permette di capire quali sono gli indirizzi IP che fanno parte della sua
sottorete.
Una netmask è un indirizzo IP, che inizia con tutti 1 nel campo che corrisponde al presso di rete net-id e ha tutti
0 nel campo che corrisponde all'host-id.
Supponiamo ad esempio di prendere una classe B con indirizzo 131.175.0.0 e di volerla suddividere in 256 reti.
Anche se si tratta di un indirizzo di classe B e non C, possiamo aggiungere una netmask 255.255.255.0 su ciascun host
della nostra organizzazione. La dierenza tra la net-id denita dalla classe e la net-id denita con la netmask, è
chiamata subnet-id. In questo esempio abbiamo una subnet-id di 8 bit.
Spesso per semplicità, dato che le netmask sono una sequenza di uni consecutivi da sinistra a destra, si utilizza
anche una notazione /n, dove n è il numero di bit posti a uno osservando la netmask da sinistra verso destra. La
netmask del precedente esempio è dunque anche rappresentabile con /24.
Seguono delle netmask standard che corrispondono a quelle utilizzate normalmente per l'indirizzamento a classi,
se la netmask non viene impostata manualmente.
Notazione /n
Classe
Netmask decimale
Netmask binaria
A
255.0.0.0
11111111 00000000 00000000 00000000
/8
B
255.255.0.0
11111111 11111111 00000000 00000000
/16
C
255.255.255.0
11111111 11111111 11111111 00000000
/24
L'adozione di una netmask permette ad host e router di individuare velocemente se un indirizzo IP sorgente/destinazione
fa parte o meno della propria sottorete. È suciente infatti eseguire un'operazione di AND logico tra i bit della netmask e l'indirizzo ricevuto. In questo modo si isola l'indirizzo della rete (escludendo la parte host-id ) ed è possibile
confrontarlo. Questa è l'operazione fatta di norma dai router per l'instradamento dei pacchetti.
Routing per subnet
Una tabella di routing potremmo pensarla organizzata in questo modo (vedremo di seguito quella più realistica):
Destination
Netmask
Flags
Reference
Use
Gateway
Interface
131.175.21.0
255.255.255.0
U
0
0
131.17.123.254
eth0
131.175.16.0
255.255.255.0
U
0
0
131.17.78.254
eth1
131.56.0.0
255.255.0.0
U
0
0
131.17.15.254
eth2
131.155.0.0
255.255.0.0
U
0
0
131.17.15.254
eth2
0.0.0.0
0.0.0.0
UG
0
0
131.17.123.254
eth0
Sappiamo inoltre la situazione delle
interfacce del router:
Interface eth0
IP address
131.17.123.1
Netmask
255.255.255.0
Interface eth1
IP address
131.17.78.1
Netmask
255.255.255.0
35
Interface eth2
ˆ
ˆ
IP address
131.17.15.12
Netmask
255.255.255.0
Per inoltrare un pacchetto, il router deve capire se questo appartiene ad una delle sottoreti delle sue interfacce.
In caso contrario consulterà la sua tabella di routing.
Quando arriva un pacchetto viene estratto il suo indirizzo IP di destinazione e per ogni interfaccia di rete del
router viene fatta l'operazione:
(IP
destinazione) AN D
(Netmask
interfaccia)
= Rete
di destinazione
E la rete di destinazione viene confrontata con la rete dell'interfaccia, che può essere (pre)calcolata facendo:
(IP
ˆ
interfaccia)
AN D (Netmask
interfaccia)
= Rete
interfaccia
Se le due reti coincidono, allora la subnet è la stessa e si procede all'inoltro diretto del pacchetto
Se il confronto con le reti delle interfaccie non ha successo, si procede in modo analogo confrontando la tabella
di routing voce per voce:
(IP
destinazione) AN D
(Netmask
interfaccia)
= Rete
di destinazione
Confrontato con:
(Destination
regola n) AN D
(Netmask
regola n)
= Rete
della regola n
In caso aermativo si invia il pacchetto a questo hop successivo che si preoccuperà di inoltrarlo a sua volta.
Per inviare il pacchetto all'hop successivo si opera a livello 2. Ad esempio se i due router sono collegati da
rete Ethernet, si invia una trama Ethernet mettendo come destinazione il MAC address del router indicato
ˆ
ˆ
ˆ
come gateway e inserendo come PDU il pacchetto IP (aggiornando il campo TTL ovviamente).
Può capitare che due regole della tabella di routing soddino l'uguagianza. In questo caso viene scelta la rete
con la netmask più lunga.
L'ultima regola della tabella è la regola di default, specica a chi inoltrare tutti i pacchetti che non si sa come
gestire. Viene utilizzata solo se nessuna delle altre regole è soddifatta, poiché la lunghezza della sua netmask è
zero.
Spesso per gestire il routing verso la rete locale e per evitare di ricalcolare la rete di ogni interfaccia, si aggiunge
una riga alla tabella di routing per ogni interfaccia. Ad esempio in questo caso per l'interfaccia eth0 avremmo
avuto una riga nella tabella di routing del tipo:
ˆ
Destination
Netmask
Flags
Reference
Use
Gateway
Interface
131.17.123.0
255.255.255.0
U
0
0
0.0.0.0
eth0
Riguardo agli altri campi non analizzati della tabella di routing:
Flags: informazioni aggiuntive sulla regola di route
*U
*G
*H
*DM
: Router attivo
: Destinatario fuori dalla sottorete
: destinatario host specico
/
: reindirizzamento eettuato con ICMP (vedi nella sezione seguente su ICMP)
Reference: Numero di connessioni lungo il percorso
Use: Numero di utilizzi di questa regola
Interface: Nome dell'interfaccia su cui inoltrare il pacchetto (utile se si utilizzano gli stessi indirizzi su due
interfaccie distinte)
Si noti che questo meccanismo di subnetting non aumenta il numero di host sopportabili da Internet, ma aumenta
solo la essibilità della suddivisione in classi, ritenuta oggi troppo rigida e penalizzante.
Variable Length Subnet Mask (VLSM)
Prima abbiamo parlato di netmask supponendo che ciascun host all'interno della nostra rete utilizzi la stessa.
In
realtà è possibile partizionare la rete con diverse netmask di lunghezza variabile. Questo è accompagnato da maggiore
complessità nella divisione della rete e nella gestione delle tabelle di routing ma permette una divisione più eciente
degli indirizzi.
36
Classless Inter-Domain Routing (CIDR)
Il modo in cui sono suddivise le classi porta ad uno spreco enorme di indirizzi. Organizzazioni non certe della propria
espansione, compravano classi B anche per collegare pochi host, spaventate dalla possibilità di esaurire una eventuale
classe C.
Per introdurre una maggiore essibilità si è deciso di abbandonare la struttura a classi e introdurre il Classless
Inter-Domain Routing, che estende il concetto di subnetting su tutta l'Internet.
Gli indirizzi IP assegnati ad una organizzazione vengono quindi deniti da: l'indirizzo più basso del blocco e il
numero di bit più signicativi comuni a tutti gli indirizzi (l'n della notazione /n ).
Utilizzando CIDR su Internet, non solo i router delle reti interne devono tenere conto delle netmask, ma anche i
router di tutta Internet (che prima funzionavano invece in modo molto più semplice basandosi sulle classi).
Supernetting
Utilizzando CIDR è possibile nalmente assegnare liberamente indirizzi.
Quando vengono utilizzati una serie di
indirizzi di classe C ad esempio per creare una rete più grande mediante CIDR, si dice che si sta facendo una operazione
di supernetting, perché si riuniscono, ad esempio,più classi in una classe più grande.
Network Address Translation
Poiché gli indirizzi IP(v4) iniziano a mancare e a diventare costosi, già dall'inizio degli anni 90 è stata introdotta
la tecnica del NAT. Una organizzazione spesso non ha tutti gli host collegati ad internet.
È quindi possibile farsi
assegnare un numero di indirizzi IP inferiore a quelli realmente necessari. A questo punto possiamo utilizzare indirizzi
IP privati all'interno della nostra organizzazione e mappare quando necessario un indirizzo pubblico su quell'indirizzo
privato. Il router di frontiera dovrà memorizzare l'associazione indirizzo pubblico-indirizzo privato e quindi occuparsi
di prendere i pacchetti IP provenienti/diretti al nostro host e modicare l'indirizzo IP sorgente/destinazione all'interno
del pacchetto IP in ingresso/uscita.
In realtà spesso si ha invece bisogno di collegare più macchine e si hanno a disposizione solo pochi indirizzi IP. La
soluzione in questo caso (molto più utilizzata della precedente nella realtà) è il
Translation )
NAPT (Network Address Port
.
Sapendo che la maggior parte delle operazioni in rete viene svolta mediante i protocolli di trasporto TCP e UDP
(che hanno entrambi dei numeri di porta sorgente e destinazione), si possono collegare molti host dietro ad un unico
indirizzo IP. Il meccanismo del NAPT è il seguente:
ˆ
Quando un pacchetto in uscita dall'host interno alla nostra rete, attraversa il router di frontiera per andare su
Internet, il router:
Osserva i campi source port del pacchetto TCP/UDP e source address del pacchetto IP
Cerca un numero di porta non attualmente occupato sul router
Modica il pacchetto TCP/UDP con un proprio numero di porta sorgente pubblica e salva in una tabella
con la porta sorgente privata, l'IP privato dell'host interno e l'indirizzo IP di destinazione
ˆ
Modica l'indirizzo IP sorgente del pacchetto sostituendolo con l'indirizzo IP pubblico del router
Quando un pacchetto in ingresso viene ricevuto da Internet dal router di frontiera, ed è diretto ad un host interno
alla rete, il router:
Osserva i campi porta destinazione del pacchetto TCP/UDP, l'indirizzo IP sorgente e verica se è in corso
una connessione verso quell'indirizzo
In caso aermativo viene sostituita la porta destinazione del pacchetto TCP/UDP in ingresso con la porta
sorgente privata salvata prima in tabella
Modica lindirizzo IP destinazione del pacchetto sostiuendolo con l'indirizzo IP privato dell'host a cui è
diretto.
La tabella del NAPT è qualcosa simile alla seguente:
ˆ
Indirizzo IP privato
Porta sorgente privata
Indirizzo IP destinazione
Porta sorgente NAPT
10.0.0.2
1000
131.175.12.1
502
10.0.0.3
1054
131.154.3.22
554
Utilizzando il NAPT sono possibili no a 65536 (numero di porte disponibili) connessioni contemporanee per ogni
indirizzo IP pubblico utilizzato dal router che eettua il NAPT. Questo fattore può essere limitante se utilizziamo
un solo indirizzo IP per un intero ateneo o una azienda, perché quando tutti gli host stanno contattando
ˆ
contemporaneamente degli host esterni, potremmo esaurire le porte a disposizione.
I pacchetti ICMP (descritti in seguito) possono essere trasmessi tramite NAPT sfruttando alcune proprietà sui
numeri di sequenza e altro...
37
Perché il NAPT non andrebbe utilizzato (approfondimento )
ˆ NAPT viola la più importante regola di straticazione dei protocolli
, secondo la quale un protocollo
di livello k non dovrebbe fare nessuna assunzione riguardo a protocolli di livello k+1. Un router normalmente
dovrebbe solo prendere i pacchetti IP che arrivano ed instradarli, invece con il NAPT deve anche andare a
controllare il carico del pacchetto IP per vericare il numero di porta, cosa che non dovrebbe fare per le regole
sulla straticazione dei protocolli. Questo causa inoltre overhead non previsto su un apparato che dovrebbe solo
instradare e invece deve iniziare anche a tenere traccia di tutte le connessioni che lo attraversano.
ˆ NAPT viola il modello gerarchico di IP
, che aerma che ogni macchina collegata in rete è identicata in
modo univoco a livello mondiale da uno o più indirizzi IP.
ˆ I processi su Internet non sono obbligati ad utilizzare TCP e UDP
. Se un utente dietro ad una NAT
decide di utilizzare un diverso protocollo di livello 4 non potrà funzionare, perchè il NAPT si basa sull'idea di
controllare i numeri di porta, che in alcuni protocolli di livello 4 potrebbero non esistere. ICMP, il protocollo
per il controllo del funzionamento di IP e per la diagnostica di rete, non utilizza numeri di porta ed è stato
necessario implementare nei router che fanno il NAPT dei particolari workaround per permettere di inviare e
ricevere i pacchetti correttamente. Questo ovviamente è tutto altro carico sulle spalle del router.
ˆ Il numero di connessioni contemporanee diminuisce
. Poichè il router del NAPT deve allocare una delle sue
porte sorgente per ciascuna connessione, essendo le porte utilizzabili
216
(in realtà le prime 4096 sono riservate ad
usi speciali), non possiamo avere più di 61440 connessioni contemporanee per ogni indirizzo IP pubblico utilizzato
dal router. Possono sembrare una valanga ma se usiamo un solo IP per la rete di una azienda o una università e
magari qualcuno inizia a fare port-scanning o altre brutte cose che consumano un sacco di connessioni, il router
satura subito le porte libere. Se abbiamo 614 computer dietro il NAT, ciascuno potrà fare circa 100 connessioni
contemporanee, dopo di che il NAPT non ha più numeri di porta liberi.
ˆ NAPT trasforma Internet da una rete ad assenza di connessione
, in un tipo di rete orientata alle
connessioni, perchè il dispositivo NAPT deve conservare le informazioni relative ad ogni connessione che lo
attraversa. Se un dispositivo NAPT si blocca e la sua tabella di mappatura si perde, tutte le sue connessioni
TCP/UDP verranno distrutte. In assenza di NAPT, i guasti ai router non hanno eetto su TCP/UDP, perchè
ˆ
il processo di ritrasmissione si attiva dopo il timeout di alcuni secondi.
esporre dei
propri servizi alla rete e permettere ad altri di collegarvisi. Purtroppo con l'introduzione del NAPT, se
Solitamente ogni host collegato su Internet può eettuare delle connessioni a dei server, oppure
ad esempio nella rete locale ci sono due host con server web sulla porta 80, non è possibile esporre entrambi quei
servizi sullo stesso indirizzo sulla stessa porta 80, quindi l'unica soluzione possibile (quando viene manualmente
abilitata con il così detto Port Forwarding), è di assegnare due porte distinte dell'indirizzo pubblico ai due servizi
dietro al NAPT, quindi ad esempio la porta 80 per uno dei due server web e la porta 81 per l'altro. Così facendo
ovviamente i servizi che i vari host della rete locale possono esporre si riduce notevolemente. Se poi teniamo
conto che gli stessi numeri di porta devono anche essere usati come porte sorgenti per le connessioni in uscita,
ˆ
la situazione è sempre peggiore.
fanno uso degli
indirizzi IP degli host da cui si originano le connessioni all'interno dei messaggi scambiati a livello
applicativo per avvertire il server a cui si collegano di inviare i dati da scaricare su una certa porta del client. Il
Molti protocolli a livello applicativo, tra cui DCC e il notissimo FTP (in modalità attiva)
NAPT non sa nulla di tutto questo e il risultato è che questi protocolli non sono più in grado di funzionare perché
i server FTP tentano di inviare i dati a porte sul router NAPT che non è a conoscenza di questa operazione
in corso e non permette il passaggio. Su alcuni router sono stati implementati dei meccanismi per intercettare
il traco a livello applicativo di questi protocolli e sbloccare le porte in ingresso per mettergli di funzionare.
Questo è ancora più grave del primo punto perché con questo problema il router non deve solo andare a vedere
il livello protocollare 4, ma addirittura anche i dati sul livello 7.
Questo genera un overhead esagerato sulle
operazioni di cui deve tenere traccia il povero router.
ˆ Il NAPT non permette di mantenere connessioni aperte in stato idle
. Spesso può capitare di dover
tenere una connessione aperta dove non passa neanche un bit per settimane. TCP supporta questa cosa senza
problemi ma il NAPT avendo pochi numeri di porta sorgente a disposizione non può permettersi di sprecarli
per connessioni che non fanno nulla, quindi quando non viene rilevata attività per un po' di tempo in molte
implementazioni di NAPT si è obbligati a cancellare dalla tabella del NAPT la connessione. La cosa peggiore di
questa cosa è che i due host credono di essere ancora collegati tra loro, perché il NAPT non avvisa nè mittente
nè destinatario che ha cancellato la riga nella tabella, quindi il client che ha aperto la connessione non vedrà
nessun dato arrivargli anche se il server ha tentato di inviarli senza ricevere risposta.
Va inne sottolineato come, purtroppo, a causa della mancanza di indirizzi pubblici da assegnare che si sta facendo
sentire soprattutto negli ultimi mesi (nel 2011 la IANA ha
terminato i blocchi assegnabili ai registers regionali),
non abbiamo al giorno d'oggi altra solzione che costringersi ad utilizzare il NAT, nell'attesa dell'arrivo di IPv6 (che
comunque già dal 2008 è ucialmente attivo su tutti i backbone di Internet).
38
Indirizzamento IPv6
La principale modica di IPv6 a IPv4 è stata la lunghezza degl indirizzi. IPv6 utilizza infatti indirizzi IP da 128 bit
(16 byte). Gli indirizzi IPv6 vengono, per comodità, rappresentati da 8 blocchi da 4 caratteri esadecimali, come ad
esempio:
8000 : 0000 : 0000 : 0000 : 0123 : 4567 : 89AB : CDEF
Poichè molti indirizzi possono contenere parecchi zeri, sono state introdotte alcune ottimizzazioni:
ˆ
ˆ
È possibile ometter gli zero iniziali di un gruppo, quinidi nel gruppo
omettere lo
0123
dell'indirizzo precedente, è possibile
0.
Dove sono presenti blocchi nulli consecutivi, è possibile semplicemente ometterli, quindi l'indirizzo precedente
diventerebbe:
8000 :: 0123 : 4567 : 89AB : CDEF
ˆ
Inne gli indirizzi IPv4 possono essere scritti in notazione decimale a punti dopo una coppia di due punti:
:: 192.31.20.46
2128 indirizzi, se l'intero pianeta, terraferma ed acqua, fosse coperto di computer, IPv6 permetterebbe di utilizzare
7 · 1023 indirizzi per metro quadro che, almeno per il momento, sembrano essere sucienti per adesso e per il futuro...
Gli indirizzi non saranno assegnati in modo eciente, ma anche considerando il caso pessimo ci saranno più di 1000
Con
indirizzi per metro quadro.
Ogni indirizzo IPv6 è suddiviso in quattro parti:
Tipo indirizzo
Presso ISP
Sottorete
Identicatore host
3 bit
45 bit
16 bit
64 bit
ˆ Tipo di indirizzo
(3 bit): detto anche format prex, serve per specicare se si tratta di indirizzi unicast o
multicast. Gli indirizzi di tipo unicast hanno la sequenza di bit
ˆ Presso ISP
001
(45 bit): È un identicatore dell'Internet Service Provider, è suddiviso in varie parti:
Top-Level Aggregation ID, TLA ID (bit #4-16): È un identicatore del provider a livello di backbone
RES (bit #17-24): Campo riservato per uso futuro
Next-Level Aggregation ID (bit #25-48): È un identicatore di ISP regionale e ID sito
ˆ Sottorete
(16 bit): Anche detto (Site-Level
Aggregation ID - SLA ID ),
è un identicatore di una sottorete
dell'ISP regionale.
ˆ Identicatore host
(64 bit): Anche detto
Interface ID ,
è un identicatore che ciascuna macchina della sot-
torete può solitamente scegliere a piacere. Per convenzione combina solitamente l'indirizzo MAC della scheda
di rete con le cifre esadecimali 0xFFFE. Un bit speciale (il bit 6 del primo byte) del MAC (il bit chiamato uni-
versal/local bit ) deve essere complementato (RFC2373). Sfruttando questo sistema gli host vengono numerati
in modo automatico, senza obbligo di DHCP o congurazione manuale. Questa parte dell'indirizzo sarà completamente controllata dalla sottorete, quindi gli ISP non hanno la possibilità di limitare il numero di indirizzi
pubblici assegnati al di sotto dei
264 .
Il fatto di utilizzare il MAC address all'interno dell'indirizzo pubblico potrebbe portare potenzialmente ad alcune
problematiche di sicurezza. Un ipotetico attacante potrebbe dedurre il tipo di host dall'indirizzo e tentare qualche
attacco. È anche vero però che quel campo può essere impostato ad un valore qualunque e non obbligatoriamente il
MAC address.
Assegnare indirizzi IPv6 è più semplice che assegnare indirizzi IPv4 perché bisogna tenere traccia solo della sottorete.
Ogni sottorete ha un numero di indirizzi possibili enorme:
264 = 18446744073709551616 ' 1, 84 · 1019
Una modica interessante introdotta da IPv6 è che quando una organizzazione decide di cambiare ISP o comunque
sottorete, sarà necessario cambiare solo la prima parte dell'indirizzo e non tutta. Questo permetterà di dover cambiare
solo l'indirizzo principale sul router di frontiera. Anche gli indirizzi degli host della sottorete cambieranno, però la
parte di identicazione host resterà uguale. In questo modo si ottiene una sorta di meccanismo analogo al NAT, senza
tutti i problemi che però ha il NAT.
L'utilizzo delle maschere di rete è comunque consentito per permettere tutti i meccanismi classici di Internet e
anche per permettere di assegnare più sottoreti ad una stessa organizzazione.
39
Tipo e intervalli di indirizzi
Presso IPv6
Allocazione
0000::/8
Riservati da IETF
2000::/3
Global Unicast
fc00::/7
Unique Local Unicast
fe80::/10
Link Local Unicast
00::/8
Multicast
3f:f::/32
Riservati per esempi e documentazione
2001:0DB8
Riservati per esempi e documentazione
L'indirizzo ::1/128 è riservato per l'utilizzo locale (come il vecchio 127.0.0.1/8 )
ˆ Link Local Unicast (Scope:Link)
: Indica che si tratta di un indirizzo IPv6 privato
non routabile, valido
solo all'interno della singola sottorete. Lo scopo di questi indirizzi è per collegamenti interni in reti ad-hoc (ad
esempio servizi per conferenza).
ˆ (Scope:Host )
: Indica che si tratta di un indirizzo IPv6 di loopback. I pacchetti provenienti da questo indirizzo
non lasciano mai la macchina locale.
ˆ Multicast
in IPv6 è simile al broadcast IPv4, con alcune dierenze: un indirizzo di multicast invia solo ad
alcuni host, non a tutti quelli nella sottorete.Il router farà passare poi i pacchetti del gruppo a cui appartiene
anche lui stesso, di modo da poter ricevere le risposte. Tutti gli indirizzi di broadcast iniziano con .
ˆ Anycast
: è un indirizzo singolo assegnato a più nodi. Il pacchetto inviato a questo indirizzo sarà recapitato al
primo host disponibile. Questa funzionalità è stata pensata per load-balancing e ridondanza dei servizi. Alcuni
dei server DNS principali utilizzano questo tipo di indirizzo.
Protocollo ICMP
È un protocollo di supporto a IP che serve per controllare il corretto funzionamento dei router e degli host. Ci sono
circa una ventina di tipi di messaggi ICMP, vedremo qui i più importanti.
ICMP non corregge gli errori, si limita a segnalarli. I messaggi di errore contengono l'header del pacchetto ip che li
ha generati e i suoi primi 8 byte di dati. Per altre informazioni dettagliate riguardo alle opzioni di ogni tipo di struttura
ICMP è possibile consultare la pagina web http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml
Struttura del datagramma ICMP
Type (8 bit)
(32 bit)
Code (8 bit)
Checksum (16 bit)
Resto dell'header (32 bit)
Sezione dati (lunghezza variabile)
ˆ Type
(8 bit): Specica il tipo di pacchetto ICMP. Sono possibili 256 tipi di pacchetto, quelli eettivamente
utilizzati sono una ventina.
ˆ Code
ˆ Checksum
ˆ Resto dell'header
(8 bit): È un parametro che assume un signicato dierente a seconda del type che stiamo utilizzando
(8 bit): checksum del pacchetto ICMP
(32 bit): nel caso alcuni type lo richiedano si ha a disposizione un'altra parola da 32 bit per
l'intestazione (che ha lunghezza ssa)
Tipi di pacchetti ICMP
Codice
Messaggio
Signicato
0
Echo reply
Risposta ad una richiesta echo
3
Destination Unreachable
Il datagramma non può essere consegnato
4
Source quench
Datagramma scartato
5
Redirect
Avverto la sorgente di un diverso router da contattare per raggiungere l'host
8
Echo request
Richiesta echo ad un host per sapere se è attivo
11
Time exceeded
TTL scaduto o tempo massimo di riassemblaggio dei frammenti scaduto
12
Parameter problem
Pacchetto IP ricevuto non valido al byte x
13
Timestamp request
Segnala all'host che riceverà un timestamp di chi l'ha inviato
14
Timestamp reply
Risposta ad una richiesta di timestamp con in allegato il timestamp ricevuto
17
Address mask request
Richiesta della netmask da utilizzare
18
Address mask reply
Risposta della netmask da utilizzare
...
...
...
40
Esistono attualmente circa 40 type ICMP standardizzati dalla IANA.
Destination unreachable (type 3)
ˆ
ˆ
Type (3)
Code (0-12)
(32 bit)
Checksum
Non usato (0)
Header IP + primi 64 bit dei dati che hanno causato il problema
Quando un router scarta un pacchetto per qualche motivo, normalmente genera un messaggio di errore che invia
alla sorgente del pacchetto
Il campo code in questo caso viene utilizzato per segnaare il motivo che ha causato l'errore. Se la destinazione
non è presente nella tabella di routing allora code è 7.
I signicati di code:
ˆ
Valore
Nome
0
Net unreachable
1
Host unreachable
2
Protocol unreachable
3
Port unreachable
4
Fragmentation needed and don't fragment was set
5
Source Route failed
6
Destination Network Unknown
7
Destination Host Unknown
8
Source Host isolated
9
Communication with destination network si administratively prohibited
10
Communication with destination host is administratively prohibited
11
Destination network unreachable for Type of service
12
Destination host unreachable for type of service
13
Communication Administratively prohibited
14
Host Precedence Violation
15
Precedence cuto in eect
I messaggi standardizzati sono solo questi.
Time exceeded (type 11)
ˆ Code 0
ˆ Code 1
Type (11)
Code (0-1)
(32 bit)
Checksum
Non usato (0)
Header IP + primi 64 bit dei dati che hanno causato il problema
(messaggio inviato da un router): TTL è arrivato a 0
(messaggio inviato dalla destinazione): Non sono arrivati tutti i frammenti di un pacchetto entro un
tempo massimo.
Parameter problem (type 12)
Type (12)
Code (0-1)
(32 bit)
Pointer
Checksum
Non usato (0)
Header IP + primi 64 bit dei dati che hanno causato il problema
Viene utilizzato per segnalare un problema in un byte di un pacchetto IP.
ˆ Code 0
ˆ Code 1
: incongruenza/errore in qualche campo, pointer punta al campo errato
: opzione non implementata o qualche parte del campo opzioni è mancante.
Redirect (type 5)
Type (5)
Code (0-3)
(32 bit)
Checksum
Indirizzo IP del router
Header IP + primi 64 bit dei dati che hanno causato il problema
La destinazione o un router avvisa la sorgente che per contattare la sua destinazione deve utilizzare un altro router,
il cui IP è passato all'interno dell'header ICMP.
41
Echo request/reply (type 8/0)
ˆ Identier
ˆ Sequence number
ˆ Optional data
Type (8 oppure 0)
(32 bit)
Code (0)
Identier
Checksum
sequence number
Optional data
(16 bit): viene scelto a caso dal mittente della richiesta, nella risposta va ripetuto uguale.
(16 bit): tiene traccia di pacchetti diversi relativi allo stesso identicatore.
: Una sequenza arbitraria di dati può essere inserita e deve essere ripetuta uguale dal destinatario
nella risposta.
Type (13 o 14)
(32 bit)
Code (0)
Identier
Timestamp request/reply (type 13/14)
Checksum
Sequence number
Originate timestamp
Receive timestamp
ˆ
ˆ Originate timestamp
ˆ Receive timestamp
ˆ Transmit timestamp
Transmit timestamp
È un messaggio scambiato tra due host per conoscere qual'è la sincronia dei due clock.
(32 bit): Viene riempito dalla sorgente
(32 bit): Viene riempito dalla destinazione appena riceve il pacchetto
(32 bit): Viene riempito dalla destinazione immediatamente prima di inviare il pacchetto.
Type (17 o 18)
Address mask request/reply (type 17/18)
(32 bit)
Code (0)
identier
Checksum
sequence number
Address mask (32 bit)
Il campo
address mask viene riempito dal destinatario.
Il protocollo ARP
È un protocollo di controllo che permette a IP di funzionare.
ARP è l'acronimo di Address Resolution Protocol.
Fornisce un metodo per tradurre indirizzi IP in indirizzi MAC.
ˆ
ˆ
ˆ
ˆ
Viene incapsulato dentro un pacchetto Ethernet o comunque datalink
Richiede alle stazioni di inviare dei messaggi in broadcast nella rete locale.
La tipica comunicazione è chi è X.Y.Z.W? e c'è una risposta sì sono io 00:AA:01:23:45:67!
Si utilzza una cache che viene invalidata nell'ordine dei minuti, per evitare di mandare troppe richieste
Struttura del pacchetto ARP
Hardware Type
Hardware length
(32 bit)
Protocol Length
Protocol Type
Operation (1 request, 2 reply)
Sender hardware address (ex: 6 bytes per Ethernet)
Sender protocol address (ex: 4 bytes per IPv4)
Target hardware address (non riempito in una richiesta)
Target protocol address
ARP è un protocollo, incapsulato all'interno di trame di livello 2, che permette di scoprire l'indirizzo di livello 2 di
un host, conoscendone l'indirizzo di livello 3.
L'utilizzo classico è all'interno delle reti Ethernet quando si cerca un host a partire dal suo indirizzo IP:
ˆ
ˆ
ˆ
Un host A vuole contattare un host B
A invia un pacchetto ARP con il proprio MAC address sorgente all'indirizzo di broadcast FF:FF:FF:FF:FF:FF
chiedendo quale sia il MAC address corrispondente all'indirizzo IP di B.
B risponde con un pacchetto ARP di risposta, iviando ad A (di cui conosce il MAC address dalla risposta
ricevuta), il proprio MAC address.
In alcune congurazioni particolari potrebbe essere utile congurare un
proxy ARP, cioè un host della rete che
provvede a dare risposte ARP per conto di altri host. È tuttavia, molto spesso, sconsigliabile il suo utilizzo, preferendo
un router o altri meccanismi.
42
Protocollo RARP
RARP è un acronimo che sta per Reverse Address Resolution Protocol. Si tratta di un protocollo duale ad ARP, che
permette ad un host appena avviato di scoprire il proprio indirizzo IP, a partire dal proprio MAC address, inviando la
richiesta del proprio indirizzo in broadcast nella rete locale. Un server o qualche altro apparato di rete può occuparsi
di fornire una risposta con l'indirizzo IP che l'host dovrà utilizzare. Si tratta quindi di un protocollo utilizzato per
l'autocongurazione di rete.
Questo protocollo presenta alcune limitazioni, tra cui il fatto che viene inviato solo l'indirizzo IP (e nessun'altra
informazione) e che può essere utilizzato solo se il server RARP è nella stessa rete locale dell'host.
Protocollo BOOTP
A dierenza del protocollo RARP utilizza datagrammi IP e protocollo di trasporto UDP.Una stazione generica che
desidera congurare la propria interfaccia di rete per accedere ad Internet, può inviare un messaggio BOOTP (Boot-
strap ) indirizzato ad una specica porta UDP, utilizzando l'indirizzo IP broadcast di sottorete come destinazione e
l'indirizzo nullo come sorgente (sorgente: 0.0.0.0, destinazione:255.255.255.255).
Il server BOOTP (che può anche
essere collocato in una LAN dierente appartenente però alla stessa sottorete, risponde all'host con un messaggio che
può contenere indirizzo IP, netmask, indirizzo IP del le server, indirizzo IP del default router,... Questa risposta viene
inviata dal server BOOTP sempre in broadcast in modo analogo a come fa il client per contattare il server.
BOOTP funziona però grazie ad una tabella installata sul server che assegna gli indirizzi, dove è presenta una
associazione di indirizzo IP da assegnare per ogni MAC address.
Protocollo DHCP
Il protocollo DHCP (Dynamic Host Conguration Protocol ), permette una riassegnazione dinamica degli indirizzi all'interno della rete in modo automatico, a dierenza di BOOTP che è pensato per una assegnazione statica mantenendo
una tabella di assegnamenti ssa. Il server DHCP ha un serie di indirizzi assegnabili e ha la possibilità di concedere
un tempo di licenza dell'indirizzo, al termine del quale può decidere di riassegnare l'indirizzo se non sia più in uso.
L'host ha la possibilità di richiedere il rinnovo dell'indirizzo poco prima della sua scadenza. DHCP come BOOTP fa
uso di pacchetti UDP sopra IP, quindi il server non deve necessariamente trovarsi nella stessa rete della stazione che
richiede l'indirizzo, infatti i messaggi DHCP, che sono traposrtati dal protcollo UDP, possono attraversare anche più
router.
DHCP fa uso della porta UDP 67 come sorgente e UDP
68 come destinazione. Inizialmente l'indirizzo IP utilizzato
dal client per mandare la richiesta sarà 0.0.0.0 e il destinatario sarà indicato con l'indirizzo di broadcast 255.255.255.255
Inizialmente l'host che richiedere un indirizzo invia un messaggio DHCPDISCOVER sulla sottorete IP a cui è
collegato.
Il server risponde con un DHCPOFFER (indirizzo IP, netmask, gateway e server DNS), a cui il client
risponde con un DHCPREQUEST e inne DHCPACK. Il client potrebbe riutare un indirizzo oertogli, il che ha
senso in presenza di più di un server DHCP. Per rilasciare un IP si utilizza un messaggio esplicito di DHCPRELEASE.
Il protocollo ICMPv6
È la nuova versione del protocollo ICMP, parte integrante di IPv6. In esso sono state aggiunte nuove funzionalità che
erano in precedenza gestite da altri protocolli (ARP e IGMP) e tolte altre inutilizzate del vecchio protocollo ICMP.
Neighbor Discovery Protocol (NDP ) è una parte del protocollo ICMPv6 che permette di sostituire le operazioni svolte
da ARP. Secure Neighbor Discovery Protocol (SEND ) è una estensione di NDP che permette maggiore sicurezza (vedi
ARP spoong). Multicast Router Discovery (MRD ) sostituisce le operazioni svolte dal vecchio protocollo IGMP per
il multicasting.
ICMPv6 è stato denito in RFC4443. Come nella versione precedente, lo scopo principale di ICMP resta comunque
monitorare lo stato della rete e inviare pacchetti di gestione o di errore.
ICMPv6 viene trasportato da datagrammi IPv6 utilizzando come Next Header il valore 58.
Struttura del pacchetto ICMPv6
Type (8 bit)
ˆ Type
(32 bit)
Code (8 bit)
Checksum (16 bit)
Data
(8 bit): Specica il tipo di messaggio ICMPv6.
I valori nell'intervallo 0-127 indicano un messaggio di
errore, mentre i valori 128-255 indicano un messaggio informativo.
ˆ Code
ˆ Checksum
(8 bit): È un valore che dipende dal type che specica il sottotipo di messaggio.
(16 bit): È un checksum per il controllo d'errore calcolato in modo simile al checksum UDP sfruttando
uno pseudo-header (vedi nel seguito o RFC).
43
Messaggi di errore
Type
1
Signicato
Code
Signicato
0
No route to destination
1
Communication with destination administratively prohibited
2
Beyond scope of source address
3
Address unreachable
Destination Unreachable
4
Port Unreachable
5
Source address failed ingress/egress policy
6
Reject route to destination
7
Error in Source Routing Header
2
Packet Too Big
0
3
Time Exceeded
0
Hop limit exceeded in transit
1
Fragment reassembly time exceeded
4
Parameter Problem
100
Private experimentation
101
Private experimentation
127
Reserved for expansion
0
Erroneous header eld encountered
1
Unrecognized Next Header type encountered
2
Unrecognized IPv6 option encountered
Messaggi informativi
Type
Signicato
Code
Signicato
128
Echo Request
0
RFC4443
129
Echo Reply
0
RFC4443
130
Multicast Listener Query
0
RFC2710
131
Multicast Listener Report
0
RFC2710
132
Multicast Listener Done
0
RFC2710
133
Router Solicitation (NDP)
0
RFC4861
134
Router Advertisement (NDP)
0
RFC4861
135
Neighbor Solicitation (NDP)
0
RFC4861
136
Neighbor Advertisement (NDP)
0
RFC4861
137
Redirect Message (NDP)
0
RFC4861
0
Router Renumbering Command
1
Router Renumbering Result
138
139
Router Renumbering
ICMP Node Information Query
140
ICMP Node Information Response
141
Inverse Neighbor Discovery
142
Inverse Neighbor Discovery
255
Sequence Number Reset
0
Data conains IPv6 address subject
1
Data conains name of the subject
2
Data conains IPv4 address subject
0
Successful reply
1
Responder refuses to answer
2
Qtime of the query unknown
0
Solicitation Message
0
Advertisement Message
143
Multicast Listener Discovery
reports (RFC3810)
144
Home Agent Address Discovery
0
RFC6275
0
RFC6275
Request Message
145
Home Agent Address Discovery
Reply Message
146
Mobile Prex Solicitation
0
RFC6275
147
Mobile Prex Advertisement
0
RFC6275
148
Certication Path Soliciation (SEND)
RFC3971
149
Certication Path Advertisement (SEND)
RFC3971
151
Multicast Router Advertisement (SEND)
RFC4286
152
Multicast Router Solicitation (MRD)
RFC4286
153
Multicast Router Termination (MRD)
RFC4286
200
Private experimentation
201
Private experimentation
255
Reserved for exapansion
44
Per funzionare correttamene, un host che fa uso di IPv6 deve obbligatoriamente accettare e rispondere ai messaggi
ICMPv6 con valori type 135 e 136. Per altre informazioni sugli obblighi in ICMPv6 consultare la RFC4890.
Lo strato di trasporto (livello 4 ISO/OSI)
Protocollo UDP
Il nome UDP sta per User Datagram Protocol. Si tratta di un semplicissimo protocollo di trasporto che poco aggiunge
ai pacchetti IP.
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
Permette il trasferimento di semplici datagrammi (senza instaurare una connessione) all'interno dei pacchetti IP.
È un protocollo di tipo connectionless, come il sottostante IP.
Non si occupa del
controllo di usso, della congestione, degli errori o della ristrasmissione dopo la ricezione
di un segmento errato.
UDP aggiunge ad IP solo il multiplexing delle porte, che permettono ai pacchetti IP di essere multiplati su più
applicazioni in ascolto.
Richiede meno traco di un protocollo con connessione (tipo TCP ) perché non c'è bisogno di un meccanismo
di instaurazione della connessione o di ritrasmissione.
In caso di
congestione, i pacchetti persi non sono ritrasmessi.
Non ha numeri di sequenza, quindi può succedere che arrivino pacchetti duplicati o vengano consegnati fuori
sequenza.
La struttura del segmento UDP:
32 bit
Source Port (16 bit)
Destination Port (16 bit)
UDP Lenght (16 bit)
Checksum (16 bit)
Dati (facoltativi)
I campi del pacchetto sono:
ˆ Source port/Destination port
(entrambi da 16 bit): indicano la porta a cui è connessa l'applicazione che
232 − 1 = 65535.
emette/riceve l'unità informativa. Il valore massimo è
well-known . Le porte nel range
49152 − 65535
ˆ UDP length
tutto a
0.
Le porte nel range
0 − 1023 sono le porte
sono assegnate dall'organo di Internet IANA, mentre le porte
sono di uso libero e assegnabili dinamicamente.
(16 bit): Lunghezza in byte dell'intero pacchetto UDP. Nel caso di pacchetto UDP vuoto (senza
dati) il minimo è 8, cioè
ˆ Checksum
1024 − 49151
0000000000000100.
(16 bit): È un codice a controllo di errore opzionale. Se viene deciso di non utilizzarlo lo si imposta
Non sussistono ambiguità perché il valore
0
non può essere mai utilizzato come codice di controllo.
tutto il messaggio UDP (dati compresi) e anche una parte dell'header del
3
datagramma IP precedente detto pseudo-header .
Se utilizzato, serve per proteggere
Pseudo-header (caso IPv4):
(32 bit)
Source IP address (32 bit)
Destination IP address (32 bit)
00000000
Protocol ID (8 bit)
UDP Length (16 bit)
Pseudo-header (IPv6):
(32 bit)
Source IP address
(128 bit)
Destination IP address
(128 bit)
UDP Lenght (32 bit)
000000000000000000000000
3 In
Next header (8 bit)
realtà questo viola i principi di straticazione dei protocolli perché UDP non dovrebbe sapere nulla di IP..
45
Il contenuto del campo di checksum UDP viene calcolato come complemento ad 1 (cioè un NOT) della
somma dei bit del segmento UDP e dello pseudo-header a blocchi di 16bit. Per questo motivo è necessario
aggiungere nello pseudo-header un byte di zeri (di modo da allinearlo a 16 bit).
Procedura per il calcolo del checksum dal trasmettitore: Eseguiamo la somma in blocchi da 16 bit
dello pseudo-header, header UDP (con checksum impostato a
0)
e i dati UDP. Se la lunghezza (in byte)
dei dati UDP (payload) è dispari, aggiungo un byte di zeri. In questo modo ho tutte parole da 16 bit. Una
volta ottenuta la somma, nego il risultato e lo imposto come valore di checksum. [immagine di esempio]
Procedura per il calcolo del checksum dal ricevitore: Eseguiamo la somma in blocchi da 16 bit dello
pseudo-header, header UDP e i dati UDP. Se come risultato della somma (non negato) ottengo tutti 1
allora il checksum è corretto.
Utilizzare il checksum da maggiore sicurezza che i dati ricevuti dal pacchetto UDP siano corretti, però
non ha molta utilità perché anche se trovo un errore non posso avvisare il mittente e farmi rimandare il
pacchetto. UDP non è pensato per questo e inoltre non potrei comunque farlo dato che non ha numeri di
sequenza sui pacchetti.
In alcune applicazioni è meglio scartare il pacchetto piuttosto che leggere dati errati (ad esempio in qualche
tipo di trasferimento les tra hosts)
In altre applicazioni è meglio evitare di perdere tempo a calcolare il checksum e disinteressarsi se sono
presenti alcuni bit errati (ad esempio nella telefonia).
Caratteristiche di UDP
UDP è un protocollo semplice e comodo per applicazioni che richiedono di inviare dati brevi, che non hanno bisogno
di ritrasmissione o controllo di usso. Il servizio DNS ad esempio utilizza pacchetti UDP. Anche il servizio RTP fa
uso di pacchetti UDP.
Protocollo TCP
Il nome TCP sta per Transmission Control Protocol , è il protocollo più utilizzato di Internet.
to inizalmente in RFC793, poi aggiornato in RFC1122 e RFC1323.
È stato deni-
È un protocollo progettato per avere diverse
caratteristiche:
ˆ
Fornire un usso di byte
adabile end-to-end, su un inter-network inadabile. Parliamo di inter-network
e non di rete perché le diverse parti su cui transita TCP possono avere larghezze di banda, ritardi, dimensioni
dei pacchetti e altri parametri molto diversi tra loro. TCP è stato progettato per adattarsi dinatmicamente alle
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
proprietà della inter-network e continuare ad orire solide prestazioni in presenza di molti tipi di errore.
È un protocollo orientato alla connessione ( connection-oriented ).
Fornisce un servizio di trasporto adabile.
Permette multiplazione di più ussi mediante socket.
Permette la consegna in sequenza dei pacchetti.
Gestisce la
perdita dei pacchetti, il controllo di usso e la congestione.
Tutte le connessioni TCP sono full-duplex (il traco può uire sulla stessa connessione in due direzioni, come
in UDP ) e punto-punto (perché ogni connessione ha esattamente due punti nali).
TCP non supporta multicasting o broadcasting.
Una connessione TCP è un usso di byte, non un usso di messaggi. Se il processo mittente fa ad esempio 4
scritture da 512 byte su un usso TCP, a destinazione i dati potrebbero essere ricevuti come 4 blocchi da 512
byte oppure 2 blocchi da 1024 byte oppure un solo blocco da 2048 byte.
Quando una applicazione passa dei dati a TCP, lui potrebbe decidere di tenerli temporaneamente in un buer
prima di inviarli.
Caratteristiche generali
ˆ
ˆ
L'adabilità nel trasporto si basa sulla numerazione byte per byte dei dati trasferiti nelle due dirazioni, invece
che per singola unità informativa.
Ogni byte in una connessione TCP ha il proprio
numero di sequenza a 32 bit. Una volta con le linee a 54
Kbps ci voleva una settimana per esaurire i numeri di sequenza. Alle velocità attuali possono essere esauriti a
velocità preoccupanti.
46
ˆ
ˆ
ˆ
TCP si basa su un meccanismo a nestra variabile.
Vengono adottati solo riscontri positivi (ACK ). La
ritrasmissione dei segmenti mancanti si basa sulla scadenza di un
timeout .
Le ritrasmissioni possono includere intervalli di byte diversi rispetto alla trasmissione originale.
Ogni segmento TCP, header compreso, non può superare la lunghezza di
IP). In realtà ogni rete ha un
ad esempio ha
65515
Byte (carico utile dal pacchetto
MTU (Maximum Transfer Unit ) diversa a cui quindi TCP deve adattarsi. Ethernet
M T U = 1500Byte
(vedi paragrafo MTU in IP).
Struttura del segmento TCP
32 bit
Source port (16 bit)
Destination port (16 bit)
Sequence number (32 bit)
Acknowledgement number (32 bit)
TCP
HLEN
Reserved
(6 bit)
(4 bit)
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window Size (16 bit)
Checksum (16 bit)
Urgent pointer (16 bit)
Option + padding (0 o più parole da 32 bit)
Dati (facoltativo) (Nel caso migliore 65495 Byte)
ˆ Source port/Destination port
(16 bit): Come per UDP, indica la porta a cui è connessa l'applicazione che
emette/riceve l'unità informativa.
ˆ Sequence number, SN
(32 bit): Indica il numero d'ordine del primo byte dati dell'unità informativa all'interno
del usso inviato dalla sorgente. La numerazione dei byte della connessione è quindi modulo
ˆ Acknowledgement number, AN
(32 bit): Indica alla destinazione il numero d'ordine del prossimo byte che
il processo si aspetta di ricevere. Quindi se
a
x−1
232 .
AN è
x,
allora il processo sta riscontrando tutti i byte ricevuti no
(in stile go-back-n )
ˆ TCP Header Lenght, HLEN
(4 bit): Lunghezza dell'header in unità di 32 bit. Il valore minimo è 5. Il valore
massimo è 15.
ˆ Reserved
(6 bit):
Campo riservato per scopi futuri.
°
Alcuni utilizzano una funzionalità aggiuntiva ( ECN
- Explicit Congestion Notication , RFC3168) per il controllo di congestione, che fa uso del 6
bit di questo
campo. In ogni caso un destinatario che non supporta questa funzionalità può tranquillamente ignorare questo
bit.
ˆ Code bits
(6 bit):
URG urgent : Indica la presenza di dati urgenti nel payload, la cui posizione è indicata dal campo urgent .
Permette di generare un evento che comunica a TCP di interrompere il buering dei dati e trasmettere
immediatamente tutto ciò che ha a disposizione nei dati urgenti. È un sistema di interrupt.
ACK acknowledgement : È impostato ad 1 per indicare che acknowledgement number è valido e deve
essere considerato.
PSH push : È impostato ad 1 per richiedere all'entità ricevente di consegnare all'entità di applicazione i
dati nel messaggio e di non archiviarli nel buer come farebbe per migliorare l'ecienza.
RST reset : Quando impostato da 1, indica la reimpostazione di una connessione (diventata incongurente
per qualche motivo). È anche utilizzato per riutare un segmento non valido o un tentativo di aprire una
connessione verso una porta chiusa.
SYN syncronize: Quando impostato ad 1, viene utilizzato per instaurare una connessione e ha ruolo
diverso a seconda del valore del ag ACK:
*
*
SYN=1, ACK=0
SYN=1, ACK=1
⇒ CONNECTION
⇒ CONNECTION
REQUEST
ACCEPTED
FIN nal : Viene utilizzato per il rilascio di una connessione. Indica che chi lo manda non ha più nulla
da inviare, però questo mittente potrebbe potenzialmente continuare a ricevere dati.
La chiusura della
connessione deve essere fatta da ambo i lati.
ˆ Window size
(16 bit): Indica quanti byte il mittente è disposto a ricevere.
Solitamente corrisponde con la
quantità di spazio libera nel buer di ricezione, anche se non deve essere necessariamente così (vedi in seguito). Se
ACK = x
e
W SIZE = y
signica che il mittente è disposto a ricevere i byte da
x
a
x + y − 1.
aspettare ad inviare nuovi dati. Successivamente mostrando
16
permette l'invio di nuovi dati. Il valore massimo della nestra è 2
− 1 = 65535Byte.
indica al destinatario di
47
Se W SIZE = 0,
W SIZE 6= 0 si
ˆ Checksum
(16 bit): Consente la rilevazione di errori. Il calcolo del checksum viene eettuato con il complemento
ad 1 della somma di parole a 16 bit, così come già descritto nel protocollo UDP. Lo pseudo-header utilizzato è
sempre lo stesso mostrato per UDP.
Pseudo-header (IPv4) :
(32 bit)
Source IP address (32 bit)
Destination IP address (32 bit)
00000000
Protocol ID (8 bit)
UDP Length (16 bit)
Pseudo-header (IPv6):
(32 bit)
Source IP address
(128 bit)
Destination IP address
(128 bit)
TCP Lenght (32 bit)
000000000000000000000000
ˆ Urgent pointer
byte urgente.
da sola.
Next header (8 bit)
(16 bit): Indica l'oset in byte partendo dal numero di sequenza corrente in cui si trova l'ultimo
La posizione iniziale del primo dato urgento non è indicata, l'applicazione deve determinarsela
Per essere utilizzato questo campo, il ag
utilizzata per recapitare dei byte prima di altri.
PSH deve essere attivato. Questa funzionalità è spesso
Era utilizzato in passato ad esempio su telnet per inviare il
comando Ctrl+C.
ˆ Options
ˆ Padding
: È un modo per aggiungere delle estensioni all'intestazione
: Si garantisce che il TCP header sia multiplo di 32 bit.
Il byte
00000001
serve come riempimento per avere un header multiplo di 32 bit (byte
Il byte
00000000
serve come byte di riempimento nale (byte
no-operation ).
end-of-operation ).
Opzioni comuni di TCP
Maximum Segment Size (MSS)
È una opzione di TCP che permette ad ogni host di specicare il carico utile massimo che TCP potrà accettare. Ogni
host annuncia il proprio MSS e guarda quello del partner. Se non si utilizza questa opzione, si assume di default che il
536 Byte. Tutti gli host di Internet devono accettare segmenti TCP di
65535 Byte.
carico utile sia pari a
Il valore massimo è
Code
Length
MSS (16 bit)
00000010
00000100
.............................................................
536+20 = 556Byte.
Window scale
È una opzione di TCP (denita in RFC1323) che permette agli host di negoziare un fattore di scala per la dinesione
della nestra di ricezione. Su una linea T3 (44,736 Mbps) bastano 12 millisecondi per spedire una intera nestra di
3
4 del tempo di una
risposta. Per evitare questa situazione di inecienza, viene allargata la nestra con questo fattore di scala. La nestra
dati da 64KB. Se il ritardo andata-ritorno (RTT) è 50 millisecondi, il mittente resta in attesa per
vine aumentata di un fattore pari a 2 elevato al valore contenuto nel campo scale factor:
Code
Length
Scale factor (8 bit)
00000010
00000100
.............................................................
Selective repeat
In RFC2581 viene denita una opzione di TCP che permette ad un host di utilizzare un messaggio di riscontro negativo
4
NACK per avvisare il mittente di rinviare solo un certo pacchetto, riducendo la quantità di dati trasmessi .
4 Nei
sistemi GNU/Linux questa funzionalità viene abilitata agendo sul le /proc/sys/net/ipv4/tcp_sack
48
Setup delle connessioni, Three-way handshake
ˆ
ˆ
Il server eettua una
LISTEN (o anche detta passive open ) per indicare a TCP che è pronto a ricevere
connessioni.
Il client eettua una
CONNECT (o anche detta active open ) per indicare a TCP la volontà di instaurare
una connessione con il server.
1. Il client sceglie a caso un numero di sequenza iniziale (ISN - Initial Sequence Number ) e invia un pacchetto con
il numero di sequenza scelto (SN
= ISN )
e
SY N = 1.
Eventualmente comunica anche MSS, Window scale,...
nello stesso pacchetto. La scelta di un ISN casuale evita problemi nel dover distinguere due richieste dallo stesso
host (ad esempio nel caso in cui i pacchetti della richiesta arrivino in seguito alla chiusura e riapertura di una
connessione).
2. Il server riceve il SYN, estrae un
altro ISN casuale e manda un segmento con
SN = ISN , SY N = 1, ACK = 1
5
contenente come acknowledgement number il sequence number ricevuto dal client incrementato di una unità .
Se il server non fosse in ascolto su quella porta, risponderà invece con un pacchetto RST.
3. Il client riceve il SYN/ACK del server e invia un
ACK = 1
con acknowledgement number pari al sequence
number inviato dal server incrementato di una unità. Inseriesce inoltre nel payload i primi byte di dati.
ˆ
ˆ
5I
Se le due richieste di connessione dovessero arrivare nello stesso momento, il meccanismo funziona comunque.
Di seguito una gura con tutti gli stati e le transizioni:
messaggi SYN e FIN consumano convenzionalmente un byte
49
Gli stati del diagramma hanno i seguenti signicati:
Stato
Descrizione
CLOSED
Nessuna connessione è attiva o in sospeso
LISTEN
Il server è in attesa di una chiamata in ingresso
SYN RCVD
È arrivata una richiesta di connessione; attesa di ACK
SYN SENT
L'applicazione ha iniziato ad aprire una connessione
ESTABLISHED
Il normale stato di trasferimento dei dati
FIN WAIT 1
L'applicazione aerma di avere terminato
FIN WAIT 2
L'altro lato accetta il rilascio
TIMED WAIT
Attende la scadenza di tutti i pacchetti
CLOSING
Entrambi i lati hanno cercato di chiudere contemporaneamente
CLOSE WAIT
L'altro lato ha iniziato il rilascio
LAST ACK
Attende la scadenza di tutti i pacchetti
Generazione degli ISN (Initial Sequence Numer)
ˆ
ˆ
Ogni host possiede un contatore che conta ciclicamente in modulo
232
con passi di
ore)
Al momento dell'instaurazione della connessione viene scelto l'ISN attuale.
50
4µs
(ciclo completo in 4,77
ˆ
In realtà ci sono problemi di sicurezza poiché un eventuale attaccante potrebbe identicare i numeri di sequenza
e sfrutturli per inserirsi in connessioni esistenti. L'implementazione reale della generazione degli ISN dipende
dal sistema operativo, ma non è (solitamente) come quella qui descritta teoricamente.
Gestione della connessione
ˆ
ˆ
ˆ
I numeri di sequenza in transito devono essere univoci, perché ogni byte di una connessione di rete deve essere
univoco. Vogliamo evitare ambiguità di due byte con dati diversi e stesso sequence number.
Per evitare ambiguità si ssa un tempo di vita massimo dei pacchetti che varia a seconda di quanto velocemente
consumo i sequence number, cioè in base alla velocità della connessione.
Stabiliamo quindi che il Maximum Segment Life (MSL) sia
M SL <
dove
ˆ
ˆ
B
è la capacità della connessione espressa in
232 · 8
B
bit 6
s
. Cioè il MSL deve essere minore dell'intervallo massimo
tra due sequence number uguali .
Normalmente si stabilisce di default
accettabile (se
B = 10M bps
M SL = 2min = 120s , che se abbiamo una connessione a 10M bps è un valore
100M bps abbiamo 5
l'intervallo tra due sequence number uguali è circa 1 ora), se
minuti tra due sequence number uguali.
Per tenere traccia della scadenza di un pacchetto nel caso di reti molto veloci (ad esempio una rete 10 Gbit/s i
numeri di sequenza si esauriscono in
3, 43
secondi) si utilizza l'opzione timestamp di TCP (vedi RFC1323) che
7
pur utilizzando anch'essa un contatore a 32 bit, lo incrementa con passo più ampio .
Rilascio della connessione TCP ( Tear down) :
ˆ
ˆ
Per rilasciare una connessione sono richiesti 4 segmenti (FIN e ACK da entrambi i lati). In realtà è possibile
inserire il primo ACK e il secondo FIN nello stesso segmento riducendo il totale a 3.
L'invio di una trama FIN da parte di un host signica non ho più nulla da inviarti, comunque continuo ad
ascoltarti, il destinario deve rispondere con ok, confermo e poi con anche io smetto di inviare, ma comunque
resto in ascolto, quendi il mittente conferma ok e la connessione è stata chiusa. Se uno di questi ACK viene
perso, la connessione è chiusa per timeout.
Criterio di trasmissione/ricezione di TCP
ˆ
ˆ
ˆ
ˆ
Segmenti ricevuti correttamente, anche se fuori sequenza, sono accettati e immagazzinati nel buer, perchè
all'interno della nestra di ricezione (come nei protocolli selective-repeat classici)
I riscontri inviati sono solo positivi (ACK ) e sono di tipo cumulativo (come nei protocolli go-back-n )
I segmenti ricevuti correttamente vengono riscontrati singolarmente o con la tecnica del Delayed ACK , cioè
ogni due segmenti e comunque entro un certo intervallo di tempo.
La tecnida di piggybacking viene utilizzata.
Una precisazione
In realtà nella implementazione base di TCP, TCP Tahoe , si prevede che i segmenti fuori
sequenza siano scartati (come nei protocolli go-back-n ), mentre nella implementazione più avanzata di TCP, TCP
Reno , si prevede che i segmenti fuori sequenza (ma all'interno della nestra di ricezione) siano accettati e memorizzati.
Controllo di usso in TCP - Silly Window Syndrome
Il controllo di usso consiste nel problema di una sorgente molto veloce che manda dati rapidamente ad una sorgente
lenta, che fatica quindi a rispondere.
In particolare vediamo un problema specico del controllo di usso che genera insucienza del protocollo se non
viene gestito correttamente.
6 Si noti che questo calcolo non è del
7 Nel sistema operativo GNU/Linux
tutto corretto, perché si trascura la presenza dell'header IP. Resta quindi un caso pessimo limite.
l'opzione timestamp è abilitata di default su tutti i pacchetti TCP in uscita mediante il procle
/proc/sys/net/ipv4/tcp_timestamps che, nonostante il nome, gestisce le opzioni timestamp di TCP sia su IPv4 che su IPv6.
51
Lato ricevitore (algoritmo di Clark)
Svuoto letamente il buer di ricezione (che è già pieno), appena libero un posto mando un ACK alla sorgente, che mi
manda subito un nuovo pacchetto e il buer è nuovamente pieno e devo avvertire la sorgente di aspettare ad inviare
altro (inviandole una dimensione della nestra nulla).
In questo modo c'è alto overhead, segmenti corti, pessima
ecienza del protocollo. La soluzione nel ricevitore consiste nell'utilizzare l'algoritmo
di Clark.
Utilizzando questo algoritmo, il ricevitore mente al trasmettitore, indicando una nestra nulla no a quando il
suo buer in ricezione non si è svuotato per metà o per una porzione almeno pari a MSS. Cioè indico
W SIZE = 0
no a quando
Busy buer size
6= min
Buer size
2
, M SS
Inoltre il mittente può essere d'aiuto se evita di inviare segmenti di piccole dimensioni.
Lato trasmettitore (algoritmo di Nagle)
Il problema complementare si può presentare sul lato del trasmettitore.
È questo il caso di un trasmettitore che
genera pochi dati molto lentamente e il buer d'invio è quasi sempre vuoto. Invio segmenti molto piccoli man mano
che vengono prodotti, c'è alto overhead e inecienza del protocollo. La soluzione adottata è chiamato
algoritmo di
Nagle.
Questo algoritmo consiste nell'invio della prima porzione di dati, anche se corta, e in una successiva attesa. Se ricevo
l'ACK, allora invio un altro segmento, altrimenti aspetto che il buer di uscita si riempia di almeno una dimensione
pari ad un MSS e quindi invio il pacchetto.
La gestione dei timer e dei timeout di TCP
ˆ
ˆ
ˆ
TCP utilizza vari timer, il più importante è il
timer di ritrasmissione :
quando viene inviato un segmento
si avvia un timer di ritrasmissione, quando scade si rimanda il pacchetto, ma quanto deve essere lungo questo
intervallo di tempo?
Il problema qui non è come nei protocolli datalink in cui il tempo massimo di andata e ritorno massimo è ssato
(ad esempio
2τ ).
In Internet ogni rete ha un diverso tempo di transito ed è necessario adattarsi a ciascuna
connessione.
La soluzione è adottare un algoritmo altamente dinamico che regola costantemente l'intervallo di timeout in base
a continue misurazioni delle prestazioni di rete.
Algoritmo di Jacobson (1988)
ˆ
ˆ
Per ogni connessione, TCP tiene una variabile, RTT (Round Trip Time), che rappresenta la migliore stima
attuale del tempo di andata e ritorno per la destinazione in questione.
Quando si avvia un segmento parte anche un timer che serve a due scopi:
Per misurare quanto tempo richiede l'acknowledgement
Per innescare un'eventuale ristrasmissione
ˆ
ˆ RT T
Se l'acknowledgement torna indietro prima della scadenza del timer, TCP misura il tempo trascorso
M.
viene dunque aggiornato con un ltro a media mobile :
RT T = α · RT T + (1 − α) · M
con
ˆ
ˆ
ˆ
0 < α ≤ 1, dove α
α = 87 .
è un fattore che determina il peso dato al vecchio valore rispetto a quello nuovo.
Solitamente
Ora anche conoscendo un
RT T
Una volta veniva utilizzato
valido, la scelta di un timeout di ritrasmissione adatto è una questione complessa.
T imeout = β · RT T
con
β = 2,
poi ci si è accorti che un valore costante non era
adatto.
Jacobson ha proposto di rendere
β
proporzionale alla deviazione standard della funzione densità di probabilità
del tempo di arrivo di un acknowledgement. In paritcolare Jacobson ha suggerito di utilizzare la
media D
come stima approssimata della deviazione standard.
52
deviazione
ˆ
Alla ricezione di un acknowledgement è elaborata la dierenza tra il valore previsto e il valore osservato e viene
aggiornata la deviazione media in questo modo:
D = β · D + (1 − β) · |RT T − M |
ˆ
ˆ
ˆ
ˆ
con
0<β≤1
e solitamente
β=α
8 oppure
β=
19
4
Questo calcolo può essere eettuato in un calcolatore con poche istruzioni elementari.
I valori iniziali sono solitamente
M =0
e
RT T = 1, 5
Solitamente è impostato anche un valore massimo che
10 .
RT T
può raggiungere.
Nei sistemi GNU/Linux è 120
secondi
La maggior parte delle implementazioni di TCP utilizza l'algoritmo di Jacobson e impostano il timeout a:
T imeout = RT T + n · D
ˆ
ˆ
dove solitamente
n=4
.
Si utilizza per vari motivi 4. Sia perché si implementa con un solo shift nei registri, sia perchè meno dell'1% dei
pacchetti giunge in un tempo superariore a 4 volte la deviazione standard.
Spesso, ma non obbligatoriamente, in alcune implementazioni di TCP se arriva un pacchetto ICMP source
squence , viene trattato dall'algoritmo in modo molto simile ad un Timeout.
Algoritmo di Karn
Un problema che si verica nella stima dinamica di RTT è la scelta delle azioni da compiere quando un segmento
subisce un timeout e viene inviato nuovamente. Quando giunge l'acknowledgement, non è chiaro se fa riferimento alla
prima trasmissione o alla successiva.
Un errore di valutazione potrebbe seriamente contaminare la stima di RTT.
Phil Karn, un radioamatore, ha scoperto questo problema nel modo peggiore.
È un radioamatore interessato alla
trasmissione di pacchetti TCP/IP su ham radio, un mezzo molto inadabile (metà dei pacchetti vengono persi).
La proposta fatta da Karn è molto semplice:
Al contrario, il
evitare di aggiornare RTT per ogni segmento ritrasmesso.
Timeout viene raddoppiato a ogni errore
no a quando non arriva l'acknowledgement di un
segmento.
Questo signica che ogni volta che scatta il timeout si eettua l'operazione:
T imeout = T imeout · 2
Timer di persistenza
Viene utilizzato per evitare una particolare situazione di deadlock: se il destinatario risponde al mittente avvertendolo
che la sua nestra è larga
0,
il mittente smette di trasmettere. Quando il destinatario è pronto a ricevere, avverte il
mittente che la nestra è cambiata. Se questo pacchetto di avviso viene però perso, il mittente aspetterà all'innito.
Per questo motivo il mittente, ogni volta che scade il timer di persistenza, chiede al destinatario qual'è la situazione
della nestra. Questo timer viene utilizzato solo nel caso di nestra larga
0
ovviamente.
Timer keepalive
In alcune implementazioni viene utilizzato un timer di keep-alive che invia dei pacchetti su delle connessioni aperte
11 . Alcuni considerano questa funzionalità è
da molto tempo, per controllare che il destinatario sia ancora in ascolto
un po' controversa perché potrebbe rischiare di far cadere una connessione stabilita solo per un problema temporaneo
sulla rete.
Questa funzionalità può essere utile per mantenere attiva una connessione con un host dietro un NAPT. I NAPT
infatti solitamente chiudono le connessioni prive di attività dopo un po' di tempo per evitare di occupare porte.
8 Secondo A.Tanenbaum in Reti di calcolatori
9 Secondo altre fonti
10 In un commento scherzoso all'interno dei sorgenti
del kernel Linux, qualcuno scrive che questa limitazione sull'RTT massimo non potrà
permettere la comunicazione con TCP verso una ipotetica università su Marte, dato che l'RTT minimo verso marte è circa 900 secondi...
11 Nei sistemi GNU/Linux è possibile abilitare questa funzionalità passando uno specico parametro con setsocketopt (SO_KEEPALIVE )
durante l'inizializzazione di un socket TCP. I valori relativi alle tempistiche per questo timer sono regolati tramite i les:
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_probes
/proc/sys/net/ipv4/tcp_keepalive_intvl
Per altre informazioni consultare http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
53
Timeout di TIMED_WAIT
Anche dopo la chiusura di una connessione TCP con uno scambio completo di FIN/ACK da entrambi i lati, la
connessione resta in stato di TIMED_WAIT per un tempo pari dal
doppio del tempo di vita del pacchetto (MSL)
per garantire che alla chiusura di una connessione tutti i pacchetti correlati siano stati rimossi.
Fast retransmit e Fast recovery
Se il mittente vede tornare dal destinatario
3 ACK consecutivi con lo stesso acknowledge number, suppone che un
pacchetto inviato sia stato perso. In particolare se
AN = x
SN = x sia stato
x per ritrasmettere,
si suppone che il pacchetto inviato con
perso. Molto spesso è così, quindi questo metodo evita di dover aspettare il timeout del pacchetto
Viene ritrasmesso solo il pacchetto mancante, non si rinizia a trasmettere tutto.
non è detto che sia così. Ad esempio il pacchetto perso potrebbe aver semplicemente seguito una
guadagnando un po' di tempo.
Comunque
strada diversa dei precedenti, tuttavia questo caso è molto raro.
Questa funzionalità evita di dover aspettare un
intero intervallo di timeout, che alle volte può essere costoso un ordine di grandezza in più (in termini di tempo). Per
utilizzare questo metodo è necessario disabilitare la funzionalità di Delayed ACK per la ricezione di segmenti fuori
sequenza.
Questa funzionalità
non è implementata in TCP Tahoe ma è presente in più recenti implementazioni come ad
esempio TCP Reno.
Controllo della congestione
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
Agli strati inferiori (IP, datalink) il controllo di congestione non è implementato. Deve occuparsene TCP.
Essendo TCP implementato solo negli host nali, sono loro a doversi occupare del controllo di congestione.
La vera soluzione alle congestioni è la diminuzione della velocità dei dati.
L'idea è impedire l'inserimento di un pacchetto nella rete no a quando uno vecchio non la lascia (cioè viene
consegnato). Una sorta di legge di conservazione dei pacchetti.
TCP raggiunge questo scopo manipolando in modo dinamico la dimensione della nestra di ricezione che
comunica all'altro interlocutore.
Oggi la perdita di un pacchetto (a parte le reti wi che sono un caso particolare) è praticamente sempre dovuta
a congestioni. Gli errori di trasmissione sono abbastanza rari.
Quando si instaura una connessione viene scelta una dimensione della nestra adatta alle due parti e gli host
iniziano a comunicare. Il problema è che questa nestra potrebbe non essere adatta per la rete sottostante. I
due host devono rendersene conto ascoltando i timeout che scattano.
Ogni mittente tiene traccia di due nestre: quella che il ricevente gli ha garantito (RWND - Recive Window ) e
una
nestra di congestione (CWND - Congestion Window ).
12 :
Il numero di byte che è possibile trasmettere corrisponde alla più piccola delle due nestre
ˆ NB:
WS = min (RW N D, CW N D)
Nelle prossime formule, per le nestre utilizzeremo come unità la
M SS
Avvio lento - Slow start
ˆ
ˆ
Inizialmente il mittente pone la nestra di congestione alla dimensione del segmento massimo usato sulla connessione (MSS ), poi invia un segmento massimo (CW N D
si parte con un
= 1).
(In alcune implementazioni più recenti di TCP
CW N D = 4)
Se il segmento riceve ACK prima della scadenza del timeout, aggiunge alla nestra di congestione un numero
pari alla dimensione del segmento appena riscontrato, di modo che la nestra di congestione raddoppia. Quindi CW N D raddoppia e mando due segmenti di lunghezza MSS.
SST HRESH come spieghermo tra breve). Abbiamo quindi che, per
(Questo accade solo quando
CW N D <
ogni segmento riscontrato:
CW N D = CW N D + 1
nonostante sia una somma, la
ˆ
CW N D
aumenta in modo esponenziale, perchè i pacchetti che la vanno ad
incrementare aumentano sempre di più.
Il nome slow start trae un po' in inganno, infatti la crescita della
13
CW N D
è tutt'altro che lenta, è esponen-
ziale
12 Su alcuni testi e programmi la W viene solitamente chiamata SN DW N D
S
13 In realtà l'incremento della CW N D potrebbe essere più lento nel caso in cui
ACK (vedi i paragra precedenti).
54
il ricevitore decida di adottare la tecnica del Delayed
Congestion avoidance
ˆ
Quando l'apertura della congestion window supera la soglia
si entra nella regione di congestion
CW N D
avoidance ,
SST HRESH
(cioè quando
CW N D ≥ SST HRESH ),
dove la crescita della congestion window diventa lineare:
aumenta linearmente di un MSS per ogni intervallo di tempo RTT, indipendentemente dai pacchetti
riscontrati. Si eettua cioè ancora
CW N D = CW N D + 1
ˆ
ˆ
ma
solo ogni intervallo di tempo RTT, non per ogni riscontro.
Inizialmente
SST HRESH = 64KB = 65535
. Questa soglia iniziale viene decisa dal sistema operativo. Può
essere maggiore se si fa uso dell'opzione window scale.
Per ovvi motivi
SST HRESH ≥ 2
Timeout
ˆ
Nel caso in cui invece scatta un timeout oppure 3 ACK duplicati :
Se si sta utilizzando l'implementazione classica TCP Tahoe : La nuova soglia diventa
WS
SST HRESH = max 2,
2
e
CW N D = 1
(a meno di trattative iniziali sul numero minimo di
CW N D). WS
possiamo vederlo come il
numero di pacchetti in giro. TCP Tahoe non ha la funzionalità di Fast Retransmit, quindi non gestisce il
caso dei 3 ACK duplicati.
Se si sta utilizzando l'implementazione avanzata TCP Reno : La nuova soglia diventa
CW N D
SST HRESH = max 2,
2
se c'è stato eettivamente un timeout allora
ˆ
ˆ
invece
Ovviamente CWND cresce no a raggiungere la dimensione della nestra del ricevente, a quel punto smetterà
di crescere.
Insieme alla nestra, aumenta anche il rate di trasmissione stimato come
R =
ˆ
CW N D = 1, se ci sono stati 3 ACK duplicati
CW N D = SST HRESH
CW N D · M SS
RT T
bit
s
(ricordiamo che CWND è misurato in unità di MSS)
Ovviamente se non ho
M SS
dati da mandare: aspetto di averne, altrimenti mi tocca mandarne meno.
Esempio
55
Rivelazione d'errore
Ci sono diversi tipi di errore all'interno di una comunicazione TCP:
ˆ Segmenti corrotti
: sono dei segmenti per i quali il checksum risulta errato. Il checksum TCP sono abbastanza
deboli, ma si continua ad utilizzarli comunque.
ˆ Segmenti persi
ˆ Segmenti duplicati
ˆ Segmenti fuori sequenza
: sono i segmenti che ci accorgiamo di aver perso osservando gli acknowledgment.
: sono i segmenti che arrivano doppi
: sono segmenti recapitati correttamente ma arrivati prima di altri che mi stavo
aspettando di ricevere.
Correzione d'errore
ˆ Ritrasmissione
ˆ Scarto
ˆ Riordino
dei segmenti corrotti o persi.
dei segmenti duplicati.
dei segmenti fuori sequenza.
TCP e UDP su reti wireless (approfondimento )
ˆ
In base alla gerarchia ISO/OSI o Internet, UDP e TCP non dovrebbero preoccuparsi del fatto che ip sia in
esecuzione su bra ottica oppure su onde radio. Nella realtà però l'informazione è importante perchè TCP sopratutto, nella maggior parte delle sue implementazioni, è stato fortemente ottimizzato sulla base di supposizioni
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
vere per le reti cablate ma non per quelle wireless.
Il problema principale è il
controllo di congestione: quasi tutte le implementazioni di TCP suppongono che
i timeout siano provocati dalla congestione, non da pacchetti realmente persi.
Sfortunatamente i collegamenti wireless sono altamente inadabili, perdono pacchetti in continuazione.
Quando viene perso un pacchetto su una rete cablata il mittente dovrebbe rallentare, quando invece viene perso
un pacchetto su una rete wireless il mittente dovrebbe ritentare con determinazione. Se il mittente non sa su
che rete sta lavorando, prendere la decisione è dicile.
Spesso il percorso è eterogeneo: una rete cablata seguita da una rete wireless.
Una delle soluzioni è modicare il codice dello strato network nella stazione wireless base. Una delle modiche
è l'aggiunta di un
agente di snooping (agente di indagine) che osserva e archivia nella cache i segmenti TCP
in uscita dall'host mobile e gli acknowledgement provenienti da esso.
Quando l'agente di snooping vede passare un segmento diretto all'host mobile, ma non vede tornare l'acknowledgment, ritrasmette il pacchetto all'host mobile senza avvertire l'origine.
Anche nel caso in cui l'agente di snooping vede acknowledgement duplicati provenienti dall'host mobile, capisce
che si è perso qualcosa.
L'agente di snooping intercetta eventuali acknowledgement duplicati provenienti dall'host mobile e non li manda
alla sorgente, per evitare che essa pensi ad una congestione nella rete.
Quando l'agente di snooping osserva una lacuna nei numeri di sequenza genera un richiesta di ripetizione selettiva
dei byte mancanti.
Algoritmi e protocolli di instradamento
Requisiti degli algoritmi di instradamento
ˆ Semplicità - KISS (Keep It Simple Stupid!)
ˆ Robustezza
ˆ Stabilità
ˆ Ottimalità
: più guasti ci sono, più intervento umano è necessario, meno la rete è scalabile.
: l'instradamento deve essere il più possibile coerente con la forma originale al passare del tempo.
: riuscire a sfruttare meno collegamenti possibili e prediligere collegamenti veloci ad altri lenti.
56
Pacchetti da instradare
ˆ
ˆ
I pacchetti utente in un
circuito virtuale
seguono lo stesso percorso, è solo necessario instradare la segnalazione
iniziale
I pacchetti utente di una rete a
datagramma
devono essere instradati ciascuno indipendentemente
Decisione dell'instradamento
Algoritmi centralizzati
Un nodo prende le decisioni e le invia a tutti gli altri nodi per farlo sapere.
Algoritmi distribuiti
Tutti i nodi della rete si scambiano delle informazioni e collaborano per raggiungere la soluzione ottima da qualche
punto di vista
Algoritmi isolati
Ogni nodo prende le decisioni in modo autonomo e indipendente dagli altri
Tipi di algoritmi di instradamento14
ˆ
Algoritmi di instradamento
senza tabella (non c'è nessuna tabella sui nodi che eettuano il routing):
Random: Detto anche hot potato , invio il pacchetto al primo posto che capita. È utilizzabile per reti
molto piccole e semplici.
un nodo.
Solitamente la scelta è casuale ma non uniforme sui collegamenti uscenti da
Un collegamento con capacità maggiore ha più probabilità di essere scelto.
selezionare un generico link
* Selective random
i
è data da:
pi =
La probabilità di
Ci
H
P
Cj
j=1
: Una piccola variante nella quale si tiene una tabella solo per i nodi adiacenti.
Se il pacchetto è diretto ad un nodo adiacente lo inoltro direttamente, altrimenti utilizzo la modalità
random.
Flooding: Invio il pacchetto su tutte le interfacce eccetto quella su cui l'ho ricevuto. Rischio di generare
tempeste e sfrutto male le risorse che ho. Questa tecnica implica una moltiplicazione del traco uscente
dal nodo, rispetto a quello entrante. Come vantaggio di sicuro raggiungo la destinazione. È una tecnica
ineciente che può essere utile in alcuni contesti particolari: vedi ad esempio reti militari dove un nodo
intermedio può saltare per aria da un momento all'altro.
* Controllo del traco interno
: Al ne di evitare pacchetti che circolano all'interno della rete al-
l'innito, solitamente ogni pacchetto che sfrutta questa tecnica di instradamento deve essere dotato di
un contatore che indica il numero di hop (salti, nodi intermedi) che può ancora attraversare. Ogni
nodo che riceve il pacchetto decrementa questo valore.
Al primo invio del pacchetto bisogna quindi
assicurarsi che il valore iniziale di questo contatore sia pari al diametro dell'intera rete.
* Selective ooding
: È possibile migliorare l'ecienza di questo algoritmo, ad esempio tenendo una
tabella che permette di capire su quale gruppo di collegamenti ha senso inviare dati. Facendo questo
perdiamo però i principali vantaggi di assoluta robustezza del ooding puro.
Source routing: La scelta del percorso viene fatta dalla sorgente del pacchetto scrivendola all'interno
del pacchetto. I nodi intermedi non devono processare niente. La sorgente deve avere una mappa sempre
costantemente aggiornata della rete e deve inviare pacchetti molto grandi. Per scegliere il percorso, il nodo
sorgente può utilizzare algoritmi di routing
* Path server
* Path discovery
centralizzati (un path server) o isolati (con path discovery ).
: Il nodo sorgente consulta un server esterno per sapere quale percorso seguire. Questo
metodo ha bassa adabilità, se ci sono guasti al path server non funziona più nulla.
: Il nodo sorgente invia in ooding un pacchetto alla destinazione; ogni nodo su cui
transita il pacchetto aggiunge un proprio identicatore. Quando il pacchetto arriva a destinazione, la
destinazione risponde alla sorgente (ripercorrendo al contrario il percorso) e comunicando la strada che
ha seguito il pacchetto per riuscire ad arrivare. La sorgente riceverà varie risposte e si preoccuperà di
*
scegliere quella con percorso minore.
In ogni caso con un algoritmo source routing dobbiamo decidere se mantenere un instradamento statico
o dimanico.
Nel caso in cui scegliamo di renderlo dinamico, la frequenza di interrogazione del path
server o dell'utilizzo del path discovery diventano un parametro critico del sistema.
14 Nel
seguito potrebbe apparire a volte la parola intradamento o la sua traduzione inglese routing
57
ˆ
Algoritmi di instradamento
con tabella:
Fisso: quando si seguono procedure di modica lente e spesso manuali. In reti con instradamento sso
il servizio a datagramma degenera in quello a circuito virtuale, dato che i pacchetti seguono praticamente
sempre lo stesso percorso (a meno di rare modiche manuali sulle tabelle di instradamento). Si tratta di
un algoritmo poco essibile e sensibile ai guasti.
Dinamico: consentono di ottimizzare continuamente l'utilizzo delle risorse, facendo continue considerazioni
sulle condizioni operative. I due principali motivi che causano la variazione delle condizioni operative sono:
variazione del traco oerto alla rete e gli eventi di guasto. L'algoritmo di routing dinamico deve
evitare un sovraccarico dei nodi della rete (con conseguente riempimento dei buer ed aumento dei ritardi
o perdita dei pacchetti) e deve reagire ai guasti modicano la topologia di rete. L'algoritmo deve quindi
aggiornare con adeguata periodicità i percorsi e quindi le tabelle di instradamento.
I due algoritmi di
instradamento dinamico più utilizzati a livello di reti regionali sono:
* Distance vector
* Link state
ˆ
Algoritmi di instradamento
gerarchici: È la strategia che si usa di fronte ad una rete molto grande, suddivissa
in regioni con amministrazioni diverse tra loro. Le decisioni di instradamento vengono prese sulle informazioni
complete relative ad una singola regione, mentre per quanto riguarda il resto della rete, le informazioni vengono
prese su delle informazioni riassunte o semplicate.
In Internet si utilizzano instradamenti di tipo
gerarchico sso o dinamico.
Metriche
Per ogni coppia sorgente-destinazione si seleziona solitamente la via a costo minimo per raggiungere la destinazione,
cioè quella che impiega il minor numero di risorse. Il costo del percorso può però essere denito a seconda di varie
metriche:
ˆ
ˆ
ˆ
ˆ
Il
numero di salti, cioè il numero di nodi che bisogna attraversare lungo il percorso.
Il
traco smaltito lungo la via.
Il
livello di riempimento dei buer dei nodi attraversati.
Il
ritardo totale di trasferimento sorgente-destinazione.
Nella prima metrica il costo di ciascun ramo è naturalmente unitario, mentre nelle altre metriche il costo di un
collegamento varia a seconda della direzione in cui lo si percorre.
Algoritmo distance vector
Nell'algoritmo di tipo distance vector, ogni nodo dispone di una tabella (la tabella di instradamento ), che mantiene
continuamente aggiornata. Questa tabella specica per ogni destinazione la distanza (attualmente) stimata e il next-
hop , cioè il prossimo nodo da contattare. In questo caso consideriamo il termine distanza come sinonimo di costo.
Si noti che per questo algoritmo è possibile scegliere una metrica qualunque tra quelle prima citate.
15 :
La struttura della tabella è quindi fatta in questo modo
Destination
Distance
Next-hop
A
1
G
B
0
-
C
3
F
D
∞
...
...
ˆ
ˆ
ˆ
15 In
...
Ogni nodo comunica periodicamente il vettore delle distanze (distance vector ) a tutti i nodi adiacenti ad esso.
Il vettore delle distanze è una tabella come quella sopra rappresentata, ma privata del campo next-hop.
Ogni nodo conosce la distanza che lo separa da ognuno dei nodi adiacenti e riceve il vettore delle distanze dai
nodi adiacenti, che provvede ad aggiornare sommando le distanze per raggiungerli. La tabella viene aggiornata
con nuovi dati solo se le nuove distanze per certe destinazioni sono inferiori a quelle precedenti.
Se la nuova distanza ricevuta non è minore di quella precedente, ma arriva dal nodo utilizzato come next-hop
per quella destinazione, la riga nella tabella viene comunque aggiornata.
questo esempio assumiamo il nodo B collegato direttamente al nostro nodo, quindi non c'è next-hop. La distanza non è però detto
che sia 0 per tutti i nodi direttamente collegati, dipende dalla metrica scelta.
58
ˆ
ˆ
Se si ottiene una nuova stima di distanza verso un'altro next-hop uguale a quella attualmente in tabella, si
aggiorna comunque la voce, in quanto si preferiscono sempre stime più recenti nell'instradamento dinamico.
I nodi di cui non si conosce la distanza vengono marcati come a distanza innita nella tabella.
Algoritmo di Bellman-Ford
È l'algoritmo alla base dell'instradamento distance vector, che viene utilizzato da un generico nodo
s
per calcolare
l'albero dei cammini minimi verso tutte le destinazioni come informalmente descritto prima.
ˆD
ˆd
h
j : Costo della via a costo minimo dal nodo sorgente
ij : Costo del collegamento diretto tra i e j ;
1.
h=0
2.
Djh = ∞ ∀j 6= s
3.
h=h+1
4.
Djh = mini Dih−1 + dij , Djh−1
5. if
Djh = Djh−1
(a)
dij = ∞
s
al nodo
j
con un numero massimo di
h
salti.
se i due nodi non sono connessi direttamente.
∀j 6= s
hmax = h − 1
6. else
(a) goto 3
7. stop
Count to innity
In generale l'algoritmo distance vector registra con ecienza l'inserimento di nuovi nodi nella topologia di rete, mente
in alcuni casi la rimozione di nodi può dare luogo a problemi. L'esempio classico è quello di una rete lineare: una
catena di nodi collegati uno dopo l'altro in successione. Se l'ultimo della catena si spegne la notizia impiega tanti
cicli di avviso quanti sono i nodi della rete per propagare il messaggio, questo è legato al fatto che il nodo adiacente a
quello spento, pensa di poterlo raggiungere tramite quello successivo, senza sapere che il percorso scelto lo attraversa.
Il costo per contattare il nodo spento aumenta sempre di più no a quanto raggiunge il valore massimo rappresentabile. Questa situazione va sotto il nome di count to innity dato che risulta evidente il crescere continuo delle
distanze stimate dei nodi della rete verso il nodo non più raggiungibile.
Split horizon
È la tecnica che permette di fronteggiare l'evento di count to innity. Sostanzialmente l'idea è di impedire che una stima
di distanza verso un nodo di destinazione sia inviata sul collegamento utilizzato per realizzare quell'instradamento.
C'è anche una ulteriore variante split horizon with poisoned reverse che consiste nel consentire l'aggiornamento
senza vincoli a tutti i vicini, ponendo però il costo a innito se il vicino a cui si invia l'informazione è proprio il nodo
successivo lungo la via a costo minimo per raggiungere la destinazione in questione.
Ha il problema di funzionare solo con reti lineari (reti con nodi in cascata uno dopo l'altro) e non in reti con cicli.
Algoritmo distance vector in Arpanet
L'algoritmo distance vector è stato utilizzato no al 1979 per la gestione della rete Arpanet (l'antenata di Internet), con
un periodo di aggiornamento di circa 100 millisecondi. La metrica di costo utilizzata era il livello di riempimento dei
buer, cosa che si rivelò non accurata, poiché trascurava la capacità dei collegamenti (dettaglio abbastanza importante
in molti casi).
Algoritmo link state
Rivelò anche una certa lentezza a convergere in situazioni dinamiche e per questo è stato poi sostituito con l'algoritmo
di tipo link state.
Ogni nodo misura periodicamente la distanza dai propri vicini e comunica queste misure in modo ooding a tutti
gli altri nodi utilizzando una unità informativa chiamata link state packet (LSP). L'algoritmo link state è utilizzato
attualmente su Internet, adottando come metrica di costo il ritardo medio rilevato sul percorso, con un periodo di
aggiornamento nell'ordine di 10 secondi.
Riassumendo, ogni nodo:
59
1. Scopre i propri vicini e relativi indirizzi di rete
2. Misura il costo verso ogni vicino
3. Costruisce un pacchetto (LSP) che contiene tutte le informazioni raccolte
4. Invia questo pacchetto a tutti gli altri router in modalità ooding
5. Elabora il percorso più breve verso tutti gli altri router (utilizzando i dati ricevuti dagli altri)
Misurazione del costo della linea
L'algoritmo di routing di tipo link state richiede che ogni nodo abbia una stima ragionevole del ritardo verso ciascuno
dei suoi vicini. Questo può essere ottenuto inviando uno speciale pacchetto ECHO, al quale dall'altra parte devono
rispondere il più velocemente possibile. Quando arriva la risposta si misura il tempo trascorso e si divide per due. Per
ottenere risultati ancora più precisi si può mediare il risultato inviando in continuazione.
È lecito domandarsi se abbia senso tenere conto del carico dei collegamenti all'interno della metrica di costo. C'è
un aspetto neagativo che sconsiglia di fare questa scelta, infatti si considerino due nodi collegati da due collegamenti
diretti: iniziamo a trasmettere dati solo sul primo collegamento, a un certo punto diventa sovraccarico e iniziamo a
instradare pacchetti sul secondo collegamento, allora il secondo diventa sovraccarico e si torna ad utilizzare il primo.
Ci accorgiamo quindi che può venirsi a formare un ciclo che provoca instradamenti irregolari e altri potenziali
problemi. Una scelta migliore può essere quella di distribuire il carico su più linee, attribuendone frazioni ben denite
per ciascuna.
Costruzione dei pacchetti LSP
Dopo aver raccolto tutte le informazioni necessarie, ogni nodo deve costruire un pacchetto contenente tutti i dati. Il
pacchetto contiene:
ˆ L'identità del mittente
ˆ Un numero di sequenza
: dato che l'invio viene fatto in ooding si vogliono evitare tempeste di pacchetti e
duplicati come già discusso prima.
ˆ L'età
ˆ La lista dei vicini
del pacchetto
: con relativi indirizzi e costo per raggiungerli
Distribuzione dei pacchetti LSP
Come già detto, viene utilizzato il ooding per distribuire i pacchetti. Per tenere sotto controllo il usso di dati, viene
inserito un numero di sequenza in ogni pacchetto che è incrementato per ogni nuovo pacchetto inviato. I nodi tengono
tracca di tutti i pacchetti (sorgente, numero di sequenza) ricevuti. Quando arriva un nuovo pacchetto da un nodo, si
verica se per quella sorgente è già stato ricevuto un pacchetto con numero di sequenza maggiore. In caso aermativo
il pacchetto ricevuto viene scartato, in caso contrario viene letto.
Numeri di sequenza ripetitivi potrebbero generare il caos.
Per evitare questo problema si utilizzano numeri di
sequenza a 32 bit; nell'ipotesi di trasmettere un pacchetto al secondo, i numeri di sequenza impiegano 137 anni ad
esaurirsi, quindi è possibile tralasciare questa possibilità.
Quando un router si blocca perde traccia dei suoi numeri di sequenza e il conteggio ricomincia da zero. Inoltre se
un numero di sequenza dovesse arrivare danneggiato e il ricevitore legge 65535 al posto di 1, tutti i pacchetti 2,3,4
successivi saranno ignorati poiché obsoleti.
Per risolvere questi problemi si utilizza un campo età all'interno di ogni pacchetto e se ne decrementa il valore
una volta al secondo. In questo modo le informazioni ricevute dopo un po' di tempo scadono inevitabilmente.
Algoritmo di Dijkstra
È l'algoritmo distributo utilizzato per la ricerca dei cammini minimi all'interno di un grafo. Con questo algoritmo si
costruisce l'albero a partire da un generico nodo sorgente s denendo le seguenti quantità:
ˆD
ˆd
ˆN
ˆM
ˆ V (M )
j : Costo della via a costo minimo dal nodo sorgente
ij : Costo del collegamento diretto tra
i
e
j
;
d=∞
s
al nodo
j
se i due nodi non sono connessi direttamente
: insieme dei nodi della rete
: insieme dei nodi dell'albero corrente
: insieme dei nodi adiacenti all'insieme
M
, raggiungibili cioè in un solo salto da un nodo qualunque di
M
60
L'algoritmo di compone dei seguenti passi:
1.
M = {s}
2.
Dj = dsj , ∀j ∈ V (s)
3. Scegli
altrimenti
Dj = ∞
k ∈ V (M ) | Dk = mini∈V (M ) {Di }
(a)
M = M + {k}
(b)
Dj = min {Dj , Dk + dkj } , ∀j ∈ V (M )
4. if
M =N
stop
5. else goto 3
Intradamento gerarchico
Le tabelle di instradamento hanno una dimensione che dipende dal numero di nodi della rete. Quando la rete diventa
molto vasta la dimensione eccessiva delle tabelle può creare problemi di allocazione di memoria nei nodi e un carico
eccessivo per la distribuzione di tutte le informazioni. Un instradamento gerarchico risolve questo problema raggruppando i nodi in regioni, così che ogni nodo conosce la topologia della propria regione ma ignora quella delle altre. Se i
nodi della rete sono
N e sono organizzati in M regioni con K nodi ciascuna, senza l'instradamento gerarchico abbiamo
N elementi. Se invece sono organizzati con instradamento gerarchico in regioni abbiamo bisogno
bisogno di tabelle da
solo di
K +M −1
voci.
La strutturazione gerarchica può essere estesa denendo più livelli di gerarchia, in modo da garantire una gestione
ottimale delle tabelle di instradamento.
Instradamento sulla rete Internet
Struttura generale della rete Internet
La connettività alla rete Internet è oerta dagli
ISP (Internet Service Provider ),
che ortono connettività agli utenti
nali. I vari ISP sono interconnessi tra loro e si suddividono in modo gerarchico in:
ˆ International ISP (Tier-1)
ˆ National ISP (Tier-1)
ˆ Regional ISP (Tier-2)
ˆ Local ISP (Tier-3)
ˆ Intranet
: termine a volte adottato per reti aziendali o campus universitari
Un ISP internazionale è naturalmente collegato con altri ISP internazionali mediante vari collegamenti, ISP nazionali
e regionali sono di norma collegati a ISP internazionali, ma sono anche collegati tra loro (per scambiarsi il traco
interno al paese). Allo stesso modo gli ISP locali.
Tassonomia
ˆ BSP
(Backbone Service Provider ) e
NAP (Network Access Point ):
forniscono solamente servizi di connettività
tra ISP.
ˆ CN
ˆ POP
ˆ AS
(Customer Network ): rete del cliente.
(Point Of Presence ): punto di interconnessione tra le CN.
(Autonomous System )
16 : È una rete indipendente da tutte le altre, solitamente gestita da una organizzazione
o uno stato, al cui interno è possibile utilizzare protocolli di routing interni.
ˆ IG
ˆ EG
(Interior Gateway ): Router interni ad un Autonomous System
(Exterior Gateway ):
Router esterni ad un Autonomous System, che devono permettere la connessione
dell'Autonomous System con tutti gli altri.
Sono il punto di transito per tutte le connessioni uscenti dagli
Autonomous System.
Internet viene gestito da
ISOC (Internet SOCiety )
divisa in
IETF (Internet Engineering Task Force ) e la IRTF
RFC (Request For Com-
(Internet Research Task Force ). Tutti gli standard vengono rilasciati mediante documenti
ments ), come già visto.
16 Nel
seguito, spesso si utilizzerà la forma compatta AS 61
Tipi di protocolli di routing
In Internet vengono utilizzati due tipi di protocolli di routing:
ˆ IGP
(Interior Gateway Protocol ): Protocolli di routing utilizzati all'interno degli Autonomous System. I più
noti sono
ˆ EGP
RIP
e
OSPF .
(Exterior Gateway Protocol ): Protocolli di routing utilizzati per l'instradamento tra Autonomous System
diversi. Il protocollo EGP utilizzato in internet è chiamato
BGP (Border Gateway Protocol )
e sarà descritto
nel seguito.
I protocolli di routing stabiliscono essenzialmente:
ˆ
ˆ
ˆ
Un algoritmo per selezionare il percorso
La scelta di una metrica per decidere il peso di un collegamento
La modalità di trasferimento delle informazioni e la frequenza di aggiornamento
Vediamo prima due protocolli di routing di tipo IGP e poi un protocollo EGP.
RIP - Routing Information Protocol
È stato il primo protocollo di routing IGP (denito in RFC1058), utilizzato in ARPANET e in alcune reti geograche
no al 1979, viene tutt'ora utilizzato in alcune reti. La metrica in ARPANET era basata sulla lunghezza delle code
(e non sulla velocità dei link), come già discusso precedentemente. Anche con metriche diverse (numero di hop) si è
notato che era troppo lento a convergere in un contesto dinamico.
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
I pacchetti RIP vengono incapsulati all'interno di datagrammi UDP (sulla porta 520). La metrica utilizzata è il
numero di hop (il cui massimo è 16).
La valutazione della rotta migliore viene fatta per ogni destinazione.
Un valore di distanza uguale a 16 corrisponde ad una distanza innita, quindi RIP non può essere adottato
all'interno di un AS di grandi dimensioni che richiede l'attraversamento di più di 15 router.
Ogni router comunica la propria tabella delle distanze ai router direttamente raggiungibili. Il messaggio RIP
contiene una coppia <Network address, distance>.
I messaggi RIP sono inviati ogni 30 secondi per garantire la dinamicità ai cambiamenti della rete.
Il meccasimo per l'aggiornamento della tabella di routing è lo stesso descritto precedentemente per gli algoritmi
di routing di tipo distance vector.
In assenza di messaggi periodici ricevuti, si considera il router remoto non più raggiungibile e viene quindi
dichiarato a distanza innita. I successivi messaggi scambiati permetteranno di aggiornare l'instradamento.
Struttura della trama RIP
Command (8 bit)
(32 bit)
Version (8 bit)
0000000000000000
Address family identier net 1 (16 bit)
Field A (16 bit)
IP address net 1 (32 bit)
Field B (32 bit)
Field C (32 bit)
Distance net 1 (32 bit)
...
Il messaggio RIP può trasportare no a 25 coppie <Network address, distance>. Il formato del messaggio sopra
rappresentato contiene solo una di queste coppie (riferita ad una generica net 1). I campi del messaggio sono:
ˆ Command
ˆ Version
ˆ Address family identier net 1
ˆ IP address net 1
ˆ Distance net 1
(8 bit): Identica il tipo di messaggio (di richiesta o di risposta)
(8 bit): specica la versione del protocollo RIP utilizzata.
(16 bit): Specica qual'è la classe di indirizzi di rete adottata
(32 bit): Indica l'indirizzo di rete a cui si riferisce l'informazione di distanza successiva.
(32 bit): Specica la distanza (in numero di salti) del router che origina il messaggio alla rete
specicata.
62
A,B,C a 0. È stata creata una seconda versione
RIPv2 (RFC1723) che resta retrocompatibile con la prima versione pur aggiungendo
nuove funzionalità, tra cui: un meccanismo di autenticazione, l'informazione relativa alla subnet mask e il next-hop
La prima versione del protcollo (con version=1) pone tutti i campi
del protocollo RIP, denominata
router utilizzato. Se si utilizza la versione 2 di RIP abbiamo questi altri campi:
ˆ Field A
Assume il valore route tag net 1, cioè identica il sistema autonomo che ha originato
(16 bit):
l'informazione di distanza verso la rete net 1 ˆ Field B
(16 bit): Assume il valore netmask net 1, cioè indica la subnet mask da utilizzare insieme all'indirizzo
IP della rete.
ˆ Field C
Assume il valore next hop net 1, cioè indica il router successivo relativo alla distanza
(16 bit):
comunicata.
Con la versione 2 di RIP e l'introduzione del Field A e C, si prevengono situazioni di loop intrinseche degli algoritmi
di tipo distance vector.
OSPF - Open Shortest Path First
Protocollo di routing IGP di tipo link state, che fa uso dell'algoritmo di Dijkstra, utilizzato all'interno di molti
Autonomous System.
È diventato uno standard nel 1990 (RFC2328). Oggi è supportato dalla maggior parte dei produttori di router ed
è il principale protocollo di routing per gateway interni. OSPF è stato successivamente esteso in OSPF-TE (Trac
Engineering Extensions to OSPF) per tenere conto del traco per il costo di ogni link.
I pacchetti OSPF vengono incapsulati direttamente dentro i datagrammi IP (impostando come identicatore di
protocollo all'interno del datagramma IP il numero 89).
Quando fu ideato venne stilata una lista di requisiti che il protocollo doveva avere:
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
Doveva essere
pubblicato senza vincoli di brevetto, motivo della parola Open nel nome, che è l'opposto
di proprietario.
Doveva supportare
diverse metriche di distanza (distanza sica, ritardo, ...)
Doveva essere un algoritmo
dinamico, in grado di modicarsi rapidamente e automaticamente in base alla
topologia.
Supportare
routing basato sul tipo di servizio. OSPF doveva essere in grado di instradare il traco in
tempo reale in modo diverso dal resto. Questo campo fu incluso in OSPF ma alla ne venne rimosso perchè
(come nei datagrammi IP) non veniva utilizzato mai da nessuno.
Doveva eettuare il
bilanciamento del carico, cioè suddividere il carico su più linee. Suddividendo il carico
in molti casi si ottengono prestazioni migliori.
Supportare
Gestire la
sistemi gerarchici
sicurezza per evitare che utenti possano imbogliare i router, inviando false informazioni.
Tipi di connessioni e reti gestite da OSPF
ˆ
ˆ
ˆ
Linee punto-punto tra due router
Reti multiaccesso con trasmissione broadcast (la maggior parte delle LAN)
Reti multiaccesso senza trasmissione broadcast (la maggior parte delle WAN a commutazione di pacchetto)
Nel caso di reti multiaccesso dove sono presenti due router OSPF, solo uno di essi denominato designated
viene autorizzato ad inviare messaggi agli altri.
router La procedura di elezione del designated router avviene mediante
scambio di messaggi OSPF di tipo Hello , con cui viene anche scelto un router di backup.
Gerarchia in OSPF
Molti AS di Internet sono grandi e dicili da gestire, quindi vengono suddivisi in più
aree. Ogni area è una rete o
un insieme di reti contigue. Alcuni router possono comunque non appartenere a nessuna area. Ogni AS ha un'area
dorsale chiamata Area 0 (solitamente identicata dall'indirizzo 0.0.0.0). Tutte le aree sono collegate alla dorsale,
perciò è possibile passare da un'area qualunque ad un'altra dello stesso AS passando per la dorsale. Ogni area viene
identicata da un indirizzo a 32 bit, mentre i router sono identicati dal proprio indirizzo IP su una delle interfacce.
I router all'interno dell'area hanno il compito principale di calcolare il percorso più breve verso ogni altro router
nell'area. Un router che collega due aree ha bisogno dei database di antrambe le aree e deve eseguire separatamente
un diverso algoritmo di ricerca del percorso più breve per ogni area.
I router in OSPF si suddividono in:
63
ˆ Interal routers
ˆ AS boundary routers
ˆ Area border routers
: tutte le loro interfacce appartengono alla stessa area
: sono collegati ad almeno un router fuori dall'AS
: hanno interfacce che appartengono ad aree dierenti. Almeno una delle loro interfacce
deve essere nell'area 0 di backbone.
Funzionamento del protocollo
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
All'avvio, un router trasmette un messaggio Hello a tutti i router vicini attraverso tutte le sue linee punto-punto
e comunica questi messaggi in modalità multicast sulle LAN.
Durante le normali operazioni, ogni router invia periodicamente in selective ooding messaggi di tipo
LSU (Link
State Update ) a ognuno dei suoi router adiacenti. Questo messaggio comunica lo stato del dispositivo e i costi
utilizzati nel database della topologia di rete.
I router che ricevono questo messaggio rispondono con un messaggio di acknowledgement Link State Acknowl-
edgement, che rende questi messaggi adabili. Ogni messaggio ha un numero di sequenza, quindi un router può
scoprire se un
LSU
appena arrivato è nuovo o vecchio.
I router inviano i messaggi
LSU
anche nel caso in cui un collegamento si attiva, si disattiva o cambia il suo
costo.
I messaggi di tipo Database Description vengono utilizzati dal router, al momento di cambio della topologia di
rete, per concordare una regola di numerazione dei collegamenti. Questi messaggi sono utilizzati quando una
linea viene attivata.
Tutti i router conservano una sopia di tutti i pacchetti
LSU
ricevuti e li comparano con i nuovi in arrivo. Se
contengono nuove informazioni (diverse dalle precedenti), vengono inviate le nuove informazioni ricevute in modo
selective ooding (su tutte le interfacce tranne quella su cui è stato ricevuto il pacchetto).
Ognuno dei partner può richiedere all'altro alcune informazioni sullo stato dei collegamenti utilizzando i pacchetti
Link State Request.
In questo modo si può controllare chi ha i dati più recenti e propagare le informazioni
attraverso l'area.
Le informazioni raccolte, permettono ad ogni router di calcolare il percorso più breve verso ogni altra destinazione
utilizzando l'algoritmo di Dijkstra.
Ogni pacchetto
LSU
contiene un insieme di dati
LSA (Link State Advertisement)
che possono essere dati di
svariato tipo:
Router LSA: Distanza tra un router e le destinazioni adiacenti all'interno dell'area
Network LSA: La distanza tra il router centrale e le destinazioni su una LAN
Summary LSA: La distanza tra un router di tipo border area router e le destinazioni adiacenti fuori
dall'area (ma sempre all'interno dell'AS)
AS boundary router summary LSA: Distanza tra un border area router e un AS boundary router .
AS external LSA: Distanza tra un AS boundary router e una destinazione esterna.
Struttura della trama OSPF
Come già accennato, OSPF viene incapsulato direttamente all'interno dei datagrammi IP.
Version (8 bit)
(32 bit)
Type (8 bit)
Message Lenght (16 bit)
Source router IP address (32 bit)
Area ID (32 bit)
Checksum (16 bit)
Authentication type (16 bit)
Authentication (Byte 0-3)
Authentication (Byte 4-7)
Viene indicata, oltre alla versione del protocollo anche il tipo di messaggio, i più importanti sono:
Tipo
Messaggio
1
Hello
2
Database description
3
Link state request
4
Link state update
5
Link state acknowledgement
64
ˆ
ˆ
L'header riporta l'indirizzo IP del router che ha generato il messaggio e l'identicazione dell'area a cui appartiene
(assume valore 0 se non ci sono aree o è un router del backbone).
C'è un campo di controllo di errore e un meccanismo di autenticazione
BGP - Border Gateway Protocol
È un protocollo di routing di tipo
EGP, attualmente utilizzato in Internet nella sua versione 4 (che ha aggiunto il
supporto a CIDR e altre novità importanti). È stato denito in RFC1771-RFC1774. Esso permette a router di AS
dierenti di scambiarsi le informazioni necessarie a realizzare l'instradamento, indipemendentemente dal protocollo di
routing interno utilizzato.
Ci si potrebbe chiedere perché inventare ancora un altro protocollo. Il motivo è dovuto al fatto che nella comunicazione tra AS diversi ci sono obbiettivi dierenti e principalmente ci si preoccupa della
politica di instrademento .
Per esempio un AS aziendale potrebbe voler inviare e ricevere pacchetti da Internet ma non vorrebbe che pacchetti da
un qualunque altro AS e diretti ad un altro AS transitino sui propri router. Oppure l'azienda potrebbe essere pronta
ad accettare la cosa solo per chi ha pagato per questo servizio. Allo stesso modo si potrebbe voler evitare il transito
dei pacchetti originati dal Pentagono attraverso l'Iraq... Questi criteri sono solitamente congurati manualmente in
ogni router BGP.
BGP è stato quindi progettato per gestire il rispetto di molti tipi di criteri di routing nel traco tra AS dierenti.
ˆ
A causa dell'interesse di BGP per il traco di passaggio, le reti vengono suddivise in tre categorie:
Stub networks (reti terminali): hanno una solo connessione al grafo BGP. Non possono essere utilizzate
come reti di passaggio perchè solo collegate al resto della rete con una sola interfaccia.
Multiconnected networks (reti multicollegate): possono essere utilizzate per il traco di passaggio, a
meno che si riutino di farlo.
Tansit networks (reti di transito): Sono le dorsali di Internet, reti predisposte appositamente per gestire
ˆ
ˆ
pacchetti di terze parti, a volte con alcune restrizioni inserite a pagamento.
BGP trasmette i propri pacchetti incapsulati all'interno di pacchetti TCP. In questo modo viene garantia la
adabilità nella consegna e vengono nascosti tutti i dettagli della rete attraversata.
BGP utilizza una versione di algoritmo di routing di tipo distance vector leggermente modicata, chiamata path
vector, implementata in modo da evitare la presenza di cicli (e il problema del count-to-innity). Ogni router
BGP, al posto di conservare solo il costo per ogni destinazione, tiene traccia del percorso utilizzato. Al posto
di comunicare ai vicini la distanza da ogni destinazione, il router BGP comunica l'esatto percorso in uso. In
questo modo gli altri router che ricevono questa informazione possono accorgersi se sono parte di quel percorso
ˆ
ed evitare il problema del count-to-innity.
Ogni percorso che viola uno dei criteri di vincolo discussi prima, riceve un costo innito
Lo strato applicativo (livello 7 ISO/OSI)
Architettura client-server
La maggior parte delle applicazioni e protocolli a livello applicativo si basano sull'architettura client-server. Si stabilisce
cioè la presenza di un host centrale sempre attivo (il
a degli host che vi si collegano (i
client ).
server ),
con indirizzo IP sso, che serve un certo tipo di richieste
I client sono macchine che solitamente si collegano ai server in modo
discontinuo, non sono sempre attivi e spesso hanno un indirizzo IP dinamico.
Architettura peer-to-peer
Sono quelle applicazioni e protocolli che realizzano delle connessioni tra di loro senza la necessità di un server centrale.
In questo caso i client prendono il nome di peers.
Esempi classici di protocolli peer-to-peer sono quelli per il
le-sharing.
Protocollo HTTP
Il protocollo
HTTP (HyperText Transfer Protocol)
è il protocollo utilizzato su internet per scaricare les e soprattutto
pagine web (documenti HTML) da dei server.
La prima versione del protocollo, HTTP/1.0 (RFC1945) risale al Maggio 1996. Successivamente ad alcune piccole
modiche è stata rilasciata la successiva versione HTTP/1.1 (RFC2068) che è, a distanza di 16 anni, tutt'oggi utilizzata.
65
ˆ
ˆ
ˆ
Il protocollo HTTP si basa sulla architettura classica client-server e funziona tramite pacchetti TCP ed è
solitamente in ascolto con LISTEN sulla porta 80.
I client richiedono al server HTTP dei les identicati da un
URL (Uniform Resouce Locator).
Si dice che HTTP è un protocollo di tipo stateless, perché non tiene memoria dello stato della comunicazione
o delle richieste di ciascun client.
Uniform Resource Locator
È un indirizzo alfanumerico (ASCII) strutturato come segue:
[Method] :// [Host] : [Port] / [Path]
ˆ Method
: È un identicatore del tipo di protocollo utilizzato. Per le pagine web è sempre http , però la struttura
degli URL può essere utilizzata anche in altri protocolli sfruttando nomi diversi ( ftp ,sftp,rtp ).
ˆ Host
ˆ Port
: È l'indirizzo IP o l'hostname DNS che identica il server da contattare.
: Specica la porta TCP destinazione da utilizzare per la connessione. Solitamente HTTP sfrutta la porta
80 e se non viene indicato un valore port viene assunto questo come default.
ˆ Path
: Indica un percorso che identica un le da reperire su quel server. È possibile anche non indicare nessun
path.
Struttura delle richieste HTTP
Quando un client vuole eettuare una richiesta verso un server HTTP deve strutturarla in questo modo:
[Method] [Url] [Version] \r\n
[Header Field name] :[Value] \r\n
...
\r\n
[Entity Body]
Dunque abbiamo inizialmente una prima riga di richiesta dove viene specicato al server cosa vogliamo fare.
ˆ Method
indica appunto il tipo di operazione HTTP. I vari tipi più noti sono:
GET : È utilizzato per richiedere al server un le/documento. Il percorso del documento è specicato
subito dopo il method.
HEAD : È utilizzato per richiedere al server solo alcune informazioni generali sul documento (ad esempio
la data dell'ultima modica), senza scaricarlo. Nella risposta il server inserisce quindi solo le informazioni
generali.
POST : È utilizzato per inviare al server alcune informazioni da utilizzare su una particolare pagina tramite
l'entity body. Viene soprattutto utilizzato per passare parametri ad applicazioni web.
PUT : È utilizzato per memorizzare un documento all'interno del server. Il percorso dove memorizzare è
l'URL seguente e il contenuto è nel seguito della richiesta
Ci sono poi tutta una serie di method poco utilizzati o implementati per scopi particolari come PATCH,
COPY, MOVE, DELETE, LINK, UNLINK, OPTIONS.
ˆ
Gli Header eld name sono una serie di parametri che possono essere impostati nella richiesta inviata al server.
Esempi noti di valori header sono:
Host : Si specica come valore l'hostname (se presente) attraverso cui è stato contattato il server. Alcuni
server HTTP ospitano decine di sotto-server diversi sullo stesso indirizzo IP. Il modo per distinguere le
richieste è questo campo header.
Cache-control: Fornisce alcune informazioni sulla cache
Accept : Specica una lista di formati di les che vengono accettati dal client, ad esempio text/html,
image/gif, image/jpeg
Accept-language : Specica il linguaggio preferito per ricevere le pagine: italiano (it), inglese (en),...
Authorization : Invia al server alcune informazioni realtive alle credenziali necessarie per visitare una certa
pagina. HTTP implementa infatti un meccanismo elementare di autenticazione per alcune pagine.
If-modied-since : Indica una data al server dell'ultima volta che è stato scaricato il documento. Se il
documento non è cambiato il server non lo reinvierà nuovamente.
66
User-agent : Indica una stringa che identica il programma browser utilizzato per richiedere il documento.
ˆ Version
ˆ
è solitamente la stringa HTTP/1.1 per la nuova versione.
Ogni riga della richiesta HTTP deve terminare con i due caratteri nuova riga e a capo, qui indicati con \r
e \n.
Struttura delle risposte HTTP
[Version] [Status code] [phrase] \r\n
[Header Field name] :[Value] \r\n
...
\r\n
[Entity Body]
ˆ Status code
e
Phase :
è un codice numerico a tre cifre che identica il tipo di risposta seguito da una descrizione
testuale. I più noti sono:
1xx : Messaggi informativi
*
2xx
*
3xx
*
100 Continue per indicare che la prima parte di una richiesta è stata accettata.
: Messaggi di successo
200 OK signica che la richiesta ha avuto successo e l'informazione è inclusa di seguito
: Messaggi di redirezione
302 Moved Permanenty o 304 Moved Temporalily , che indicano l'url nella nuova posizione della
pagina che si sta cercando.
4xx : Sono messaggi di tipo client error , che si riferiscono cioè a richieste errate.
*
*
*
*
5xx
*
*
*
400 Bad Request si riferisce ad un errore generale sulla richiesta (solitamente perché è malformata).
401 Unauthorized indica al client che per visitare questa pagina è necessario l'utilizzo di credenziali.
403 Forbidden indica al client che non gli è permesso visitare quella pagina.
404 Not Found indica al client che il documento che si sta cercando non esiste sul server.
: Sono messaggi di errore di tipo server error , relativi cioè a problemi del server.
500 Internal server error indica un errore nel server che impedisce di servire la pagina
501 Not implemented indica una funzione non implementata
503 Service unavailable indica un servizio non disponibile
Persistenza della connessione
Da HTTP 1.1 le connessioni sono persistenti, cioè restano aperte anche dopo una richiesta e una risposta dal server.
Il motivo è che praticamente qualunque pagina continiene al suo interno collegamenti relativi ad altri documenti da
caricare (immagini, video, frame che contengono altre pagine, etc ...), si permette quindi di eettuare la richiesta di
una pagina e subito dopo proseguire a chiedere tutti gli elementi in essa contenuta
nella stessa connessione.
Se si utilizza invece una connessione non persistente, sarebbe necessario scaricare la pagina in una connessione e
successivamente aprirne altre, una per ogni oggetto da caricare.
Solitamente queste connessioni vengono aperte in
parallelo per minimizzare il ritardo.
I browser moderni utilizzano una combinazione di connessioni persistenti e non persistenti, cioè alcuni oggetti
vengono richiesti all'interno della stessa connessione, mentre altri scaricati in parallelo su nuove connessioni. Il numero
di connessioni aperte e oggetti per ogni connessione sono dei parametri interni al browser.
Quando si utilizza la modalità persistente è inoltre possibile eettuare pipelining, cioè fare più richieste consecutive
senza aspettare di ricevere la risposta dal server.
Cache mediante l'utilizzo di proxy
In alcune reti dove l'utilizzo di banda è un fattore critico, vengono implementati dei proxy applicativi.
Un proxy
HTTP è un programma su cui transitano tutte le richieste dei client verso le pagine web. Quando il proxy si accorge
che ci sono molte richieste continue verso uno stesso sito, ne eettua una copia di Cache. Successivamente quando i
client richiedono nuovamente quella pagina, il proxy (che la ha già in memoria) la fornirà direttamente, controllando
eventualmente solo se è stata modicata sul server. In questo modo si evita di fare tante connessioni verso lo stesso
server per ottenere la stessa pagina.
È infatti possibile fare quello che viene chiamato get condizionato , cioè fare una richiesta al server includendo
l'header If-modied-since , di modo che il server risponda solo se la pagina è stata modicata in quel lasso temporale.
La stessa cosa può anche essere fatta utilizzando il method HEAD e controllando la data restituita dal server (in
questo caso è richiesto fare un passaggio in più però).
67
Autenticazione
Poiché HTTP è un protocollo stateless, non è possibile riconoscere le richieste successive fatte da uno stesso utente.
In HTTP esiste un meccanismo elementare di autenticazione con credenziali (username e password) che serve a
identicare gli utenti che vogliono visitare una pagina.
Normalmente il browser memorizza le credenziali di modo che non siano richieste per ogni pagina successiva.
ˆ
ˆ
ˆ
ˆ
Il client eettua una normale richiesta con method GET
Il server risponde con codice 401 Authorization Required aggiungendo nell'header di risposta il valore WWW-
Authenticate: [tipo di autenticazione] Il client eettua nuovamente una richiesta con method GET aggiungendo questa volta negli headers la riga
Authorization: [account],[password]
Il client prosegue ad eettuare tutte le richieste aggiungendo la riga di autorizzazione per ogni pagina
Cookie
Esiste un modo per riconoscere richieste successive di uno stesso utente (senza usare credenziali) anche se HTTP è
un protocollo stateless. Per farlo si utilizza un codice inviato dal server al client, che il client deve reinserire in ogni
risposta: il
ˆ
ˆ
ˆ
cookie.
Il client eettua una richiesta GET
Il server risponde 200 OK e prima della pagina inserisce negli headers il campo Set-cookie: [codice] Il client eettua le successive GET includendo nel'header Cookie: [codice]
In questo modo è possibile tenere traccia degli utenti sui siti e mostrare pagine dierenti a seconda delle operazioni che
stanno facendo. Un esempio tipico è un sito di e-commerce dove un utente sceglie una serie di prodotti da acquistare
e può poi vederli nel proprio carrello. Per tenere traccia di cosa ha comprato ciascun utente e mostrare carrelli
diversi si utilizzano solitamente i cookie.
I cookie sono utilizzati anche su altri siti che eettuano l'autenticazione in modo diverso per tenere traccia della
sessione autenticata. In questo caso il cookie funge da token di autenticazione.
FTP - File
Transfer Protocol
Denito inizialmente in RFC959 nel 1985 è un protocollo utilizzato per il trasferimento di les a livello di lesystem
tra due host remoti. Fa uso di TCP per il trasporto dei dati.
FTP fa solitamente uso di due connessioni. Una è la connessione di controllo, dove vengono impartiti i comandi
delle operazioni da eettuare (scaricare un le, caricare un le, mostrare la lista dei les...)
mentre l'altra è una
connessione dove eettivamente vengono scambiati i dati.
Il server FTP è solitamente in ascolto per le connessioni di controllo sulla porta 21 TCP. La connessione di controllo
è di tipo persistente, cioè rimane aperta durante tutta la durata della sessione di trasferimento e può essere usata per
più operazioni. Le connessioni dati, invece, sono di tipo non persistente, sono cioè aperte solo per trasferire un le o
delle informazioni e sono immediatamente chiuse.
Connessione di tipo attivo
Nella modalità attiva le operazioni vengono svolte in questo modo:
ˆ
ˆ
ˆ
Il client avverte il server, sulla connessione di controllo che desidera iniziare un trasferimento dati e eettua una
LISTEN (passive open) su una porta a sua scelta
Il client comunica la porta aperta al server sulla connessione di controllo mediante il comanndo
PORT
Il server eettua una CONNECT (active open) verso la porta del client utilizzando come porta sorgente la 20
(o se è occupata un'altra porta a caso).
Connessione di tipo passivo
ˆ
ˆ
ˆ
Il client invia il comando
PASV al server per annunciare l'intenzione di utilizzare la modalità passiva.
Il server sceglie un numero di porta a caso, fa una LISTEN (passive open) e comunica il numero di porta al
client mediante il comando
PORT.
Il client fa una CONNECT (active open) verso la porta comunicata dal server.
68
La modalità attiva ha iniziato ad essere inutilizzata man mano che passano gli anni a causa dell'utilizzo delle NAT
(che non permettono di esporre porte aperte verso il pubblico) e dei rewalls sulle macchine utente.
Alcuni NAT tuttavia intercettano le connessioni dirette alla porta 21 di altri server e aprono alcune porte in ingresso
verso un host dietro NAT quando vedono il comando PORT passare all'interno della connessione per garantire il
funzionamento anche della modalità attiva.
Diversi anni fa alcuni gruppi di utenti scontenti dietro NAT gestiti da ISP hanno iniziato a aprire connessioni FTP
ttizie per aprire porte del NAT ed esporre servizi pubblici.
Tipo di trasferimento dati
Il trasferimento dati può avvenire in varie modalità.
Il le può essere trasferito come tipo:
ˆ ASCII
ˆ Binary
: le di caratteri
: formato generale per tutti i les non testuali
La modalità di trasmissione può essere:
ˆ Stream mode
ˆ Block mode
: il le viene trasferito via TCP senza nessuna struttura
: il le viene trasferito in blocchi i cui primi 3 byte rappresentano l'header
Comandi FTP
ˆ
Comandi di accesso
USER
PASS
ˆ
QUIT
Gestione les
CWD: cambio cartella
DELE: cancella un le
LIST: mostra la lista dei les
RETR: scarica un le
ˆ
STOR: carica un le
Modalità di trasferimento
TYPE
ˆ
MODE
Meccanismo di apertura delle porte
PORT
PASV
Sono poi presenti dei messaggi di risposta con codici numerici in modo molto simile ad HTTP.
SMTP - Simple
Mail Transfer Protocol
È il protocollo ideato per lo scambio di e-mail attraverso Internet. Fu denito inizialmente in RFC821 nel 1982.
Il meccanismo su cui si basano è il seguente:
ˆ
ˆ
Degli user agent si collegano e comunicano ai server SMTP messaggi che desiderano inviare, indicando mittente,
destinatario e corpo del messaggio tramite una connessione TCP sulla porta 25 (porta del server SMTP)
Eventualmente lo user agent si scollega e intanto il server SMTP si preoccupa di recapitare il messaggio: apre
una connessione verso il server SMTP del destinatario e invia il messaggio. Se il server del destinatario ha un
problema, si tenta di recapitare il messaggio più tardi.
Il protocollo SMTP è totalmente testuale, sia nei comandi che nel corpo dei messaggi, che devono essere sempre ASCII.
Come in HTTP e FTP sono presenti dei messaggi di risposta con codici numerici.
69
Meccanismo base
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
Uno user agent si collega al server SMTP e comunica da dove si sta collegando con il comando
Lo user agent specica il mittente con
HELO
MAIL FROM
Successivamente indica il destinatario con
RCPT TO
Indica l'inizio del messaggio con il comando
DATA
Compone il messaggo
Termina il messaggio con un punto
Chiude la connessione con
QUIT
Formato dei messaggi
Il formato dei messaggi inviati dopo il comando
DATA è stato denito in RFC822.
Con questo formato il testo del messaggio viene preceduto dal alcuni header (strutturati allo stesso modo che in
HTTP), come ad esempio:
From: [indirizzo]\n
To: [indirizzo]\n
Subject: [oggetto del messaggio]\n
\n
[testo del messaggio]
.
Successivamente è stato introdotto l'utilizzo di
MIME (Multipurpose Internet Mail Extensions ) con lo scopo principale
di consentire il trasferimeto di messaggi non ASCII. Viene aggiunta anche la possibilità di inserire allegati.
Uno dei metodi per inserire testo non ASCII in un messaggio è l'utilizzo della codica in base64
Codica base64
Le sequenze di bit da trasferire vengono divise in gruppi di 24 bit. Ogni gruppo viene suddiviso in 4 sottogruppi di 6
bit. Ad ogni gruppo è associato un carattere in un alfabeto ASCII in base 64.
Quoted printable
Quando sono presenti solo alcuni caratteri di tipo non-ASCII è possibile utilizzare questo metodo. Con questo metodo
quando si incontra un carattere non-ASCII, viene sostituito da tre caratteri ascii: = seguito dalla rappresentazione
esadecimale del byte.
Ad esempio il carattere non-ASCII con valore 10011101 viene convertito in =9D
POP3 - Post
Oce Protocol 3
Il protocollo SMTP permette di inviare un messaggio ad un server e permette a due server di scambiarsi messaggi.
Quando un messaggio arriva nel server di destinazione, viene salvato su di esso su una casella di posta elettronica
virtuale. Per permettere agli utenti di leggere la loro casella di messaggi sono stati inventati alcuni procotolli, tra cui
POP3.
POP3 gestisce quindi l'autenticazione dell'utente al server e il trasferimento dei messaggi.
POP3 utilizza TCP ed è in ascolto sulla porta 110.
Messaggi del protocollo
ˆ user
ˆ
ˆ
e
pass
autenticano l'utente sul server POP3
Il server risponde con dei messaggi tipo +OK o -ERR Nella fase di transizione:
list : Elenca i messaggi in coda e la loro dimensione
retr : Permette al client di richiedere al server un messaggio (viene inviato nella stessa connessione)
dele : cancella un messaggio
quit : chiude la connessione
70
Telnet - Terminal
Network
È un semplice protocollo utilizzato per accedere a macchine remote ed impartire comandi. È stato uno dei primissimi
protocolli implementati.
I comandi sono trasferiti su una connessione TCP.
I caratteri dati sono caratteri ASCII (primo bit pari a 0), mentre i comandi di controllo sono tutti caratteri
non-ASCII (con il primo bit pari a 1). Ad esempio:
ˆ
ˆ
IAC (255): Interpreta il prossimo carattere come carattere di controllo
EC (247): Cancella l'ultimo carattere scritto
DNS - Domain
Name System
È il servizio che permette la traduzione di indirizzi simbolici in indirizzi IP. Gli indirizzi sono strutturati in modo
gerarchico e ogni parte è separata da un punto ed è gestita da una autorità diversa.
Ad esempio www.polimi.it , osservandolo da destra a dinistra vediamo it che è un dominio di primo livello (TLD -
Top Level Domain) che è la parte di indirizzo gestita dall'Italia. Chiunque vuole un indirizzo che termina con .it deve
richiederlo al register italiano. polimi è un dominio di secondo livello assegnato dal register italiano al Politecnico di
Milano. www è un dominio di terzo livello comunemente utilizzato per identicare che si vuole accedere al server web
di polimi.it . Questa terza parte dell'indirizzo viene gestita internamente dal politecnico.
DNS fa uso di UDP per le richieste.
Struttura dei server DNS
Un host che desidera scoprire l'indirizzo IP associato ad un certo indirizzo simbolico deve contattare un nameserver
DNS. Ce ne sono di svariati tipi:
ˆ Local Name Server
: sono server DNS direttamente collegati agli host.
Ogni ISP ne ha uno.
Se il server
contattato non conosce la risposta per la richiesta eettuata, si occupa di contattare un Root Name Server, un
Top Level Domain.
ˆ Root Name Server
: Sono dei server DNS centrali che contengono una grande quantità di informazioni riguardo
a diversi host e gruppi.
Ce ne sono circa una decina in tutto il mondo, quasi tutti in USA. Contengono
informazioni sui server TLD da contattare. Contattano a loro volta gli Authoritative Name Servers.
ˆ Top-Level Domain Server (TLD)
: Sono dei server che contengono informazioni per l'indirizzamento di
domini di primo livello come it,uk,com,jp...
ˆ Authoritative Name Server
: Sono dei server DNS responsabili per un certo gruppo di domini.
Tipi di messaggi DNS
In ogni risposta DNS sono presenti diverse tuple organizzate in questo modo:
Name, Value, Type, TTL
Type indica il tipo di record, ce ne sono diversi:
ˆA
ˆ NS
ˆ CNAME
ˆ MX
: Name è il nome di un host e Value è il suo indirizzo IP.
: Name è un dominio e Value è il nome di un altro server DNS da cui ottenre le informazioni relative.
: Name è un nome alternativo (alias) per un host, il cui nome canonico è Value.
: Name è un dominio e Value è indirizzo IP del server su cui recapitare la posta per quel dominio. Questo
campo viene utilizzato dai server SMTP per sapere chi contattare per recapitare la posta.
TTL indica il tempo di vita dell'informazione. Se indico un TTL di un giorno, quando una richiesta transita su un
server DNS, questo può eettuare chaching della risposta per un tempo massimo pari a TTL, di modo da non dover
eettuare la richiesta nuovamente e in continuazione.
Meccanismo per reperire le informazioni
Le richieste solitamente si propagano in modo gerarchico dal server DNS locale ai root name servers.
Se però ad
esempio un server DNS locale già conosce chi contattare per uno dei livello superiori, contatta direttamente un server
DNS di più basso livello.
71
Scambio di messaggi DNS
Ogni host collegato ad internet possiede l'indirizzo di un server DNS da contattare per risolvere i domini.
Quando si inserisce un indirizzo simbolico in qualunque applicazione, il sistema operativo invia un messaggio al
server DNS per conoscere l'indirizzo IP associato.
Argomenti ancora mancanti
ˆ
Livello applicativo
RTP
DNS
HTTP
FTP
SMTP/POP/IMAP
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
Controllo di usso e parte introduttiva al trac shaping
Parametri di TCP moddabili da linux
Informazioni aggiuntive sul meccanismo di numerazione per l'opzione timestamp di tcp
Struttura della trama ping req/rep in ICMPv6
802.11n e seguente
TCP Syncookies
Breve storia di Internet
cenno su TCP hando
IGMP e internet multicasting
Completare BGP con altri dettagli (vedi pattavina)
Comando host su linux per i DNS
Sockets in C
controllare SSTRESH con window scale
vera formula per il calcolo MSL
Controllare i valori iniziali di TTL/alpha etc
sistemare le descrizioni nali di ethernet
MTU ip senza considerare LLC?!
Ecn echo
Risistemare BGP/RIP/RIPv2/AS e ISP
Immagine tcp tear down
disegni go-back-n vs. selective repeat
Riferimenti bibliograci
[1] A. Pattavina Reti di telecomunicazione - Networking e Internet II edizione
[2] Andrew S. Tanenbaum Reti di calcolatori IV edizione
[3] Slides del corso 085894 Reti di telecomunicazione ed Internet del Politecnico di Milano, campus Leonardo
72