Uploaded by Agostino

Reti Amos

advertisement
Reti di calcolatori
uniVR - Dipartimento di Informatica
Amos Lo Verde
6 febbraio 2023
2
Indice
I
Teoria
1
1 Introduzione alle reti
1.1 Architetture di rete . . . . . . . . . . . . . .
1.1.1 Core della rete . . . . . . . . . . . .
1.2 Commutazione di circuito e pacchetto . . .
1.2.1 Ritardo di trasmissione dei pacchetti
1.3 Modello a strati . . . . . . . . . . . . . . . .
1.3.1 Funzionalità dei diversi livelli . . . .
1.3.2 Indirizzi IP . . . . . . . . . . . . . .
1.3.3 Subnetting . . . . . . . . . . . . . .
1.4 Blocco CIDR . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
5
6
6
9
12
12
14
17
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
23
23
25
26
32
33
34
35
36
37
38
39
39
3 Livello di trasporto
3.1 Multiplexing e demultiplexing . . . . . . . . . . . . . . . . . . . . .
3.1.1 Multiplexing e demultiplexing non orientati alla connessione
3.1.2 Multiplexing e demultiplexing orientati alla connessione . .
3.2 Trasporto non orientato alla connessione (UDP) . . . . . . . . . . .
3.2.1 Struttura dei segmenti UDP . . . . . . . . . . . . . . . . . .
3.2.2 Checksum UDP . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Trasporto orientato alla connessione (TCP) . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
43
44
45
46
47
47
48
. . . . . . .
. . . . . . .
. . . . . . .
su Internet
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
2 Livello applicativo
2.1 Web e HTTP . . . . . . . . . . . . . . . . . . .
2.1.1 Protocollo HTTP . . . . . . . . . . . . .
2.1.2 Connessioni persistenti e non persistenti
2.1.3 Formato dei messaggi HTTP . . . . . .
2.1.4 Interazione utente-server: i cookie . . .
2.1.5 Web caching . . . . . . . . . . . . . . .
2.2 DNS: servizio di directory di Internet . . . . . .
2.2.1 Organizzazione gerarchica . . . . . . . .
2.2.2 Rapporto tra DNS e cache di rete . . .
2.3 Posta elettronica in Internet . . . . . . . . . . .
2.3.1 Protocollo SMTP . . . . . . . . . . . . .
2.3.2 Formato dei messaggi di posta . . . . .
2.3.3 Protocolli di accesso alla posta . . . . .
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
INDICE
3.4
3.5
3.3.1 Struttura dei segmenti TCP . . . . . . . . . . .
3.3.2 Timeout e stima del tempo di andata e ritorno
3.3.3 Trasferimento dati affidabile . . . . . . . . . . .
3.3.4 Controllo di flusso . . . . . . . . . . . . . . . .
3.3.5 Gestione della connessione TCP . . . . . . . .
Principi del controllo di congestione . . . . . . . . . .
3.4.1 Cause e costi della congestione . . . . . . . . .
3.4.2 Approcci al controllo di congestione . . . . . .
Controllo di congestione TCP . . . . . . . . . . . . . .
3.5.1 Slow start . . . . . . . . . . . . . . . . . . . . .
3.5.2 Congestion avoidance . . . . . . . . . . . . . .
3.5.3 Fast recovery . . . . . . . . . . . . . . . . . . .
4 Livello di rete (piano dei dati)
4.1 Panoramica del livello di rete . . . . . . . . . . . . .
4.1.1 Inoltro e instradamento . . . . . . . . . . . .
4.1.2 Modelli di servizio . . . . . . . . . . . . . . .
4.2 Protocollo IP . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Formato dei datagrammi Ipv4 . . . . . . . . .
4.2.2 Frammentazione dei datagrammi Ipv4 . . . .
4.2.3 Indirizzamento Ipv4 . . . . . . . . . . . . . .
4.2.4 Come ottenere l’indirizzo di un host: DHCP .
4.2.5 NAT . . . . . . . . . . . . . . . . . . . . . . .
4.2.6 Formato dei datagrammi Ipv6 . . . . . . . . .
5 Livello di rete (piano di controllo)
5.1 Algoritmi di instradamento . . . . . .
5.1.1 Instradamento link-state . . . .
5.1.2 Instradamento distance-vector
5.2 Instradamento tra ISP: BGP . . . . .
5.2.1 Ruolo di BGP . . . . . . . . .
5.2.2 Distribuzione delle informazioni
5.2.3 Selezione delle rotte migliori . .
5.3 Protocollo ICMP . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
dei cammini in
. . . . . . . . .
. . . . . . . . .
6 Livello di collegamento
6.1 Introduzione al livello di collegamento . . . . . . . . .
6.1.1 Servizi offerti dal livello di collegamento . . . .
6.1.2 Implementazione del livello di collegamento . .
6.2 Tecniche di rilevazione e correzione degli errori . . . .
6.2.1 Controllo di parità . . . . . . . . . . . . . . . .
6.2.2 Checksum . . . . . . . . . . . . . . . . . . . . .
6.3 Collegamenti broadcast e protocolli di accesso multiplo
6.3.1 Protocolli ad accesso casuale . . . . . . . . . .
6.4 Reti localmente commutate . . . . . . . . . . . . . . .
6.4.1 Indirizzi MAC . . . . . . . . . . . . . . . . . .
6.4.2 Protocollo ARP . . . . . . . . . . . . . . . . . .
6.4.3 Struttura dei frame Ethernet . . . . . . . . . .
6.4.4 LAN estese . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
52
53
55
57
59
60
64
65
66
67
68
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
70
71
71
71
72
73
75
76
78
. . .
. . .
. . .
. . .
. . .
BGP
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
82
84
84
87
87
88
89
90
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
91
91
92
93
94
95
96
97
97
103
103
104
105
106
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
INDICE
6.5
II
Reti wireless . . . . . . . . . . . . . . . .
6.5.1 Wireless LAN . . . . . . . . . . .
6.5.2 Algoritmo CSMA/CA . . . . . .
6.5.3 Problema del terminale nascosto
6.5.4 Framing . . . . . . . . . . . . . .
6.5.5 VPN . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Esercizi
108
108
108
110
112
113
115
7 Traduzione IP
117
7.1 Esercizio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.2 Esercizio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8 Indirizzamento
119
9 Creazione di sottoreti
9.1 Esercizio 1 . . . . . .
9.1.1 Parte 1 . . .
9.1.2 Parte 2 . . .
9.2 Esercizio 2 . . . . . .
9.3 Esercizio 3 . . . . . .
9.4 Esercizio 4 . . . . . .
9.5 Esercizio 5 . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
121
121
122
123
124
125
126
10 TCP
10.1 Esercizio
10.2 Esercizio
10.3 Esercizio
10.4 Esercizio
10.5 Esercizio
10.6 Esercizio
1
2
3
4
5
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
129
129
130
131
131
133
134
11 Collegamento
11.1 Esercizio 1
11.2 Esercizio 2
11.3 Esercizio 3
11.4 Esercizio 4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
135
135
136
136
137
iv
INDICE
Parte I
Teoria
1
Introduzione alle reti
Questo corso si occupa di risolvere il problema della comunicazione tra calcolatori. I problemi si
dividono in due tipologie:
1. L’infrastruttura da utilizzare per il trasporto del messaggio, ossia l’architettura di rete,
la quale comprende: l’infrastruttura assieme al software, che permettono il trasporto/trasmissione dell’informazione.
2. La composizione del messaggio tramite protocolli di comunicazione.
Definizione. Un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due
o più entità di comunicazione, così come le azioni intraprese in fase di trasmissione e/o
ricezione di un messaggio o di un altro evento.
Per comprendere meglio il concetto di protocollo si può pensare al “protocollo umano”,
ossia le buone maniere con le quali inizia una conversazione tra due persone: l’interpretazione dei messaggi inviati determina il tipo di risposta.
In modo simile accade con i calcolatori, dove per esempio si invia una richiesta di connessione al web server (vedi Figura 1.1) mettendosi in attesa di una risposta. Il web server
riceverà il messaggio di richiesta di connessione e restituirà un messaggio di risposta di
connessione. A questo punto il computer invia il nome della pagina che vuole prelevare
dal server tramite un messaggio GET, e a sua volta il web server restituirà la pagina web
(come file) al computer.
Figura 1.1: Analogia di protocolli.
3
4
CAPITOLO 1. INTRODUZIONE ALLE RETI
Approcci Top-down e Bottom-up
Esempio (Lettera cartacea). Quando un utente A deve scrivere una lettera a un utente B, scrive
il proprio messaggio su un foglio scegliendo il linguaggio da utilizzare. Il messaggio viene poi
inserita all’interno di una busta nella quale si specificano determinate informazioni: indirizzo di
destinazione, nome, cognome, via, ecc.
La lettera viene imbucata e spedita all’ufficio postale, che a sua volta comunica con altri uffici
postali in base al percorso da seguire. Infine una volta arrivata la lettera alla casella postale
del destinatario, l’utente compierà prima un controllo delle informazioni aggiunte nella busta e
infine leggerà il messaggio contenuto.
Figura 1.2: Esempio scambio di informazioni.
La comunicazione tra calcolatori avviene mediante due differenti approcci:
• top-down: parte dall’informazione generata lato utente fino ad arrivare all’infrastruttura.
• bottom-up: parte dall’infrastruttura fino ad arrivare all’informazione generata lato
utente.
Un’altra importante considerazione da fare sono i livelli composti sullo stesso piano: indicano
i protocolli di scambio di informazione, specificando che ogni protocollo è a sé stante e non ha
nulla a che fare con gli altri livelli.
5
1.1. ARCHITETTURE DI RETE
1.1
Architetture di rete
La principale architettura di rete da cui partire è Internet 1 , composta da vari elementi di base
che definiscono l’architettura stessa:
• Calcolatori: host (ospiti) o sistemi periferici (end system).
• Apparati di rete (router ).
• Collegamenti fisici/cablati o wireless.
La prima forma di rete che si può trovare è la rete locale (LAN Local Area Network ); è
caratterizzata da (vedi Figura 1.3):
• Un router di bordo con il compito di separare la rete locale (LAN) da Internet.
• Un access point che permette il collegamento wireless dei dispositivi interni alla rete.
• Uno switch avente lo scopo di formare collegamenti cablati per i dispositivi e rendere
operativo l’access point.
Access
Point
Internet
router
switch
Figura 1.3: Esempio di rete LAN.
In una rete aziendale questi tre componenti sono separati, mentre in una rete domestica
sono tutti “collassati” in un unico apparato per ragioni di spazio.
Inoltre è importante notare che lo switch collega tutti i calcolatori all’interno di una rete, ma
non con componenti all’esterno, viceversa al router è possibile collegare due calcolatori tra LAN
differenti.
1 Internet
è definita anche “reti delle reti”.
6
CAPITOLO 1. INTRODUZIONE ALLE RETI
1.1.1
Core della rete
Come visto in precedenza i router consentono la comunicazione tra computer di diverse reti, ecco
che la porzione di rete in cui si presenta il percorso di comunicazione è detta core.
Internamente al core si distinguono diverse tipologie di ISP (Internet Service Provider ) divise
in livelli, ossia organizzazioni che gestiscono le infrastrutture di rete:
• ISP livello 1: la rete spazia geograficamente su più nazioni (è internazionale).
• ISP livello 2: viene coperto solo il territorio nazionale.
• ISP livello 3: la copertura riguarda territori locali.
ISP
livello 2
ISP
livello 1
ISP
livello 2
LAN
ISP
livello 1
ISP
livello 1
ISP
livello 3
LAN
Figura 1.4: Livelli di ISP.
Nel caso in cui venga spedito un pacchetto, la LAN comunica con l’ISP, con il quale ha
sottoscritto il collegamento, e successivamente verrà scelto un percorso per raggiungere la destinazione.
Le varie problematiche di percorso sono gestite dalle reti e definite con il termine di instradamento: si ricerca il compromesso tra il percorso più breve e quello più veloce (non sempre il
percorso breve risulta essere veloce).
1.2
Commutazione di circuito e pacchetto
Il metodo di trasferimento per un’informazione si è evoluto nel corso degli anni:
• Commutazione a circuito: è il metodo più vecchio e attualmente inutilizzato per la rete
Internet.
Tra due utenti A e B esiste un percorso composto da risorse fisiche con il quale possono
comunicare: la capacità del canale viene interamente dedicata alla comunicazione.
7
1.2. COMMUTAZIONE DI CIRCUITO E PACCHETTO
Pro: se sono presenti molte informazioni da trasmettere in modo costante2 , allora il ritardo
di trasferimento è contenuto.
Contro: se la produzione dell’informazione è discontinua, allora si verifica uno spreco di risorse.
Informazione dicontinua
Informazione
Informazione
Informazione continua
tempo
tempo
Spreco di
risorse
Figura 1.5: Informazione continua e discontinua.
• Commutazione a pacchetto: l’informazione viene suddivisa in unità indipendenti chiamati pacchetti.
Informazione
Pacchetto
1
Pacchetto
2
Pacchetto
3
Intestazione
Figura 1.6: Informazione suddivisa in pacchetti.
A ogni pacchetto viene inclusa un’ulteriore informazione definita intestazione, che permette di arrivare a destinazione in maniera autonoma.
Assumendo che un computer A debba comunicare con un computer B e un computer C
comunichi con un computer D, allora quando l’informazione viene prodotta ciascun nodo
possiede un buffer per memorizzare i pacchetti che sono stati creati.
2 L’informazione
è prodotta continuamente senza intervalli d’attesa.
8
CAPITOLO 1. INTRODUZIONE ALLE RETI
A
B
Buffer
Multiplex
statistico
Buffer
C
D
Buffer
Pro: le risorse vengono utilizzate con maggiore efficienza attraverso il multiplex statistico. I
pacchetti vengono dunque mescolati tra loro in maniera casuale, senza che il router sappia
quando le informazioni vengono generate. Man mano che si generano i dati, vengono
caricati all’interno dello stesso buffer, così che non si sprechino risorse quando il nodo li
produce discontinuamente .
Contro: possono verificarsi potenziali perdite dei pacchetti e maggiori ritardi:
1. Il buffer presenta una dimensione limitata, pertanto quando viene occupato interamente inizia a scartare i pacchetti che lo raggiungono ed è poi necessario doverli
rimandare. Inoltre il punto di perdita può avvenire in un qualsiasi momento all’interno della rete, perciò bisogna anche stabilire chi ha il compito di rispedire i dati
persi.
2. Il ritardo va confrontato con quello della commutazione a circuito in cui si preserva
un certo tempo per l’instaurazione del circuito, ossia si genera un ritardo dovuto
alla distanza dei due dispositivi.
Sorgente
Destinazione
Instaurazione
del circuito
Ritardo
distanza
Trasferimento
dell'informazione
Figura 1.7: Ritardo nella commutazione a circuito.
Il ritardo totale risulta essere: ritardo instaurazione del circuito + ritardo della
distanza + ritardo del trasferimento dell’informazione.
Diversamente per la commutazione a pacchetto non c’è l’instaurazione del circuito, ma il pacchetto trasferito deve essere prima completamente ricevuto per essere
ritrasmesso.
9
1.2. COMMUTAZIONE DI CIRCUITO E PACCHETTO
Informazione
Sorgente
Destinazione
Ritardo dovuto
allo store &
forward
Figura 1.8: Ritardo nella commutazione a pacchetto.
Tale modalità di trasferimento è chiamata store & forward : ogni router prima memorizza completamente l’informazione e poi la spedisce. Il ritardo totale risulta dipendere di
conseguenza dal numero di apparati attraversati.
1.2.1
Ritardo di trasmissione dei pacchetti su Internet
In base a quanto affrontato in precedenza (vedi Figura 1.8) si verificano quattro cause per il
ritardo di trasmissione dei pacchetti:
1. Elaborazione, nell’ordine di misura in µs.
2. Accodamento, varia a seconda degli altri punti.
3. Trasmissione, nell’ordine di misura in 10/100 µs.
4. Propagazione, nell’ordine di misura in ms.
10
CAPITOLO 1. INTRODUZIONE ALLE RETI
Elaborazione: è il tempo necessario per determinare la porta del router ; esiste la tabella di routing che
indica dove devono dirigersi i pacchetti.
Accodamento: è il tempo speso nel buffer prima di essere trasmesso.
Trasmissione: è dipendente dalla velocità di trasmissione e dalla dimensione del pacchetto.
temp trasmissione =
dim pacchetto
vel trasmissione
Propagazione: è il tempo per percorrere la distanza verso il router successivo.
In linea di massima vengono definiti gli ordini di grandezza dei ritardi:
• Per trasmissioni locali (territorio nazionale) il ritardo è sui 10 − 20 ms.
• Per trasmissioni internazionali (sullo stesso continente) il ritardo è sui 30 − 50 ms.
• Per trasmissioni intercontinentali il ritardo è sui 100 − 150 ms.
Tracciamento dei pacchetti
Per tracciare i tempi di ritardo dei pacchetti esistono vari strumenti a seconda di ciò che serve
conoscere:
• PING: il calcolatore manda una serie di messaggi e misura il tempo che intercorre tra
l’invio e la ricezione della risposta (RTT Round Trip Time).
Figura 1.9: Esempio di PING.
1. L’istruzione ping www.repubblica.it indica alla macchina di effettuare un ping
all’indirizzo indicato.
2. Viene ripetuto il comando ping, ma con un altro nome (diverso dall’istruzioine iniziale)
che lo segue. Non essendoci un unico server che risponde alle richieste, si viene
indirizzati verso un server fisico con un nome differente che risponderà alla richiesta.
3. Tra parentesi è descritto un codice numerico, il quale identifica il server fisico, e prende
il nome di indirizzo IP.
4. L’ultimo parametro specifica il tempo che si impiega per raggiungere il server e tornare indietro.
In questo caso tutti i tempi sono abbastanza vicini tra loro, di conseguenza non sono
avvenuti momenti di congestione3 .
3 Lungo
il percorso in un qualsiasi luogo i pacchetti trovano delle code che aumentano il ritardo.
1.2. COMMUTAZIONE DI CIRCUITO E PACCHETTO
11
• TRACEROUTE: la macchina determina l’RTT tra la sorgente e tutti gli apparati di rete
intermedi.
Figura 1.10: Esempio di traceroute.
1. L’istruzione traceroute www.repubblica.it indica alla macchina di effettuare un
traceroute all’indirizzo indicato.
2. Il primo numero che viene indicato identifica l’apparato che si incontra durante il
percorso; nell’esempio effettuato ci sono stati 16 apparati (vedi Figura 1.10). Subito
dopo segue difatti l’indirizzo IP o nome logico dell’apparato.
3. I tre valori di ritardo sono legati ai tre invii di pacchetti all’apparato, quindi cambiano
ogni volta in base alla situazione in cui è la rete.
Nel caso i valori di ritardo siano minori rispetto le righe precedenti non significa che
alcuni apparati funzionano meglio di altri, bensì le misurazioni sono effettuate in
momenti diversi comportando risultati diversi.
4. Gli asterischi indicano che lo specifico router è stato configurato in maniera tale da
ignorare i pacchetti, così da non restituire alcuna risposta e non poter misurare il
ritardo.
Quando si trovano all’interno di una rete due porzioni di cammino equivalenti nel costo, si effettua
il load balancing . Questa tecnica consiste nel mandare i pacchetti in cammini differenti, al fine
di non sovraccaricare il singolo percorso.
Figura 1.11: Esempio di load balancing.
12
CAPITOLO 1. INTRODUZIONE ALLE RETI
⇒ Quanta informazione si riesce a trasmettere tra sorgente e destinazione?
Sul singolo collegamento si ha una quantità definita banda di trasmissione. Ogni collegamento
possiede due direzioni: upload e download ; in tecnologie come l’ADSL la A iniziale dell’acronimo
significa asimmetrico, quindi le due velocità non è detto che siano le stesse, invece tecnologie
come quella ethernet sono tipicamente simmetriche offrendo la medesima banda in entrambe
le direzioni. La velocità è relativa, per esempio, al percorso tra la propria casa e la centrale
telefonica. Nel momento in cui bisogna proseguire il percorso entrano in gioco altri fattori:
• Se ci sono percorsi con più link la velocità di trasmissione è determinata dal collo di bottiglia
(bottleneck ), cioè bisogna sottostare a chi possiede la banda più limitata.
La velocità di trasmissione end-to-end è chiamata throughput (THR).
1.3
Modello a strati
Quando due entità devono comunicare tra di loro bisogna risolvere due problemi:
• Comunicazione fisica: è il trasferimento dell’informazione, ossia come vengono presi i bit
generati dal calcolatore A e trasportati l’altro calcolatore e viceversa.
• Comunicazione logica: riguarda l’informazione che viene scambiata, ovvero la codifica
dell’informazione.
Comunicazione
logica
MESSAGGIO
Livelli
H1
H1
MESSAGGIO
H1
H2
H1
H1
H1
H2
H1
H1
H2
H1
H2
.
.
.
H1
H1
H2
H1
H2
.
.
.
bit
1
0
1
1
0
Comunicazione fisica
Figura 1.12: Modello a strati/livelli.
Ogni strato/livello svolge una serie di operazioni di elaborazioni, difatti la comunicazione tra due
strati/livelli omologhi (peer ) avviene attraverso un protocollo.
Definizione (Protocollo). Insieme di regole che sovraintendono alla comunicazione tra entità
dello stesso livello.
Il protocollo definisce il formato dei messaggi/intestazione (header ) e il comportamento/le azioni
da intraprendere.
1.3.1
Funzionalità dei diversi livelli
Il modello (teorico) ISO/OSI (ISO International Organization for Standardization, OSI Open
System Interconnection) comprende sette differenti livelli che operano come visto in precedenza:
13
1.3. MODELLO A STRATI
fisico, collegamento, rete, trasporto, sessione, presentazione e infine applicazione.
In generale l’host detiene tutti i livelli, poiché (vedi Figura 1.2) è necessario indicare tutte le
specifiche informazioni per inviare il messaggio e poi conoscerle quando lo si deve ricevere. Soltanto i sistemi intermedi possiedono i primi tre livelli, perché il loro scopo è quello di portare a
destinazione il pacchetto, non serve conoscere il contenuto e pertanto si semplifica l’architettura.
Tale modello teorico è stato sostituito dal modello TCP/IP (TCP Transmission Control Protocol, IP Internet Protocol ).
I sistemi intermedi mantengono la stessa struttura proposta con il modello ISO/OSI (tre livelli), mentre gli host nello user space si hanno solo due livelli anziché quattro: trasporto e
applicazione.
APPLICAZIONE
Livelli dei mezzi
RETE
COLLEGAMENTO
DATI
Livelli degli host
TRASPORTO
FISICO
Il livello di trasporto ingloba anche i livelli di sessione e presentazione che erano presenti
nel modello ISO/OSI. Il nome TCP/IP deriva dai due principali protocolli utilizzati in questa
architettura:
14
CAPITOLO 1. INTRODUZIONE ALLE RETI
• Livello di trasporto: TCP.
• Livello di rete: IP.
L’insieme dei protocolli di un’architettura è chiamato “stack protocollare”.
Nel modello TCP/IP a volte può capitare di vedere rappresentazioni che uniscono in un solo
livello (accesso alla rete) i livelli fisico e collegamento dati.
Cos’è un’entità?
L’entità è il processo avviato dalla macchina. Di norma viene identificata mediante l’indirizzo
del calcolatore (indirizzo IP) e l’identificatore del processo (porta).
Su due calcolatori ci sono una serie di processi, se due di questi vogliono comunicare tra loro
allora al calcolatore A verrà associato un IP e altrettanto al calcolatore B, invece il processo
sarà legato a una specifica porta4 . La tupla (IPA , IPB , portaA , portaB ) identifica un flusso di
comunicazione.
⇒ Dove si trovano queste informazioni (IP e porta)?
Tra le varie informazioni dell’header di trasporto c’è il numero di porta:
APPLICAZIONE
Messaggio
TRASPORTO
H1
RETE
H1
H1
H2
H1
H2
H1 : tra le varie informazioni contenute nell’header di trasporto c’è il numero di porta.
H2 : tra le varie informazioni contenute nell’header di rete c’è l’indirizzo IP.
1.3.2
Indirizzi IP
Gli indirizzi IP5 sono identificatori univoci di un host all’interno della rete.
Sono dedicati all’header del livello di rete (IP) 32 bit e ci sono due sezioni: IP sorgente e
IP destinazione.
Esempio (Indirizzo IP). 10101110.10101100.00011001.10011001
|
{z
}
32 bit
Per facilitare la lettura degli indirizzi si considerano i 32 bit prendendo 8 bit per quattro
blocchi, e si traduce ciascun blocco in un intero:
8 bit
→
Tutti i blocchi vengono separati con un punto.
4 Le
porte sono diverse per tutti i processi.
del livello di rete.
5 Indirizzi
28 − 1 = 255
15
1.3. MODELLO A STRATI
Processo che
gira su host A
Processo che
gira su host B
IPS = A
IPD = B
PAYLOAD
HEADER
PAYLOAD
HEADER
IPS = B
IPD = A
Notazione decimale puntata
⇒ I bit degli indirizzi IP hanno tutti lo stesso peso?
prefisso
suffisso
z
}|
{ z }| {
Esempio (Numeri telefonici linee fisse). 0039
045 |{z}
802 7059
|{z } |{z}
|{z }
pref. codice univr
inter. città verona
interno
In generale si possono identificare due porzioni del numero di telefono:
• Prefisso: internazionale, codice città e rete. Questa porzione è utilizzata per identificare
geograficamente dove si trova la rete.
• Suffisso: interno che appartiene alla rete.
⇒ Come si identificano le cifre che appartengono al prefisso e quelle del suffisso?
Nel caso dei numeri telefonici si ha: 045/ . . . / . . . / . . .
La suddivisione tra prefisso e suffisso è utilizzata anche negli indirizzi IP: il prefisso indica una
rete specifica all’interno di Internet, mentre il suffisso identifica un host della rete.
Al prefisso vengono dedicati un certo numero di bit in base alla grandezza della rete. Si
utilizza la notazione barrata: dopo l’indirizzo di aggiunge una barra che indica il prefisso:
157.27.12.63/16, in questo esempio i primi 16 bit indicano il prefisso.
Esempio (Traduzione di indirizzi IP).
• 11100011.11011011.10001011.01101111: si utilizza la somma delle potenze del 2:
1 1 1 0 0 1 1 1 . 17 16 05 14 13 02 11 10 . 17 06 05 04 13 02 11 10 . 07 16 15 04 13 12 11 10
27 26 25 24 23 22 21 20
2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2
128 + 64 + 32 + 4 + 2 + 1 . 128 + 64 + 16 + 8 + 2 + 1 . 128 + 8 + 2 + 1 . 64 + 32 + 8 + 4 + 2 + 1
Risultato finale → 231.219.139.111
16
CAPITOLO 1. INTRODUZIONE ALLE RETI
• 221.34.255.82: si utilizza il metodo delle sottrazioni successive o del resto con la divisione
per 2:
221
110
55
27
13
6
3
1
2
2
2
2
2
2
2
1
0
1
1
1
0
1
1
34
17
8
4
2
1
2
2
2
2
2
0
1
0
0
0
1
255
127
63
31
15
7
3
1
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
82
41
20
10
5
2
1
2
2
2
2
2
2
0
1
0
0
1
0
1
Risultato finale → 11011101.00100010.11111111.01010010
Esempio (Calcolo degli host). Quanti host sono contenuti in un indirizzo con /20?
xxxxxxxx.xxxxxxxx.xxxxxx
|
{z
} xx.xxxxxxxx
|
{z
}
prefisso 20 bit
suffisso 12 bit
#host = 232−20 = 212 = 4096 indirizzi
Conoscere il proprio IP e dimensione della rete
Per conoscere il proprio IP si utilizzano i comandi ifconfig (GNU/Linux, Mac Os) e ipconfig
(Windows) sul prompt/shell.
1. L’indirizzo presente è quello assegnato alla macchina.
2. La netmask 6 permette di sapere qual è la dimensione della rete.
Per identificare il numero di bit per il prefisso, i calcolatori utilizzano una sequenza di 32 bit in
cui i bit associati al prefisso sono posti a 1, mentre quelli del suffisso a 0.
6 Lo
si può trovare in forma decimale o esadecimale.
17
1.3. MODELLO A STRATI
Nella precedente Figura la maschera è in notazione decimale e corrisponde a:
255.255.255.0
→
11111111.11111111.11111111.00000000
Se la netmask fosse stata in notazione esadecimale non sarebbe cambiato niente:
0xffffff00
→
11111111.11111111.11111111.00000000
Esempio. Un /16 viene tradotto come 11111111.11111111.00000000.00000000, questa è definita maschera.
Di conseguenza nella Figura del comando ifconfig la maschera corrisponde a una /24.
Per determinare altre informazioni sulla rete c’è a disposizione il comando:
whois ⟨indirizzo ip⟩.
In genere le voci:
• inetnum: è il range degli indirizzi disponibili (partendo dal primo fino ad arrivare all’ultimo).
• route: indica la medesima informazione di inetnum, ma con la notazione barrata.
Esempio. Dato l’indirizzo 157.27.200.150 appartenente alla rete 157.27.0.0/16, dunque i primi
16 bit sono quelli dedicati al prefisso.
Osservazione (1). quando si ha a che fare con intere reti, ci si focalizza sul prefisso e tutti i bit
del suffisso sono posti a 0.
Osservazione (2). se il comando ifconfig mostra di essere su una /24 e whois su una /16. Il
motivo di questa situazione è dato dal subnetting.
1.3.3
Subnetting
Il subnetting è il processo di suddivisione della rete in sotto reti: nel momento in cui è necessario
gestire reti molto grandi risulta comodo suddividere ulteriormente la rete in sotto reti.
Rete universitaria
Sotto rete 1
Sotto rete 2
GARR
Sotto rete 3
Esempio (Rete universitaria). Poiché ci sono più sedi è difficile gestire un’unica rete, allora
l’idea è quella di spezzare (per esempio) una /16 e generare diverse /20.
La rete dall’esterno continua ad apparire a /16, ma internamente dopo aver suddiviso in sotto
reti è facile creare un instradamento che avviene sulla scala minore.
18
CAPITOLO 1. INTRODUZIONE ALLE RETI
⇒ Come si creano sotto reti partendo da un blocco di indirizzi?
Viene preso un indirizzo casuale in notazione decimale puntato 180.190.0.0/16, e lo si trasforma
in binario 10110100.10111110.00000000.00000000/16. Bisogna dividere la rete in due sotto
reti di pari dimensione: si considera il primo bit del suffisso incorporandolo nella parte di prefisso
(cambiando da 16 a 17 bit):
• Prima sotto rete: 10110100.10111110. ? 0000000.00000000/17
• Seconda sotto rete: 10110100.10111110. ? 0000000.00000000/17
Come ultimo bit di suffisso (rettangolo colorato) va inserito rispettivamente 0 e 1:
• Prima sotto rete: 10110100.10111110. 0 0000000.00000000/17, traducendosi in:
180.190.0.0/17
• Seconda sotto rete: 10110100.10111110. 1 0000000.00000000/17, traducendosi in:
180.190.128.0/17
Inizialmente la rete disponeva di 232−16 = 216 = 65536 indirizzi, mentre ora entrambe le sotto
reti hanno a disposizione 232−17 = 215 = 32768 indirizzi.
1.4
Blocco CIDR
I blocchi di indirizzi sono detti anche blocchi CIDR (Classless Inter Domain Routing).
Storicamente l’indirizzamento era classfull, ossia un approccio basato su classi, in cui i bit
iniziali dell’indirizzo determinavano automaticamente la classe d’appartenenza.
Esempio. Se l’indirizzo IP inizia con 0, allora il prefisso è di 8 bit e appartiene alla classe
A:
IP
}|
{
z
.
01011011.11101100.10000011
Classe A 01010111
{z
}
| {z } |
prefisso
suffisso
Altrimenti se corrisponde a 1 si controlla il secondo bit, se è uguale a 0 allora il prefisso è di
16 bit e appartiene alla classe B:
IP
Classe B
z
}|
{
10010111.01011011
.
11101100.10000011
|
{z
} |
{z
}
prefisso
suffisso
Nel caso fosse 1 si controlla il terzo bit, se è pari a 0 allora il prefisso risulta essere di 24 bit
e appartiene alla classe C:
IP
Classe C
z
}|
{
11010111.01011011.11101100
.
10000011
|
{z
} | {z }
prefisso
suffisso
1.4. BLOCCO CIDR
19
Andando avanti esistono anche le classi D (1110) ed E (1111). Nonostante la comodità di
questa rappresentazione, l’utilizzo si è fermato agli anni ’90.
Esistono un insieme di indirizzi IP riservati, ovvero che non possono essere assegnati agli host,
ma svolgono determinati compiti:
• Indirizzo di rete: i bit che appartengono al suffisso sono tutti 0
(xxxxxxx.xxxxxxx.xxxxxxx.00000000), il suo scopo è quello di identificare un blocco.
• Indirizzo di directed broadcast: i bit del suffisso sono tutti uguali a 1
(xxxxxxx.xxxxxxx.xxxxxxx.11111111), lo si utilizza quando qualcuno vuole inviare un
messaggio a tutti gli host appartenenti alla rete.
• Indirizzo dove ogni bit è 0 (00000000.00000000.00000000.00000000).
• Indirizzo con ogni bit a 1 (11111111.11111111.11111111.11111111).
20
CAPITOLO 1. INTRODUZIONE ALLE RETI
Livello applicativo
Il livello d’applicazione genera un messaggio applicativo, visto come un’unità che deve essere
trasmesso verso una determinata destinazione.
Poiché questo livello si interfaccia con quello di trasporto, deve decidere la tipologia di servizio
offerto: a livello di trasporto ci sono solo due protocolli, quindi quando l’applicazione ha un
messaggio da spedire deve scegliere quale di questi due servizi utilizzare. I protocolli disponibili
sono:
• TCP (Transission Control Protocol ): prevede un servizio orientato alla connessione e il
trasporto affidabile dei dati. Quando un’applicazione invoca TCP come protocollo riceve
questi servizi:
– Servizio orientato alla connessione: si fa in modo che client e server si scambino informazioni di controllo a livello di trasporto prima che i messaggi a livello di
applicazione comincino a fluire. Tale procedura è nominata handshaking : mette in
allerta client e server, preparandoli alla partenza di pacchetti.
Dopo questa fase, si dice che esiste una connessione TCP tra le socket dei due
processi: la connessione è full-duplex , ovvero i due processi possono scambiarsi contemporaneamente messaggi sulla connessione.
Infine l’applicazione deve chiudersi quando la connessione termina di inviare messaggi.
– Servizio di trasferimento affidabile: i processi comunicanti possono contare su
TCP per trasportare i dati senza errori e nel giusto ordine. Quando un lato dell’applicazione passa un flusso di byte alla sua socket, può affidarsi a TCP per consegnare lo stesso flusso di informazioni alla socket di ricezione, senza alcuna perdita o
duplicazione.
Il protocollo TCP include anche un meccanismo di controllo della congestione. In
poche parole si esegue una “strozzatura” del processo d’invio (client o server ) quando
il traffico di rete appare eccessivo.
• UDP (User Datagram Protocol ): è un protocollo molto leggero, senza connessione e non
necessita di handshaking: non fornisce un servizio di trasferimento dati affidabile. Quando
un processo invia un messaggio tramite la socket UDP, il protocollo non garantisce che questo raggiunga il processo di destinazione; per di più i messaggi potrebbero non raggiungere
la destinazione in ordine.
Non è contenuto nemmeno un meccanismo di controllo della congestione, pertanto un
processo d’invio UDP spedisce i dati al livello sottostante (di rete) a qualsiasi velocità.
21
22
CAPITOLO 2. LIVELLO APPLICATIVO
Il reale throughput end-to-end disponibile può essere inferiore alla velocità d’invio, a
causa della banda limitata dei collegamenti coinvolti o a causa della congestione.
Un’applicazione che intende comunicare con un host deve selezionare uno di questi due servizi
appena descritti.
Apertura di una socket
Specificare il servizio di livello di trasporto da utilizzare, nella pratica consiste aprire una socket.
Per socket si identifica un insieme di parametri, un’astrazione software, che identifica un flusso
informativo attraverso:
• IP sorgente;
• IP destinazione;
• Porta sorgente (il processo che genera il flusso);
• Porta destinazione.
Viene dunque invocata una funzione a livello applicativo che passa questi parametri.
Architettura client-server
Nella comunicazione tra due host si possono identificare due ruoli distinti: client e server. Il
processo che assume il ruolo di client è detto processo client: responsabile di iniziare la comunicazione mandando al server il primo messaggio; in generale, ma non sempre, possiede un
indirizzo IP dinamico1 .
Il processo server è un processo caricato su un host sempre raggiungibile (possiede un indirizzo
IP fisso), pertanto è sempre in ascolto.
1 Rimane lo stesso per tutta la sessione, ma se la macchina cambia posizione all’interno della rete, allora cambia
anche indirizzo.
2.1. WEB E HTTP
23
Esempio. Quando un client apre una socket verso un server web, lo fa utilizzando il servizio di
livello di trasporto (HTTP) legato al protocollo TCP.
Un aspetto da tenere in considerazione è che in questa architettura i client non comunicano direttamente tra loro. Inoltre sono spesso utilizzati data center , i quali consentono di ospitare molti
host che creano un potente server virtuale: solitamente ne fanno uso servizi molto imponenti
come motori di ricerca, posta elettronica, social networking, ecc.
Architettura P2P
In un’architettura P2P (peer-to-peer ) l’infrastruttura di server in data center è minima o
assente, invece la comunicazione è diretta tra coppie arbitrarie di host, chiamati peer 2 , collegati
in modo intermittente. I peer non appartengono a un fornitore di servizi, ma sono computer fissi
e portatili controllati dagli utenti.
I servizi che possono sfruttare tale architettura di rete possono essere: applicazioni per la
condivisione di file, telefonia e videoconferenza su Internet, ecc.
Alcune applicazioni potrebbero possedere un’architettura ibrida, combinando P2P con quella
client-server. Per esempio applicazioni di messaggistica istantanea, in cui i server sono utilizzati
per tenere traccia degli indirizzi IP degli utenti, ma i messaggi sono inviati direttamente tra gli
host senza passare attraverso nodi intermedi.
2.1
Web e HTTP
A partire dai primi anni del ’90 compare una nuova applicazione: il World Wide Web. Il Web è
stata la prima applicazione Internet che ha cambiato il modo di interagire all’interno e all’esterno
degli ambienti di lavoro, infatti a differenza dalle altre tipologie di trasmissione (come quella
radiotelevisiva) è che opera su richiesta (on demand ).
2.1.1
Protocollo HTTP
Il protocollo principale dell’applicazione Web è quello HTTP (HyperText Transfer Protocol ).
Questo protocollo è implementato in due programmi, client e server, in esecuzione su sistemi
periferici diversi che comunicano tra loro scambiandosi messaggi HTTP.
È bene che il passaggio delle informazioni sia stabile e affidabile, di conseguenza l’HTTP si
appoggia sul protocollo TCP.
Il client inizia una richiesta verso il server per una pagina web, detta anche documento. Essa
è costituita da un insieme di oggetti, ossia semplicemente: file HTML, immagini JPEG, applet
Java, video, ecc.; tale documento è indirizzabile tramite un URL (Uniform Resource Locator ).
La maggioranza di pagine web consiste in un file HTML principale organizzato secondo una
propria struttura e avente diversi oggetti referenziati (vedi Figura 2.1).
2 Che
significa “pari”, inteso sullo stesso piano.
24
CAPITOLO 2. LIVELLO APPLICATIVO
Testo
Testo
Immagine 1
Immagine 2
Figura 2.1: Struttura di pagina web e oggetti.
Quando i client vogliono comunicare con il server, l’utente dal proprio computer utilizza un
browser web che implementa il lato client di HTTP, allo stesso modo il web server implementa
il lato server di HTTP, il quale ospita gli oggetti da raggiungere indirizzabili tramite URL.
Quando l’utente richiede una pagina web cliccando su un collegamento ipertestuale, il browser
invia al server messaggi di richiesta HTTP per gli oggetti presenti all’interno del documento. A
sua volta il server riceve le richieste e risponde con messaggi di risposta HTTP contenenti gli
oggetti.
HTTP fa affidamento al protocollo TCP, dunque non si deve preoccupare: dei dati smarriti,
di come TCP recuperi le perdite o del riordino dei dati all’interno della rete. Inoltre i server
HTTP non mantengono informazioni sui client, difatti è classificato come protocollo senza
memoria di stato (stateless protocol ).
25
2.1. WEB E HTTP
Client
Server
www.univr.it
Apertura della
connessione
(eseguita da TCP)
GET
Maximum
segment size
REPLY
REPLY
REPLY
Nel dettaglio questa rappresentazione serve a comprendere meglio i passaggi che avvengono
durante la comunicazione:
• Il protocollo TCP dà il via a una connessione tra client e server, necessaria a informare il
server che da lì a poco seguirà una fase di richiesta.
Attenzione: la connessione creata non ha niente a che fare con la commutazione a circuito.
• Dopo l’apertura della connessione, viene mandata una richiesta di livello applicativo che
trasporta un messaggio GET: avvisa il server che si vuole ottenere la struttura della pagina
indicata.
• Il server risponde con un messaggio di REPLY contenente la pagina stessa. In alcuni
casi se la risposta risultasse troppo grande rispetto a un parametro chiamato maximum
segment size 3 , allora verrebbe spezzettata in più parti così da essere riassemblati una volta
raggiunta la destinazione.
2.1.2
Connessioni persistenti e non persistenti
A seconda dell’applicazione e del suo impiego la serie di richieste potrebbe essere effettuata in sequenza, periodicamente a intervalli regolari o in maniera intermittente. Quando tale interazione
client-server ha luogo su TCP, gli sviluppatori devono scegliere se ciascuna coppia richiesta/risposta deve essere inviata su una connessione TCP separata o se devono essere sulla medesima
connessione.
Il primo dei due approcci si dice che usa connessioni non persistenti, mentre il secondo
usa connessioni persistenti.
Esempio (Connessione non persistente). Si ipotizza che una pagina consisti in un file HTML
principale e 10 immagini JPEG con tutti questi oggetti memorizzati sullo stesso server, e che
l’URL del file HTML principale sia: http://www.someSchool.edu/someDepartment/home.index.
I seguenti passi indicano cosa avviene:
1. Il processo client HTTP inizializza una connessione TCP con il server www.someSchool.edu
sulla porta 80 (porta predefinita per HTTP). Associata alla connessione TCP ci saranno
una socket per il client e una per il server.
3 Parametro
legato alle caratteristiche tecnologiche della connessione.
26
CAPITOLO 2. LIVELLO APPLICATIVO
2. Il client HTTP, tramite la propria socket, invia al server un messaggio di richiesta HTTP
che include il percorso /someDepartment/home.index.
3. Il processo server HTTP riceve il messaggio di richiesta attraverso la propria socket associata alla connessione, recupera l’oggetto /someDepartment/home.index dalla memoria
centrale o di massa, lo incapsula in un messaggio di risposta HTTP che viene inviato al
client mediante la socket.
4. Il processo server HTTP comunica a TCP di chiudere la connessione. Tuttavia la connessione non termina finché non si è certi che il client abbia ricevuto integro il messaggio di
risposta.
5. Il client HTTP riceve il messaggio di risposta e la connessione TCP termina. Il messaggio
indica che l’oggetto incapsulato è un file HTML e trova i riferimenti ai 10 oggetti JPEG.
Quanto appena elencato nell’esempio proposto indicano l’utilizzo di connessioni non persistenti,
in cui ogni connessione TCP viene chiusa dopo l’invio dell’oggetto da parte del server. Ciò
significa che ciascuna porta trasporta soltanto un messaggio di richiesta e uno di risposta (quindi
sono state generate 11 connessioni TCP).
Di contro le connessioni non persistenti presentano qualche limite:
• Per ogni oggetto richiesto occorre stabilire e mantenere una nuova connessione.
• Per ciascuna di queste connessioni si devono allocare buffer e mantenere variabili TCP sia
nel client sia nel server. Questo pone un grosso peso al web server che può dover servire
contemporaneamente richieste provenienti da centinaia di diversi client.
• Ciascun oggetto subisce un ritardo di consegna di 2 RTT: uno per stabilire la connessione
TCP e il secondo per richiedere e ricevere un oggetto.
Invece con HTTP 1.1 nelle connessioni persistenti il server lascia la connessione TCP aperta
dopo l’invio di una risposta, pertanto le richieste e le risposte successive tra gli stessi client e
server possono essere trasmesse sulla stessa connessione. Nel dettaglio non solo si può inviare
un’intera pagina web su una sola connessione TCP, ma anche spedire allo stesso client più pagine
web. Tutte le richieste di oggetti possono essere effettuate di seguito senza aspettare le risposte
delle richieste pendenti (pipelining).
In generale il server HTTP chiude la connessione quando essa rimane inattiva per un certo
lasso di tempo (un intervallo configurabile).
2.1.3
Formato dei messaggi HTTP
Le specifiche HTTP includono la definizione dei due formati dei messaggi di richiesta e riposta;
HTTP è un protocollo testuale: il messaggio è scritto in testo ASCII, in modo che l’utente sia
in grado di leggerlo.
Messaggio di richiesta HTTP
Il messaggio di richiesta può consistere in un numero indefinito di righe. Ogni riga è seguita
da un carattere di ritorno a capo (carriage return) e un carattere di nuova linea (line feed ).
La prima riga è detta riga di richiesta (request line) e quelle successive sono dette righe
di intestazione (header lines).
2.1. WEB E HTTP
27
Figura 2.2: Formato generale dei messaggi di richiesta HTTP.
• La riga di richiesta presenta tre campi (separati da uno space): il metodo, l’URL e la
versione di HTTP.
Il campo del metodo può assumere diversi valori, tra cui:
– GET: richiede un oggetto identificato dal campo URL;
– POST: l’oggetto è richiesto tramite i dati inseriti in un form;
– HEAD: è simile al metodo GET, ma il server quando risponde tralascia gli oggetti
richiesti;
– PUT: consente agli utenti di inviare un oggetto a un percorso specifico su un determinato web server ;
– DELETE: consente la cancellazione di un oggetto su un server.
La maggior parte di richieste HTTP usano il metodo GET per quando il browser richiede
un oggetto identificato dal campo URL.
• Le righe di intestazione specificano: l’Host su cui risiede l’oggetto4 ; Connection indica
se il browser che comunica al server si deve occupare delle connessioni persistenti; Useragent dichiara il tipo di browser cui effettua la richiesta; infine Accept-language specifica
la lingua preferita (se disponibile) dall’utente.
Esempio. Sul browser si ricerca www.univr.it/pagina.html
GET /pagina.html HTTP/1.1
Host: www.univr.it
Connection: close
User-agent: Mozilla/4.0
Accept-language: en
Sul browser si ricerca http://www.someSchool.edu/somedir/page.html
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
4 L’informazione
fornita dalla linea di intestazione dell’host viene richiesta dalle cache dei proxy.
28
CAPITOLO 2. LIVELLO APPLICATIVO
Dopo le iniziali righe di richiesta e di intestazione segue una riga vuota di separazione, e si
arriva al corpo dell’entità (entity body). Quest’ultimo risulta vuoto nel caso del metodo GET,
diversamente si riempie quando un client HTTP fa uso del metodo POST per riempire un
campo form: i contenuti richiesti alla pagina web dipendono dall’inserimento nel campo che
finisce all’interno del corpo dell’entità.
Messaggio di risposta HTTP
Il messaggio di risposta avviene sempre, anche quando la richiesta effettuata è stata creata
erratamente. In questo caso il messaggio è composto da: una prima riga detta riga di stato,
poi da una o più righe di intestazione e infine dal corpo.
Figura 2.3: Formato generale dei messaggi di risposta HTTP.
• La riga di stato è formata da tre campi: la versione del protocollo, un codice di stato e
un corrispettivo messaggio di stato.
• Le righe di intestazione si differenziano in varie etichette: Connection comunica al client
le intenzioni verso la connessione TCP dopo l’invio del messaggio (se chiuderla o no);
Date indica l’ora e la data di creazione e invio della risposta da parte del server ; Server
specifica come è stato generato il messaggio di risposta (analoga all’User-agent); LastModified dichiara l’istante e la data il cui l’oggetto è stato creato o modificato per l’ultima
volta; Content-Length comunica il numero di byte dell’oggetto inviato; Content-Type indica
il tipo dell’oggetto nel corpo.
• Il corpo è la parte più importante del messaggio: contiene l’oggetto richiesto.
Esempio. Risposta al precedente secondo esempio:
HTTP/1.1 200 OK
Connection: close
Date: Thu, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:04 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
2.1. WEB E HTTP
29
Nell’esempio si verifica uno dei tanti codici di stato:
• 200 OK: la richiesta ha successo e come risposta si invia l’informazione.
• 301 Moved Permanently: l’oggetto richiesto è stato trasferito in modo permanente. Il
nuovo URL è specificato nell’intestazione Location del messaggio di risposta.
• 400 Bad Request: è un codice di errore generico che indica l’invio di una richiesta non
compresa dal server.
• 404 Not Found: il documento richiesto non esiste sul server.
• 505 HTTP Version Not Supported: il server non dispone della versione di protocollo
HTTP richiesta.
Interazione con i web server
Il comando Telnet5 apre una connessione TCP alla porta 80 dell’host cis.poly.edu e invia
una richiesta HTTP. Successivamente avviene un messaggo di risposta che include il file HTML
e altri parametri visti in precedenza.
In alternativa, solo per i sistemi Unix e Unix-like, è possibile utilizzare il comando nc (netcat).
Oltre all’indicare il nome dell’host e la porta con la quale aprire una connessione TCP, ci sono
dei parametri da aggiungere:
• -v sta per verbose, ossia fornisce alcune informazioni aggiuntive.
• -c per MacOs e -C per GNU/Linux: invia CRLF (Carriage Return Line Feed ) come fine
riga.
5 Disponibile
per sistemi Windows e GNU/Linux.
30
CAPITOLO 2. LIVELLO APPLICATIVO
1. Si avvia il comando nc specificando i parametri -vC, il nome dell’host e la porta.
2. Si riceve un messaggio di successo alla connessione.
3. Manualmente si inserisce la richiesta dal fare al server (si preme il tasto “invio” due volte
per spedire la richiesta).
4. Il server risponde indicando l’errore 400, poiché la richiesta prima non è stata effettuata
correttamente secondo le regole.
1. In questo esempio oltre ad aver effettuato la richiesta GET e stato specificato pure l’host.
2. Il server risponde indicando il codice 301, cioè che la pagina richiesta è stata spostata in
maniera permanente (l’URL appare in Location).
Quest’ultimo tentativo invece riporta un esito positivo, poiché la richiesta è stata espressa
correttamente ed è presente al posto giusto la pagina.
2.1. WEB E HTTP
31
Quando si vuole accedere a un sito che utilizza il protocollo https bisogna cambiare comando:
openssl. Seguono una serie di parametri: s_client identifica la macchina come client che vuole
effettuare la richiesta; -crlf specifica la codifica dell’invio a capo; -connect connette all’indirizzo
che si vuole raggiungere.
Se si invia tale comando si ricevono varie informazioni dove:
• In una prima fase, essendo HTTPS, c’è lo scambio di informazioni relative alla creazione
di una connessione sicura (connessione cifrata). Vengono scambiati certificati, chiavi, ecc.
• Prima di rendere disponibile la console per inserire le richieste come negli esempi fatti con
telnet e nc, c’è una voce identificata come TLS session ticket lifetime hint: 7200
(seconds). Questa riga significa che l’informazione deve essere scritta entro 7200 secondi,
altrimenti si interrompe la connessione.
• Dopo la creazione di una connessione sicura si inseriscono normalmente le richieste al server.
32
CAPITOLO 2. LIVELLO APPLICATIVO
2.1.4
Interazione utente-server: i cookie
I server HTTP sono privi di stato, ciò semplifica la progettazione e garantisce maggiori prestazioni. Tuttavia è bene che i web server autentichino gli utenti, sia per limitare l’accesso sia
per fornire contenuti in funzione della loro identità. Ecco che l’HTTP adotta i cookie, ossia
un meccanismo che consente ai server di tener traccia degli utenti (sono spesso presenti nella
maggior parte di siti commerciali).
Come mostrato in figura la tecnologia cookie presenta quattro componenti:
1. Una riga di intestazione nel messaggio di risposta HTTP.
2. Una riga di intestazione nel messaggio di richiesta HTTP.
3. Un file mantenuto sul sistema dell’utente e gestito dal browser.
4. Un database sul sito.
Tenendo ancora in considerazione quest’ultimo esempio, ciò che accade è:
0. In un tempo passato l’utente ha effettuato l’accesso al sito di eBay.
1. L’utente accede al Web tramite browser e si dirige sul sito di Amazon.com.
2. Quando la richiesta arriva al web server di Amazon, il sito crea un identificativo unico e
una voce nel proprio database, indicizzata dal numero identificativo.
3. A questo punto il server risponde al browser dell’utente, includendo nella risposta HTTP
l’intestazione Set-cookie (contenitore del numero identificativo).
2.1. WEB E HTTP
33
4. Nel momento in cui il browser dell’utente riceve il messaggio di risposta, visualizza l’intestazione Set-cookie: aggiunge una riga al file dei cookie che gestisce. Essa include il
nome dell’host del server e il numero identificativo.
5. Si noti che il file di cookie contiene già una voce per eBay, difatti mentre l’utente naviga
sul sito di Amazon, ogni volta che richiede una pagina web, il browser consulta il file dei
cookie. Estrae il numero identificativo per il sito ponendo nella richiesta HTTP una riga
di intestazione del cookie che include tale numero: Cookie: 1678.
Seguendo tale modo è possibile monitorare l’attività degli utenti all’interno dei siti, nonostante non si conosca necessariamente il nome, si sa esattamente quali pagine sono state visitate
dall’utente X (numero identificativo).
I cookie possono anche essere usati per creare un livello di sessione utente al di sopra di HTTP
che è privo di stato. Per esempio nei servizi di posta elettronica, il browser invia le informazioni
del cookie al server permettendo a quest’ultimo di identificare l’utente attraverso la sessione
utente dell’applicazione.
Con l’utilizzo dei cookie nascono controversie riguardo la violazione della privacy dell’utente.
Usando una combinazione di cookie e di informazioni fornite dall’utente, un sito web può
imparare molto sull’utente e potrebbe vendere i dati a terze parti.
2.1.5
Web caching
Una web caching , nota come anche proxy server/caching , è un’entità di rete che soddisfa
richieste HTTP al posto del web server effettivo. Il proxy ha una propria memoria su disco (una
cache) in cui conserva copie di oggetti recentemente richiesti.
Il browser di un utente può essere configurato in modo che tutte le richieste HTTP dell’utente
vengano dirette al proxy server.
Esempio (Il browser richiede l’oggetto http://www.someschool.edu/campus.gif).
1. Il browser stabilisce una connessione TCP con il proxy server e invia una richiesta HTTP
per l’oggetto specificato.
2. Il proxy controlla la presenza di una copia dell’oggetto memorizzata localmente. Se l’oggetto
viene rilevato, il proxy lo inoltra all’interno di un messaggio di risposta HTTP.
34
CAPITOLO 2. LIVELLO APPLICATIVO
3. Se invece la cache non dispone dell’oggetto, apre una connessione TCP verso il server
d’origine, ossia in questo esempio www.someschool.edu.
Poi il proxy invia una richiesta HTTP per l’oggetto. Una volta ricevuta tale richiesta, il
server d’origine invia al proxy l’oggetto all’interno di una risposta HTTP.
4. Quando il proxy riceve l’oggetto ne salva una copia nella propria memoria locale e ne inoltra
un’altra copia, contenuto all’interno di un messaggio HTTP, al browser sulla connessione
TCP esistente con il proxy.
Il web caching si è sviluppato per due principali ragioni:
• Riduce di molto i tempi di risposta alle richieste dei client.
• Riduce il traffico sul collegamento di accesso a Internet, con il vantaggio di non dover
aumentare l’ampiezza di banda frequentemente.
GET condizionale
Sebbene il web caching riduca i tempi di risposta percepiti dall’utente, introduce un nuovo
problema: la copia di un oggetto che risiede in cache potrebbe essere scaduta, per esempio viene
modificato nel tempo all’interno del sito.
Ecco che HTTP presenta un meccanismo tale per cui permette alla cache di verificare se i suoi
oggetti sono aggiornati. Questo meccanismo è noto come GET condizionale: un messaggio di
richiesta HTTP viene detto messaggio di GET condizionale se usa il metodo GET e include una
riga di intestazione If-modified-since.
Client
Cache
Server
GET
GET
If-modified-sin
ce: ...
dif
Not Mo
ied
Se il valore della riga di intestazione If-modified-since equivale esattamente al valore della
riga di intestazione Last-Modified (analizzata nella Figura 2.3), allora ritorna come risposta
lo stato 304 Not Modified che comunica al proxy di poter proseguire e inoltrare al browser
richiedente la copia dell’oggetto presente in cache. Altrimenti si procede con i passaggi visti per
il funzionamento del proxy.
2.2
DNS: servizio di directory di Internet
Il DNS (Domain Name System) si occupa di tradurre un indirizzo logico www.nomesito.tld
nel corrispondente indirizzo IP.
L’utente inserisce nella barra degli indirizzi del browser il nome logico. Prima di creare una
connessione tra client e server, avviene una comunicazione con il server DNS in cui viene inviata
35
2.2. DNS: SERVIZIO DI DIRECTORY DI INTERNET
una richiesta DNS. A questo punto il server DNS fornisce una risposta che contiene l’indirizzo
IP, così che si possa dare il via alla connessione tra client e server.
Client
Browser
Server DNS
Server
Richiesta DN
S
www.univr.it
Connessione
2.2.1
Organizzazione gerarchica
Nessun DNS server ha le corrispondenze per tutti gli host in Internet, infatti sono distribuite
tra tutti i DNS server.
Esistono tre classi di DNS server organizzati mediante una gerarchia: root server , top-level
domain server (TLD) e server autoritativi.
Figura 2.4: Gerarchia parziale di server DNS.
• Root server : forniscono gli indirizzi IP dei server TLD.
• DNS server : si occupano dei domini di primo livello: .com, .net, .edu e .gov; tutti i
domini di primo livello relativi ai vari paesi: .it, .uk, .fr, .jp, ecc.
Inoltre forniscono gli indirizzi IP dei server autoritativi.
• DNS server autoritativi: possiedono i record di organizzazioni dotate di host pubblicamente accessibili tramite Internet.
Esempio. Considerando l’indirizzo www.univr.it, lo si legge da destra verso sinistra:
.it → corrisponde al dominio principale. In genere può anche specificare la posizione geografica
come in questo caso, ma altre volte non è specificato come con i .com (commerciale).
Se ne occupa il TLD.
36
CAPITOLO 2. LIVELLO APPLICATIVO
univr → identifica all’interno del dominio principale il dominio locale.
Se ne occupa il DNS locale.
www → identifica una macchina specifica all’interno del dominio locale.
Se ne occupa il DNS locale.
DNS
locale
Client
www.sito.org
DNS
root
TLD
.org
TLD
.it
TLD
.com
DNS
locale
? TLD .org
reply
Server sito.org
?
reply
? IP www.sito.
org
IP
Un utente cerca un certo sito www.sito.org, allora il client interroga il DNS locale. Se il server
non riconosce il sito non può fare altro che rivolgersi al DNS root.
A questo punto il DNS locale prende in carico la richiesta del client e chiede al root server DNS
quale è il TLD che gestisce il .org. In risposta riceve quindi l’indirizzo del TLD .org.
Successivamente il DNS locale manda una richiesta al TLD .org chiedendogli quale sia l’indirizzo
del server sito.org. Siccome il TLD .org mantiene una lista delle associazioni tra il dominio
ricercato e il server DNS locale del sito stesso, risponde con l’indirizzo di quest’ultimo.
Infine il DNS locale è finalmente in grado di connettersi al server locale che gestisce tutte le macchine relative al dominio sito.org: gli viene richiesto quale sia l’IP della macchina
www.sito.org. Ecco che dopo tutti questi passaggi il client riceve l’IP finale al quale rivolgersi.
Per non ripetere l’intero processo di richieste appena visto, il server DNS locale mantiene in
memoria le risposte precedenti. Ciò significa che se un altro client successivamente effettua una
richiesta per lo stesso sito, il server DNS risponde direttamente con l’informazione desiderata.
2.2.2
Rapporto tra DNS e cache di rete
Client
www.repubblica.it
DNS
Cache
Server di
origine
DNS
che
IP ca
If-modified-sinc
e
Figura 2.5: Rapporto cache/DNS.
2.3. POSTA ELETTRONICA IN INTERNET
37
È ovvio che server come quello per esempio di Repubblica sono tanto carichi di traffico. Di
conseguenza l’idea è quella di piazzare per la rete Internet una serie di web cache vicine agli
utenti; in questo modo quando un utente fa una richiesta per andare in un determinato sito,
in realtà viene rigirato verso la cache più vicina. Quest’ultima ha il compito di mantenere le
informazioni allineate rispetto quelle presenti nel server di Repubblica.
La prima cosa che fa il client è una richiesta al DNS (vedi Figura 2.5), il quale non risponde
con l’indirizzo IP del server di origine, bensì della cache. Il client esegue allora un collegamento
con la cache 6 , che per prima cosa verifica se le informazioni sono aggiornate in memoria e poi
risponde alla richiesta ricevuta dall’utente.
2.3
Posta elettronica in Internet
La posta elettronica rappresenta ancora una delle più importanti killer application. L’e-mail
rappresenta un mezzo di comunicazione asincrono: le persone inviano e leggono i messaggi nel
momento loro più opportuno, senza doversi coordinare con altri utenti. La moderna posta
elettronica ha molte caratteristiche importanti come: gli allegati (attachment), i collegamenti
ipertestuali, il testo con formattazione HTML e le foto incorporate.
Un tipico messaggio inizia il proprio viaggio dallo user agent 7 , giunge al mail server del
mittente e prosegue fino al mail server del destinatario, dove viene depositato nella sua casella.
Figura 2.6: Sistema di posta elettronica di Internet.
Nell’esempio di Figura 2.6 vengono mostrati:
• Agenti utente (user agent): consentono agli utenti di leggere, rispondere, salvare e comporre messaggi.
6 Una
7 Sono
buona cache gestisce mediamente il 70-80% delle richieste.
i servizi come Microsoft Outlook o Apple Mail.
38
CAPITOLO 2. LIVELLO APPLICATIVO
• Server di posta (mail server ): costituiscono la parte centrale dell’infrastruttura del
servizio di posta elettronica. Ogni destinatario possiede una casella di posta (mailbox )
collocata in un mail server.
• Protocollo SMTP (Simple Mail Transfer Protocol ): rappresenta il principale protocollo
a livello di applicazione per la posta elettronica.
2.3.1
Protocollo SMTP
Il protocollo SMTP (Simple Mail Transfer Protocol ) trasferisce i messaggi dal mail server del
mittente a quello del destinatario, facendo uso del servizio TCP.
Questo protocollo è molto più vecchio di HTTP e presenta alcune vecchie caratteristiche, per
esempio tratta il corpo e le intestazioni di tutti i messaggi di posta come semplice ASCII a 7
bit. Tuttavia SMTP non usa mail server intermedi per inviare la posta, anche quando i mail
server finali sono collocati nel punto più lontano: se il server di un utente A si trova a Hong
Kong e quello di un utente B si trova a New York, la connessione TCP ha luogo direttamente
tra le due città. In dettaglio se il server di B è spento, il messaggio rimane nel mail server di
A attendendo di effettuare un nuovo tentativo; il messaggio non viene posizionato in alcun mail
server intermedio.
Il processo di trasferimento SMTP di un messaggio da un mail server a un altro avviene nella
seguente maniera:
1. Il client SMTP fa stabilire a TCP una connessione sulla porta 25 verso il server SMTP. Se
il server è inattivo, il client riprova più tardi.
2. Dopo aver stabilito la connessione, il server e il client effettuano una qualche forma di
handshaking a livello applicativo. Durante questa fase il client indica l’indirizzo e-mail del
mittente e quello del destinatario.
3. Successivamente il messaggio viene inviato tramite il servizio TCP. Infine viene ordinato a
TCP di chiudere la connessione.
Confronto con HTTP
Entrambi i due protocolli vengono utilizzati per trasferire file da un host a un altro:
• HTTP: trasferisce file, spesso chiamati oggetti, da un web server a un web client (in genere
browser ).
• SMTP: trasferisce file, ossia messaggi di posta elettronica, da un mail server a un altro.
Durante il trasferimento sia HTTP sia SMTP utilizzano connessioni persistenti, ma presentano
altre differenze come:
1. HTTP è un protocollo pull , ovvero: qualcuno carica informazioni su un web server e gli
utenti usano HTTP per “attirarle” a sé dal server. In particolare la connessione TCP viene
iniziata dalla macchina che vuole ricevere il file.
SMTP è un protocollo push, cioè: il mail server di invio “spinge” i file al mail server in
ricezione. Pertanto la connessione TCP viene iniziata dall’host che vuole spedire i file.
2. SMTP compone i messaggi in ASCII a 7 bit, se per caso un messaggio contiene caratteri
che non appartengono all’ASCII a 7 bit o dati binari (come un’immagine), ugualmente deve
essere codificato in ASCII a 7 bit. Invece HTTP non impone tale vincolo.
2.3. POSTA ELETTRONICA IN INTERNET
39
3. HTTP incapsula ogni oggetto nel proprio messaggio di risposta HTTP, mentre la posta
elettronica colloca tutti gli oggetti in un unico messaggio.
2.3.2
Formato dei messaggi di posta
Il corpo dei messaggi di posta elettronica è preceduto da un’intestazione contenente informazioni
di servizio. Tale informazione periferica è contenuta in una serie di righe di intestazione.
Queste righe sono separate dal corpo del messaggio mediante una riga senza contenuto. Come
avviene per HTTP, tali righe contengono testo leggibile, costituito da una parola chiave seguita
da due punti a loro volta seguiti da un valore.
Alcune parole chiave sono obbligatorie, mentre altre sono facoltative:
• From: è una parola chiave obbligatoria che contiene come valore la provenienza.
• To: è una parola chiave obbligatoria che contiene come valore la destinazione.
• Subject: è una parola chiave opzionale che contiene come valore un titolo descrittivo del
messaggio.
Esempio. Tipica intestazione di un messaggio:
From: mittente@mail.com
To: destinatario@mail.com
Subject: Appunti del corso di reti.
Dopo l’intestazione segue una riga vuota, per poi trovare il corpo del messaggio in ASCII.
2.3.3
Protocolli di accesso alla posta
Quando SMTP consegna il messaggio dell’utente A al mail server destinatario, questo lo colloca
nella casella di posta dell’utente B.
Attualmente l’accesso alla posta elettronica utilizza un’architettura client-server : l’utente legge
le e-mail con un client in esecuzione sul proprio sistema periferico. Eseguendo un client di posta
su un PC locale, gli utenti beneficiano di molteplici possibilità, tra cui la capacità di visualizzare
messaggi multimediali e allegati.
Non conviene mantenere un mail server sul PC locale, perché dovrebbe essere sempre acceso.
Dunque si preferisce che l’utente non abbia in esecuzione uno user agent sul PC locale, ma che
acceda alla propria casella memorizzata su un mail server condiviso con altri utenti e sempre
attivo. Tale server è generalmente gestito dall’ISP dell’utente, per esempio un’università o
un’azienda.
Considerando il percorso del messaggio, deve essere depositato nel mail server del destinatario. Per farlo bisognerebbe forzare lo user agent del mittente a spedire messaggi direttamente al
mail server del destinatario utilizzando SMTP.
Generalmente lo user agent del mittente non dialoga in modo diretto con il server del destinatario. Nel dettaglio l’utente A utilizza SMTP per spingere i messaggi di posta elettronica nel suo
mail server, che adotta SMTP per comunicare il messaggio al mail server dell’utente B.
POP3
POP3 è un protocollo d’accesso alla posta che entra in azione quando lo user agent (il client)
apre una connessione TCP verso il mail server (il server ) sulla porta 110.
40
CAPITOLO 2. LIVELLO APPLICATIVO
Quando viene stabilita la connessione TCP, POP3 procede in tre passi:
1. Autorizzazione: lo user agent invia nome utente e password in chiaro per autenticare
l’utente.
2. Transizione: lo user agent recupera i messaggi. Inoltre può marcare i messaggi per la
cancellazione, rimuovere i marcatori di cancellazione e ottenere statistiche sulla posta.
3. Aggiornamento: questa fase avviene dopo che il client ha inviato il comando quit, che
conclude la sessione POP3: il server di posta rimuove i messaggi che sono stati marcati
per la cancellazione.
IMAP
IMAP è anch’esso un protocollo d’accesso alla posta, ma a differenza di POP3 consente di
effettuare diverse operazioni:
• Associa ogni messaggio arrivato al server a una cartella. I messaggi che arrivano sono
associati alla cartella INBOX del destinatario.
• Il destinatario può spostare il messaggio in una nuova cartella creata dall’utente, leggerlo,
cancellarlo e così via.
• Fornisce comandi agli utenti per creare cartelle e spostare i messaggi da una cartella all’altra. Inoltre sono disponibili comandi per effettuare ricerche nelle cartelle remote sulla base
di criteri specifici.
• I server IMAP conservano informazioni di stato sull’utente da una sessione all’altra.
• Consente agli user agent di ottenere singole parti, per esempio tenere solo l’intestazione o
una parte di messaggio composto da più elementi.
Livello di trasporto
Posto tra il livello di applicazione e il livello di rete, il livello di trasporto costituisce una parte
centrale dell’architettura stratificata delle reti e riveste la funzione critica di fornire servizi di
comunicazione direttamente ai processi applicativi in esecuzione su host differenti.
I processi applicativi usano la comunicazione logica fornita dal livello di trasporto per scambiare messaggi, senza preoccuparsi dei dettagli dell’infrastruttura fisica utilizzata per trasportarli.
Figura 3.1: Comunicazione logica del livello di trasporto.
41
42
CAPITOLO 3. LIVELLO DI TRASPORTO
Come rappresentato nella Figura 3.1 i protocolli a livello di trasporto sono implementati nei
sistemi periferici, ma non nei router della rete.
In lato mittente il livello di trasporto converte i messaggi che riceve da un processo applicativo in pacchetti a livello di trasporto, noti come segmenti (trasport-layer segment). Questo
avviene spezzando se necessario i messaggi applicativi in parti più piccole e aggiungendo a ciascuna di esse un’intestazione di trasporto per creare un segmento.
Il livello di trasporto passa il segmento al livello di rete, dove viene incapsulato all’interno di un
pacchetto a livello di rete, chiamato datagramma, e inviato a destinazione.
I router intermedi agiscono solo sui campi a livello di rete del datagramma, senza esaminare
i campi del segmento incapsulato al suo interno.
In lato ricevente il livello di rete estrae il segmento dal datagramma e lo passa al livello
superiore (quello di trasporto). Quest’ultimo elabora il segmento ricevuto rendendo disponibili
all’applicazione destinataria i dati del segmento.
Relazione tra i livelli di trasporto e rete
All’interno di un sistema periferico, un protocollo di trasporto trasferisce i messaggi dai processi
applicativi al livello di rete e viceversa, ma non fornisce alcuna indicazione su come i messaggi
siano trasferiti all’interno della rete. Come mostrato in Figura 3.1 i router intermedi non riconoscono né operano su alcuna informazione che il livello di trasporto possa aver aggiunto ai
messaggi delle applicazioni.
Una rete di calcolatori può rendere disponibili più protocolli di trasporto, ciascuno dei quali
può offrire alle applicazioni un modello di servizio differente. Tali servizi sono vincolati dal
modello di servizio del protocollo sottostante a livello di rete.
Se il livello di rete non può fornire garanzie sul ritardo o sulla banda per i segmenti a livello di
trasporto scambiati tra host, allora il protocollo a livello di trasporto non può offrire garanzie sul
ritardo o sulla banda per i messaggi applicativi tra processi.
Nonostante ciò alcuni servizi possono essere garantiti da un protocollo di trasporto, anche se
il sottostante protocollo di rete non offre un servizio corrispondente.
Per esempio un protocollo di trasporto offre il servizio di trasferimento dati affidabile alle applicazioni, persino quando il sottostante protocollo di rete non è affidabile, cioè quando il protocollo
di rete smarrisce, altera o duplica i pacchetti. Oppure un altro caso può essere che il livello di
trasporto utilizzi la crittografia per garantire che i messaggi delle applicazioni non vengano letti
da intrusi, anche quando il livello di rete non riesce a garantire la riservatezza dei segmenti a
livello di trasporto.
Panoramica del livello di trasporto in Internet
In generale la rete Internet è una rete TCP/IP, la quale mette a disposizione a livello d’applicazione due diversi protocolli:
• UDP (User Datagram Protocol ): fornisce alle applicazioni un servizio non affidabile non
orientato alla connessione.
• TCP (Transmission Control Protocol ): offre un servizio affidabile e orientato alla connessione.
3.1. MULTIPLEXING E DEMULTIPLEXING
43
Terminologia: si chiama “segmento” il pacchetto a livello di trasporto. Tuttavia si definisce anche “segmento” un pacchetto a livello di trasporto per TCP, mentre altre volte definisce
“datagramma” un pacchetto per UDP. In altri casi si usa il termine “datagramma” per il
pacchetto a livello di rete.
Si premette che il protocollo a livello di rete di Internet ha un nome: IP (Internet Protocol ).
Questo protocollo fornisce comunicazione logica tra host; il suo modello di servizio prende il nome
di best-effort delivery service 1 : quindi IP tenta di fare del proprio meglio per consegnare i
segmenti tra host comunicanti, ma non offre garanzie: sulla consegna, sull’ordine originario e
nemmeno sull’integrità dei dati all’interno dei segmenti. Per queste ragioni IP offre un servizio
non affidabile.
Il compito principale per i servizi UDP e TCP è quello di estendere il servizio di consegna
di IP, questo passaggio da a consegna host-to-host consegna process-to-process prende il nome
di multiplexing e demultiplexing a livello di trasporto2 . Inoltre UDP e TCP forniscono
un controllo di integrità includendo campi per il riconoscimento di errori nelle intestazioni dei
propri segmenti.
In dettaglio UDP, come IP, dispone di un servizio inaffidabile non garantendo che i dati da un
processo arrivino intatti o che arrivino in generale al destinatario.
Dall’altra parte TCP può offrire un servizio di trasferimento affidabile grazie al controllo di flusso,
ai numeri di sequenza, agli acknowledgment e ai timer. Per di più applica anche il controllo di
congestione alle applicazioni e a Internet nel suo complesso.
3.1
Multiplexing e demultiplexing
Nell’host destinatario il livello di trasporto riceve segmenti dal livello di rete immediatamente
sottostante. Il livello di trasporto ha il compito di consegnare i dati di questi segmenti al processo
applicativo appropriato in esecuzione nell’host.
Esempio. In un calcolatore si hanno quattro processi applicativi in esecuzione: due Telnet, un
FTP e un HTTP. Il livello di trasporto quando riceve dati dal livello di rete sottostante, li deve
indirizzare a uno di questi quattro processi.
Un processo può gestire una o più socket, attraverso le quali i dati fluiscono dalla rete al processo
e viceversa.
1 Comunemente
detto best-effort, ovvero “massimo sforzo”.
seguenti paragrafi questo servizio è trattato per il livello di trasporto nel contesto di Internet, ma è
presente in tutte le reti di calcolatori.
2 Nei
44
CAPITOLO 3. LIVELLO DI TRASPORTO
Di conseguenza il livello di trasporto nell’host di ricezione in realtà non trasferisce i dati direttamente a un processo, ma a una socket che fa da intermediario. Ciascuna, poiché ce ne possono
essere più di una, ha un identificatore univoco il cui formato dipende dal fatto che si tratti di
socket UDP o TCP.
In lato ricevente, il livello di trasporto esamina i campi delle socket di ricezione e quindi
dirige il segmento. Il compito di trasportare i dati dei segmenti a livello di trasporto verso la
giusta socket viene detto demultiplexing . Il compito di radunare frammenti di dati da diverse
socket sull’host di origine e incapsulare ognuno con intestazioni a livello di trasporto per creare
dei segmenti e passarli al livello di rete, viene detto multiplexing .
Nell’immagine fornita in precedenza il livello di trasporto nell’host centrale deve effettuare
il demultiplexing dal livello di rete di segmenti che possono arrivare sia per il processo P1 sia
per P2 ; ciò avviene indirizzando i dati del segmento in ingresso alla giusta socket. Il livello di
trasporto nell’host centrale deve raccogliere i dati in uscita dalle socket dei due processi, creare
i segmenti a livello di trasporto e passarli al livello di rete.
• Il multiplexing a livello di trasporto richiede che:
1. Le socket abbiano identificatori unici.
2. Ciascun segmento presenti campi che indichino la socket cui va consegnato il segmento.
Questi sono:
– I campi del numero di porta d’origine;
– Il campo del numero di porta di destinazione;
I numeri di porta sono di 16 bit e vanno da 0 fino a 65535. Quelli che vanno da 0 a 1023
sono chiamati numeri di porta noti (well-know port number ) e sono riservati per essere
usati da protocolli applicativi come HTTP (porta 80) e FTP (porta 21).
• Il servizio di demultiplexing viene implementato nel seguente modo: ogni socket nell’host
deve avere un numero di porta, e quando un segmento arriva all’host il livello di trasporto esamina il numero della porta di destinazione e dirige il segmento verso la socket
corrispondente.
3.1.1
Multiplexing e demultiplexing non orientati alla connessione
Si genera una socket attraverso Python (clientSocket = socket(AF_INET, SOCK_DGRAM)) alla
quale il livello di trasporto assegna automaticamente un numero di porta compreso tra 1024 e
65535 (che ancora non sia stata utilizzata).
3.1. MULTIPLEXING E DEMULTIPLEXING
45
A questo punto si suppone che un processo nell’host A con porta UDP 19157 voglia inviare
un blocco di dati applicativi a un processo con porta UDP 46428 nell’host B. Il livello di trasporto crea un segmento che include i dati applicativi, i numeri di porta d’origine (19157) e di
destinazione (46428) e altri valori. Questo segmento risultante viene passato al livello di rete
che lo incapsula in un datagramma IP ed effettua un tentativo di best-effort di consegna del
segmento al destinatario.
Quando i segmenti arrivano dalla rete, l’host B dirige ciascun segmento, facendone il demultiplexing, alla socket appropriata esaminando il numero di porta di destinazione del segmento.
Una socket UDP viene identificata completamente da una coppia che consiste di un indirizzo
IP e di un numero di porta di destinazione. Se due segmenti UDP presentano diversi indirizzi
IP e/o diversi numeri di porta d’origine, ma hanno lo stesso indirizzo IP e numero di porta di
destinazione, allora saranno diretti allo stesso processo di destinazione tramite la medesima
socket.
3.1.2
Multiplexing e demultiplexing orientati alla connessione
Una socket TCP è identificata da quattro parametri: indirizzo IP d’origine, numero di porta
d’origine, indirizzo IP di destinazione e numero di porta di destinazione. Quando arriva dalla rete
un segmento TCP in un host, quest’utilmo utilizza i quattro valori per effettuare il demultiplexing
e avviare il segmento verso la socket appropriata.
A differenza di UDP, se giungono due segmenti TCP aventi indirizzi IP d’origine o numeri
di porta di origine diversi, e anche a fronte di indirizzo IP e porta di destinazione uguali, allora
vengono diretti a due socket differenti. Le uniche eccezioni sono i segmenti TCP che trasportano
la richiesta per stabilire la connessione.
46
CAPITOLO 3. LIVELLO DI TRASPORTO
3.2
Trasporto non orientato alla connessione (UDP)
Il protocollo UDP fa il minimo che si debba fare: funzione di multiplexing/demultiplexing, semplice controllo degli errori e non aggiunge nulla a IP. Infatti scegliere UDP al posto di TCP
significa far comunicare in modo diretto l’applicazione con IP.
UDP prende i messaggi dal processo applicativo, aggiunge il numero di porta d’origine e di destinazione per il multiplexing/demultiplexing, aggiunge altri piccoli campi e passa il segmento
risultante al livello di rete. Quest’ultimo incapsula il segmento in un datagramma IP ed effettua
il tentativo di consegna all’host di destinazione in modalità best-effort. Se il segmento arriva a
destinazione, UDP utilizza il numero di porta di destinazione per consegnare i dati del segmento
al processo applicativo corretto.
Si nota però che in UDP non esiste handshaking tra le entità di invio e ricezione a livello di
trasporto. Proprio per questo motivo si dice che UDP non è orientato alla connessione.
Esempio. DNS è un tipico esempio di protocollo a livello applicativo che utilizza UDP.
Uno sviluppatore dovrebbe scegliere UDP, per determinate applicazioni, anziché TCP per i
seguenti motivi:
• Controllo più fine a livello di applicazione su quali dati sono stati inviati e
quando: non appena un processo applicativo passa dei dati a UDP, questo lo impacchetta
in un segmento che trasferisce immediatamente al livello di rete. Pertanto non vengono
introdotti ritardi (a differenza di TCP) nello stabilire una connessione.
• Nessuno stato di connessione: UDP non conserva lo stato della connessione e non
tiene traccia dei parametri di numero di sequenza e di acknowledgment. Per cui un server
dedicato a una particolare applicazione può generalmente supportare molti più client attivi
quando l’applicazione usa UDP al posto di TCP.
• Minore spazio usato per l’intestazione del pacchetto: TCP aggiunge all’intestazione
dei pacchetti 20 byte, mentre UDP solo 8.
3.2. TRASPORTO NON ORIENTATO ALLA CONNESSIONE (UDP)
47
A volte UDP viene preferito anche perché le applicazioni di gestione della rete vanno spesso
in esecuzione quando la rete stessa è in uno stato di stress, più precisamente quando è difficile
trasferire dati controllando la congestione o in maniera affidabile. In altri contesti viene preferito
UDP per le applicazioni multimediali, ma per il trasporto di dati multimediali in streaming e
per ragioni di sicurezza sul blocco del traffico UDP, TCP è più gettonato.
Le applicazioni possono ottenere un trasferimento di dati affidabile anche con UDP, a patto che l’affidabilità sia all’interno dell’applicazione stessa. Per esempio il protocollo QUIC
(Quick UDP Internet Connection), utilizzato dal browser Chrome di Google, utilizza UDP come
protocollo di trasporto e implementa l’affidabilità in un protocollo a livello di applicazione.
3.2.1
Struttura dei segmenti UDP
L’intestazione UDP presenta solo quattro campi di due byte ciascuno:
• I numeri di porta consentono all’host di destinazione di trasferire i dati applicativi al
processo corretto (si effettua il multiplexing).
• Il campo lunghezza specifica il numero di byte del segmento UDP. Questo valore è necessario
perché la grandezza del campo dati può essere diversa tra un segmento e quello successivo.
• Il checksum viene utilizzato per verificare se sono avvenuti errori nel segmento ed è calcolato
anche su alcuni campi dell’intestazione IP.
3.2.2
Checksum UDP
Il checksum serve a rilevare gli errori, in sostanza viene utilizzato per determinare se i bit del
segmento UDP sono stati alterati durante il loro trasferimento da sorgente a destinazione.
In lato mittente UDP si effettua il complemento a 1 della somma di tutte le parole da 16 bit
nel segmento, e l’eventuale riporto finale viene sommato al primo bit. Tale risultato viene posto
nel campo checksum del segmento UDP.
Esempio. Si considerano le tre seguenti parole:
0110011001100000
0101010101010101
1000111100001100
48
CAPITOLO 3. LIVELLO DI TRASPORTO
La somma delle prime due è:
0110011001100000
0101010101010101
1011101110110101
Sommando la terza parola al risultato precedente si ottiene:
1011101110110101
1000111100001100
1100101011000001
0100101011000010
Nota bene: il riporto di quest’ultima somma è stato sommato al primo bit.
Il complemento a 1 si ottiene convertendo i bit 0 in 1 e viceversa. Di conseguenza il checksum è
1011010100111101.
In ricezione si sommano le tre parole iniziali e il checksum, se non ci sono errori l’addizione risulta
1111111111111111, altrimenti se un bit vale 0 significa che è stato introdotto almeno un errore
nel pacchetto.
Il motivo dell’esistenza di questo valore checksum è che non esiste garanzia che tutti i collegamenti tra origine e destinazione controllino gli errori. Inoltre anche se i segmenti fossero trasferiti
correttamente lungo un collegamento, potrebbero verificarsi errori mentre il segmento si trova
nella memoria di un router.
UDP mette a disposizione a livello di trasporto un meccanismo di verifica su base end-to-end se
si vuole che il servizio trasferimento dati sia in grado di rilevare eventuali errori. Tuttavia UDP
non fa nulla per risolvere le situazioni di errore, alcune implementazioni si limitano a scartare il
segmento danneggiato, mentre altre lo trasmettono all’applicazione con un avvertimento.
3.3
Trasporto orientato alla connessione (TCP)
TCP viene detto orientato alla connessione in quanto i processi effettuano l’handshake
prima di scambiarsi i dati. Come primo passo devono inviarsi reciprocamente alcuni segmenti
preliminari per stabilire i parametri del successivo trasferimento dati.
Il TCP non è un circuito end-to-end TMD o FMS, in quanto lo stato della connessione risiede
completamente nei due sistemi periferici. Dato che il protocollo TCP va in esecuzione solo sui
sistemi periferici e non negli elementi di rete intermedi, quest’ultimi non salvano lo stato della
connessione rimanendo ignari delle connessioni che avvengono.
Viene offerto il servizio full-duplex : su una connessione TCP tra il processo A su un host e
il processo B su un altro host, dati a livello di applicazione possono fluire da entrambi i processi
nello stesso momento in direzione opposta. TCP è definibile anche punto a punto, in quanto
la connessione ha luogo solo tra un singolo mittente e un singolo destinatario; servizi come il
multicast, ossia il trasferimento di dati da un mittente a molti destinatari in un’unica operazione,
con TCP non è possibile.
Si considera l’esempio di un processo client e un processo server che vogliono aprire una
connessione.
Il processo applicativo client informa il livello di trasporto client di voler stabilire una connessione
3.3. TRASPORTO ORIENTATO ALLA CONNESSIONE (TCP)
49
verso un processo server. A questo punto il TCP in esecuzione sul client procede a stabilire il
collegamento con il TCP server : il client invia uno speciale segmento TCP e il server risponde
con un secondo segmento speciale TCP, infine il client risponde per l’ultima volta con un terzo
segmento speciale.
I primi due segmenti non trasportano payload, ovvero non hanno dati a livello applicativo, mentre
il terzo segmento può trasportare informazioni utili.
Questa procedura per cui i due host si scambiano tre segmenti viene detta handshake a
tre vie (three-way handshake).
Dopo l’aver instaurato finalmente la connessione TCP i due processi applicativi possono scambiarsi dati.
Una nota interessante di TCP è che le specifiche non si preoccupano di indicare quando si
debbano inviare dati nel buffer, in sostanza vengono spediti al momento più opportuno. La massima quantità di dati prelevabili e posizionabili in un segmento viene limitata dalla dimensione
massima di segmento (MSS maximum segment size).
Il valore di MSS viene impostato determinando prima la lunghezza del frame più grande
che può essere inviato a livello di collegamento dall’host mittente locale, la cosiddetta unità
trasmissiva di segmento (MTU maximum transimission unit). Poi appunto si sceglie un
MSS tale che il segmento TCP, una volta incapsulato in un datagramma IP, stia all’interno
di un singolo frame a livello di collegamento.
Esempio. I protocolli Ethernet e PPP hanno un MTU di 1500 byte, quindi un valore tipico di
MSS è 1460 byte (poiché l’intestazione TCP/IP occupa 40 byte).
Osservazione. MSS rappresenta la massima quantità di dati a livello di applicazione nel segmento
e non la massima dimensione del segmento TCP con intestazioni incluse.
TCP accoppia ogni blocco di dati del client a un’intestazione TCP, andando pertanto a formare
segmenti TCP. Questi vengono passati al sottostante livello di rete, dove sono incapsulati
separatamente nei datagrammi IP a livello di rete, successivamente immessi nella rete.
MESSAGGIO
H
H
H
Quando il destinatario riceve un segmento, i dati vengono memorizzati nel buffer di ricezione della
connessione TCP (ogni lato della connessione presenta un proprio buffer di invio e di ricezione).
3.3.1
Struttura dei segmenti TCP
Il segmento TCP consiste di campi intestazione e di un campo contenente un blocco di dati
proveniente dall’applicazione. MSS limita la dimensione massima del campo dati di un segmento,
ergo quando TCP deve inviare un file di grandi dimensioni lo frammenta in porzioni di dimensione MSS (eccetto l’ultima porzione che ha dimensioni minori). Le applicazioni interattive invece
trasmettono blocchi di dati più piccoli di MSS, per esempio le applicazioni di accesso remoto
50
CAPITOLO 3. LIVELLO DI TRASPORTO
Figura 3.2: Struttura dei segmenti TCP.
come Telnet hanno il campo dei dati di un solo byte.
L’intestazione include numeri di porta di origine e di destinazione, utilizzati per il multiplexing/demultiplexing dei dati da e verso le applicazioni del livello superiori, e un campo
checksum.
L’intestazione dei segmenti TCP comprende poi i seguenti campi:
• Numero di sequenza (sequence number ) e il campo numero di acknowledgment (acknowledgment number ): entrambi di 32 bit, vengono utilizzati dal mittente e dal destinatario
TCP per implementare il trasferimento dati affidabile.
• Finestra di ricezione (receive window ): è di 16 bit, viene utilizzato per il controllo di
flusso.
• Lunghezza dell’intestazione (header length): è di 4 bit, specifica la lunghezza dell’intestazione TCP in multipli di 32 bit. Tale dimensione è tuttavia variabile a causa del campo
opzioni TCP.
3.3. TRASPORTO ORIENTATO ALLA CONNESSIONE (TCP)
51
• Opzioni (options): è di dimensione variabile, viene utilizzato quando il mittente e destinatario concordano la dimensione massima del segmento (MSS) o come fattore di scala per
la finestra nelle reti ad alta velocità.
• Flag : è di 6 bit:
– ACK: viene usato per indicare che il valore trasportato nel campo di acknowledgment
è valido, cioè il segmento contiene un acknowledgment per un segmento che è stato
ricevuto con successo.
– RST, SYN e FIN. vengono utilizzati per impostare e chiudere la connessione.
– PSH: se possiede il valore 1 il destinatario deve inviare immediatamente i dati al
livello superiore.
– URG: indica la presenza di dati che l’entità mittente a livello superiore ha marcato
come urgenti.
Numeri di sequenza e numeri di acknowledgment
I campi numero di sequenza e numero di acknowledgment rappresentano una parte critica
del servizio di trasferimento dati affidabile di TCP. Quest’ultimo vede i dati come un flusso di
byte non strutturati, ma ordinati. L’uso dei numeri di sequenza in TCP riflette questa visione,
dato che i numeri di sequenza si applicano al flusso di byte trasmessi e non alla serie di segmenti
trasmessi. Il numero di sequenza per un segmento è pertanto il numero nel flusso di byte
del primo byte del segmento.
Esempio. Un certo processo nell’host A invia un flusso di dati a un processo sull’host B tramite
una connessione TCP.
Ecco che TCP numera implicitamente ogni byte del flusso di dati sull’host A. Si ipotizza che il
flusso consista in 500000 byte, che MSS valga 1000 byte e che il primo byte del flusso sia numerato
con 0.
Come si può notare TCP costruisce 500 segmenti, per i quali al primo viene assegnato il numero
di sequenza 0, al secondo 1000, al terzo 2000 e così via. Tutti questi numeri vengono inseriti nel
campo numero di sequenza dell’intestazione del segmento TCP.
La faccenda si complica di più per il numero di acknowledgment. Di per sé il numero di acknowledgment che l’host A scrive nei propri segmenti è il numero di sequenza del byte successivo che
attende dall’host B.
Esempio. Un host A riceve da B tutti i byte numerati da 0 a 535 e sta per mandare un segmento
all’host B. L’host A è in attesa dei successivi byte nel flusso di dati di B, perciò scrive 536 nel
campo del numero di acknowledgment del segmento che spedisce a B.
52
CAPITOLO 3. LIVELLO DI TRASPORTO
⇒ Cosa succede quando un host riceve segmenti fuori dalla sequenza nella connessione TCP?
Questo avvenimento viene gestito da chi implementa TCP, ma in generale:
1. Il destinatario scarta i segmenti non ordinati.
2. Il destinatario mantiene i byte non ordinati e attende quelli mancanti per colmare i vuoti.
3.3.2
Timeout e stima del tempo di andata e ritorno
TCP sfrutta un meccanismo di timeout e ritrasmissione per recuperare i segmenti persi.
Stima del tempo di andata e ritorno
L’RTT misurato, denotato con SampleRTT, è la quantità di tempo che intercorre tra l’istante
d’invio del segmento (quando viene passato a IP) e quello di ricezione dell’acknowledgment del
segmento. La maggior parte delle implementazioni TCP effettuano una sola misurazione di
SampleRTT alla volta: in ogni istante di tempo viene valutato uno solo dei segmenti trasmessi e
per cui non si è ancora ricevuto l’acknowledgment.
TCP non calcola mai il SampleRTT per i segmenti ritrasmessi, ma solo per quelli trasmessi
una volta.
Per effettuare una stima si calcola la media sui valori di SampleRTT, chiamata EstimatedRTT.
Questo valore viene aggiornato da TCP a ogni nuovo SampleRTT:
EstimatedRTT = (1 − α) · EstimatedRTT + α · SampleRTT
dove α = 0.125 (valore raccomandato).
Figura 3.3: Valori di SampleRTT ed EstimatedRTT con α = 0.125 per una connessione TCP.
Oltre ad avere una stima RTT, è anche importante possedere la misura della sua variabilità. Quest’ultima viene detta DevRTT ed è una stima di quanto SampleRTT si discosta da
EstimatedRTT:
DevRTT = (1 − β) · DevRTT + β · | SampleRTT − EstimatedRTT |
con β = 0.25 (valore raccomandato).
3.3. TRASPORTO ORIENTATO ALLA CONNESSIONE (TCP)
53
Impostazione e gestione del timeout di ritrasmissione
L’intervallo di timeout di TCP non può essere inferiore a quello di EstimatedRTT, altrimenti verrebbero inviate ritrasmissioni inutili. Allo stesso tempo non deve nemmeno essere tanto maggiore
di EstimatedRTT, altrimenti TCP non ritrasmetterebbe rapidamente il segmento perduto.
Allora è bene impostare il timeout pari a EstimatedRTT più un certo margine, che deve essere
grande quando c’è molta fluttuazione nei valori di SampleRTT e piccolo nel caso contrario.
TimeoutInterval = EstimatedRTT + 4 · DevRTT
Come valore iniziale di TimeoutInterval è raccomandato 1 secondo. Quando si verifica un
timeout, allora TimeoutInterval viene raddoppiato per evitare timeout prematuri riferiti a
segmenti successivi per cui si riceverà presto un acknowledgment.
Nel momento in cui viene ricevuto un segmento ed EstimatedRTT viene aggiornato, accade
che TiemoutInterval viene ricalcolato secondo la precedente formula.
3.3.3
Trasferimento dati affidabile
Utilizzando il servizio IP, i datagrammi possono sovraffollare i buffer dei router e non raggiungere
la destinazione, o arrivare in ordine casuale e con bit alterati.
TCP ha il computo di creare un servizio di trasporto affidabile al di sopra del servizio
inaffidabile e best-effort di IP, assicurando che il flusso di byte che i processi leggono dal buffer
di ricezione TCP non sia alterato. Le procedure suggerite per la gestione dei timer utilizzano un
solo timer di ritrasmissione, anche in presenza di più segmenti trasmessi.
Si suppone che i dati vengano inviati solo in una direzione dell’host A all’host B e che il
primo stia trasmettendo un file di grandi dimensioni.
Esistono tre eventi principali relativi alla trasmissione e ritrasmissione dei dati:
1. Dati provenienti dall’applicazione: TCP incapsula i dati che gli giungono dall’applicazione in un segmento e lo passa a IP. Ciascun segmento include un numero di sequenza,
il quale rappresenta il numero del primo byte di dati del segmento nel flusso di byte.
Il timer viene avviato quando il segmento è passato a IP; il timer è associato al più vecchio
segmento che non ha ricevuto acknowledgment.
2. Timeout: TCP risponde ritrasmettendo il segmento che lo ha causato e quindi riavviando
il timer.
3. Ricezione di un ACK: questo evento deve essere gestito dal mittente TCP, e corrisponde
all’arrivo del segmento di acknowledgment con un valore valido nel campo ACK.
Quando ciò accade, TCP confronta il valore del campo ACK con la propria variabile
SendBase.
SendBase è una variabile di stato TCP avente il numero di sequenza del più vecchio
byte che non ha ancora ricevuto un acknowledgment. Di conseguenza SendBase − 1
è il numero di sequenza dell’ultimo byte che si sa essere ricevuto correttamente e
nell’ordine giusto.
Se il valore del campo ACK è maggiore di SendBase, allora l’ACK si riferisce a uno o
più segmenti che in precedenza non avevano ricevuto conferma. Il mittente aggiorna la
propria variabile SendBase e riavvia il router se non ci sono più segmenti che necessitano
di acknowledgment.
54
CAPITOLO 3. LIVELLO DI TRASPORTO
Raddoppio dell’intervallo di timeout
La prima variante utilizzata dalle implementazioni TCP consiste nella lunghezza dell’intervallo
di timeout dopo la scadenza di un timer.
Con questa modifica si ritrasmette il segmento con il più basso numero di sequenza che non
abbia ricevuto ancora un acknowledgment, in tutti i casi in cui non si verifica, TCP imposta
il successivo intervallo di timeout al doppio del valore precedente anziché derivarlo dagli ultimi
EstimatedRTT e DevRTT.
Esempio. Si suppone che il TimeoutInterval associato al più vecchio segmento che non ha
ancora ricevuto acknowledgment sia 0.75 secondi quando il timer scade per la prima volta. TCP
ritrasmette quindi questo segmento impostando il tempo di scadenza del timer a 1.5 secondi.
Nel caso il timer scada ancora, TCP ritrasmette il segmento stabilendo il timer a 3 secondi e
così via.
Gli intervalli crescono esponenzialmente a ogni ritrasmissione, tutavia tutte le volte che il
timer viene avviato dopo la ricezione di dati dall’applicazione superiore o di un ACK, allora
il TimeoutInterval viene ricavato dai più recenti valori di EstimatedRTT e DevRTT.
Ritrasmissione rapida
Il mittente può rilevare in molti casi la perdita dei pacchetti grazie agli ACK duplicati relativi
a un segmento il cui ACK è già stato ricevuto dal mittente.
Quando il destinatario TCP riceve un segmento con numero di sequenza superiore al successivo numero di sequenza atteso e in ordine, rileva un segmento mancante nel flusso di dati. Il
destinatario allora si limita a mandare nuovamente un acknowledgment relativo all’ultimo byte
di dati che ha ricevuto in ordine: si duplica così un ACK.
Dato che in molti casi il mittente invia un gran numero di segmenti, se uno di questi si smarrisce allora si verificano ACK duplicati. Nel caso in cui si siano ricevuti tre ACK duplicati, il
mittente TCP effettua una ritrasmissione rapida rispedendo il segmento mancante prima che
scada il timer.
3.3. TRASPORTO ORIENTATO ALLA CONNESSIONE (TCP)
55
Confronto tra Go-Back-N e ripetizione selettiva
Il mittente TCP deve solo memorizzare il numero di sequenza più basso tra i byte trasmessi che
non hanno ancora ricevuto acknowledgment (SendBase) e il numero di sequenza del successivo
byte da inviare (NextSeqNum). In questo senso TCP assomiglia a un protocollo di tipo GBN.
Tuttavia esistono alcune differenze chiave tra TCP e Go-Back-N:
• Molte implementazioni TCP memorizzano in un buffer i segmenti ricevuti correttamente,
ma non in ordine.
• Si considera una sequenza di segmenti 1, 2, . . . , N che arrivano al destinatario in ordine e
senza errori, ipotizzando che l’acknowledgment per il pacchetto n < N vada perduto, ma
che i restanti N − 1 giungano al mittente prima dei rispettivi timeout.
Allora GBN ritrasmetterebbe il pacchetto n e tutti quelli da n + 1 fino N ; TCP ritrasmetterebbe al massimo il segmento n, inoltre nel caso ricevesse l’acknowledgment del segmento
n + 1 prima della scadenza del timeout del segmento n, non ritrasmetterebbe nemmeno n.
Una modifica proposta di TCP (riscontro selettivo) consente al destinatario di mandare acknowledgment in modo selettivo per i segmenti non in ordine anziché cumulativamente per l’ultimo
segmento ricevuto senza errori e nell’ordine giusto. Se combinato con la ritrasmissione selettiva,
TCP è molto simile a un generico protocollo SR.
Pertanto è corretto classificare il meccanismo di ripristino degli errori di TCP come un ibrido
tra i protocollo GBN e SR.
3.3.4
Controllo di flusso
Gli host estremi delle connessioni TCP possiedono dei buffer di ricezione, per i quali quando la
connessione TCP riceve byte corretti e in sequenza, li riempiono. Il processo applicativo associato
legge i dati dal buffer in un certo istante (non è detto che sia quando arrivano i dati).
Se l’applicazione risulta lenta nella lettura si corre il rischio che il mittente mandi in overflow
il buffer di ricezione. Dunque TCP offre un servizio di controllo di flusso alle proprie
applicazioni: si controlla la velocità della frequenza d’invio del mittente con quella di lettura
del destinatario. Questo controllo è detto controllo della congestione (vedi nel dettaglio le
Sezioni 3.4 e 3.5).
Le azioni effettuate dal controllo di flusso e di congestione sono simili, ossia rallentare il
mittente, ma compiute per differenti ragioni.
Si premettono le seguenti informazioni:
• L’implementazione obbliga il destinatario TCP a scartare i segmenti non in ordine.
• TCP fa mantenere al mittente una variabile chiamata finestra di ricezione che fornisce
un’indicazione dello spazio libero nel buffer del destinatario. Essendo poi TCP full-duplex,
i due mittenti mantengono le finestre di ricezione distinte.
Esempio. Si suppone che l’host A invii un file di grandi dimensioni all’host B su una connessione
TCP. L’host B alloca un buffer di ricezione, avente la dimensione denotata come RcvBuffer.
Inoltre si definiscono ulteriori variabili:
56
CAPITOLO 3. LIVELLO DI TRASPORTO
• LastByteRead: contiene il numero dell’ultimo byte nel flusso di dati che il processo applicativo in B legge dal buffer ,
• LastByteRcvd: contiene il numero dell’ultimo byte nel flusso dati che proviene dalla rete,
inoltre viene copiato nel buffer di B.
Poiché TCP non manda in overflow il buffer allocato si deve avere:
LastByteRcvd − LastByteRead ≤ RcvBuffer
La finestra di ricezione (rwnd) è impostata alla quantità di spazio disponibile nel buffer :
rwnd = RcvBuffer − [ LastByteRcvd − LastByteRead ]
In pratica l’host B comunica all’host A quanto spazio è disponibile nel buffer, scrivendo il valore
Figura 3.4: rwnd è dinamica nel tempo.
di rwnd nell’apposito campo dei segmenti che manda ad A. L’host B inizializza rwnd con il valore
di RcvBuffer e tiene traccia di variabili specifiche per ogni connessione.
In altrettanto modo l’host A tiene traccia di LastByteSent e LastByteAcked, ovvero l’ultimo
byte mandato e l’ultimo byte per cui si è ricevuto acknowledgment.
Se si mantiene la quantità di dati senza acknowledgment (ricavata dalla differenza delle due
precedenti variabili in A) sotto il valore di rwnd, allora non si verifica l’overflow :
LastByteSent − LastByteAcked ≤ rwnd
Nonostante questo schema funzioni, esiste un problema tecnico dietro le quinte.
Esempio. Si suppone che il buffer di ricezione dell’host B si riempia in modo che rwnd = 0, e che
dopo averlo notificato all’host A non abbia più nulla da inviare. Quando il processo applicativo
in B svuota il buffer, TCP non invia nuovi segmenti con nuovi valori di rwnd. Perciò l’host
A rimane bloccato senza poter inviare ulteriori dati, perché non è informato sullo spazio libero
presente nel buffer.
Ecco che l’host A deve continuare a inviare segmenti a B finché rwnd non diventa 0: prima o poi
il buffer inizierà a svuotarsi e i riscontri conteranno un valore non nullo per rwnd.
UDP invece non offre un controllo di flusso. In un tipica implementazione UDP, il protocollo
mette in coda i segmenti in un buffer di dimensione finita che precedete la socket. Se il
processo non legge i segmenti del buffer a velocità sufficiente, si verifica un overflow con la
perdita di alcuni segmenti.
3.3. TRASPORTO ORIENTATO ALLA CONNESSIONE (TCP)
3.3.5
57
Gestione della connessione TCP
Si suppone che un processo in esecuzione in un host (client) voglia iniziare una connessione verso
un altro processo in un altro host (server ).
Il processo applicativo client informa per prima cosa il lato client di TCP di voler stabilire una
connessione verso un processo nel server. Il TCP client procede a stabilire una connessione TCP
con il TCP nel server così come segue:
1. TCP lato client invia uno speciale segmento3 , che non contiene dati a livello applicativo,
bensì il bit SYN posto a 1 (vedi Figura 3.2), al TCP server.
Inoltre il client sceglie un numero casuale di sequenza iniziale (client_isn) e lo pone
nel campo di sequenza del segmento SYN iniziale. Quest’ultimo viene incapsulato in un
datagramma IP e inviato al server.
2. Quando il precedente segmento SYN arriva all’host server (se arriva), il server : estrae il
segmento dal datagramma, alloca i buffer e le variabili TCP alla connessione e invia un
segmento4 di connessione approvata al client TCP.
Anche questo segmento non contiene dati a livello applicativo, ma solo tre informazioni
importanti:
• SYN posto a 1.
• Il campo ACK assume il valore client_isn + 1.
• Il server sceglie il proprio numero di sequenza iniziale (server_isn) e lo pone nel
campo numero di sequenza.
3. Alla ricezione di quest’ultimo segmento, anche il client alloca il buffer e variabili alla
connessione. L’host invia al server un altro segmento in risposta al segmento di connessione
approvata.
Tale operazione viene svolta dal client ponendo il valore server_isn + 1 nel campo ACK
dell’intestazione del segmento TCP.
Il bit SYN è posto a 0 dato che la connessione è stata stabilita.
Una volta conclusa questa serie di passi, gli host client e server possono scambiarsi i segmenti
contenenti i dati (aventi sempre SYN posto a 0).
3 Questo
4 Viene
segmento è chiamato segmento SYN.
detto segmento SYNACK.
58
CAPITOLO 3. LIVELLO DI TRASPORTO
Tutta la procedura per stabilire la connessione viene detta handshake a tre vie.
In conclusione ciascuno dei due processi può terminare la connessione TCP. Quando ciò avviene
le risorse negli host vengono deallocate.
Il processo applicativo invia un comando di chiusura che forza il client TCP a inviare un segmento
speciale al processo server ; nell’intestazione il bit FIN è posto a 1. Il server risponde inviando
un acknowledgment al client e invia un segmento di shutodown con FIN = 1. Infine il client
spedisce un acknowledgment a quest’ultimo segmento e le risorse vengono deallocate.
3.4. PRINCIPI DEL CONTROLLO DI CONGESTIONE
59
Nell’arco di una connessione TCP i protocolli in esecuzione negli host attraversano vari stati
TCP:
Figura 3.5: Stati visitati da un client TCP.
Figura 3.6: Stati visitati da un server TCP.
3.4
Principi del controllo di congestione
La congestione della rete è causata da troppe sorgenti che inviano dati a ritmi troppo elevati.
60
CAPITOLO 3. LIVELLO DI TRASPORTO
3.4.1
Cause e costi della congestione
Scenario 1: due mittenti e un router con buffer illimitati
Due host comunicano mediante una connessione che condivide un singolo router intermedio.
Si ipotizza che un’applicazione nell’host A invii dati sulla connessione a una frequenza media
λin byte/s. Ciascuna unità di dati viene mandata nella socket solo una volta. I dati vengono
incapsulati e inviati senza porre rimedio a eventuali errori, controllo di flusso o di congestione.
Analogamente l’host B trasmette dati a λin byte/s e condivide le stesse considerazioni dell’host
A.
I pacchetti degli host A e B passano attraverso un router e un collegamento uscente condiviso
di capacità R. Il router possiede buffer che gli consentono di memorizzare i pacchetti entranti
quando la loro velocità d’arrivo supera la capacità del collegamento uscente, in questo esempio
si considerano con capienza illimitata.
• Il grafico di sinistra mostra il throughput per connessione in funzione del tasso d’invio.
Finché non supera il valore di R/2, il throughput del ricevente equivale alla velocità d’invio
del mittente: tutto ciò che viene ricevuto dal destinatario con un ritardo finito.
Una volta superato R/2, il throughput rimane costante. Questo limite superiore è conseguenza della condivisione della capacità di collegamento tra due connessioni.
• Il grafico a destra mostra le conseguenze dell’avvicinarsi della velocità a R/2: aumenta
sempre di più il ritardo.
Quando supera R/2, il numero medio di pacchetti in coda nel router cresce senza limiti e
il ritardo tende all’infinito.
Di conseguenza avere un throughput che si avvicina a R potrebbe sembrare ottimale dal punto
di vista del throughput, ma non dal punto di vista del ritardo.
Quando il tasso d’arrivo dei pacchetti si avvicina alla capacità del collegamento, si rilevano
lunghi ritardi d’accodamento.
3.4. PRINCIPI DEL CONTROLLO DI CONGESTIONE
61
Scenario 2: due mittenti e un router con buffer limitati
A differenza dello scenario precedente si assume la dimensione dei buffer limitata.
Quindi i pacchetti che giungono in un buffer già pieno vengono scartati.
Si suppone poi che le due connessioni siano affidabili: se un pacchetto che contiene un segmento a livello di trasporto viene scartato, allora il mittente lo ritrasmetterà.
Si denota ancora il tasso di trasmissione verso la socket con λin byte/s e con λ′in il tasso al quale
il livello di trasporto invia segmenti (grandezza detta carico offerto alla rete). Si valutano le
prestazione considerando i seguenti casi:
• Caso poco probabile: l’host A è in grado di determinare se il buffer nel router abbia spazio
a disposizione e trasmettere un pacchetto solo quando è libero il buffer. In tal caso non si
verifica nessun smarrimento: λ′in = λin ; il throughput della connessione sarebbe λin :
Dal punto di vista del throughput le prestazioni sarebbero ideali: tutto quando è
trasmesso e ricevuto. La velocità media non supera R/2, visto che niente viene
smarrito.
• Caso più realistico: il mittente ritrasmette solo quando è certo che un pacchetto sia andato
perduto, magari impostando un valore di timeout con un valore sufficientemente grande
per essere certi che il pacchetto sia stato perso.
62
CAPITOLO 3. LIVELLO DI TRASPORTO
Il carico offerto λ′in è uguale a R/2 e il tasso con cui i dati vengono consegnati è R/3.
Pertanto su 0.5 R unità di dati trasmessi: 0.333 R byte/s sono originali e 0.166 R byte/s
sono quelli ritrasmessi (entrambi in media).
Il mittente deve effettuare ritrasmissioni per compensare i pacchetti scartati/perduti
a causa di un overflow nel buffer.
• Ultimo caso: il mittente va in timeout prematuramente e ritrasmette un pacchetto che ha
subito ritardi, ma che non è stato perduto.
Ovviamente il destinatario mantiene una singola copia delle tante ricevute dallo stesso pacchetto, tuttavia il router effettua un lavoro inutile. La seguente Figura confronta throughput
e traffico immesso nella rete nell’ipotesi che ciascun pacchetto sia instradato mediamente
due volte nel router.
Le ritrasmissioni non necessarie da parte del mittente come risposta a lunghi ritardi
costringono un router a utilizzare la larghezza di banda per instradare copie di pacchetti non necessarie. Il throughput assume asintoticamente il valore R/4 quando il
carico offerto tende a R/2.
Scenario 3: quattro mittenti, router con buffer finiti e percorsi con più collegamenti
Si suppone che i pacchetti siano trasmessi da quattro host, ciascuno su percorsi composti da due
collegamenti sovrapposti tra loro.
Ogni host utilizza un meccanismo di timeout e ritrasmissioni per implementare il servizio affidabile di trasferimento dati e tutti gli host hanno lo stesso valore di λin ; si ipotizza una capacità
dei collegamenti del router di R byte/s.
3.4. PRINCIPI DEL CONTROLLO DI CONGESTIONE
63
Esempio. Si considera la connessione dell’host A e C, che passa per i router R1 e R2. Questa
connessione condivide il router R1 con la connessione D − B e il router R2 con la connessione
B − D.
• Per valori molto piccoli di λin , gli overflow dei buffer sono rari e il throughput è circa
uguale al traffico.
• Per valori leggermente più grandi di λin , il corrispondente throughput è anch’esso più
grande, mentre gli overflow rimangono rari.
Perciò per piccoli valori di λin , l’incremento di λin provoca un incremento di λout .
• Per valori molto grandi di λin si prende in considerazione il traffico da A verso C: giunge al
router R2 dopo essere stato inoltrato da R1: non può presentare un tasso d’arrivo maggiore
di R.
Se λ′in è estremamente grande per tutte le connessioni, il tasso d’arrivo del traffico B − D
su R2 è maggiore di quella di A − C. Dato che su R2 il traffico di A − C è in competizione
con quello di B − D per il limitato spazio nei buffer, allora la quantità di traffico di A − C
che passa attraverso R2 diminuisce sempre di più al crescere del traffico trasportato da
B − D.
64
CAPITOLO 3. LIVELLO DI TRASPORTO
Ne segue che il throughput end-to-end di A − C si annulla in caso di traffico pesante.
In questo scenario ogni volta che un pacchetto viene scartato sul router del secondo hop, il
lavoro effettuato dal router del primo hop nell’instradamento del pacchetto verso il secondo
router diventa sprecato.
La capacità trasmissiva utilizzata dal primo router per instradare il pacchetto al secondo
potrebbe essere ottimizzata trasmettendo un altro pacchetto.
Ecco che quando un pacchetto viene scartato lungo il percorso, la capacità trasmissiva, utilizzata
dai collegamenti per instradare il pacchetto fino al punto in cui è stato scartato, risulta sprecata.
3.4.2
Approcci al controllo di congestione
Ad alto livello si possono distinguere tra i livelli di rete che offrono o meno assistenza esplicita
al livello di trasporto al fine di controllare la congestione.
• Controllo di congestione end-to-end : il livello di rete non fornisce supporto esplicito
al livello di trasporto per il controllo di congestione, la cui presenza deve essere dedotta dai
sistemi periferici sulla base dell’osservazione del comportamento della rete.
La perdita di segmenti TCP viene considerata una chiara indicazione di congestione della
rete e TCP diminuisce, di conseguenza anche l’ampiezza della propria finestra.
• Controllo di congestione assistito dalla rete: i componenti a livello di rete (i router )
forniscono un feedback esplicito sullo stato di congestione della rete.
Le versioni di default di TCP e IP in Internet adottano l’approccio end-to-end, ma possono
anche implementare l’opzione di controllo di congestione assistito dalla rete.
In quest’ultimo caso, l’informazione di congestione viene solitamente fornita dalla rete al mittente
in due modi.
• Può essere trasmesso un avviso diretto da un router al mittente tramite un chokepacket.
• Un router imposta un campo in un pacchetto che fluisce dal mittente al destinatario per
indicare la congestione.
3.5. CONTROLLO DI CONGESTIONE TCP
3.5
65
Controllo di congestione TCP
TCP presenta il meccanismo di controllo della congestione. Inoltre deve utilizzare il controllo
di congestione end-to-end anziché quello assistito dalla rete, dato che il livello IP non offre ai
sistemi periferici un feedback esplicito sulla congestione della rete.
TCP approccia imponendo a ciascun mittente un limite alla velocità d’invio sulla propria
connessione in funzione della congestione di rete percepita.
• Se il mittente TCP si accorge di condizioni di scarso traffico sul percorso che porta alla
destinazione, allora incrementa il proprio tasso trasmissivo.
• Se percepisce traffico sul percorso, allora riduce il tasso trasmissivo.
⇒ Come può il mittente TCP limitare la velocità d’invio del traffico sulla propria connessione?
TCP fa tenere traccia agli estremi della connessione di una variabile aggiuntiva, ovvero la finestra
di congestione indicata con cwnd, la quale impone un vincolo alla velocità di immissione di
traffico da parte del mittente.
LastByteSend − LastByteAcked ≤ min (cwnd,rwnd)
Si assume che il buffer di ricezione sia abbastanza capiente da poter ignorare il vincolo della
finestra di ricezione; la quantità di dati che non hanno ricevuto acknowledgment è limitata solo
a cwnd. Inoltre il mittente ha sempre dati da inviare, per cui la finestra di congestione è sempre
in uso.
Quindi all’inizio di ogni RTT, il vincolo consente al mittente di trasmettere cwnd byte di dati
sulla connessione; una volta terminato RTT il mittente riceve gli acknowledgment relativi ai dati.
Ecco che la velocità d’invio del mittente è circa cwnd/RTT byte/s. Se si modifica cwnd, il mittente
è in grado di regolare la velocità d’invio sulla propria connessione.
⇒ Come percepisce la congestione sul percorso che porta alla destinazione?
Si definisce “evento perdita” per il mittente TCP l’occorrenza di un timeout o della ricezione di
tre ACK duplicati da parte del destinatario. In presenza di un’eccessiva congestione, uno o più
buffer dei router lungo il percorso vanno in overflow, causando l’eliminazione di un datagramma.
Questo poi a sua volta costituisce un evento di perdita presso il mittente, che lo considera come
un’indicazione di congestione sul percorso tra sé e il destinatario.
Considerando il caso ottimistico di una rete priva di congestione, gli acknowledgment relativi
ai vari segmenti verranno ricevuti dal mittente TCP.
• Se gli acknowledgment arrivano con frequenza relativamente bassa, allora la finestra di
congestione verrà ampliata lentamente.
• Se gli acknowledgment giungono con una frequenza alta, allora la finestra di congestione
verrà ampliata rapidamente.
Dato che TCP utilizza gli acknowledgment per scatenare gli incrementi dell’ampiezza della
finestra di congestione, si dice che TCP è auto-temporizzato.
⇒ Come fanno i mittenti TCP a determinare la loro velocità di trasmissione in modo da non
congestionare la rete, ma allo stesso tempo utilizzare tutta la banda disponibile? Quale algoritmo
dovrebbe essere utilizzato dal mittente per variare la velocità d’invio in funzione della congestione
end-to-end ?
66
CAPITOLO 3. LIVELLO DI TRASPORTO
L’algoritmo di controllo di congestione TCP presenta tre componenti principali:
1. Slow start (vedi Sezione 3.5.1);
2. Congestion avoidance (vedi Sezione 3.5.2);
3. Fast recovery (vedi Sezione 3.5.3).
Slow start e congestion avoidance sono componenti obbligatorie di TCP e differiscono dal
modo in cui aumentano cwnd in risposta degli acknowledgment ricevuti.
3.5.1
Slow start
Quando inizia una connessione TCP, il valore cwnd viene inizializzato a 1 MSS, comportando
una velocità di invio iniziale di circa MSS/RTT. Successivamente si incrementa di 1 MSS alla
volta il valore cwnd ogni volta che un segmento trasmesso riceve un acknowledgment.
TCP invia il primo segmento nella rete e attende un riscontro. Se il segmento riceve un acknowledgment prima che si verifichi un evento di perdita, allora il mittente incrementa la finestra di
congestione di 1 MSS e invia due segmenti di massima dimensione. Questi segmenti ricevono a
loro volta degli acknowledgment e il mittente incrementa la finestra di congestione di 1 MSS per
ciascuno di essi portandola a 4 MSS e così via.
Questo processo ha come effetto il raddoppio della velocità trasmissiva a ogni RTT, pertanto
la velocità parte lentamente, ma cresce in modo esponenziale.
⇒ Quando si ferma la crescita esponenziale?
1. Il primo modo si verifica quando c’è un evento perdita indicato da un evento timeout, il
mittente TCP pone il valore di cwnd a 1 e inizia nuovamente il processo di slow start.
Inoltre viene posto il valore di una seconda variabile di stato, ssthresh a cwnd/2 (metà
del valore che aveva la finestra quando la congestione è stata rilevata).
3.5. CONTROLLO DI CONGESTIONE TCP
67
2. Il secondo modo è legato al valore ssthresh, ovvero nel momento in cui cwnd è pari a
ssthresh la fase di slow start termina. Per di più TCP entra in modalità di congestion
avoidance.
3. Il terzo modo è quando vengono rilevati tre acknowledgment duplicati, per cui TCP effettua
una ritrasmissione rapida ed entra nello stato di fast recovery.
3.5.2
Congestion avoidance
TCP entra in questo stato quando il valore di cwnd è circa la metà di quello che aveva la volta
precedente, in cui era stata rilevata la congestione. Al posto di raddoppiare il valore di cwnd
ogni RTT, lo si incrementa di 1 MSS.
Ciò si può ottenere in diversi modi: un approccio comune è l’incremento da parte del
mittente TCP della propria cwnd di MSS × (MSS/cwnd) byte ogni volta che riceve un nuovo
acknowledgment.
Esempio. MSS vale 1460 byte e cwnd 14600 byte , allora in un RTT vengono spediti dieci
segmenti. Ciascun ACK in arrivo incrementa l’ampiezza della finestra di congestione di 1/10
MSS e di conseguenza il valore della finestra aumenta di un MSS.
⇒ Quando si conclude l’incremento lineare durante la congestion avoidance?
Quando avviene un timeout questo algoritmo si comporta come slow start: il valore di cwnd è
posto uguale a 1 MSS e il valore di ssthresh viene impostato alla metà del valore di cwnd al
momento del timeout.
Tuttavia un evento di perdita può essere causato anche dalla ricezione di tre acknowledgment
duplicati. In tal caso la rete continua a consegnare segmenti dal mittente al ricevente, ma TCP
dimezza il valore di cwnd (aggiungendo 3 MSS per tenere conto dei duplicati ricevuti) e imposta
il valore di sstresh a metà del valore di cwnd al momento del ricevimento dei tre ACK duplicati.
Infine TCP entra nello stato di fast recovery.
68
CAPITOLO 3. LIVELLO DI TRASPORTO
3.5.3
Fast recovery
Durante la fase di fast recovery il valore di cwnd è incrementato di 1 MSS per ogni ACK duplicato
ricevuto relativamente al segmento perso (che ha causato questa fase). Infine quando arriva un
ACK per il segmento perso, TCP entra nello stato di congestion avoidance dopo aver ridotto il
valore di cwnd.
Se si verifica un timeout avviene una transizione dallo stato di fast recovery a quello di slow
start dopo aver effettuato le stesse azioni presenti sia in slow start che in congestion avoidance
(cwnd = 1 MSS, sttresh = cwnd/2).
Fast recovery è un componente raccomandato, ma non obbligatorio in TCP.
Livello di rete (piano dei dati)
A differenza del livello di trasporto, una parte del livello di rete è presente in ogni host e router
della rete.
4.1
Panoramica del livello di rete
Si considera la seguente rete con due host H1 e H2:
• In H1 il livello di rete incapsula in un datagramma i segmenti dal livello di trasporto e lo
spedisce al proprio router vicino R1.
• Nell’host H2 il livello di rete riceve i datagrammi dal proprio router vicino R2. Estrae i
segmenti e li consegna al livello di trasporto.
69
70
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
Lo scopo del piano di dati di ciascun router intermedio è quello di inoltrare il datagramma dal
link d’ingresso a link d’uscita, mentre il ruolo del piano di controllo è coordinare le azioni di
inoltro locali al fine di trasferire i datagrammi in modalità end-to-end.
4.1.1
Inoltro e instradamento
L’obiettivo del livello di rete è trasferire pacchetti da un host a un altro. Si identificano due
funzioni:
• Inoltro (forwarding): quando un router riceve un pacchetto lo deve trasferire sull’appropriato collegamento d’uscita.
• Instradamento (routing): il livello di rete deve determinare il percorso che i pacchetti
devono seguire tramite gli algoritmi di instradamento (vedi Sezione).
Terminologia:
• Con inoltro si intende l’azione locale con cui il router trasferisce i pacchetti da
un’interfaccia d’ingresso a quella d’uscita.
• Con instradamento si indica il processo globale di rete che determina i percorsi dei
pacchetti nel loro viaggio dalla sorgente alla destinazione.
Per inoltrare i pacchetti, i router estraggono da uno o più campi d’intestazione i loro valori che
utilizzano come indice nella tabella di inoltro un elemento chiave di qualsiasi router . Il risultato
indica a quale interfaccia d’uscita il pacchetto debba essere diretto.
Approcci del piano di controllo
• Approccio tradizionale: l’algoritmo di routing è implementato in ogni router, che svolge
sia la funzione d’inoltro che d’instradamento internamente.
• Approccio SDN: la funzionalità d’instradamento del piano di controllo è separato fisicamente dal router. Il dispositivo d’instradamento effettua solo l’inoltro, mentre il controller
remoto calcola e distribuisce le tabelle d’inoltro.
Tale approccio viene detto SDN (software-defined networking) perché il controller che
calcola le tabelle d’inoltro e interagisce con i router è implementato in software.
4.2. PROTOCOLLO IP
4.1.2
71
Modelli di servizio
Il modello di servizio della rete, che definisce le caratteristiche del trasporto end-to-end di
pacchetti tra host d’origine e di destinazione, offre alcuni servici come:
• Consegna garantita: assicura che il pacchetto giunga alla destinazione.
• Consegna garantita con ritardo limitato: viene rispettato un limite di ritardo specificato.
• Consegna ordinata: i pacchetti arrivano a destinazione nell’ordine in cui sono stati
inviati.
• Banda minima garantita: si emula il comportamento di un collegamento trasmissivo
con bit rate specificato. Finché l’host di invio trasmette al di sotto del bit rate indicato,
non si verificano perdite.
• Servizi di sicurezza: tutti i datagrammi inviati vengono cifrati e verranno decifrati
nell’host di destinazione.
Il livello di rete Internet mette a disposizione solo un servizio chiamato best-effort. Con questo
servizio non c’è garanzia che i pacchetti vengano ricevuti nell’ordine inviato, ma nemmeno sulla
loro consegna, sul ritardo end-to-end e sulla banda minima. Semplicemente il livello prova a
impegnarsi il massimo possibile.
4.2
4.2.1
Protocollo IP
Formato dei datagrammi Ipv4
A livello di rete il pacchetto è noto come datagramma. Di seguito sono mostrati i principali
campi dei datagrammi IPv4.
• Numero versione: sono 4 bit che specificano la versione del protocollo IP e consentono
al router la corretta interpretazione del datagramma.
• Lunghezza dell’intestazione (header length): questi 4 bit indicano dove iniziano i dati
del datagramma.
72
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
• Tipo di servizio (TOS, type of service): questi 8 bit distinguono i diversi tipi di datagrammi.
• Lunghezza del datagramma: rappresenta la lunghezza totale del datagramma IP: intestazione più dati (misurata in byte). La dimensione massima dei datagrammi IP è di 65535
byte, ma in genere si superano raramente i 1500 byte.
• Identificatore, flag, offset di frammentazione: questi tre campi consentono di eseguire la frammentazione.
• Tempo di vita (TTL, time-to-live): è necessario affinché i datagrammi in rete non durino
per sempre. Questo campo viene decrementato di un’unità ogni volta che il datagramma è
elaborato da un router e quando raggiunge 0 viene scartato.
• Protocollo: questo campo è utilizzato quando il datagramma raggiunge la destinazione
finale. Il valore nel campo indica lo specifico protocollo a livello di trasporto al quale
vengono passati i dati del datagramma.
• Checksum dell’intestazione: consente ai router di rilevare gli errori sui bit nei datagrammi ricevuti (vedi Sezione 3.2.2).
• Indirizzi IP sorgente e destinazione: quando un host crea un datagramma, inserisce il
proprio IP nel campo indirizzo IP dell’origine e quello della destinazione nel campo indirizzo
IP di destinazione.
• Opzioni: consentono di estendere l’indirizzo IP. Possono avere dimensione variabile e ciò
scaturisce un problema: non è possibile determinare a priori dove comincerà il campo dati.
• Dati (payload ): nella maggior parte dei casi, il campo contiene il segmento a livello di
trasporto (TCP o UDP) da consegnare alla destinazione. Può trasportare anche altri tipo
di dati, come i messaggi ICMP.
Escludendo le opzioni (che vengono utilizzate raramente) i datagrammi IP hanno 20 byte di
intestazione, mentre i datagrammi non frammentati possiedono 40 byte: 20 di intestazione IP e
20 di intestazione TCP.
4.2.2
Frammentazione dei datagrammi Ipv4
La quantità massima di dati che un frame a livello di collegamento può trasportare è detta unità
massima di trasmissione (MTU, maximum trasmission unit). Tuttavia le tratte de percorso
tra mittente e destinatario possono utilizzare differenti protocolli a livello di collegamento e
presentare differenti MTU.
La risposta al problema sta nella frammentazione: frammentare i dati del datagramma IP
in due o più datagrammi IP più piccoli, detti frammenti. Ovviamente tali frammenti devono
essere riassemblati prima di raggiungere il livello di trasporto della destinazione.
Quando un host di destinazione riceve una serie di datagrammi della stessa origine deve: individuare i frammenti, determinare quando ha ricevuto l’ultimo e stabilire come debbano essere
assemblati per formare il datagramma originario.
Per effettuare questo lavoro sono presenti i campi di identificazione, flag e offset di frammentazione. Appena viene creato un datagramma, l’host lo contrassegna con un numero identificativo
e con gli indirizzi di sorgente e di destinazione. Quando il router frammenta con gli indirizzi di
sorgente e di destinazione e con l’identificatore numerico del datagramma originario.
4.2. PROTOCOLLO IP
73
Nel momento in cui la destinazione riceve una serie di datagrammi dallo stesso host mittente,
può esaminare gli identificatori per individuare i frammenti di uno stesso datagramma.
Siccome IP non offre un servizio affidabile, alcuni frammenti potrebbero non raggiungere la destinazione. Per questo motivo l’host deve essere sicuro di possedere tutti i frammenti e riassemblarli
nel modo corretto: l’ultimo campo è posto a 1 per ogni frammento, eccetto l’ultimo che è a 0.
Infine si utilizza il campo offset per specificare l’esatto ordine che i frammenti avevano
all’origine e per determinare se un frammento è andato perso.
4.2.3
Indirizzamento Ipv4
In genere un host ha un solo collegamento con la rete, quando l’implementazione di IP vuole
inviare un datagramma lo effettua su tale collegamento. Invece un router, che ha il compito di
inviare e ricevere datagrammi, deve avere almeno due collegamenti.
Il confine tra host/router e collegamento fisico viene detto interfaccia. L’indirizzo IP è tecnicamente associato a un’interfaccia, anziché all’host o al router che la contiene.
Gli indirizzi IP sono lunghi 32 bit e quindi e quindi ci sono in totale 232 indirizzi IP. Ogni
interfaccia di host o router di Internet ha un indirizzo IP globalmente univoco, ma non possono
essere scelti in modo arbitrario perché una parte dell’indirizzo è determinata dalla sottorete in
cui è collegata.
Figura 4.1: Router con tre interfacce che connette sette host.
74
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
Queste rete che interconnette tre interfacce di host e l’interfaccia di un router forma una sottorete. IP assegna a questa sottorete l’indirizzo 223.1.1.0/24, dove /24 è la maschera di sottorete
(subnet mask ) e indica che i 24 bit più a sinistra dell’indirizzo definiscono l’indirizzo della sottorete.
Di conseguenza la sottorete 223.1.1.0/24 consiste di tre interfacce di host (223.1.1.1, 223.1.1.2,
223.1.1.3) e una di router (223.1.1.4). Ogni altro host connesso a questa sottorete deve avere
un indirizzo nella forma 223.1.1.xxx .
Un altro esempio è dato da 3 router connessi da collegamenti punto a punto. Ciascuno ha tre
interfacce: due per i collegamenti punto a punto e una per il collegamento broadcast che connette
direttamente il router a una coppia di host.
Oltre alle tre sottoreti (223.1.1.0/24, 223.1.2.0/24, 223.1.3.0/24) ne esistono altre:
• 223.1.9.0/24 per le interfacce che connettono R1 e R2.
• 223.1.8.0/24 per le interfacce che connettono R2 e R3.
• 223.1.7.0/24 per le interfacce che connettono R3 e R1.
In generale per determinare le sottoreti si sganciano le interfacce da host e router in maniera
tale da creare isole di reti isolate delimitate dalle interfacce. Ognuna di queste reti isolate
viene detta sottorete (subnet).
L’assegnazione degli indirizzi Internet è detta classless interdomain routing . CIDR generalizza la nozione di indirizzamento di sottorete.
L’indirizzo IP viene diviso in due parti e mantiene la forma decimale puntata a.b.c.d/x dove x
indica il numero di bit nella prima parte dell’indirizzo.
Gli x bit più a sinistra di un indirizzo costituiscono la porzione di rete dell’indirizzo IP e sono
spesso detti prefisso (di rete) dell’indirizzo. I rimanenti 32-x bit dell’indirizzo possono essere
usati per distinguere i dispositivi interni dell’organizzazione, che hanno tutti lo stesso prefisso
di rete. Dunque sono i router della rete interna che utilizzano i restanti bit dell’indirizzo per
indirizzarli al dispositivo destinatario.
4.2. PROTOCOLLO IP
75
Prima dell’adozione di CIDR, le parti di rete di un indirizzo dovevano essere lunghe 8, 16 o
24 bit. Secondo lo schema di indirizzamento classful addressing (vedi Sezione 1.4).
4.2.4
Come ottenere l’indirizzo di un host: DHCP
Gli indirizzi host possono essere configurati manualmente, ma di solito questo compito è svolto
utilizzando il DHCP (Dynamic Host Configuration Protocol ). Questo strumento consente a un
host di ottenere un indirizzo IP in modo automatico e apprendere informazioni aggiuntive, come:
la maschera di sottorete, l’indirizzo del router per uscire dalla sottorete e l’indirizzo del suo DNS
server locale.
L’amministratore di rete può configurare DHCP in modo che un host riceva un IP persistente
oppure lasciare l’assegnazione di un indirizzo IP temporaneo, il quale sarà diverso per tutte le
volte che l’host si connetterà e disconnetterà dalla rete.
DHCP viene spesso chiamato protocollo plug-and-play o zero-conf per la sua capacità di
automatizzare la connessione degli host alla rete. Inoltre lo si utilizza anche nelle reti residenziali
di accesso a Internet e nelle LAN wireless, dove gli host entrano ed escono frequentemente dalla
rete.
DHCP è un protocollo client-server. Un client è un host appena connesso che desidera ottenere
informazioni sulla configurazione di rete (non solo su uno specifico IP).
• Caso più semplice: ogni sottorete dispone di un server DHCP.
• Altrimenti: è necessario un agente di relay DHCP (implementato in un router ) che conosca
l’indirizzo di un server DHCP per quella rete.
Supponendo di possedere un DHCP server, per i nuovi host, il protocollo DHCP si articola in
quattro punti:
• Individuazione del server DHCP: l’host identifica il server DHCP con il quale interagire. Questa operazione è svolta utilizzando un messaggio DHCP discover , in cui un
client invia un pacchetto UDP attraverso la porta 67.
Il pacchetto UDP viene incapsulato in un datagramma IP e spedito all’indirizzo broadcast
255.255.255.255: il client DHCP non conosce ancora l’indirizzo del server DHCP; mentre l’indirizzo IP sorgente viene posto a 0.0.0.0, cioè per indicare “questo host”.
Il client DHCP inoltra il datagramma IP al suo livello di collegamento, il quale invia il
frame in broadcast a tutti i nodi collegati in sottorete.
• Offerta del server DHCP: quando il server DHCP riceve il messaggio di identificazione,
risponde a tutti i client con un messaggio DHCP offer , che viene inviato in broadcast a
tutti i nodi della sottorete.
Dato che in una sottorete ci possono essere diversi server DHCP, il client dovrebbe scegliere
uno tra questi. Ciascun messaggio di offerta contiene l’ID di transazione del messaggio di
identificazione ricevuto, l’indirizzo IP proposto al client , la maschera di sottorete e la
durata della connessione (lease time) dell’indirizzo IP.
• Richiesta DHCP: il client appena collegato sceglie tra le offerte dei server e risponde
con un messaggio di DHCP request, che riporta i parametri di configurazione.
• Conferma DHCP: il server risponde con un messaggio DHCP ACK, che conferma i
parametri richiesti.
Dal momento in cui il client riceve il DHCP ACK, l’interazione è completata e il client
può utilizzare l’indirizzo IP fornito da DHCP per la durata della connessione.
76
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
Per di più viene fornito anche un meccanismo che consente ai client di rinnovare la connessione
di un indirizzo IP.
Tuttavia esiste anche un difetto di questo protocollo: quando un nodo si connette a una nuova sottorete, DCHP gli rilascia un nuovo indirizzo IP. Perciò non è possibile mantenere una connessione
TCP a un’applicazione remota, spostandosi il nodo mobile da una sottorete all’altra.
4.2.5
NAT
Esistono moltissime reti private che utilizzano un identico spazio di indirizzamento per scambiare
pacchetti fra i dispositivi, e ovviamente quelli inviati sull’Internet globale non possono utilizzare
questi indirizzi come sorgente o destinazione.
⇒ Se gli indirizzi privati hanno significato solo all’interno di una data rete, come viene gestito
l’indirizzamento dei pacchetti relativi all’Internet globale in cui gli indirizzi sono necessariamente
univoci?
I router abilitati al NAT (Network Address Translation) non appaiono come router al mondo
esterno, ma si comportano come un solo dispositivo con un unico indirizzo IP.
4.2. PROTOCOLLO IP
77
Da questa Figura tutto il traffico che lascia il router domestico verso Internet ha indirizzo IP
d’origine 138.76.29.7 e tutto il traffico in entrata deve avere lo stesso indirizzo come destinazione. Quindi il NAT nasconde i dettagli della rete domestica all’esterno.
⇒ Se tutti i datagrammi in arrivo al router NAT dalla rete geografica hanno lo stesso indirizzo IP di destinazione, allora come apprende il router a quale host interno dovrebbe essere
inoltrato un determinato datagramma?
La soluzione consiste nell’utilizzare una tabella di traduzione NAT (NAT traslation table)
nel router NAT e nell’includere nelle righe di tale tabella i numeri di porta oltre che gli indirizzi
IP.
Esempio. Un utente in una rete domestica dietro l’host 10.0.0.1 richiede una pagina web da
un server con indirizzo IP 128.119.40.186. Allora l’host assegna il numero di porta d’origine
(arbitrario) 3345 e invia il datagramma nella rete locale. Il router NAT riceve il datagramma e
sostituisce l’indirizzo IP sorgente con il proprio (138.76.29.7) e genera una nuova porta (5001)
che rimpiazza con la precedente.
La porta viene scelta tra quelle ancora disponibili nella tabella di traduzione NAT ed essendo
questo campo lungo 16 bit il protocollo NAT può supportare più di 60000 connessioni
simultanee con un solo indirizzo IP sul lato WAN relativo al router.
Il web server riceve la richiesta HTTP e risponde con un datagramma avente l’indirizzo IP del
router NAT come destinazione e porta 5001. Il router NAT a sua volta consulta la propria
tabella di traduzione usando l’indirizzo IP e il numero di porta di destinazione per ottenere l’IP
(10.0.0.1) e porta (3345) appropriati. Il router riscrive l’indirizzo e porta di destinazione e
inoltra il datagramma nella rete domestica.
Nota bene: i numeri di porta sono concepiti per indirizzare i processi, non per individuare
gli host. Infatti ciò può causare problemi ai server in esecuzione su reti domestiche dato che i
processi server attendono richieste in ingresso su numeri di porta prestabiliti.
NAT viola il principio end-to-end : gli host dovrebbero comunicare tra loro direttamente,
senza intromissione di nodi né modifica di indirizzi IP e di numeri di porta.
Questi componenti, come il NAT, sono detti middlebox e operano a livello di rete, ma
possiedono funzionalità differenti dai router : NAT, bilanciamento dei flussi e firewall.
78
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
4.2.6
Formato dei datagrammi Ipv6
Nei datagrammi IPv6 vengono apportate varie modifiche a livello di formato rispetto IPv4:
• Indirizzamento esteso (extension header ): si rende “flessibile” il protocollo grazie al
campo intestazione successiva (next header ). Questo campo possiede un codice avente
un doppio significato:
– Se non ci sono estensioni aggiuntive, ovvero non si presentano pezzi addizionali all’intestazione di base, allora quel campo identifica il protocollo trasportato dal payload.
– Se c’è un’intestazione aggiuntiva, definita extension header , allora quel codice
rappresenta il tipo di estensione estesa.
Sono presenti due campi indispensabili, mentre il resto è libero: a seconda del next header
si hanno formati diversi.
8 bit
8 bit
Next
Header
Header
length
– Next header : è il codice, se esiste, del next header aggiuntivo, altrimenti indica il
codice del protocollo trasportato.
– Header length: permette di conoscere dove finisce l’estensione dell’intestazione.
• Intestazione ottimizzata di 40 byte: IPv6 presenta un’intestazione a 40 byte e lunghezza fissa, questo consente una maggiore velocità d’elaborazione dei datagrammi IP. Mentre
una nuova codifica delle opzioni ne consente l’elaborazione in maniera più flessibile.
• Etichettatura dei flussi: IPv6 presenta una definizione elusiva di flusso (flow ). Questo
consente di richiedere una gestione speciale, come una qualità di servizio diversa da quella
fornita di default o un servizio in tempo reale.
Nel dettaglio la struttura diventa più semplice e più efficiente:
• Versione: è un campo formato da 4 bit che identifica il numero di versione IP.
4.2. PROTOCOLLO IP
79
• Classe di traffico: è un campo formato da 8 bit , simile al campo TOS di IPv4. Può
essere utilizzato per attribuire priorità a determinati datagrammi all’interno di un flusso o
specifiche applicazioni rispetto a quelli di altri servizi.
• Etichetta di flusso: è un campo lungo 20 bit utilizzato per identificare un flusso di
datagrammi.
• Lunghezza del payload : è un valore a 16 bit trattato come un intero senza segno, il
quale indica il numero di byte nel datagramma IPv6 che seguono l’intestazione.
• Intestazione successiva: è un campo con lo scopo di identificare il protocollo a cui
vengono consegnati i contenuti (il campo dati) del datagramma, per esempio TCP o UDP.
• Limite di hop: questo campo viene decrementato di 1 da ciascun router che inoltra il
datagramma. Quando il suo valore raggiunge 0, il datagramma viene eliminato.
• Indirizzi sorgente e destinazione: sono disponibili diversi formati degli indirizzi IPv6
a 128 bit.
• Dati: payload passato al protocollo specificato nel campo d’intestazione successivo quando
il datagramma IPv6 raggiunge la sua destinazione.
Inoltre vengono eliminati diversi campi come:
• Frammentazione/riassemblaggio: IPv6 non consente frammentazione né riassemblaggio sui router intermedi. Queste operazioni possono essere effettuate solo da sorgente o
destinazione.
Se un router riceve un datagramma IPv6 troppo grande per essere inoltrato sul collegamento d’uscita, allora lo elimina e invia al mittente un messaggio d’errore ICMP. Il mittente
può inviare nuovamente i dati con una dimensione di datagramma IP inferiore; evitare la
frammentazione e riassemblaggio rende più rapido l’instradamento IP all’interno della rete.
• Checksum dell’intestazione: dal momento che i protocolli Internet a livello di trasporto
(come TCP e UDP) e di collegamento (come Ethernet) calcola un loro checksum, allora
non risulta necessario dover ripetere tale funzionalità (che rallenta l’elaborazione).
• Opzioni: questo campo non fa più parte dell’intestazione IP standard, anche se non è
totalmente scomparsa: è una delle possibili intestazioni successive a cui punta l’intestazione
IPv6.
Ovvero come le intestazioni del protocollo TCP o UDP possono rappresentare l’intestazione
successiva all’interno di un pacchetto IP, lo stesso accade anche per il campo Opzioni.
80
CAPITOLO 4. LIVELLO DI RETE (PIANO DEI DATI)
Livello di rete (piano di controllo)
Si possono avere due possibili approcci:
• Controllo locale: l’algoritmo di instradamento viene eseguito su ogni singolo router, all’interno del quale vengono effettuate sia le funzioni di inoltro sia quelle di instradamento.
Ogni router ha una componente di instradamento che comunica con le componenti d’instradamento degli altri router per calcolare la propria tabella di inoltro.
• Controllo logicamente centralizzato: il controller logicamente centralizzato calcola e
distribuisce le tabelle di inoltro che devono essere utilizzate dal router.
81
82
CAPITOLO 5. LIVELLO DI RETE (PIANO DI CONTROLLO)
Il controller interagisce con l’agente di controllo (CA) in ogni router tramite un protocollo
che configura e gestisce la tabella dei flussi del router.
In genere il CA presenta le seguenti funzionalità:
• Comunica con il controller.
• Esegue quello che il controller gli ordina.
Gli agenti di controllo non interagiscono direttamente tra loro e non partecipano attivamente
all’elaborazione della tabella di inoltro.
Per controllo logicamente centralizzato si intende un servizio di controllo dell’instradamento
a cui si accede come se fosse un singolo punto centrale di servizio.
Tuttavia il servizio può essere implementato su più server per ragioni di tolleranza alle
perdite e alla scalabilità delle prestazioni.
5.1
Algoritmi di instradamento
Gli algoritmi di instradamento (routing algorithm) hanno lo scopo di determinare i percorsi,
tra sorgenti e destinatari, attraverso la rete di router. Inoltre le policy possono causare diverse
problematiche: un router X, che appartiene all’organizzazione Y, non può inoltrare pacchetti che
abbiano come sorgente la rete dell’organizzazione Z.
Per i problemi di instradamento si fa uso di un grafo: i nodi rappresentano i router, mentre
gli archi corrispondono a collegamenti fisici tra i router.
Un grafo G = (N, E) è un insieme di N nodi e un insieme di E archi (detti edge), dove
ogni arco collega una coppia di nodi di N .
Figura 5.1: Modello astratto di grafo di una rete di calcolatori.
A ciascun arco è associato un valore che indica il proprio costo. Questo può riflettere:
• La lunghezza fisica del collegamento;
• La velocità del collegamento;
• Il suo prezzo.
5.1. ALGORITMI DI INSTRADAMENTO
83
Per ogni arco (x, y) tra i nodi x e y si denota con c(x, y) il suo costo. Se la coppia (x, y)
non appartiene a E, allora si pone c(x, y) = +∞. Ovviamente gli archi vengono considerati
bidirezionali, cioè (x, y) = (y, x) e c(x, y) = c(y, x), e un nodo y viene detto adiacente e vicino
a un nodo x, se (x, y) è un arco di E.
Gli algoritmi di instradamento hanno l’obiettivo di individuare i percorsi meno costosi, per
cui il costo di un percorso (x1 , x2 , . . . , xp ) è la somma di tutti i costi degli archi lungo il percorso:
c(x1 , x2 ) + c(x2 , x3 ) + c(xp−1 , xp ).
Un percorso in un grado G = (N, E) è una sequenza di nodi (x1 , x2 , . . . , xp ) tali che ogni
coppia (x1 , x2 ), (x2 , x3 ), . . . , (xp−1 , xp ), sia un arco appartenente a E.
Dati due nodi x e y qualsiasi, possono esistere più percorsi validi dei quali almeno uno di questi
rappresenta un percorso a costo minimo (least-cost path). Nella Figura 5.1 il percorso a costo
minimo tra il nodo u d’origine e il nodo w di destinazione è (u, x, y, w), con costo 3. Per di più
se tutti gli archi del grafo presentassero lo stesso costo, allora il costo minimo rappresenterebbe
anche il percorso più breve (shortest path), cioè il percorso con il minor numero di collegamenti
tra sorgente e destinazione.
In una rete possono però essere presenti molti nodi e non si può a livello di tempistiche provare
tutte le possibili combinazioni di percorso. Ecco che nel dettaglio gli algoritmi possono essere
centralizzati o decentralizzati:
• Algoritmo di instradamento centralizzato: calcola il percorso a costo minimo tra una
sorgente e destinazione avendo già una conoscenza globale e completa della rete.
Questi algoritmi sono spesso detti algoritmi link-state (LS).
• Algoritmo di instradamento decentralizzato: il percorso a costo minimo viene calcolato in modo distribuito e iterativo. Nessun nodo possiede informazioni complete sul costo
di tutti i collegamenti di rete.
I nodi conoscono solo i costi dei collegamenti a loro incidenti. Successivamente attraverso
un processo iterativo e lo scambio di informazioni con i nodi adiacenti, un nodo calcola
gradualmente il percorso.
Questi algoritmi sono detti distance-vector (DV): ogni nodo elabora un vettore di stima
dei costi verso tutti gli altri nodi della rete.
Un secondo criterio di classificazione è la staticità o dinamicità:
• Algoritmo di instradamento statico: i percorsi cambiano raramente.
• Algoritmo di instradamento dinamico: determinano gli instradamenti al variare del
volume di traffico o della topologia della rete. Possono inoltre essere eseguiti periodicamente
come conseguenza diretta di un cambiamento nella topologia o nel costo di un collegamento.
Gli algoritmi dinamici rispondono meglio ai cambiamenti della rete, ma sono anche maggiormente soggetti a problemi di instradamento in loop e oscillazione dei percorsi.
Infine un terzo modo per classificare gli algoritmi è quello di essere più o meno sensibili al carico
della rete.
• Algoritmo sensibile al carico: i costi dei collegamenti variano dinamicamente per riflettere il livello di congestione. Se a un collegamento viene associato un alto costo, allora
l’algoritmo tende a evitare di usarlo.
84
CAPITOLO 5. LIVELLO DI RETE (PIANO DI CONTROLLO)
• Algoritmo insensibile al carico: sono gli attuali algoritmi di instradamento di Internet
(come RIP, OSPF e BGP), in cui il costo di un collegamento non riflette esplicitamente il
suo attuale livello di congestione.
5.1.1
Instradamento link-state
Nell’instradamento link-state la topologia di rete e tutti i costi di collegamenti sono noti, ossia
disponibili in input all’algoritmo. Ogni nodo invia agli altri nodi pacchetti contenenti l’identità
e i costi dei collegamenti a loro connessi.
Questo di ottiene mediante un algoritmo di link-state broadcast. Così facendo tutti i nodi dispongono di una vista identica e completa della rete e ogni nodo che esegue l’algoritmo LS ottiene gli
stessi risultati.
L’algoritmo di calcolo dei percorsi è noto come algoritmo di Dijkstra. Quest’ultimo calcola
il percorso a costo minimo da un nodo d’origine a tutti gli altri nodi della rete. È iterativo e
possiede le seguenti proprietà:
• Dopo la k-esima iterazione, i percorsi a costo minimo sono noti a k nodi di destinazione.
• Questi k percorsi hanno i k costi più bassi.
Si adotta per praticità questa notazione:
• D(v): costo minimo del percorso dal nodo d’origine alla destinazione v.
• p(v): immediato predecessore di v lungo il percorso a costo minimo dall’origine a v.
• N ′ : sottoinsieme di nodi contenente tutti i nodi v per cui il percorso a costo minimo
dall’origine a v è definitivamente noto.
Applicando l’algoritmo LS alla Figura 5.1 si ottiene:
5.1.2
Instradamento distance-vector
L’algoritmo distance-vector è iterativo, asincrono e distribuito.
• Distribuito: ciascun nodo riceve parte dell’informazione da uno o più dei suoi vicini
direttamente connessi, a cui restituisce i risultati dopo aver effettuato il calcolo.
• Iterativo: questo processo si ripete fino a quando non avviene ulteriore scambio informativo tra i vicini.
In pratica l’algoritmo è auto-terminante, ossia si blocca autonomamente.
• Asincrono: non richiede che tutti i nodi operino al passo con gli altri.
85
5.1. ALGORITMI DI INSTRADAMENTO
Esiste un’importante relazione tra costi e percorsi a costo minimo.
Definizione (Formula di Bellman-Ford). Sia dx (y) il costo del percorso a costo minimo dal nodo
x al nodo y. Allora i costi minimi sono correlati dalla nota formula di Bellman-Ford:
dx (y) = minv {c(x, v) + dv (y)}
(5.1)
dove minv riguarda tutti i vicini di x.
Questa relazione afferma che: dopo aver viaggiato da x a v e considerando il percorso a
costo minimo da v a y, il costo del percorso risulta c(x, v) + dv (y).
Dato che si viaggia verso qualche vicino v, il costo minimo da x a y è il minimo di c(x, v) +
dv (y) calcolato su tutti i nodi adiacenti v.
La formula di Bellman-Ford ha anche una valenza pratica in quanto fornisce le righe della tabella
di inoltre nel nodo x. Prendendo v ∗ come qualsiasi nodo vicino che minimizza l’equazione 5.1,
se il nodo x vuole inviare un pacchetto al nodo y lungo il percorso a costo minimo, dovrebbe per
prima cosa inoltrarlo al nodo v ∗ . Pertanto la tabella di inoltro al nodo x specificherebbe il nodo
v ∗ come router successivo per la destinazione finale y.
Un altro aspetto importante della formula di Bellman-Ford è il suggerimento della forma di comunicazione tra vicini, che ha luogo nell’algoritmo usato da DV (detto algoritmo di BellmanFord).
L’idea è che ogni nodo x inizi con Dx (y) (una stima del costo del percorso a costo minimo da
sé stesso al nodo y) per tutti i nodi in N . Sia Dx = [Dx (y) : y in N ] il vettore delle distanze
del nodo x, che è il vettore delle stime dei costi da x a tutti gli altri nodi y in N . Con questo
algoritmo ciascun nodo x mantiene i seguenti dati di instradamento:
• Per ogni vicino v, il costo c(x, v) da x al vicino v.
• Il vettore delle distanze del nodo x, che è Dx = [Dx (y) : y in N ], contiene la stima presso
x del costo verso tutte le destinazioni y in N .
• I vettori delle distanze di tutti i suoi vicini, ossia Dv = [Dv (y) : y in N ], per ciascun vicino
y di x.
Quando un nodo x riceve un nuovo vettore da qualcuno dei suoi vicini v, lo salva e quindi usa la
formula di Bellman-Ford per aggiornare il proprio valore come segue:
Dx (y) = minv {c(x, v) + Dv (y)} per ciascun nodo y in N
Se il vettore delle distanze del nodo x è cambiato per via di tale passo di aggiornamento, il nodo
x manderà il proprio vettore aggiornato a tutti i suoi vicini, i quali a loro volta aggiorneranno il
proprio vettore.
L’algoritmo Bellman-Ford è decentralizzato e non usa informazioni globali, ma le ottiene
solo dai vicini direttamente connessi al nodo. Ogni nodo attende aggiornamenti dai suoi
vicini e quando ne riceve uno calcola il proprio nuovo vettore, distribuendolo poi agli altri
nodi.
86
CAPITOLO 5. LIVELLO DI RETE (PIANO DI CONTROLLO)
Viene mostrato il funzionamento in modo sincrono1 , in quanto tutti i nodi ricevono simultaneamente i vettori delle distanze dai propri vicini, calcola i rispettivi nuovi vettori e informano i
vicini degli eventuali cambiamenti.
• Colonna a sinistra: si creano le tre tabelle di instradamento iniziali (routing table) per
ciascuno dei tre nodi.
• Dopo l’inizializzazione ciascun nodo invia il proprio vettore ai suoi vicini che ricalcolano il
vettore delle distanze.
1 L’algoritmo
opera correttamente anche in modo asincrono.
5.2. INSTRADAMENTO TRA ISP: BGP
87
Per esempio il nodo x calcola:
Dx (x) = 0
Dx (y) = min{c(x, y) + Dy (y), c(x, z) + Dz (y)} = min{2 + 0, 7 + 1} = 2
Dx (z) = min{c(x, y) + Dy (z), c(x, z) + Dz (z)} = min{2 + 1, 7 + 0} = 3
• Colonna centrale: mostra per ogni nodo il nuovo vettore delle distanze del nodo e i vettori
delle distanze appena ricevuti dai suoi vicini.
• I nodi rinviano la versione aggiornata del proprio vettore ai vicini, che effettuano nuovamente i calcoli.
• Colonna a destra: sono presenti le tabelle finali minimizzate, quindi non serve andare avanti
a effettuare altri passaggi e l’algoritmo si blocca.
In un esempio a più nodi, inizialmente se due nodi non sono collegati direttamente, la loro
distanza è considerata ∞. Solo successivamente con l’avvento degli scambi di vettore si
ricaverà la reale distanza.
5.2
Instradamento tra ISP: BGP
Per determinare i percorsi per le coppie sorgente-destinazione che interessano più sistemi autonomi (AS autonomous system) è necessario un protocollo di instradamento inter-AS che
coordini più AS. Il border gateway protocol , detto BGP, rappresenta l’attuale standard dei
protocolli di instradamento tra i sistemi autonomi in Internet.
BGP è considerato la “colla” che tiene insieme le migliaia di ISP (Internet Service Provider ) che
formano Internet, inoltre è un protocollo di tipo distance-vector decentralizzato e asincrono.
5.2.1
Ruolo di BGP
Si consideri un AS e un suo qualsiasi router. Le occorrenze della tabella di inoltro corrispondenti a
destinazioni interne all’AS vengono determinate dal protocollo di instradamento intra-AS.
Si ricorda che ogni router ha una tabella di inoltro, fondamentale per il processo di inoltro
dei pacchetti.
⇒ Chi determina le destinazioni esterne dell’AS?
Vengono determinate da BGP. Infatti in questo protocollo i pacchetti non vengono instradati
verso uno specifico indirizzo, ma piuttosto verso prefissi CIDR che rappresentano una sottorete
o una collezione di sottoreti.
Nel mondo di BGP, una destinazione potrebbe avere la forma 138.16.68/22, che include 1024
indirizzi IP. Dunque le occorrenze delle tabelle di inoltro hanno forma (x, I) dove x è un prefisso
di rete e I è un numero di interfaccia del router.
BGP mette a disposizione di ciascun router un modo per:
1. Ottenere informazioni sulla raggiungibilità dei prefissi di sottorete da parte dei sistemi
confinanti.
In particolare BGP consente a ogni sottorete di comunicare la propria esistenza al resto di
Internet. Se non fosse per BGP ogni sottorete sarebbe isolata e irraggiungibile dal resto di
Internet.
88
CAPITOLO 5. LIVELLO DI RETE (PIANO DI CONTROLLO)
2. Determinare i percorsi ottimi verso le sottoreti.
Un router può conoscere più cammini verso un prefisso, ma per determinare il migliore deve
eseguire BGP localmente, sulla base delle informazioni di raggiungibilità e delle politiche
del sistema.
5.2.2
Distribuzione delle informazioni dei cammini in BGP
Si consideri la seguente rete con tre AS: AS1, AS2 e AS3 (quest’ultimo con una sottorete di
prefisso X).
Ogni router in ogni AS funge sia da router gateway 2 sia da router interno, ovvero connesso
solo a host e router interni all’AS.
Esempio. In AS1 il router 1c è un router gateway, mentre 1a, 1b e 1d sono solo router interni.
BGP distribuisce le informazioni di raggiungibilità del prefisso X a tutti i router :
• Innanzitutto AS3 invia un messaggio BGP ad AS2, con l’annuncio dell’esistenza di X in
AS3.
• Successivamente AS2 invia un messaggio BGP ad AS1 con l’annuncio che X esiste ed è
raggiungibile passando prima da AS2 per poi arrivare ad AS3.
In questo modo ogni AS viene a conoscenza di X e del percorso per raggiungerlo. Per di più si
ricorda che sono i router a inviare gli annunci e non gli AS.
Con BGP le coppie di router si scambiano informazioni di instradamento TCP semi-permanenti
usando la porta 179.
Ogni connessione TCP, con tutti i messaggi BGP che vengono inviati, è detta sessione BGP.
Nel caso in cui questa coinvolga due sistemi autonomi viene detta sessione BGP esterna
2 Corrisponde
a un router di bordo direttamente connesso a uno o più router in altri AS
5.2. INSTRADAMENTO TRA ISP: BGP
89
(sessione eBGP), mentre quella tra router dello stesso sistema autonomo è chiamata sessione
BGP interna (sessione iBGP).
Secondo l’ultimo schema con AS1, AS2 e AS3, con connessioni iBGP ed eBGP, il router
gateway 3a invia un messaggio eBGP al router gateway 2c che a sua volta lo invia su una
sessione iBGP a tutti i router di AS2 compreso il gateway 2a. Quest’ultimo invia un messaggio
eBGP al router gateway 1c, il quale utilizza poi iBGP per inviare un messaggio a tutti i router
di AS1.
Una volta completato tale processo, ogni router di AS1 e AS2 è a conoscenza dell’esistenza di X
e del percorso per raggiungerlo.
5.2.3
Selezione delle rotte migliori
Quando un router annuncia un prefisso per una sessione BGP, include anche un certo numero
di attributi BGP. In gergo un prefisso assieme ai suoi attributi è detto rotta (route).
• Con l’attributo AS-PATH ci si riferisce all’elenco di sistemi autonomi attraverso il quale
è passato l’annuncio del prefisso.
Quando un prefisso attraversa un sistema autonomo, questo aggiunge il proprio ANS all’attributo AS-PATH. Nello specifico i router utilizzano questo attributo per rilevare ed
evitare gli annunci reiterati: se un router vede che il proprio AS è contenuto nella lista di
percorsi, allora rifiuta l’annuncio.
• Nell’attributo NEXT-HOP è riportata l’interfaccia del router che inizia l’AS-PATH.
Ogni rotta è quindi scritta come una lista di tre elementi: NEXT-HOP, AS-PATH e il prefisso
X. Inoltre si avvisa che NEXT-HOP è l’indirizzo IP di un router che non appartiene a un certo
AS, ma a una sottorete collegata direttamente a quell’AS.
Instradamento hot potato
Si considera la seguente rete:
Il router 1b impara due possibili percorsi BGP verso il prefisso X. Nell’instradamento a
patata bollente (hot potato routing), il percorso scelto è quello con il minor costo per il router
NEXT-HOP che lo inizia. In questo caso 1b consulta le sue informazioni di routing intra-AS per
trovare il percorso intra-AS a costo minimo verso il router NEXT-HOP 2a e il percorso a costo
minimo verso il router NEXT-HOP 3d, e tra questi seleziona quello a costo minimo.
L’idea alla base è che il router 1b butti fuori i pacchetti dal suo AS il prima possibile senza
preoccuparsi del costo delle restanti tratte del percorso al di fuori del suo AS. È poi possibile che
due router nello stesso AS selezionino diversi percorsi per lo stesso prefisso.
90
5.3
CAPITOLO 5. LIVELLO DI RETE (PIANO DI CONTROLLO)
Protocollo ICMP
Host e router utilizzano il protocollo ICMP (Internet Control Message Protocol ) per scambiarsi informazioni a livello di rete: utilizzato specialmente per la notifica degli errori. Per
esempio durante l’esecuzione di una sessione HTTP si potrebbe visualizzare il messaggio “Rete
di destinazione irraggiungibile”, che è originato da ICMP.
ICMP è considerato parte di IP, ma dal punto di vista dell’architettura si trova sopra IP, dato
che i suoi messaggi vengono trasportati nei datagrammi IP: sono trasportati come payload di IP.
Se un host riceve un datagramma IP, che specifica ICMP come protocollo di livello superiore,
allora effettua il demultiplexing dei contenuti del datagramma a ICMP.
I messaggi ICMP possiedono: un campo tipo, un campo codice, contengono l’intestazione e
i primi 8 byte del datagramma IP che ha provocato la generazione del messaggio. In tal modo il
mittente può determinare il datagramma che ha causato l’errore.
Livello di collegamento
I datagrammi attraversano una serie di collegamenti (cablati e wireless) che iniziano dall’host
sorgente, passano attraverso una serie di router e switch (commutatori) e raggiungono la destinazione.
6.1
Introduzione al livello di collegamento
Terminologia:
• Si indica con il termine nodo un qualunque dispositivo che opera a livello di collegamento (livello 2).
• Si indicano con collegamenti (link ) i canali di comunicazione, che collegano i nodi
adiacenti lungo il cammino.
I datagrammi che devono essere trasferiti da un host sorgente a uno di destinazione, devono
essere trasportati lungo ciascun collegamento nel percorso da un estremo all’altro (vedi Figura
6.1).
Si suppone di voler inviare un datagramma da un host wireless a uno dei server. Il datagramma deve attraversare sei collegamenti:
1. Un collegamento WiFi tra l’host sorgente e l’access point WiFi;
2. Un collegamento Ethernet dall’access point allo switch a livello di collegamento;
3. Un collegamento tra lo switch a livello di collegamento e il router ;
4. Un collegamento tra i due router ;
5. Un collegamento Ethernet tra il router e lo switch a livello di collegamento;
6. Un collegamento Ethernet tra lo switch e il server.
Su ogni collegamento, un nodo trasmittente incapsula il datagramma in cui un frame del livello
di collegamento (link-layer frame e lo trasmette lungo il collegamento stesso.
91
92
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Figura 6.1: Sei passaggi a livello di collegamento tra host wireless e server.
6.1.1
Servizi offerti dal livello di collegamento
Sebbene il servizio base del livello di collegamento sia il trasporto di datagrammi da un nodo
a quello adiacente lungo un singolo canale di comunicazione, i dettagli dei servizi forniti possono
variare da un protocollo all’altro.
• Framing : quasi tutti i protocolli incapsulano i datagrammi del livello di rete all’interno
di un frame a livello di collegamento.
I frame sono costituiti da:
– Un campo dati, nel quale è inserito il datagramma.
– Da vari campi di intestazione.
Infine la struttura del frame è specificata dal protocollo.
• Accesso al collegamento: il protocollo MAC (Medium Access Control ) controlla l’accesso
al mezzo trasmissivo specificando le regole con cui immettere i frame nel collegamento.
Nei collegamenti punto a punto, con protocollo MAC semplice o assente, il mittente può
inviare il frame quando il canale risulta libero.
Nel caso in cui i vari nodi condividano un singolo canale broadcast, il protocollo MAC aiuta
a coordinare la trasmissione dei frame da parte dei nodi.
6.1. INTRODUZIONE AL LIVELLO DI COLLEGAMENTO
93
• Consegna affidabile: i protocolli a livello di collegamento che forniscono un servizio di
consegna affidabile garantiscono il trasporto senza errori di ciascun datagramma.
Analogamente a TCP il servizio di consegna affidabile è spesso usato per i collegamenti
soggetti a elevati tassi d’errore, allo scopo di correggere localmente l’errore piuttosto che
costringere i protocolli di trasporto o applicazione a procedere con la ritrasmissione dei
dati.
Tuttavia la consegna affidabile del livello di collegamento può essere considerata non
necessaria nei collegamenti che presentano un basso numero di errori sui bit.
• Rilevazione e correzione degli errori: molti protocolli del livello di collegamento forniscono un meccanismo per rilevare la presenza d’errori sui bit. Ciò è possibile grazie
all’inserimento, da parte del nodo trasmittente, di un bit di controllo di errore all’interno
del frame e all’esecuzione di un controllo da parte del nodo ricevente.
La rilevazione degli errori a livello di collegamento è implementato nell’hardware. La correzione dell’errore è simile alla rilevazione degli errori, ma il nodo ricevente determina il
punto preciso del frame in cui si è verificato l’errore per poi correggerlo.
6.1.2
Implementazione del livello di collegamento
Figura 6.2: Tipica architettura di un host.
Dato un collegamento, il protocollo di collegamento è realizzato da un adattatore di rete
(network adpter ), noto come scheda di rete (NIC, Network Interface Card ).
Il cuore della scheda di rete è il controller a livello di collegamento (link layer controller ), che è
un chip dedicato, il quale implementa molti dei servizi a livello di collegamento.
La maggior parte delle funzionalità del controller sono implementate in hardware.
In lato mittente il controller, prende un datagramma creato e memorizzato nella memoria dell’host
dai livelli più alti della pila di controlli. Lo incapsula in un frame a livello di collegamento
riempiendone i vari campi dell’intestazione e lo trasmette sul canale di comunicazione, seguendo
il protocollo d’accesso al canale.
94
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
In lato destinatario un controller riceve l’intero frame, estrae il datagramma e lo consegna al
livello di rete. Se il protocollo del livello di collegamento fornisce il servizio di rilevazione degli
errori, allora è il controller trasmittente a impostare i bit di rilevazione degli errori ed è quello
ricevente a eseguire il controllo.
La Figura 6.2 mostra due aspetti:
• Una scheda di rete collegata al bus dell’host, dove viene considerato dagli altri componenti
dell’host come un qualsiasi altro dispositivo di I/O.
• Mentre la maggior parte del livello di collegamento è implementato in hardware sulla scheda
di rete, una parte è invece realizzata in software e viene eseguita dalla CPU dell’host.
Le componenti software del livello di collegamento implementano funzionalità del livello più
alto, come l’assemblaggio delle informazioni di indirizzamento e l’attivazione dell’hardware del
controller. In lato ricevente, il software del livello di collegamento risponde agli interrupt del
controller, effettua la gestione di condizioni dell’errore e il passaggio del datagramma fino al
livello di rete.
Il livello di collegamento è una combinazione di hardware e software.
6.2
Tecniche di rilevazione e correzione degli errori
Dunque il rilevamento e correzione degli errori sui bit sono due servizi forniti a livello di
collegamento e a volte anche da quello di trasporto.
Questa Figura mostra lo scenario di riferimento: al nodo trasmittente ai dati D che devono essere
protetti da errori vengono aggiunti dei bit detti EDC (error detection and correction).
In genere vengono protetti sia i datagrammi, trasferiti verso il basso dal livello di rete, sia le
informazioni relative agli indirizzi di collegamento: i numeri di sequenza e altri campi nell’intestazione del frame.
I dati D insieme ai bit EDC sono inviati in un frame al nodo ricevente, il quale legge una sequenza
di bit D′ e EDC ′ che può risultare diversa da quella originale.
6.2. TECNICHE DI RILEVAZIONE E CORREZIONE DEGLI ERRORI
95
Il nodo ricevente deve terminare se D′ coincide con D, avendo a disposizione solo D′ e EDC ′ .
Tuttavia le attuali tecniche non consentono sempre di rilevare gli errori nei bit, anche nonostante
l’utilizzo dei bit di rilevazione degli errori è possibile che ci siano errori non rilevati.
Il nodo ricevente potrebbe consegnare datagrammi errati o ignorare che il contenuto dei
campi nell’intestazione dei frame sia alterato.
Perciò sono necessari schemi che riducano la probabilità di tali eventi.
6.2.1
Controllo di parità
Viene impiegato un unico bit di parità (parity bit) e si suppone che le informazioni da inviare
D siano costituite da d bit.
Figura 6.3: Schema di parità pari a un bit.
• In uno schema di parità pari, il mittente include un bit addizionale e sceglie il suo valore
in modo da rendere pari il numero di bit 1 nei d + 1 bit trasmessi.
• In uno schema di parità dispari, il valore del bit di parità è scelto in modo che ci sia un
numero dispari di bit 1.
Con un solo bit di parità il nodo ricevente ha il compito di contare il numero di bit a 1 tra quelli ricevuti: se trova un numero dispari di bit 1, allora sa che si è verificato almeno un errore nei bit.
⇒ Cosa accade se si verifica un numero pari di errori nei bit?
In questo caso si avrebbe un errore non rilevato. Se la probabilità di errori nei bit è bassa e
sono indipendenti, allora l’eventualità di errori multipli in un pacchetto è estremamente ridotta
e un solo bit di parità può essere sufficiente.
Tuttavia si è analizzato che statisticamente gli errori tendono a verificarsi a raffiche piuttosto
che in modo indipendente.
La probabilità che gli errori non vengano rilevati in un frame protetto da un solo bit di parità è
quasi del 50%. Di conseguenza occorre utilizzare migliori strategie.
Lo schema di parità generalizzato a livello bidimensionale (vedi Figura 6.4) suddivide i d bit
del dato D in i righe e j colonne per ognuna delle quali è stato calcolato un valore di parità. I
risultanti i + j + 1 bit di parità contengono bit per la rilevazione dell’errore nei frame a livello di
collegamento.
96
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Figura 6.4: Generalizzazione schema di parità bidimensionale.
Supponendo che si verifichi un solo errore nei d bit originali, con questo schema di parità
bidimensionale, i bit di parità della colonna e della riga contenenti il bit errato individueranno
l’errore. Il ricevente può, oltre a rilevare l’errore, utilizzare gli indici di colonna e di riga per
identificare il bit alterato e correggerlo.
La capacità del ricevente sia di rilevare che correggere gli errori è conosciuta come forward
error correction (FEC).
6.2.2
Checksum
Riprendendo la Figura 6.3 i d bit sono trattati come una sequenza di numeri interi da k bit. Il
checksum di Internet si bassa su questo approccio: i dati sono considerati come interi di 16
bit e sommati: il complemento a 1 di questa somma costituisce il checksum di Internet che viene
trasposto nell’intestazione dei segmenti.
Nei protocolli TCP e UDP (vedi Capitolo 3) il checksum è calcolato per tutti i campi
(intestazione e dati), mentre in IP il checksum è calcolato sull’intestazione.
I metodi di checksum richiedono informazioni addizionali nel pacchetto relativamente piccole,
ma forniscono una prevenzione dagli errori piuttosto limitata. Essendo però che il livello di
trasporto viene eseguito dal software del sistema operativo dell’host, allora risulta fondamentale
disporre di semplici e veloci schemi di rilevazione degli errori.
6.3. COLLEGAMENTI BROADCAST E PROTOCOLLI DI ACCESSO MULTIPLO
6.3
97
Collegamenti broadcast e protocolli di accesso multiplo
Esistono due tipologie di collegamento di rete:
• Collegamento punto a punto: costituito da un trasmittente a un’estremità del collegamento e da un unico ricevente all’altra.
• Collegamento broadcast: può avere più nodi trasmittenti e riceventi connessi allo stesso
canale broadcast 1 condiviso.
Alcuni esempi di tecnologie con collegamenti broadcast sono Ethernet e Wireless LAN.
Un primo problema, chiamato problema dell’accesso multiplo, è la coordinazione dell’accesso di più nodi trasmittenti e riceventi in un canale broadcast condiviso. I nodi su un canale
broadcast di una rete di calcolatori possono sia ricevere che trasmettere. Pertanto vengono utilizzati i protocolli di accesso multiplo per fissare le modalità con cui i nodi regolano le loro
trasmissioni sul canale condiviso.
Dato che tutti i nodi sono in grado di trasmettere frame, è possibile che due o più lo facciano
nello stesso istante, per cui tutti i nodi ricevono contemporaneamente più frame. Tra questi
si genera una collisione a motivo della quale nessuno dei nodi riceventi riesce a interpretare i
frame. Ecco che se una situazione del genere dovesse ripetersi molto frequentemente, allora gran
parte della banda del canale verrebbe sprecata.
Per riuscire a utilizzare il canale broadcast in modo efficiente, serve coordinare le trasmissioni
dei nodi attivi. Questo ruolo spetta ai protocolli d’accesso multiplo, i quali sono categorizzabili
nelle seguenti categorie:
• Protocolli a suddivisione del canale;
• Protocolli ad accesso casuale;
• Protocolli a rotazione.
Idealmente un protocollo di accesso multiplo per un canale broadcast con velocità di R bps
dovrebbe presentare queste caratteristiche:
1. Quando un solo nodo deve inviare dati, allora dispone di un throughput pari a R bps.
2. Quando M nodi devono inviare dati, allora dispongono di un throughput in media pari a
R/M bps.
3. Il protocollo è decentralizzato: non ci sono altri nodi principali che nel caso non funzionassero potrebbero rendere inattivo l’intero sistema.
4. Il protocollo è semplice, in quanto risulta economico da implementare.
6.3.1
Protocolli ad accesso casuale
Quando si verifica una collisione, i nodi coinvolti ritrasmettono ripetutamente i loro frame fino
a quando non raggiungono la destinazione senza collisioni. La ritrasmissione dei frame non è
immediata, ma il nodo attende per un periodo di tempo casuale (detto random delay) indipendente da quello degli altri nodi. Ciò consente ai frame di attraversare il canale senza ulteriori
collisioni.
1 Per
broadcast si intende un canale che diffonde un frame e tutti gli altri nodi ne ricevono una copia.
98
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Slotted ALOHA
Si assume che:
• Tutti i frame consistano esattamente di L bit;
• Il tempo sia suddiviso in slot di L/R secondi;
• I nodi comincino la trasmissione dei frame all’inizio degli slot;
• I nodi siano sincronizzati in modo che tutti sappiano quando iniziano gli slot;
• Qualora in uno slot due o più frame collidano, allora tutti i nodi della rete rileverebbero
l’evento prima del termine dello slot.
Si indica con p una probabilità (tra 0 e 1) e le operazioni dei nodi slotted ALOHA sono:
• Quando un nodo ha un nuovo frame da spedire, attende fino all’inizio dello slot successivo
e poi trasmette l’intero frame.
• Se non si verifica una collisione, allora l’operazione ha successo, dunque non occorre
effettuare una ritrasmissione e il nodo può predisporre l’invio di un nuovo frame.
• Se si verifica una collisione, allora il nodo la rileva prima del termine dello slot e ritrasmette
con probabilità p il suo frame durante gli slot successivi, fino a quando l’operazione non
ha successo.
Il protocollo slotted ALOHA possiede i seguenti vantaggi:
1. Consente a un singolo nodo di trasmettere continuamente pacchetti alla massima velocità
del canale, quando è il solo nodo attivo.
2. È fortemente decentralizzato, poiché ciascun nodo rileva le collisioni e decide indipendentemente quando ritrasmettere, anche se è comunque necessario che gli slot siano sincronizzati
ai nodi.
⇒ Slotted ALOHA funziona altrettanto bene in presenza di molti nodi attivi?
Esistono in questo caso due possibili problemi:
1. Nell’esempio proposto una certa frazione degli slot presenta collisioni e di conseguenza
viene “sprecata”.
6.3. COLLEGAMENTI BROADCAST E PROTOCOLLI DI ACCESSO MULTIPLO
99
2. Una grande frazione degli slot risulta vuota, perché tutti i nodi attivi terminano la trasmissione in conseguenza della politica di trasmissione probabilistica. I soli slot non sprecati
sono esattamente quelli utilizzati da un solo nodo per trasmettere; lo slot in cui trasmette
un solo nodo è chiamato slot riuscito.
L’efficienza di un protocollo di accesso multiplo che fa uso di slot temporali è definita come la
frazione di slot riusciti in presenza di un elevato numero di nodi attivi che hanno sempre un
elevato numero di pacchetti da spedire.
Se non venisse utilizzata alcuna forma di controllo dell’accesso e se ciascun nodo ritrasmettesse subito dopo che si è effettuata la collisione, l’efficienza sarebbe nulla.
⇒ Di quanto slotted ALOHA si comporta meglio?
Si assume che tutti i nodi tentino di trasmettere sempre un frame in uno slot con probabilità p o
che abbiano già subito una collisione. Ipotizzando di avere N nodi, in questo caso la probabilità
che un dato slot sia vincente è data dalla probabilità che un solo nodo trasmetta (p), mentre i
rimanenti N − 1 rimangono inattivi ((1 − p)N −1 ). Quindi la probabilità di successo di un dato
nodo è p(1 − p)N −1 , mentre la probabilità che un nodo arbitrario abbia successo è N p(1 − p)N −1 .
Di conseguenza con N nodi attivi, l’efficienza dello slotted ALOHA è N p(1 − p)N −1 . Per
calcolare la massima efficienza con N nodi attivi si deve trovare p∗ che massimizza la precedente
espressione. Quindi:
1
lim N p∗ (1 − p)N −1 = ≈ 0.37
N →+∞
e
Ciò significa che quando un gran numero di nodi ha molti pacchetti da trasmettere, allora nel
miglior caso solo il 37% circa degli slot compie lavoro utile. Pertanto l’effettiva velocità di
trasmissione non è R bps, bensì 0.37R bps, di cui un 37% degli slot viaggia vuoto e il 26%
subisce collisioni.
ALOHA
Il primo protocollo ALOHA era privo di slot, completamente decentralizzato. Nell’ALOHA
puro nel momento in cui arriva un frame, il nodo lo trasmette immediatamente e integralmente
nel canale broadcast.
• Se un frame va in collisione, allora il nodo lo ritrasmette subito con probabilità p.
• Se non va in collisione, allora attende il tempo di trasmissione del frame. Dopo questo
tempo il nodo ritrasmette il frame con probabilità p o aspetta restando inattivo per un
certo periodo con probabilità 1 − p.
Per determinare l’efficienza si analizza un singolo nodo con le stesse assunzioni dello slotted
ALOHA e prendendo come unità di tempo il tempo di trasmissione di un frame.
A ogni istante la probabilità che un nodo stia trasmettendo è p. Supponendo che la trasmissione di
un frame inizi al tempo t0 , come mostrato in Figura 6.3.1, affinché sia trasmesso con esito positivo
nessun altro nodo può cominciare la propria trasmissione nell’intervallo di tempo (t0 − 1, t0 ].
Poiché si sovrapporrebbe con l’inizio della trasmissione del frame del nodo i. Le probabilità che
tutti gli altri nodi non diano inizio a una trasmissione in questo intervallo è (1 − p)N −1 .
Analogamente nessun altro nodo può iniziare la trasmissione mentre il nodo i sta trasmettendo,
in quanto si sovrapporrebbe all’ultima parte della trasmissione di quel frame. La probabilità che
tutti gli altri nodi non inizino a trasmettere in questo intervallo è (1 − p)N −1 .
100
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Ecco che la probabilità che un certo nodo abbia successo nella trasmissione è p(1 − p)2(N −1) .
Calcolando come per slotted ALOHA il limite di quest’espressione si ottiene che l’efficienza
1
≈ 0.184, ossia la metà. Questo è dovuto alla completa decentralizzazione del
massima risulta 2e
protocollo.
CSMA
Le regole alla base dei protocolli CSMA (Carrier Sense Multiple Access) e CSMA/CD (CSMA
with Collision Detection) sono:
• Un nodo “ascolta” il canale prima di trasmettere, operazione definita rilevamento della
portante.
Se il canale sta già trasmettendo un frame, allora il nodo aspetta finché rileva che il canale
è libero per un intervallo di tempo e quindi inizia la trasmissione.
• Il nodo che sta trasmettendo rimane contemporaneamente in ascolto nel canale, operazione
detta rilevamento della collisione.
Se un altro nodo trasmette un frame e interferendo con un altro, allora quest’ultimo arresta la propria trasmissione e aspetta un intervallo di tempo casuale al fine di ripetere la
trasmissione.
⇒ Perché se tutti i nodi effettuano il rilevamento della portante si verificano collisioni?
• All’istante t0 il nodo B rileva che il canale è inattivo (nessun nodo sta trasmettendo), in
questo modo inizia la trasmissione e i suoi bit si propagano in entrambe le direzioni lungo
il mezzo trasmissivo. La propagazione verso valle dei bit di B, al crescere del tempo, indica
che è necessario un intervallo di tempo non nullo per l’effettiva propagazione dei bit B
lungo il canale.
• Al tempo t1 > t0 il nodo D ha un frame da spedire. Sebbene al tempo t1 stia trasmettendo B e i suoi bit non abbiano ancora raggiunto D, quest’ultimo comincia a trasmettere
ritenendo il canale libero.
Dopo un breve periodo i frame di B e D interferiscono tra loro e risulta evidente che il
ritardo di propagazione da un estremo all’altro di un canale broadcast abbia un ruolo
importante nel determinare le sua prestazioni: maggiore è questo ritardo e maggiore diventa la possibilità che il nodo non si accorga che è già cominciata la trasmissione da parte di
un altro nodo, nonostante la rilevazione della portante.
6.3. COLLEGAMENTI BROADCAST E PROTOCOLLI DI ACCESSO MULTIPLO
101
CSMA/CD
Nell’esempio analizzato per CSMA i nodi non eseguono il rilevamento delle collisioni: B e D
continuano a trasmettere i loro pacchetti anche se si è verificata una collisione.
Questo scenario parte con gli stessi presupposti di quello precedente, ma ora i due nodi terminano
la loro trasmissione poco dopo aver rilevato la collisione. Tale possibilità di rilevare le collisioni
migliora le prestazioni, evitando inutili trasmissioni di interi frame danneggiati da altri frame.
La scheda di rete collegata a un canale broadcast opera nei seguenti modi:
102
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
1. La scheda ottiene direttamente un datagramma dal livello di rete, prepara un frame a
livello di collegamento e lo sistema in un suo buffer.
2. Quando riscontra che il canale è libero, allora inizia la trasmissione del frame. Se il canale
risulta occupato, resta in attesa fino al momento in cui non rileva più il segnale e inizia
l’invio del frame.
3. Durante la trasmissione verifica la presenza di eventuali segnali provenienti da altre schede
di rete sul canale broadcast.
4. La scheda di rete conclude il suo lavoro se trasmette l’intero frame senza rivelare altre
trasmissioni. Altrimenti è costretta a interrompere la trasmissione del frame.
5. Dopo aver annullato la trasmissione, la scheda di rete aspetta per un tempo casuale e poi
ritorna al punto 2.
La necessità di attendere per un intervallo di tempo casuale è dovuta al fatto che: se
l’intervallo fosse uguale per entrambi i nodi, allora continuerebbero a entrare in collisione
per sempre.
⇒ Qual è l’intervallo di tempo opportuno da scegliere per il tempo di attesa casuale (detto
tempo di backoff )?
• Se l’intervallo è grande e il numero di nodi che collidono è piccolo, i nodi probabilmente
aspettano per un lungo intervallo di tempo prima di ripetere il ciclo.
• Se l’intervallo è piccolo e il numero di nodi che collidono è grande, allora è più probabile che
i valori scelti casualmente siano simili e che dunque i nodi trasmettenti tornino a collidere.
La soluzione sarebbe un intervallo di tempo piccolo, quando il numero di nodi in collisione è
piccolo, mentre uno grande quando il numero di nodi è grande.
L’algoritmo di binary exponential backoff risolve questo problema. In dettaglio quando
il trasmettitore riscontra l’n-esima collisione durante la trasmissione di un dato frame, stabilisce
casualmente un valore K nell’insieme {0, 1, 2, . . . , 2n −1}. Quindi più alto è il numero di collisioni
e maggiore è l’intervallo da cui K viene estratto.
⇒ Qual è l’efficienza di CSMA/CD?
Quando un solo nodo ha un frame da inviare può trasmettere alla massima velocità del canale.
Se invece i nodi che vogliono trasmettere sono numerosi, l’effettiva velocità di trasmissione sul
canale risulta inferiore.
Si definisce efficienza di CSMA/CD la frazione di tempo media durante la quale i frame sono trasferiti sul canale senza collisioni in presenza di un alto numero di nodi attivi, con
un’elevata quantità di frame da inviare. Per rappresentare un’approssimazione in forma chiusa
dell’efficienza di Ethernet, si indica con dprop il tempo massimo che occorre al segnale per propagarsi fra una coppia di schede di rete. Dato dtrasm come il tempo necessario per trasmettere
un frame della maggior dimensione possibile, si ricava la semplice approssimazione:
Efficienza =
1
1 + 5 · (dprop /dtrasm )
• Quando dprop tende a 0, l’efficienza tende a 1. Infatti se il ritardo di propagazione è nullo,
i nodi in cui si verifica una collisione interrompono immediatamente la trasmissione senza
sprecare la capacità del canale.
6.4. RETI LOCALMENTE COMMUTATE
103
• Al crescere di dtrasm , l’efficienza tende a 1. Infatti nel momento in cui un frame si appropria
del canale può trattenerlo per un periodo di tempo estremamente lungo. Di conseguenza
il canale svolge lavoro produttivo per la maggior parte del tempo.
6.4
Reti localmente commutate
Questo scenario mostra una rete locale commutata che connette tre dipartimenti, due server
e un router con 4 switch. Questi ultimi operando a livello di collegamento commutano frame
piuttosto che datagrammi a livello di rete, per cui non riconoscono gli indirizzi a livello di rete
e non usano algoritmi di instradamento (RIP e OSPF) per determinare i percorsi attraverso la
rete degli switch di livello 2.
6.4.1
Indirizzi MAC
Gli adattatori dei nodi, quali host e router, ossia le schede di rete, possiedono indirizzi a livello
di collegamento. Un host o un router con più interfacce di rete ha più indirizzi a livello di
collegamento associati a esse. Inoltre gli switch a livello di collegamento non hanno indirizzi
associati alle loro interfacce che connettono host e router, perché il loro compito è trasportare
i datagrammi tra host e router in modo trasparente, ovvero che non serva porre l’indirizzo nei
frame per lo switch.
Gli indirizzi a livello di collegamento sono indicati con varie terminologie: indirizzo fisico,
indirizzo LAN o indirizzo MAC. Per molte LAN (come Ethernet e 802.11), l’indirizzo MAC
104
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
è lungo 6 byte, che consentono di avere 248 possibili indirizzi; generalmente gli indirizzi sono
espressi in notazione esadecimale, scrivendo due cifre esadecimali per ogni byte.
Non possono esistere due schede di rete con lo stesso indirizzo MAC, poiché la IEEE gestisce
questo aspetto in tal modo: quando una società vuole costruire schede di rete compra un blocco
di spazio di indirizzi, costituito da 224 indirizzi, e la IEEE fissa i primi 24 bit dell’indirizzo
lasciando poi alla società il compito di assegnare a ciascuna scheda una specifica combinazione
dei 24 bit rimanenti.
L’indirizzo MAC ha na struttura piatta senza gerarchie e non cambia mai: un calcolatore
con una scheda Ethernet, o interfaccia wireless 802.11, possiede sempre lo stesso indirizzo MAC
indipendentemente dal luogo in cui viene utilizzato. Al contrario gli indirizzi IP hanno una
struttura gerarchica e cambiano quando l’host si sposta, cioè nel momento in cui cambia la rete
alla quale è collegato.
Quando una scheda di rete vuole spedire un frame, inserisce l’indirizzo MAC di destinazione
e lo immette nella LAN. Facendo un esempio si suppone che uno switch faccia broadcast di un
frame in ingresso su tutte le sue interfacce in uscita, di conseguenza ogni scheda controlla se
l’indirizzo MAC di destinazione corrisponde al suo.
• In caso affermativo: la scheda di rete estrae il datagramma dal frame e lo passa verso l’alto
nella pila dei protocolli del nodo cui appartiene.
• In caso negativo: la scheda di rete non fa altro che scartare il frame.
È possibile che una scheda di rete voglia che tutte le schede di rete ricevano e processino
i frame che sta inviando. In questo caso la scheda di rete inserisce uno speciale indirizzo
MAC broadcast nel campo dell’indirzzo di destinazione del frame.
Per le LAN che utilizzano indirizzi a 6 byte, l’indirizzo broadcast è una stringa di 48 bit posti
a 1, cioè FF-FF-FF-FF-FF-FF (in notazione esadecimale).
6.4.2
Protocollo ARP
Poiché esistono sia indirizzi a livello di rete (indirizzi IP) sia indirizzi del livello di collegamento
(indirizzi MAC), si presenta la necessità della loro conversione. Tale compito è affidato al protocollo di risoluzione degli indirizzi (ARP, Address Resolution Protocol ).
Questo esempio mostra che ciascun nodo ha un indirizzo IP e la scheda di ciascun nodo ha un
indirizzo MAC; si assume ancora che lo switch invii in broadcast tutti i frame.
6.4. RETI LOCALMENTE COMMUTATE
105
Si suppone che il nodo con indirizzo IP 222.222.222.220 voglia inviare un datagramma IP al
nodo 222.222.222.222. Per trasmettere un datagramma, il nodo trasmettente deve fornire alla
sua scheda di rete non solo il datagramma IP, ma anche l’indirizzo MAC del nodo destinatario
222.222.222.222. Quando gli vengono passati il datagramma IP e l’indirizzo MAC, la scheda del
nodo trasmittente deve costruire un frame contenente l’indirizzo MAC del nodo di destinazione
e immetterlo nella LAN.
Per riuscire a determinare l’indirizzo MAC è necessario un modulo ARP, il quale nel nodo sorgente
riceve in input un indirizzo IP della stessa LAN e restituisce l’indirizzo MAC corrispondente.
Per molti aspetti il modulo ARP è simile al DNS, con la differenza che il DNS esegue l’operazione per host localizzati in qualunque punto di Internet, mentre ARP risolve soltanto gli
indirizzi IP per i nodi nella sua stessa sottorete.
Funzionamento di ARP
Nella RAM dei nodi è presente una tabella ARP che contiene la corrispondenza tra indirizzi IP
e MAC. In più possiede anche un valore relativo al TTL2 , che indica quando bisogna eliminare
una data voce dalla tabella.
Questa tabella non contiene necessariamente una voce per ciascun nodo della sottorete. Alcuni nodi possono essere stati cancellati perché scaduto il loro TTL, altri possono non essere mai
stati inseriti.
⇒ Cosa accade se la tabella non possiede la voce necessaria in un dato momento?
Il nodo trasmittente costruisce un pacchetto speciale chiamato pacchetto ARP, che possiede
molti campi, compresi quelli per gli indirizzi IP e MAC di chi spedisce e chi riceve; i pacchetti
ARP di richiesta e di risposta hanno lo stesso formato.
Lo scopo di un pacchetto ARP di richiesta è interrogare tutti gli altri nodi della sottorete riguardo
l’indirizzo MAC corrispondente all’indirizzo IP da risolvere.
Quindi la scheda di rete incapsula il pacchetto ARP in un frame, utilizza l’indirizzo broadcast
per la destinazione del frame e lo trasmette nella sottorete. Il frame contenente la richiesta
ARP è ricevuto da tutte le altre schede di rete sulla sottorete e ciascuna di queste trasferisce
il pacchetto al proprio nodo che controlla la corrispondenza dell’indirizzo IP. L’unico nodo (se
esiste) che possiede l’indirizzo corrispondente invia al nodo richiedente un frame di risposta
ARP con la corrispondenza desiderata. Il nodo richiedente aggiorna la sua tabella ARP e invia
il datagramma IP incapsulato in un frame, il cui MAC di destinazione è quello del nodo che ha
risposto alla richiesta.
Il protocollo ARP è plug-and-play, perché la tabella ARP di un nodo si costruisce automaticamente e non deve essere configurata. Inoltre se un nodo viene scollegato dalla sottorete,
prima o poi il suo indirizzo verrà eliminato dalla tabella dei nodi della sottorete.
L’ultima considerazione è che il pacchetto ARP contenendo sia indirizzi del livello di
collegamento sia indirizzi del livello di rete, viene considerato al confine tra questi due
livelli.
6.4.3
Struttura dei frame Ethernet
Si considera l’invio di un datagramma IP da un host a un altro sulla stessa LAN Ethernet.
Sebbene il payload del frame Ethernet sia un datagramma IP, si nota che Ethernet può anche
trasportare altri tipi di pacchetti a livello di rete.
2 In
genere corrisponde a 20 minuti dal momento in cui la voce viene inserita nella tabella ARP.
106
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Per esempio la scheda di rete trasmittente A ha l’indirizzo MAC AA-AA-AA-AA-AA-AA e il
ricevente B ha l’indirizzo MAC BB-BB-BB-BB-BB-BB. La scheda di rete A incapsula il datagramma
IP in un frame Ethernet e lo passa al livello fisico. B ottiene il frame dal livello fisico, estrae il
datagramma IP e lo passa al livello di rete.
Il pacchetto Ethernet presenta 6 campi:
• Campo dati [da 46 a 1500 byte]: contiene il datagramma IP. Dato che l’unità massima di
trasmissione (MTU, Maximum Transfer Unit) per Ethernet è 1500 byte, se il datagramma
IP supera questo valore, allora l’host deve frammentare il datagramma.
Al contrario se la dimensione è minore di 46 byte, allora il campo deve essere riempito
(stuffed ) fino a raggiungere quel dato valore. Successivamente questi byte verranno rimossi
utilizzando il campo lunghezza dell’intestazione del datagramma IP.
• Indirizzo di destinazione [6 byte]: contiene l’indirizzo MAC della scheda di rete di
destinazione. Quando una scheda di rete riceve un pacchetto Ethernet con quell’indirizzo, o
con l’indirizzo MAC di broadcast, allora trasferisce il contenuto del campo dati del pacchetto
al livello di rete. Invece i pacchetti con altri indirizzi MAC vengono scartati.
• Indirizzo sorgente [6 byte]: include l’indirizzo MAC della scheda di rete che trasmette il
pacchetto.
• Tipo [2 byte]: consente a Ethernet di supportare vari protocolli di rete.
• Controllo a ridondanza ciclica [4 byte]: consente alla scheda di rete ricevente di rilevare
la presenza di un errore nei bit del frame.
• Preambolo [8 byte]: i frame Ethernet iniziano con un campo di 8 byte: 7 hanno i bit
10101010, mentre l’ultimo è 10101011.
I primi 7 byte del preambolo servono a sincronizzare i clock delle schede dei riceventi.
Diversamente gli ultimi 2 bit degli 8 byte avvisano la scheda di rete ricevente che stanno
per arrivare i dati.
6.4.4
LAN estese
Le LAN estese consistono in apparati di livello 2 che sostituiscono il cavo di rete. Prendendo
in esempio un grande edificio: non è possibile cablare ogni stanza con un unico cavo, perciò è
bene appoggiarsi a degli apparati che “spezzino” tale architettura.
N
piani
.
.
.
107
6.4. RETI LOCALMENTE COMMUTATE
Da ogni apparato possono partire le connessioni per l’intero piano e anche verso gli altri apparati.
Così facendo se ci dovesse essere un guasto solo il pezzo di rete coinvolto sarebbe escluso, mentre
gli altri continuerebbero a funzionare.
Lo switch fa partire i cavi da sé (tramite le sue porte) verso gli utenti e poi coi un altro cavo
gli switch si connettono tra loro.
Switch
Switch
Switch
Router di
bordo
Switch
A livello di stack protocollare, lo switch dispone solamente dei primi due livelli: livello di collegamento e livello fisico.
Nota bene: lo switch non è un router, perché quest’ultimo ha una visione globale dell’intera
rete Internet, mentre lo switch soltanto della sua sottorete. Lo switch a 2 porte è detto bridge
All’interno lo switch possiede N porte d’ingresso e d’uscita con ognuna il proprio buffer per
gestire i pacchetti. Per indirizzare questi pacchetti è presente una matrice di commutazione che
trasferisce le trame da un ingresso verso un’uscita. Inoltre viene utilizzata una tabella la cui
segna una specifica porta d’uscita per ogni indirizzo MAC.
Matrice di
commutazione
Porte
d'ingresso
.
.
.
.
.
.
Porte
d'uscita
Tabella
MAC
Porta
MAC A
1
MAC B
5
MAC C
5
Terminologia:
• Il dominio di broadcast è quella porzione di rete raggiunta da un messaggio inviato
in broadcast a livello 2. I router rappresentano sempre un confine del dominio di
broadcast a livello 2.
• Il dominio di collisione è la porzione di rete dove se due stazioni trasmettono contemporaneamente si verifica una collisione. In questo caso è lo switch a essere il confine
dei domini di collisione.
108
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
6.5
6.5.1
Reti wireless
Wireless LAN
Per reti 802.11 si intendono le wireless LAN e nel dettaglio si dividono in due architetture:
• Infrastruttura (maggiormente utilizzata): La parte wireless è supportata da un’infrastruttura di rete.
Si dispone di un access point il quale risulta l’interfaccia tra il mondo wireless e il mondo
cablato. La parte gestita dall’access point è chiamata basic service set (BSS).
Successivamente l’access point è collegato a uno switch che a sua volta è collegato a un
router che provvede alla connettività verso Internet.
Internet
BSS
Switch
Router di
bordo
Access
Point
BSS
• Ad hoc (relegata ad ambiti specifici).
Lo standard 802.11 è una famiglia di standard, ovvero composto da più specifiche dove ognuna
ha una lettera diversa, per esempio:
• 802.11a: definisce le frequenze utilizzate e quale sia il formato della parte trasmissiva data
una determinata velocità di trasmissione.
• 802.11g: è analogo al 802.11a, ma con un insieme diverso di frequenze e velocità.
⇒ Quale protocollo si deve utilizzare per l’accesso al mezzo condiviso?
Per le reti cablate va bene il protocollo CSMA-CD, tuttavia questo non limita le collisioni. Si
suppone il caso in cui ci sono tre stazioni che devono trasmettere delle trame: inizialmente la
prima stazione non ha problemi a utilizzare il canale poiché le altre due attendono la conclusione,
ma successivamente queste due inizierebbero a trasmettere contemporaneamente creando una
collisione.
La soluzione per le reti wireless consiste in una variante del CSMA chiamato CSMA/CA
(CSMA Collision Avoidance).
6.5.2
Algoritmo CSMA/CA
Lo scopo del CSMA/CA è quello di evitare la situazione espressa nella Sezione 6.5.1, ossia
cercare di anticipare il più possibile potenziali collisioni e prevenirle (ovviamente non lo si può
fare del tutto). Per definire questo algoritmo è necessario il concetto di time-slot.
109
6.5. RETI WIRELESS
Nelle WLAN il tempo è diviso in time-slot, la cui durata è definita dall’access point. La
dimensione del time-slot è proporzionale (circa) al ritardo di propagazione, in genere più piccolo
del ritardo di propagazione: τ << Ttrama .
Esempio. Nel 802.11b (uno dei primi standard supportato da tutti avente velocità 11 Mb/s)
la durata di un time-slot è circa 10 µs: τ = 10 µs.
Questo time-slot viene chiamato anche inter frame space (IFS). In particolare il time-slot più
piccolo è definito short IFS (SIFS), invece l’intervallo di tempo SIFS + 2 time-slot = DIFS.
SIFS
DIFS
Tornando all’algoritmo CSMA/CA, quando una stazione ha una trama da trasmettere:
• Per prima cosa ascolta il canale:
1. Se il canale è libero, allora continua ad ascoltare il canale per un intervallo pari a DIFS.
Se dopo questo tempo il canale è ancora libero, allora viene trasmessa la trama.
2. Se il canale è occupato fin da subito o durante il DIFS, allora continua ad ascoltare il
canale fino a quando si libera.
3. Quando il canale è libero, lo si ascolta per un intervallo pari a DIFS.
Se il canale torna occupato si torna al punto 2.
4. Se il canale rimane libero per un DIFS, allora la stazione estrae un numero casuale
uniformemente distribuito tra (0, cw − 1) (contention window ).
Questo numero casuale viene indicato con S = # slot che si deve attendere prima di
poter trasmettere.
• Fintanto che il canale rimane libero, la stazione decrementa S: se arriva a 0 allora la
stazione trasmette la trama. Al contrario se il canale torna occupato si salva il valore di S
e si torna al punto 2, ma una volta arrivati al punto 4 si utilizza il valore precedentemente
salvato di S.
• Se dopotutto si dovesse presentare una collisione, allora si interromperebbe la trasmissione,
si estrarrebbe un tempo casuale e tornerebbe al punto 1 (raddoppiando cw).
SA = 6
A
T1
AP
DIFS
B
SB = 10
SB = 3
110
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Trame con riscontro (di livello 2)
Siccome che il mezzo wireless dal punto di vista trasmissivo è molto delicato, allora si può
implementare a livello 2 un riscontro delle singole trame3 .
ACK
A
A
AP
B
DIFS
• La trasmissione dell’access point è diretta solo verso A, ma percepita da entrambe le stazioni
(A e B).
• Dopo che viene percepito l’ultimo bit, il riscontro viene inviato immediatamente dopo SIFS.
Questo riscontro è una piccola trama che avvisa l’access point che la trama spedita è stata
ricevuta correttamente.
• Dal punto di vista di B il canale dopo l’access point si libera, pertanto deve aspettare un
DIFS prima di trasmettere, ma il canale si rioccupa dal riscontro di A.
6.5.3
Problema del terminale nascosto
Il problema del terminale nascosto è specifico solo delle wireless LAN, perché nelle reti
cablate tale fenomeno non avviene. Il motivo di questo problema è dovuto alla propagazione
del segnale: quando due stazioni comunicano tra di loro, la forma d’onda della stazione che sta
trasmettendo all’inizio possiede una determinata ampiezza, ma man mano che si propaga nello
spazio questa ampiezza diminuisce. Ciò è dovuto dal ricevitore dell’altra stazione che è in grado
di raccogliere, rispetto l’intera superficie, solo una piccola frazione del fronte d’onda.
A
B
Ampiezza
Spazio
3 Ciò
non ha nulla a che fare con il riscontro TCP.
111
6.5. RETI WIRELESS
Siccome il ricevitore della stazione B è in grado di cogliere solo una piccola frazione, allora la
potenza che è in grado di rilevare diminuisce con il tempo. Oltre una certa distanza non si
recepisce più il segnale ed è come se la stazione A non stesse trasmettendo.
Range di A
Range di B
AP
B
A
Range di trasmissione
dell'access point
• Il range di trasmissione è lo spazio entro il quale il segnale riesce ad arrivare.
• Il range di trasmissione dell’access point riesce a coprire entrambe le stazioni A e B.
• I range di trasmissione delle stazioni A e B riescono a includere l’access point, ma non
l’altra stazione.
• Se l’access point vuole comunicare con A e B questi riescono a rispondere senza problemi.
⇒ Dato questo scenario, cosa succede con CSMA/CA nel caso in cui A stia trasmettendo e B
generi una trama?
B ascolta il canale e lo percepisce libero. Pertanto aspetta un DIFS e nonostante la trasmissione
di A sia in corso, proprio perché il segnale non arriva, il canale risulta ancora libero. Trascorso
questo tempo B inizia a trasmettere sovrapponendosi a quella in corso di A, così facendo l’access
point percepisce due trasmissioni e si crea una collisione (non percepita da A e B).
Le soluzioni a questo problema sono:
1. Limitare lo spazio di responsabilità di un’access point, ossia installare tali dispositivi
a una distanza limite inferiore a quella del loro range di trasmissione. Così facendo ogni
stazione copre almeno due access point e comunica con quello più vicino a esso.
2. Applicare una variante del protocollo introducendo due messaggi:
• RTS (Request To Send ): è un piccolo messaggio che contiene l’identificativo della
stazione e la dimensione della trama che vuole trasmettere.
• CTS (Clear To Send ): è un messaggio inviato in broadcast dove avvisa tutti i nodi che
è stato assegnato il diritto a una certa stazione di poter trasmettere. In questo modo
si inibiscono le trasmissioni delle altre stazioni per un tempo pari a quello indicato nel
messaggio di CTS.
112
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Tuttavia questa soluzione non è immune da errori: se entrambe le stazioni dovessero inviare
contemporaneamente il messaggio di RTS, allora entrambe le trame andrebbero a collidere
e l’access point non potrebbe rispondere con il CTS. In tal caso non vedendo alcun CTS
entrambe le stazioni attendono un tempo casuale, dopo il quale riprovano a spedire il
messaggio di RTS.
Nota bene: è l’access point a calcolare quanto tempo ci vuole per completare la trasmissione
della stazione e inserisce questa informazione nel CTS.
L’inibizione della trasmissione permette di risparmiare energia: i dispositivi mobili, non
essendo collegati alla rete elettrica, eseguono processi che consumano la batteria, di conseguenza se possono essere “congelati” si riesce a risparmiare quell’energia.
⇒ Se non ci dovesse essere RTS/CTS, sarebbe possibile risparmiare energia?
La risposta è sì, tramite l’ascolto del canale e l’analisi delle trame.
Facendo un passo indietro, in generale, una stazione sta sempre in ascolto (ed è ciò che consuma
la maggior parte dell’energia), mentre la trasmissione risulta incostante nel tempo (consuma
meno). Dunque ogni header contiene la dimensione della trama di trasmissione: se l’indirizzo di
destinazione della trama è diverso dall’indirizzo della stazione X, allora questa stazione spegne
il circuito di ricezione per il tempo necessario alla trasmissione in corso.
Questo meccanismo è definito Network Allocation Vector (NAV). Nel dettaglio è un
vettore che contiene gli intervalli di tempo nei quali è inibito l’ascolto del canale, quindi che è
occupato dalla trasmissione di una stazione.
6.5.4
Framing
I problemi da risolvere del livello di collegamento (data link ) sono:
• Gestione del mezzo condiviso attraverso i vari algoritmi di accesso (vedi Sezione 6.3).
• Delimitazione delle trame, chiamato anche come framing .
Le difficoltà nascono dal momento in cui il livello fisico lavora solamente con i bit, mentre il
livello di collegamento gestisce le trame (frame), ossia bit raggruppati logicamente tra di loro.
Quindi se ci sono due stazioni che comunicano tra di loro, il livello 2 manda al livello 1 i frame
da trasmettere in bit all’altra stazione.
⇒ Però se viene recepita una serie di bit, come si fa distinguere quali appartengono a una
determinata trama anziché un’altra?
Ci sono varie possibili soluzioni:
1. Introdurre intervalli temporali tra una trama e quella successiva.
Tuttavia in questo modo il segnale trasmesso si distorce: se si hanno due onde, trasmesse
a distanza di un piccolo intervallo temporale, possono espandersi andando a sovrapporsi:
si rischia di rendere vano l’intervallo di tempo scelto per distinguerle.
2. Character Count: si introduce nell’header un campo che indica il numero di byte.
Anche in questo caso è presente un problema, cioè se si verifica un errore nel campo del
numero di byte si propaga a cascata.
3. Introdurre un byte di flag abbinato alla tecnica del bit stuffing. Ovvero si aggiunge un byte
specifico (per esempio 01111110) all’inizio e alla fine della trama, così si segnala quando
6.5. RETI WIRELESS
113
iniziare e concludere l’interpretazione dei bit.
Il problema di questa soluzione è che se si verifica almeno un bit errato nei byte specifici,
allora l’interpretazione continua fino a quando non trova correttamente la sequenza specifica.
⇒ Cosa succede se all’interno della sequenza è presente il byte di flag?
Si utilizza la seconda parte di questa tecnica, ovvero il bit stuffing: in trasmissione ogni
volta che si incontra la sequenza 011111 (tendendo in considerazione la sequenza d’esempio
fatta in precedenza), indipendentemente da quello che segue, si aggiunge uno 0; in ricezione
ogni volta che si incontra la sequenza 0111110, indipendentemente da quello che segue, si
rimuove il precedente 0 tornando quindi 011111.
6.5.5
VPN
Esempio. Quando si prova a effettuare l’accesso al server della rete universitaria univr, stando
all’interno della rete di univr, il server permette l’accesso. Se si prova a replicare il medesimo
accesso da una rete domestica, il server di univr non permetterà di accedere.
Usando la VPN (Virtual Private Network ) dalla propria rete domestica, si esegue una richiesta GET al VPN server della rete di univr. Il pacchetto verrà modificato dal server VPN
che modifica l’IP sorgente così da sembrare una richiesta proveniente dalla rete univr.
A questo punto il server a cui è stata fatta la richiesta risponde inviando la risposta al VPN
server, che successivamente spedisce la risposta al PC della rete domestica che ha mandato la
richiesta originaria.
114
CAPITOLO 6. LIVELLO DI COLLEGAMENTO
Parte II
Esercizi
115
Traduzione IP
7.1
Esercizio 1
Testo esercizio. Si deve tradurre in decimale il seguente indirizzo IP: 11100111.11011011.10001011.01101111.
⇒ Svolgimento:
Ogni campo da 8 bit viene convertito in decimale.
• 17 + 16 + 15 + 04 + 03 + 12 + 11 + 10 = 128 + 64 + 32 + 0 + 0 + 4 + 2 + 1 = 231.
2
2
2
2
2
2
2
2
• 17 + 16 + 05 + 14 + 13 + 02 + 11 + 10 = 128 + 64 + 0 + 16 + 8 + 0 + 2 + 1 = 219.
2
2
2
2
2
2
2
2
• 17 + 06 + 05 + 04 + 13 + 02 + 11 + 10 = 128 + 0 + 0 + 0 + 8 + 0 + 2 + 1 = 139.
2
2
2
2
2
2
2
2
• 07 + 16 + 15 + 04 + 13 + 12 + 11 + 10 = 0 + 64 + 32 + 0 + 8 + 4 + 2 + 1 = 111.
2
2
2
2
2
2
2
2
In conclusione:
11100111.11011011.10001011.01101111
↓
231.219.139.111
7.2
Esercizio 2
Testo esercizio. Si deve tradurre in binario il seguente indirizzo IP: 221.34.255.82.
⇒ Svolgimento: Si può procedere secondo due metodi:
1. Sottrazioni successive:
• 221 → 221 - 1·(27 ) = 93 - 1·(26 ) = 29 - 0·(25 ) = 29 - 1·(24 ) = 13 - 1·(23 ) =
= 5 - 1·(22 ) = 1 - 0·(21 ) = 1 - 1·(20 ) = 0.
• 34 → 34 - 0·(27 ) = 34 - 0·(26 ) = 34 - 1·(25 ) = 2 - 0·(24 ) = 2 - 0·(23 ) =
= 2 - 0·(22 ) = 2 - 1·(21 ) = 0 - 0·(20 ) = 0.
• 255 → 255 - 1·(27 ) = 127 - 1·(26 ) = 63 - 1·(25 ) = 31 - 1·(24 ) = 15 - 1·(23 ) =
= 7 - 1·(22 ) = 3 - 1·(21 ) = 1 - 1·(20 ) = 0.
117
118
CAPITOLO 7. TRADUZIONE IP
• 82 → 82 - 0·(27 ) = 82 - 1·(26 ) = 18 - 0·(25 ) = 18 - 1·(24 ) = 2 - 0·(23 ) =
= 2 - 0·(22 ) = 2 - 0·(21 ) = 0 - 0·(20 ) = 0.
In conclusione:
231.219.139.111
↓
11011101.0010010.11111111.01010000
2. Divisione e resto:
221
110
55
27
13
6
3
1
2
2
2
2
2
2
2
1
0
1
1
1
0
1
1
34
17
8
4
2
1
2
2
2
2
2
255
127
63
31
15
7
3
1
0
1
0
0
0
1
0
0
2
2
2
2
2
2
1
1
1
1
1
1
1
1
82
41
20
10
5
2
1
2
2
2
2
2
2
0
1
0
0
1
0
1
0
In conclusione:
231.219.139.111
↓
11011101.0010010.11111111.01010000
Questi due metodi si equivalgono, pertanto non ci sono particolari preferenze per la conversione da decimale a binario.
Indirizzamento
Testo esercizio. Qual è l’indirizzo di rete se si ha il seguente indirizzo IP: 140.120.84.20/20.
⇒ Svolgimento:
1. Tradurre l’indirizzo da notazione decimale puntata a binario puntata e identificare i bit del
prefisso.
140
70
35
17
8
4
2
1
2
2
2
2
2
2
2
0
0
1
1
0
0
0
1
120
60
30
15
7
3
1
2
2
2
2
2
2
84
42
21
10
5
2
1
0
0
0
1
1
1
1
2
2
2
2
2
2
0
0
1
0
1
0
1
20
10
5
2
1
2
2
2
2
0
0
1
0
1
L’indirizzo tradotto risulta: 10001100.01111000.01010100.00010100.
Il /20 specifica che i primi 20 bit sono di prefisso: 10001100.01111000.0101
{z
}0100.00010100.
|
prefisso
2. Il secondo passo è quello di azzerare i bit appartenenti al suffisso:
10001100.01111000.0101 0100.00010100
|
{z
}
suffisso
↓
10001100.01111000.01010000.00000000
3. Si effettua la traduzione da binario a decimale (vedi metodo di traduzione a 1.3.2):
10001100.01111000.01010000.00000000
↓
140.120.80.0/20
119
120
CAPITOLO 8. INDIRIZZAMENTO
Creazione di sottoreti
9.1
Esercizio 1
9.1.1
Parte 1
Testo esercizio. Si dispone di tre LAN collegate nel modo rappresentato in figura. All’insieme
di queste tre reti è stato assegnato un blocco: 165.5.1.0/24. Viene richiesto di creare tre sotto
reti, in maniera tale che abbiano tutte lo stesso numero di host.
LAN 1
LAN 2
LAN 3
⇒ Svolgimento:
1. Si effettua la traduzione da decimale a binario.
165
82
41
20
10
5
2
1
2
2
2
2
2
2
2
0
0
1
0
0
1
0
1
5
2
1
2
2
0
0
1
1
1
0
0
L’indirizzo tradotto risulta: 10100101.00000101.00000001.00000000.
Il /24 specifica che i primi 24 bit sono di prefisso: 10100101.00000101.00000001
|
{z
}.00000000.
prefisso
2. Dato che si devono formare tre sotto reti di uguali dimensioni, la soluzione consiste nel
prendere due bit del suffisso e creare le combinazioni disponibili con 22 , mentre gli ultimi
121
122
CAPITOLO 9. CREAZIONE DI SOTTORETI
bit rimanenti vengono messi tutti a 0:
10100101.00000101.00000001.00000000
↓
10100101.00000101.00000001.00000000
10100101.00000101.00000001.01000000
10100101.00000101.00000001.10000000
10100101.00000101.00000001.11000000
In questo modo il prefisso passa da /24 (256 indirizzi) a /26 (64 indirizzi) bit e si formano
quattro sotto reti:
165.5.1.0/26
165.5.1.64/26
165.5.1.128/26
165.5.1.192/26
Affinché si possa disporre un qualsiasi numero di sotto reti (non coincidente alla potenza del
2) è necessario che non tutte abbiano la stessa grandezza. Per questo esempio delle tre LAN
si dovrebbe dividere la rete a metà prelevando un solo bit dal suffisso, per poi ridividere a
metà una delle due sotto reti appena create.
9.1.2
Parte 2
Testo esercizio. Considerando i dati del precedente esercizio, la LAN 1 ha un numero d’indirizzi
doppio rispetto a LAN 2 e LAN 3.
⇒ Svolgimento:
10100101.00000101.00000001.00000000
{z
}
|
LAN 1
Da un blocco /24 (256 indirizzi) si passa a due blocchi da /25 (128 indirizzi):
LAN 1
}|
{
z
10100101.00000101.00000001.00000000
10100101.00000101.00000001.10000000
|
{z
}
LAN 2
Dalla LAN 2 si ricava la LAN 3, quindi da un blocco /25 (128 indirizzi) si passa a due blocchi
/26 (64 indirizzi):
LAN 2
}|
{
z
10100101.00000101.00000001.10000000
10100101.00000101.00000001.11000000
|
{z
}
LAN 3
123
9.2. ESERCIZIO 2
9.2
Esercizio 2
Testo esercizio. Si considera la seguente rete formata da 5 sottoreti:
LAN 3
LAN 5
LAN 1
LAN 2
LAN 4
Ci sono due indirizzi già assegnati alla rete:
• 101.75.79.255
• 101.75.80.0
Domande:
1. Qual è il blocco rete CIDR più piccolo (con il minor numero di indirizzi) che contiene tali
indirizzi?
2. Dato il blocco CIDR del punto precedente, si creano 5 sottoreti con i seguenti vincoli:
• LAN 1: deve essere una sottorete /21.
• LAN 2: deve ospitare fino a 1000 host.
• LAN 3: deve essere una sottorete /23.
• LAN 4: deve ospitare fino a 400 host.
• LAN 5: deve ospitare metà host rispetto al blocco iniziale.
⇒ Svolgimento punto 1:
Si traduce in binario i due indirizzi forniti:
101.75.79.25510 = 01100101.01001011.01001111.111111112
101.75.80.010 = 01100101.01001011.01010000.000000002
Si considerano i bit in comune che rappresentano la rete:
01100101.01001011.01000000.00000000
Il blocco CIDR più piccolo è: 101.75.64.0/19.
124
CAPITOLO 9. CREAZIONE DI SOTTORETI
⇒ Svolgimento punto 2:
Conoscendo il blocco CIDR, si ricavano le seguenti informazioni:
• Il numero degli host iniziale è: 232−19 = 213 .
• Il numero di bit per gli host della LAN 2 è: 210 = 1024 > 1000, 32 − 10 = /22.
• Il numero di bit per gli host della LAN 4 è: 29 = 512 > 400, 32 − 9 = /23.
• Il numero di indirizzi della LAN 5 è: 213 /2 = 212 , 32 − 12 = /20.
Ecco che si ricavano tutte le cinque LAN:
LAN 5
LAN 2
101.75.64.0 / 20
101.75.88.0 / 22
LAN 3
101.75.92.0 / 23
101.75.92.0 / 22
LAN 4
101.75.94.0 / 23
101.75.64.0 / 19
101.75.88.0 / 21
101.75.80.0 / 20
9.3
LAN 1
101.75.80.0 / 21
Esercizio 3
Testo esercizio. Viene fornita la seguente situazione:
LAN 1
LAN 2
INTERNET
LAN 3
In cui:
• LAN 1 possiede fino 300 host.
• LAN 2 possiede fino 40 host.
• LAN 3 possiede fino 90 host.
• L’indirizzo di broadcast della LAN 3 è 148.12.79.255.
125
9.4. ESERCIZIO 4
Domande:
1. Qual è blocco CIDR più piccolo da assegnare all’intera rete?
2. Quali sono gli indirizzi di rete e di broadcast delle tre LAN partendo dal blocco trovato nel
punto precedente?
⇒ Svolgimento punto 1:
si calcolano gli indirizzi delle LAN:
• LAN 1 → 300 host < 512 = 29 , 232−9 = 223 .
• LAN 2 → 40 host < 64 = 26 , 232−6 = 226 .
• LAN 3 → 90 host < 128 = 27 , 232−7 = 225 .
512 < 512 + 64 + 128 < 1024 = 210
Quindi il blocco CIDR più piccolo corrisponde a 232−10 = 222 e si prende come riferimento
l’indirizzo broadcast:
148.12.79.255
10010100.00001100.01001111.11111111
↓
10010100.00001100.01001100.00000000
148.12.76.0/22
⇒ Svolgimento punto 2:
si ricavano gli indirizzi di rete e di broadcast delle LAN:
• LAN 1: 10010100.00001100.0100110 | 0.00000000 →
23
• LAN 2: 10010100.00001100.01001110. | 00000000 →
24
• LAN 3: 10010100.00001100.01001111. | 00000000 →
24
9.4
Esercizio 4
Testo esercizio. Sono presenti 4 LAN:
• LAN 1 → 130 host (contiene l’indirizzo 46.144.141.41);
• LAN 2 → 270 host;
• LAN 3 → 65 host;
• LAN 4 → 35 host;
148.12.76.0/23
148.12.76.255
148.12.78.0/24
148.12.78.255
148.12.79.0/24
148.12.79.255
126
CAPITOLO 9. CREAZIONE DI SOTTORETI
Domande:
1. Qual è il blocco CIDR totale?
2. Quali sono gli indirizzi di rete e broadcast delle 4 LAN?
⇒ Svolgimento punto 1:
Si trovano le corrispondenze di ogni LAN al numero massimo di host:
• LAN 1: 130 → 256;
• LAN 2: 270 → 512;
• LAN 3: 65 → 128;
• LAN 4: 35 → 64;
256 + 512 + 128 + 64 = 960 → 1024 = 210
Il blocco CIDR totale corrisponde a:
32 − 10 = 22 → 46.144.140.0/22
⇒ Svolgimento punto 2:
Si traduce l’indirizzo in binario:
46.144.140.0/22 → 00101110.10010000.10001100.00000000
Si ricavano gli indirizzi di rete e broadcast:
• LAN 2: 00101110.10010000.1000111|0.00000000 →
46.144.142.0/23
46.144.143.255 (broadcast)
• LAN 1: 00101110.10010000.10001101|.00000000 →
46.144.141.0/24
46.144.141.255 (broadcast)
• LAN 3: 00101110.10010000.10001100.0|0000000 →
46.144.140.0/25
46.144.140.127 (broadcast)
• LAN 4: 00101110.10010000.10001100.11|000000 →
46.144.140.128/26
46.144.140.191 (broadcast)
È necessario fornire prima gli indirizzi a LAN 2 e LAN 1 per una questione di host minimi
che devono contenere (valori espressi nel testo dell’esercizio).
9.5
Esercizio 5
Testo esercizio. Sono presenti 3 LAN:
• LAN 1 → 400 host (contiene l’indirizzo 178.242.85.168);
• LAN 2 → 300 host;
127
9.5. ESERCIZIO 5
• LAN 3 → 1200 host;
Domande:
1. Qual è il blocco CIDR più piccolo da assegnare all’intera rete?
2. Quali sono gli indirizzi di rete delle 3 LAN?
⇒ Svolgimento punto 1:
Si trovano le corrispondenze di ogni LAN al numero massimo di host:
• LAN 1: 400 → 512;
• LAN 2: 300 → 512;
• LAN 3: 1200 → 2048;
512 + 512 + 2048 = 3072 < 4096 = 212
Il blocco CIDR totale corrisponde a:
32 − 12 = 20 → 178.242.80.0/20
quindi vengono considerati solo i primi 20 bit dell’indirizzo dato 178.242.85.168.
⇒ Svolgimento punto 2:
Si traduce l’indirizzo CIDR in binario:
178.242.80.0/20 → 10110010.11110010.01010000.00000000/20
Si ricavano gli indirizzi di rete:
• LAN 3: 10110010.11110010.01011|000.00000000 → 178.242.88.0/21
• LAN 1: 10110010.11110010.0101010|0.00000000 → 178.242.84.0./23
• LAN 2: 10110010.11110010.0101011|0.00000000 → 178.242.86.0/23
128
CAPITOLO 9. CREAZIONE DI SOTTORETI
TCP
10.1
Esercizio 1
Testo esercizio. Un’applicazione A deve trasferire verso un’applicazione B 96000 byte. Si
suppone che la connessione sia già stata instradata.
• MSS = 1000 byte;
• RCVWND = 32000 byte (costante);
i;
• SSTHRESHi = RCVWND
2
• RTT = 0.5 secondi (costante);
• RTO = 2 · RTT (raddoppia in caso di perdite sequenziali);
3 → 3.5
;
7 → 7.5
• La rete va fuori uso negli intervalli aperti
⇒ Soluzione:
• Il numero di segmenti da trasmettere è: 96000/1000 = 96 segmenti.
• RCVWND corrisponde a: 32000/1000 = 32 segmenti.
• SSTHRESHi corrisponde a: 16 segmenti.
18
CWND
16
17
SSTHRESH
16
Bisogna
12
8
SSTHRESH
9
8
1
9
11
trasmetterne
solo 2
8
4
4
10
4
5
5
2
2
2
1
1
2
3
3.5
6
6.33333
(finale)
4
1
4
5
RTO
6
7
7.5
RTO
129
8
9
10
t
130
CAPITOLO 10. TCP
+ 1 + 2 + 4 + 8 + 9 + 10 +
I segmenti trasmessi sono: 1 + 2 + 4 + 8 + 16 + 17 + 18
(48)
(82)
+ 1 + 2 + 4 + 5 + 2
11
(96)
A
B
16
t=2
t = 2.5
17
t=3
RTO
x 18
DOWN DI RETE
t = 3.5
t=9
4
t = 9.5
5
t = 10
CWNDfinale = CWNDvecchio +
=6+
10.2
2
#ack
CWNDvecchio
tfinale = 10.5
19
2
=
= 6.3
6
3
Esercizio 2
Testo esercizio. Si devono trasmettere 31 segmenti, conoscendo:
• RCVWNDi = 16 segmenti;
• SSTHRESHi = 8 segmenti;
⇒ Soluzione:
CWND
16
RCVWND
12
SSTHRESH
8
8
4
4
1
2
1
1
1.5
2
RTO
1
3
3.5
4
2 RTO
2
3
4
5
6
4
3
4.75
(finale)
2
1
5
6
7
7.5
8
9
10
t
RTO
I segmenti trasmessi sono: 1 + 2 + 4 + 8
+1
+ 2 + 3 + 4 + 5 +8
+ 1 + 2 + 3 + 34 = 31.
131
10.3. ESERCIZIO 3
10.3
Esercizio 3
Testo esercizio. Un’applicazione A deve trasferire verso un’applicazione B 104000 byte. Si
suppone che la connessione sia già stata instradata.
• MSS = 1200 byte;
• RCVWNDi = 2400 byte;
• SSTHRESHi = RCVWNDi ;
• RTT = 0.5 secondi (costanti);
• RTO = 2RTT, raddoppia per ritrasmissione;
• La rete va fuori uso negli intervalli aperti
3.5 → 4
6.5 → 10.5
⇒ Soluzione:
CWND
20
20 20 20
RCVWND
SSTHRESH
16
16
10
8
8
8
4
4
2
1
1
1
2
3
4
CWND = 2
2
1
5
6
7
8
9
10
11
12
13
14
t
+ 1 + 2 + 4 + 8 + 1
Si trasmettono: 1 + 2 + 4 + 8 + 16 + 20 + 20 + 16
+ 1
+ 1
+ 1
(71) 20
(86)10
Pacchetti da
trasmettere
10.4
=
104000
= 87
1200
CWNDi =
24000
= 20
1200
Esercizio 4
Testo esercizio. Un’applicazione A deve trasferire 104400 byte verso B (87 segmenti).
• MSS = 1200 byte;
• RCVWNDi = 9600 byte;
• A partire dal tempo tA > 4.0 la destinazione annuncia RCVWND = 14400 byte (12
segmenti);
• A partire dal tempo tB > 9.0 la destinazione annuncia RCVWND = 7200 byte (6 segmenti);
• SSTHRESHi = RCVWNDi ;
132
CAPITOLO 10. TCP
• CWNDt=0 = 1;
• RTT = 1 secondo (costante);
• La rete va fuori uso nell’intervallo aperto 11.5 → 12.5;
⇒ Soluzione:
CWND
12
12
10
10
9
8
RCVWND
8
12
11
8
SSTHRESH
6
6
6
4
4
CWND = 3.3333
2
2
2
1
3
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
t
Si trasmettono: 1 + 2 + 4 + 8 + 8 + 9 + 10 + 11 + 12 + 12 + 6 + 4
6 + 1 + 2 + 1
3
(83)
A
B
8
t=3
t=4
8
RCVWND = 12
ACK
t=5
t=8
12
t=9
12
t = 10
6
t = 11
4
t = 11.5
DOWN DELLA RETE
t = 12.5
t = 13
RCVWND = 6
133
10.5. ESERCIZIO 5
10.5
Esercizio 5
Testo esercizio. Un’applicazione A deve trasferire 73200 byte verso B (61 segmenti).
• MSS = 1200 byte;
t=0
• RCVWND t > 5
t > 10
19200byte
24000byte
19200byte
16 segmenti
20 segmenti
16 segmenti
• SSTHRESHi = RCVWNDi ;
• RTT = 1 secondo;
• La rete va fuori uso negli intervalli 5.5 → 8 e 18.5 → 19.5;
⇒ Soluzione:
CWND
20
18
16
16
RCVWND
16
SSTHRESH
14
12
10
8
8
8
7
6
6
5
4
4
4
3
2
2
3 CWND = 3
2
2
1
1
1
2
3
4
5
6
7
8
9
10
1
11
12
13
14
15
16
17
18
19
20
21
22
t
+ 1 + 1 + 2 + 3 + 4 + 6 + 7 + 8 + 1 + 1
Si trasmettono: 1 + 2 + 4 + 8 + 16 + 16
(59)
A
B
t=4
RCVWND = 20
t=5
t = 5.5
t=6
DOWN DELLA RETE
t=7
RTO = 4
t=8
RCVWND = 10
t = 11
t = 12
(61)
134
CAPITOLO 10. TCP
10.6
Esercizio 6
Testo esercizio. Un’applicazione A deve trasferire 77500 byte verso B.
• MSS = 1250 byte;
t = 0 10000byte
• RCVWND t > 4 17500byte
t > 8 12600byte
• SSTHRESHi = RCVWNDi ;
• RTT = 1 secondo;
• La rete va fuori uso negli intervalli 8 → 10 e 13.5 → 14.5;
⇒ Soluzione:
CWND
14
12
12
11
10
10
9
8
RCVWND
8
8
SSTHRESH
6
6
4
4
4
3 CWND = 3
2
2
2
2
1
1
1
2
3
4
5
6
7
8
9
1
10
11
12
13
14
15
16
17
18
Si trasmettono: 1 + 2 + 4 + 8 + 8 + 9 + 10 + 11 + 1 + 2 + 4 + 8 + 1 + 1
(53)
A
B
t=7
t=8
RCVWND = 10
RTO = 2
DOWN DELLA RETE
t = 10
t = 11
RCVWND = 10
t = 12
t = 13
t = 13.5
DOWN DELLA RETE
t = 15
t
Collegamento
11.1
Esercizio 1
Testo esercizio. Sono presenti 3 stazioni: A, B e C.
• Protocollo: ALOHA;
• Velocità di trasmissione: 2.5 Mb/s;
• Lunghezza delle trame trasmesse: 3750 byte;
• Tempo di trama:
L
V
=
3750·8
2.5·106
· 1000 = 12 ms;
• Tempi delle stazioni:
– tA : 410 ms;
– tB : 418 ms;
– tC : 454 ms;
⇒ Soluzione:
410
A
422
451
A
418
B
439
A
430
455
B
467
B
454
C
507
B
466
C
491
503
C
Ricalcolo:
• ZA = (4 + 1 + 0) · 1 + 12 = 17 ms → 422 + 17 = 439 ms;
• ZB = (4 + 1 + 8) · 1 + 12 = 25 ms → 430 + 25 = 455 ms;
• ZC = (4 + 5 + 4) · 1 + 12 = 25 ms → 466 + 25 = 491 ms;
• ZB = (4 + 5 + 5) · 1 + 12 = 40 ms → 467 + 40 = 507 ms;
135
519
136
CAPITOLO 11. COLLEGAMENTO
11.2
Esercizio 2
Testo esercizio. Sono presenti 2 stazioni: A e B.
• Protocollo: CSMA persistent;
• Velocità di trasmissione: 2.5 Mb/s;
• Lunghezza delle trame trasmesse: 3750 byte;
• Ritardo di propagazione: τ = 2 ms;
• Tempo di trama:
L
V
=
3750·8
2.5·106
· 1000 = 12 ms;
• Tempi delle stazioni:
– tA : 225 ms, 240 ms;
– tB : 228 ms;
⇒ Soluzione:
225
A
237 240
A1
228
B
252
A2
239
253
251
270
282
A2
286
228
296
B1
227
298
B
239
254
272
284
Ricalcolo:
• ZA = (2 + 4 + 0) · 1 + 12 = 18 ms → 252 + 18 = 270 ms;
• ZB = (2 + 3 + 9) · 1 + 12 = 26 ms → 251 + 26 = 277 ms;
11.3
Esercizio 3
Testo esercizio. Sono presenti 3 stazioni: A, B e C; con bridge.
A
BRIDGE
Segmento 1
• Protocollo: ALOHA;
• Velocità di trasmissione: 1.6 Mb/s;
• Lunghezza delle trame trasmesse: 800 byte;
• Tempo di trama:
L
V
=
800·8
1.6·106
· 1000 = 4 ms;
B
Segmento 2
C
137
11.4. ESERCIZIO 4
• Tempi delle stazioni:
– tA : 216 ms, 256 ms (tutte dirette a B);
– tB : 233 ms (diretta ad A);
– tC : 219 ms (diretta ad A);
⇒ Soluzione:
216
A
220
256
A1
C1
243
BRIDGE
224
232
A1
277
236
233
B1
257
254
271
258
237
249
223
253
243
C1
Ricalcolo:
• ZBr2 = (2 + 2 + 0) · 1 + 4 = 8 ms → 224 + 8 = 232 ms;
• ZC = (2 + 1 + 9) · 1 + 4 = 16 ms → 223 + 16 = 239 ms;
• ZBr2 = (2 + 3 + 2) · 2 + 4 = 18 ms → 236 + 18 = 254 ms;
• ZB = (2 + 3 + 3) · 1 + 4 = 12 ms → 237 + 12 = 249 ms;
• ZBr1 = (2 + 5 + 3) · 1 + 4 = 14 ms → 257 + 14 = 271 ms;
• ZA = (2 + 5 + 6) · 1 + 4 = 17 ms → 260 + 17 = 277 ms;
11.4
Esercizio 4
Testo esercizio. Sono presenti 2 stazioni: A e B; con bridge.
A
BRIDGE
Segmento 1
• Protocollo: CSMA persistent;
• Velocità di trasmissione: 1.5 Mb/s;
B
Segmento 2
285
A2
B1
239
C1
275
281
A1
B1
219
253
281
A2
B1
247
A1
B
C
260
A2
138
CAPITOLO 11. COLLEGAMENTO
• Lunghezza delle trame trasmesse: 1500 byte;
• Ritardo di propagazione: τ1 = 1 ms, τ2 = 2 ms;
• Tempo di trama:
L
V
1500·8
1.5·106
=
· 1000 = 8 ms;
• Tempi delle stazioni:
– tA : 713 ms, 715 ms (tutte dirette a B);
– tB : 719 ms, 730 ms (tutte diretta ad A);
⇒ Soluzione:
715
713
721
A1
A
729
A2
731
739
768
775
738
714
BRIDGE
722
774
B1
730
B2
763
721
729
737
740
758
766
A1
774
A1
782
A1
732
B
B1
719
B2
727 730
B2
738 739
756
764
Ricalcolo:
• ZBr2 = (7 + 2 + 9) · 1 + 8 = 26 ms → 737 + 26 = 763 ms;
• ZB = (7 + 3 + 0) · 1 + 8 = 18 ms → 738 + 18 = 756 ms;
768
776
784
Download