Sei sulla pagina 1di 194

RETI DI

ELABORATORI

1
PREMESSA
Questi riassunti sono basati sul libro “Reti di calcolatori e internet - Un approccio top-down” 4° edizione
italiana.
Gli appunti sono un’ interpretazione personale dei contenuti del libro, vi prego quindi di leggerli in modo critico
e magari segnalare eventuali errori.
Purtroppo i capitoli con la dicitura “da studiare”, non sono ancora stati riassunti.
Chiunque voglia contribuire al perfezionamento di questi appunti è il benvenuto, inviatemi pure una richiesta
:-) . Sono comunque attivi i commenti.

PS : questa versione è ancora in beta : potreste incappare in pessimi e imbarazzanti errori ortografici :-) (che
non ho ancora avuto modo di correggere). Scherzi a parte, non è una versione definitiva e contiene degli
errori, ma ho deciso comunque di metterla online con la speranza che possa essere d'aiuto a qualche altro
studente.

Source: Riassunto_Reti_di_elaboratori

2
CAPITOLO 1 - INTERNET E RETI DI CALCOLATORI
1.1 Che cos’è internet
1.1.1 Gli ingranaggi di internet
1.1.2 Descrizione dei servizi
1.1.3 Cos’è un protocollo
Un analogia
Protocolli di rete
1.2 Ai confini della rete
1.2.1 Programmi client e server
1.2.2 Le reti di accesso
Accesso residenziale
Modem dial-up
DSL (digital subscriber line)
HFC (hybrid fiber-coaxial cable)
Accesso aziendale
Accesso senza fili
1.2.3 Mezzi Trasmissivi
Doppino intrecciato
Cavo coassiale
Fibra ottica
Canali radio terrestri
Canali radio satellitari
1.3 Il nucleo della rete
1.3.1 Commutazione di circuito e commutazione di pacchetto
Commutazione di circuito
Multiplexing nelle reti a commutazione di circuito
Commutazione di pacchetto
Confronto tra commutazione di pacchetto e commutazione di circuito : multiplexing statico (da
studiare)
1.3.2 Come i pacchetti trovano il cammino in una reta a commutazione di pacchetto.
1.3.3 ISP e dorsali Internet
1.4 Ritardi, perdite e throughput nelle reti a commutazione di pacchetto
1.4.1 Panoramica sul ritardo nelle reti a commutazione di pacchetto
Confronto dei ritardi di trasmissione e di propagazione
1.4.2 Ritardo di accodamento e perdita pacchetti
Perdita di pacchetti
1.4.3 Ritardo end-to-end
1.4.4 Throughput nelle reti di calcolatori
Esempio 1.15
Esempio 1.16
1.5 Livelli di protocollo e loro modelli di servizio
1.5.1 Architettura a livelli
Stratificazione di protocolli
Livello di applicazione (application layer)
Livello di trasporto (transport layer)
Livello di rete (network layer)
Livello di collegamento (link layer)
Livello Fisico (physical layer)
3
1.5.2 Livelli, messaggi,segmenti, datagrammi e frame
CAPITOLO 2 - LIVELLO DI APPLICAZIONE
2.1 I principi delle applicazioni di rete
2.1.1 Architecture delle applicazioni di rete
2.1.2 Processi comunicanti
Processi client e server
L’inserfaccia tra il processo e l’applicaziond di rete
2.1.3 I servizi di trasporto disponibili per le applicazioni
2.1.4 Servizi di trasporto offerti da internet
Servizi di TCP
Servizi di UDP
Indirizzamento
2.1.5 Protocolli a livello di applicazione
2.2 Web e HTTP
2.2.1 Panoramica HTTP
2.2.2 Connessioni persistenti e non persistenti
2.2.3 Formato dei messaggi HTTP
Messaggio di richiesta HTTP
Messaggio di risposta HTTP
2.2.4 Interazioni utente-server : cookie
2.2.5 Caching web
2.2.6 Get condizionale
2.3 Trasferimento di file: FTP
2.3.1 Comandi e risposte FTP
2.4 Posta elettronica
2.4.1 SMTP
2.4.3 Formati dei messaggi di poste e MIME
Estenzioni MIME per dati non ASCII
2.4.4 Protocolli di accesso alla posta
POP3
IMAP
2.5 DNS: il servizio di directory di Internet
2.5.2 Panoramica su DNS
Ricerca di un DNS
Caching DNS
2.5.3 Record e messaggi DNS
Messaggi DNS
Inserire record nel database DNS
2.6 Applicazioni peer-to-peer
2.6.1 Distribuzione di file P2P
BitTorrent
2.7 Programmazione delle socket con TCP (da studiare)
2.8 Programmazione delle socket con UDP (da studiare)
CAPITOLO 3 - LIVELLO DI TRASPORTO
3.1 Introduzione e servizi a livello di trasporto
3.1.1 Relazione tra i livelli di trasporto e di rete
3.1.2 Panoramica sul livello di trasporto in Internet
3.2 Multiplexing e demultiplexing
4
Multiplexing e demultipmexinng senza connessione (UDP)
Multiplexing e demultiplexing orientato alla connesione (TCP)
Server web e TCP (da studiare)
3.3 Trasporto senza connessione : UDP
3.3.1 Struttura deu segmenti UDP
3.3.2 Checksum UDP
3.4 Principi del trasferimento dati affidabile
3.4.1 Costruzione di un protocolli di trasferimento affidabile
Trasferimento dati affidabile su un canale perfettamente affidabile: rdt 1.0
Trasferimento dati affidabile con errori sui bit : rdt 2.0
Trasferimento dati affidabile con errori sui bit : rdt 2.1
Trasferimento dati affidabile con errori sui bit : rdt 2.2 (da studiare)
Trasferimento dati affidabile su un canale con perdite ed errori sui bit : rdt 3.0
Riepilogo protocollo rdt
3.4.2 Protocolli per il trasferimento dati affidabile con pipeline
3.4.3 Go-Back-N
Lato Mittente
Lato Destinatario
Come opera GBN
3.4.4 Ripetizione Selettiva
Lato Mittente
Lato Destinatario
Come opera SR
3.5 Trasporto orientato alla connessione : TCP
3.5.1 Connessione TCP
3.5.2 Struttura segmenti TCP
Numeri di sequenza e numeri di riscontro
Telnet : un caso esemplare di numeri di sequenza e di riscontro (da studiare)
3.5.3 Stima del tempo di andata e ritorno e timeout (da studiare)
Stima del tempo di andata e ritorno (da studiare)
Intervallo di timeout di ritrasmissione (da studiare)
3.5.4 Trasferimento dati affidabile
Alcuni scenari interessanti
Esempio 1
Esempio 2
Esempio 3
Raddoppio dell’intervallo di timeout
Ritrasmissione Rapida
Go-Back-N o ripetizione selettiva (SR) ?
3.5.5 Controllo di flusso
3.5.6 Gestione della connessione TCP
Apertura di una connessione
Chiusura di una connessione
Stati di una connessione
3.6 Principi del controllo di congestione
3.6.1 Cause e costi della confestione
Scenario 1 : due mittenti e un router con buffer illimitati
Scenario 2 : due mittenti e un router con buffer finiti (da studiare)
5
Scenario 3 : quattro mittenti, router con buffer finiti e percorsi multihop (da studiare)
3.6.2 Approcci al controllo di congestione
3.6.3 Un esempio: il controllo di congestione ATM ABR
3.7 Controllo di congestione TCP
Algoritmo di controllo della congestione TCP
Incremento additivo e decremento moltiplicativo (AIMD)
Partenza lenta (slow start)
Reazione agli eventi timeout
Descrizione macrospocipa del throughput TCP (da studiare)
3.7.1 Equità (da studiare)
Equità e UDP
Equità e connessioni TCP in parallelo
CAPITOLO 4 - LIVELLO DI RETE
4.1 Introduzione
4.1.1 Inoltro e instradamento
Instaurazione della connessione
4.1.2 Modelli dei servizi di rete
4.2 Reti a circuito virtuale e a datagramma
4.2.1 Reti a circuito virtuale
4.2.2 Reti a datagramma
4.2.3 Origini delle reti a circuito virtuale e a datagramma (da studiare)
4.3 Cosa si trova all’ interno di un router (da studiare)
4.4 Protocollo Internet (IP): inoltro e indirizzamento di Internet
4.4.1 Formato datagrammi
Frammentazione dei datagrammi IP
4.4.2 Indirizzamento IPv4
Come ottenere un blocco di indirizzi (da studiare)
Come ottenere l’indirizzo di un host : DHCP
Traduzione degli indirizzi di rete
UPnP
4.4.3 Internet Control Message Protocol (ICMP)
4.4.4 IPv6
Formato dei datagrammi IPv6
Passaggio da IPv4 a IPv6
4.5 Algoritmi d’instradamento
4.5.1 Algoritmi d’instradamento a stato del collegamento (LS)
4.5.2 Algoritmo d’instradamento con vettore distanza (DV) (da studiare)
Algoritmo con vettore distanza (da studiare)
Algoritmo con vettore distanza: modifica dei costi e gusti dei collegamenti (da studiare)
Algoritmo con vettore distanza: aggiunte dell’inversione avvelenata (da studiare)
Confronto tra gli algoritmi LS e DV (da studiare)
Altri algoritmi d’instradamento (da studiare)
4.5.3 Instradamento gerarchico
Tabelle di inoltro dei router in un AS
Conclusioni
4.6 Instradamento in Internet
4.6.1 Instradamento interno al sistema internet (si parla di RIP)
Il protocolli d’intradamento RIP ha queste caratteristiche :
6
4.6.2 Instradamento nei sistemi autonomi in internet (si parla di OSPF)
4.6.3 Instradamento tra sistemi automi (si parla di BGP)
Fondamenti di BGP
Attributi del percorso e rotte BGP
Selezione dei percorsi BGP
Politiche d’instradamento (Da studiare)
4.7 Instradamento broadcast e multicast (Da studiare)
4.7.1 Algoritmi d’instradamento broadcast (Da studiare)
Flooding incontrollato (Da studiare)
Flooding controlllato (Da studiare)
Broadcast con spanning tree (Da studiare)
Algoritmi di broadcast (Da studiare)
4.7.2 Multicast (Da studiare)
Internet Group Management Protocol (Da studiare)
Algoritmi d’instradamento multicast (Da studiare)
Instradamento multicast in internet (Da studiare)
CAPITOLO 5 - LIVELLO DI COLLEGAMENTO E RETI LOCALI
5.1 Livello di collegamento : introduzione e servizi
5.1.1 Servizi offerti a livello di collegamento
5.1.2 Dove è implementato il livello di collegamento ?
5.2 Tecniche di rilevazione e correzione degli errori (da studiare X)
5.3 Protocolli di accesso multiplo
5.3.1 Protocolli a suddivisione di canale
5.3.2 Protocolli ad accesso casuale
Slotted ALOHA
ALOHA
CSMA: accesso multiplo
Protocolli a rotazione (Taking turning protocol)
5.3.4 Reti locali (NO da studiare)
5.4 Indirizzi a livello di collegamento
5.4.1 Indirizzi MAC
5.4.2 Protocollo per la risoluzione degli indirizzi (ARP)
Come inviare un datagramma a un nodo esterno alla sottorete
5.5 Ethernet
5.5.1 Struttura dei pacchetti Ethernet (da studiare)
5.5.2 CSMA/CD: protocollo di accesso multiplo di Ethernet (da studiare)
Efficienza di Ethernet (da studiare)
5.6 Switch a livello di collegamento*
5.6.1 Switch : inoltro e filtraggio*
5.6.2 Autoapprendimento*
5.6.3 Proprietà della commutazione a livello di collegamento*
Switch e router a confronto*
5.7 PPP: protocollo punto-punto (da studiare)
5.5 - 5.6 - 5.7 nuovo libro (da studiare)
CAPITOLO 6 - WIRELESS E RETI MOBILI
6.1 Introduzione
6.2 Collegamenti wireless e caratteristiche di rete
6.2.1 CDMA (da studiare importante)
7
6.3 Wi-Fi 802.11 wireless LAN
6.3.1 Architettura 802.11
Canali e asssociazioni
6.3.2 Protocollo MAC 802.11
CSMA/CA
Schema di conferma di avvenuta ricezione
Terminali nascosti : RTS e CTS
6.3.3 Pacchetto IEEE 802.11
*
Payload e CRC
Indirizzo
Numero di sequenza, durata e controllo del pacchetto
CAPITOLO 8 - LA SICUREZZA NELLE RETI
8.1 Sicurezza di rete
8.2 Principi di crittografia
8.2.1 Crittografia a chiave simmetrica
Cifrari a blocchi
8.2.2 Crittografia a chiave pubblica
Algoritmo RSA
Chiavi di sessione
8.3 Integrità dei messaggi
8.3.1 Funzioni hash crittografiche
8.3.2 Codice di autenticazione dei messaggi
8.3.3 Firme digitali
Certificazione della chiave pubblica (da studiare)
8.4 Autenticazione end-to-end
8.4.1 Protocollo di autenticazione ap1.0
8.4.2 Protocollo di autenticazione ap2.0
8.4.3 Protocollo di autenticazione ap3.0
8.4.4 Protocollo di autenticazione ap3.1
8.4.5 Protocollo di autenticazione ap4.0
8.4.6 Protocollo di autenticazione ap5.0
8.5 Rendere sicura la posta elettronica
8.5.1 Email sicura
8.5.2 PGP (Pretty Good Privacy)
8.6 Rendere sicure le connesssioni TCP : SSL
8.6.1 Quadro generale (SLL semplificato)
Handshake
Derivazione delle chiavi
Trasferimento dati
Record SSL
8.6.2 Un Quadro più completo
Handshake SSL
Chiusura della connessione
8.7 Sicurezza a livello di rete : IPsec e VPN(preso da 6 ed.)
8.7.1 IPsec e VPN
8.7.2 I protocolli AH e ESP
8.7.3 Security Association (SA)
8
8.7.3 IPsec datagram
8.7.5 IKE: Key Management in IPsec (da studiare)
8.8 Sicurezza nelle wireless LAN (da studiare)
8.9 Sicurezza operativa : firewall e sistemi di rilevamente delle intruzioni (da studiare)

9
CAPITOLO 1 - INTERNET E RETI DI CALCOLATORI
1.1 Che cos’è internet
1.1.1 Gli ingranaggi di internet

Internet è una rete di dispositivi detti host o end system connessi tra di loro tramite communication link e
packet switch ( router e link-layer switch), che possono essere di vario tipo come cavi coassiali, fibre ottiche
etc . La frequenza di trasmissione viene misurata in bit/secondo.
Quando un host vuole inviare dei dati ad un altro host, segmenta i dati e aggiunge un'intestazione a ciascun
segmento, creando così un pacchetto che viene inviato attraverso la rete all'host di destinazione.
Il pacchetto per arrivare a destinazione passa attraverso diversi packet switch. La sequenza di collegamenti e
packet switch viene chiamata percorso (route o path).
Può essere fatta una similitudine con le reti autostradali, dove i pacchetti sono simili ai camion, i
communication link alle autostrade e i packet switch agli incroci.

Gli host accedono ad internet usando gli ISP (Internet Service Provider) che possono essere di tipo:
■ Residenziale (Compagnie telefoniche es : tiscali)
■ Aziendali
■ Distrettuali
■ Mobili (connessione senza fili 3g)
■ Fornitori contenuti, utilizzati dai fornitori di contenuti per pubblicare il proprio portale sul web

Gli ISP di basso livello ( es: distrettuali ) sono connessi con gli ISP di più alto livello (es : regionali -> nazionali
-> internazionali ) per raggiungere il livello più alto ed “uscire” su internet.

Tutte le componenti di internet fanno uso di protocolli per standardizzare i loro comportamenti. Il più importante
è TCP/IP rispettivamente transmission control protocol e internet protocol. La documentazione sugli standard
viene detta RFC (request for comment).

10
1.1.2 Descrizione dei servizi

Internet può essere visto anche dal punto di vista dei servizi che offre alle applicazioni come: posta elettronica,

11
navigazione, giochi distribuiti etc .
Le applicazioni sono dette distribuite in quanto coinvolgono più host che si scambiano reciprocamente dati.
Affinché due applicazioni su host differenti possano comunicare tra di loro, devono seguire delle regole che
permettono ad entrambe le applicazioni di poter inviare e ricevere messaggi. Tali regole vengono definite API (
application programming interface).
Un'analogia può essere fatta con il servizio postale. Alice vuole inviare una lettera a Roberto, deve quindi:
1. Inserire la lettera in una busta
2. Scrivere il destinatario e l’indirizzo sulla busta
3. Chiudere la busta
4. Mettere il francobollo
5. Imbucare la busta.

Potremmo definire questa procedura come le “API delle Poste Italiane”

1.1.3 Cos’è un protocollo

Un analogia

Per definire meglio il protocollo di rete facciamo un'analogia con un caso umano. Alice vuole chiedere l’ora a
Roberto si potrebbero verificare due casi

Caso I
1. Per iniziare la comunicazione Alice saluta con “Ciao”
2. Roberto risponde “Ciao”
3. Alice interpreta la sua risposta come l’indicazione a procedere
4. Alice chiede l’ora “Che ora sono ? ”
5. Roberto risponde “Sono le 2”
Caso II
1. Per iniziare la comunicazione Alice saluta con “Ciao”
2. Roberto risponde “non parlo italiano”
3. Alice non pone più la sua domanda “Che ore sono” e la comunicazione si interrompe.

Nel primo caso “il protocollo umano” definisce dei comportamenti che vengono interpretati dagli attori e
permettono la conclusione del dialogo.
Nel secondo caso Alice e Roberto utilizzano “protocolli umani” differenti quindi in quanto non parlano la stessa
lingua e quindi in dialogo non si conclude positivamente.

Protocolli di rete

Un protocollo di rete è simile ad un “protocollo umano” in cui però sono coinvolti componenti hardware e
software. Qualsiasi attività su internet che coinvolge due o più entità remote è disciplinata da un protocollo. Per
esempio:
■ I protocolli delle schede di rete controllano il flusso di bit sul “filo” tra due schede
■ I protocolli sui router determinano il percorso di un pacchetto dall'origine alla destinazione.
■ Il protocollo http controlla le richiesta tra host e server web:

12
1. Digitando un URL nel browser viene inviata una richiesta di connessione al server web e l’host
rimane in attesa.
2. Il server web riceve il messaggio e risponde con un messaggio di connessione consentita
3. L’host richiede la pagina desiderata tramite GET
4. Il server web restituisce la pagina.

Un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o più entità in comunicazione, così
come le azioni intraprese in fase di trasmissione e/o di ricezione di un messaggio o di un evento

1.2 Ai confini della rete


In questo capitolo vengono approfonditi i componenti di internet

1.2.1 Programmi client e server

Non di particolare rilevanza, si parla dei programmi client che fanno richieste ai programmi server, si parla
quindi di applicazioni distribuite. Oltre al client / Server esiste anche il P2P ovvero programmi che fungono sia
da client che da server.

1.2.2 Le reti di accesso

In questo paragrafo vengono esaminati le reti di accesso (access network), cioè i collegamenti fisici che
connettono un sistema al proprio edge router ovvero il primo router sul percorso dal sistema di origine a
qualsiasi altro sistema di destinazione.
Le reti di accesso possono essere classificate in tre categorie
1. accesso residenziale, connette alla rete gli host domestici
2. accesso aziendale, connette alla rete gli host degli uffici
3. accesso wireless, connette alla rete host in movimento

13
Accesso residenziale

Si tratta di host domestici connessi ad un edge router.


Abbiamo tre diverse tipologie di accesso residenziale :
1. Modem dial-up
2. DSL
3. HFC

14
Modem dial-up

Utilizza una normale linea telefonica analogica ed accede ad internet attraverso un ISP residenziale quale una
compagnia telefonica.
La comunicazione tra due host avviene come segue:
1. Dal pc il segnale digitale arriva fino al modem dial-up che la converte in analogica e la trasmette sulla
linea telefonica (la stessa usata per le telefonate)
2. Dall'altro capo della linea analogica un modem ISP converte il segnale analogico in segnale digitale
La rete di accesso è costituita da una coppia di modem e da una linea telefonica punto a punto.

DSL (digital subscriber line)

Concettualmente simile ad un modem dial-up ma è stata diminuita la distanza tra l’utente e il model ISP
permettendo di trasmettere a frequenza nettamente superiori.
La DSL divide il collegamento di comunicazione tra abitazioni ed ISP in tre bande di diversa frequenza :
1. canale di downstream ad alta velocità
2. canale di upstream a media velocità
3. canale telefonico ordinario a due vie
Questa tecnica utilizza il multiplexing.

HFC (hybrid fiber-coaxial cable)

Estensioni delle attuali reti per la televisione via cavo.


Il segnale raggiunge le abitazioni tramite cavi coassiali ed amplificatori, tutte le abitazioni fanno capo ad un
nodo (vedi figura 1.5 “nodo della fibra”), che connette le singole abitazioni alle fibre ottiche che portano il
segnale fuori alla “terminazione principale”, per poi seguire il percorso per uscire su internet.
HFC necessita di un modem particolare detto cable model che si connette al pc attraverso la porta ethernet.
La rete HFC viene divisa in due canali :
1. Downstream
2. Upstream
Una caratteristica molto importante dell HFC e che è un mezzo di trasmissione condiviso, ciò vuol dire che
tutte abitazioni utilizzano lo stesso collegamento, quindi quante più abitazioni sono connesse nello stesso
momento tanto più sarà lenta la connessione.

15
Accesso aziendale

Nelle aziende ed università si utilizza una rete LAN per collegare gli host all’ edge router.
Al momento la più usata per creare una LAN ethernet che utilizza un doppino intrecciato di rame o un cavo
coassiale. Anche ethernet come HFC utilizza un mezzo condiviso per tutti gli utenti quindi utilizzano tutti la
stessa frequenza. È utilizzata anche la tecnologia ethernet a commutazione che utilizza una topologia a stella
con gli host collegati ad uno switch permettendo di inviare e ricevere alla massima velocità.

Accesso senza fili

Esistono due grandi categorie di accesso internet senza fili :


1. Wireless local area network, dove gli utenti trasmettono e ricevono pacchetti da e verso un punto
d’accesso (wireless access point) entro un raggio di pochi metri, che a sua volta è connesso attraverso
cavo alla rete internet tradizionale. La tecnologia utilizzata è IEEE 802.11. Sta prendendo piede anche
Wi-Max più veloce che utilizza la 802.16
2. Wide-area wireless access network, i pacchetti vengono trasmessi sulla stessa infrastruttura
utilizzata per la telefonia mobile (es: 3G).

1.2.3 Mezzi Trasmissivi

Esistono due categorie di mezzi fisici:


1. Guidati, le onde vengono contenute in un mezzo fisico come la fibra ottica, il cavo coassiale etc..
2. Ad onda libera, le onde si propagano nell’atmosfera come il Wi-Fi o i canali digitali satellitari.

Doppino intrecciato

È il mezzo meno costoso e più utilizzato in quanto presente nella rete telefonica nella maggior parte delle
case.
Il doppino intrecciato è costituito da due fili di rame distinti spessi circa 1 mm disposti a spirale regolare ed
intrecciati per ridurre le interferenze con altre coppie presenti nelle vicinanze.

16
Esiste una particolare tipologia di doppino intrecciato, l’UTP (unshielded twisted pair) ovvero il doppino
intrecciato non schermato che viene utilizzato per lo più nelle reti LAN con frequenza comprese tra 10 mbps e
1 Gbps, dipendenti dalla distanza tra trasmettitore e ricevitore.
Il doppino intrecciato viene utilizzato con il modem dial-up e con DSL.

Cavo coassiale

Costituito da due conduttori di rame concentrici (uno dentro l’altro come cavo tv). Grazie a questa struttura e
all’ isolamento è in grado di raggiungere alte frequenze.
Viene utilizzato sia per la tv via cavo sia per fornire agli utenti residenziali accesso a internet a 1 Mbps.
Il trasmettitore collegato al cavo, trasforma il segnale digitale del pc in segnale analogico e viene inviato al
destinatario che a sua volta, grazie al ricevitore trasforma il segnale analogico in digitale.

Fibra ottica

La fibra ottica è un mezzo sottile e flessibile che conduce impulsi di luce ciascuno dei quali rappresenta un bit.
Le principali caratteristiche sono:
■ può supportare enormi frequenze trasmissive
■ è immune all’interferenza elettromagnetica
■ presenta un attenuazione di segnale molto bassa nel raggio di 100 km
■ è molto difficile da intercettare.

Canali radio terrestri

I canali radio trasportano segnali all’interno dello spettro elettromagnetico e perciò non richiedono installazione
fisica di cavi. Le caratteristiche dei canali radio dipendono dall’ambiente di propagazione e dalla distanza a cui
il segnale deve essere inviato. Perdita di segnale lungo il percorso può infatti essere causata da:
■ distanza (path loss)
■ attraversamento di ostacoli (shadow fading)
■ riflessione sulle superfici (multipath fading)
■ interferenza con altri segnali elettromagnetici (che comprende altri canali radio)

Un esempio di utilizzo di canali radio a corta distanza lo troviamo nei dispositivi come cuffie e tastiere wireless,
nelle LAN wireless invece troviamo canali radio su area locale.

Canali radio satellitari

da studiare

1.3 Il nucleo della rete

1.3.1 Commutazione di circuito e commutazione di pacchetto


17
Esistono due fondamentali approcci per spostare dati nella rete:
1. Commutazione di circuito, le risorse richieste per consentire la comunicazione di due host sono
riservate per l’intera durata della sessione di comunicazione.
Il telefono è un tipico esempio di commutazione di circuito. Si consideri cosa avviene quando si vuole
fare una chiamata:
a. Si richiede la connessione tra mittente e destinatario (si compone il numero)
b. Si stabilisce una connessione tra mittente e destinatario (il destinatario risponde)
c. La connessione rimane aperta fino a quando non si riaggancia. Quindi la frequenza di
trasmissione rimane riservata per tutta la durata della conversazione.
Dato che si riserva una certa larghezza di banda è possibile garantire una frequenza costante.
2. Commutazione di pacchetto, le risorse richieste per consentire la comunicazione di due host non
sono riservate, ma vengono utilizzate su richiesta. Potrebbe quindi accadere che si debba attendere (in
coda) per utilizzare un collegamento.
Internet ne è un tipico esempio, di fatto quando un host invia un pacchetto ad un altro host su internet
non richiede alcuna risorsa, ma invia semplicemente il pacchetto. Se i collegamenti utilizzati sono
congestionati perchè usati da altri host, il pacchetto deve attendere in un buffer. Internet utilizza
algoritmi per consegnare i pacchetti in modo temporizzato ma non garantisce il successo.

Commutazione di circuito

Spieghiamo in dettaglio il funzionamento di una rete a commutazione di circuito partendo dalla Figura 1.8

Figura 1.8

Nella figura abbiamo :

18
1. 4 commutatori (oggetti tondi)
2. 4 collegamenti che connettono i 4 commutatori
3. Ogni collegamento è composto da n circuiti, per supportare n connessioni simultanee
4. 3 Host connessi direttamente ad un commutatore.
Quando due desiderano comunicare, la rete stabilisce una connessione end-to-end dedicata. Quindi affinché A
invii messaggi a B, la rete deve riservare un circuito su ciascuno dei due collegamenti. Poiché un collegamento
è composto da n circuiti, la connessione ottiene 1/n della larghezza di banda del collegamento.

Multiplexing nelle reti a commutazione di circuito

I circuiti dei collegamenti sono implementati tramite due diverse tipologie di multiplexing:

1. Multiplexing a divisione di frequenza (FDM frequency-division multiplexing)


Per avere più connessioni contemporanee viene suddiviso lo spettro di frequenza. A ciascuna
connessione viene assegnata una banda di frequenza per tutta la durata della connessione stessa. Ad
esempio nelle reti telefoniche ogni banda di frequenza ha un'ampiezza di banda (bandwidth) di 4 kHz.
Nella figura 1.9 lo spettro di frequenza viene diviso in quattro bande da 4 kHz.
2. Multiplexing a divisione di tempo (TDM time-division multiplexing)
Per avere più connessioni contemporanee viene suddiviso il tempo in frame di durata fissa a loro volta
ripartiti in slot. A ciascuna connessione viene assegnato uno slot di tempo in ogni frame.
Nella figura 1.9 il domino di tempo viene suddiviso in frame con quattro slot di tempo ciascuno ad ogni
circuito viene assegnato lo stesso slot in ogni frame.

I sostenitori della commutazione a pacchetto denigrano la commutazione a circuito in quanto è molto


dispendiosa nei tempi morti. Per esempio un radiologo apre una connessione, richiede un‘immagine di una
lastra, e la osserva per poi chiederne un altra. Nel periodo di osservazione, la connessione è rimasta aperta
anche se inutilizzata, sprecando quindi risorse.

19
Figura 1.9

Commutazione di pacchetto

Nelle moderne reti di calcolatori, l’host di origine suddivide i messaggi lunghi in parti piccole note come
pacchetti. In questo tipo di architettura tra l’host di origine e quello di destinazione, i pacchetti viaggiano
attraverso collegamenti e commutatori di pacchetto. La frequenza con la quale i pacchetti vengono
trasmessi dipende dalla frequenza totale del collegamento.
La maggior parte dei commutatori di pacchetto utilizza la trasmissione store-and-forward, questo implica
che il commutatore deve ricevere l’intero pacchetto prima di poterlo inoltrare sul collegamento in uscita.
Quest’attesa introduce un ritardo chiamato store-and-forward all’ingresso di ciascun collegamento lungo il
percorso.
Ogni commutatore connette più collegamenti, per ogni collegamento il commutatore mantiene un buffer di
output (o coda d’attesa) per conservare i pacchetti che sta per inviare sul relativo collegamento. Il buffer viene
utilizzato nel caso in cui un pacchetto in arrivo chiede l’invio in un collegamento occupato, in questo caso deve
attendere nel buffer il suo turno. Questo comporta un ulteriore ritardo chiamato ritardo di coda.
Potrebbe accadere che un pacchetto in arrivo trovi il buffer completamente pieno da altri pacchetti che
attendono l’invio, e questo comporta la perdita del pacchetto (packet loss)
Può essere fatta un'analogia con il ristorante che non accetta prenotazioni, si possono verificare queste
situazioni:
1. Il cliente arriva ed il tavolo è libero e quindi si siede = il pacchetto trova il collegamento libero
2. Il cliente arriva ma non ci sono tavoli liberi, quindi attende in coda = il pacchetto trova il collegamento
occupato ed attende in coda

20
3. Il cliente arriva ma trova molta gente in coda e il cameriere lo invita ad andare via in quando non ce la
farà a servirlo = il pacchetto trova il buffer di output pieno e si ha il packet loss.

Figura 1.10

Confronto tra commutazione di pacchetto e commutazione di circuito: multiplexing statico (da


studiare)

Viene fatto un esempio di prestazioni tra commutazione a pacchetto e commutazione di circuito. Ne esce
vincitore la commutazione di pacchetto. La commutazione di pacchetto utilizza il multiplexing statico.

1.3.2 Come i pacchetti trovano il cammino in una reta a commutazione di pacchetto.

Ogni pacchetto nella propria intestazione contiene l’indirizzo della sua destinazione, che come gli indirizzi
postali, presenta una gerarchia.
Quando un pacchetto arriva in un router, questo esamina il suo indirizzo, ed attraverso una tabella di inoltro
che mette in relazione gli indirizzi con i collegamenti uscenti, invia il pacchetto sul giusto collegamento.
Le tabelle di inoltro sono dettati di protocolli di instradamento (verranno discussi nel capitolo 4). Un esempio di
protocollo di instradamento potrebbe essere determinare il cammino più corto verso ciascuna destinazione ed
usare questo risultato per settare la tabella di inoltro.

1.3.3 ISP e dorsali Internet

Nell’internet pubblica, le reti di accesso situate all’estremità (livello 3 figura 1.11) sono connesse al resto della
rete tramite una gerarchia di livelli ISP.
Come si vede dalla figura 1.11 abbiamo 3 livelli di ISP:
1. ISP di livello 1 (tier1- ISP),
a. noti anche come reti o dorsali (Internet backbone network).

21
b. alte velocità di collegamento
c. direttamente connessi agli altri ISP di livello 1
d. connessi ad un alto numero di ISP livello 2 ed altri clienti
e. copertura internazionale
f. un ISP di livello 1 che fornisce un collegamento ad un ISP di livello 2 viene definito fornitore
(provider) di un ISP di livello 2.
2. ISP di livello 2
a. di solito hanno una copertura distrettuale o nazionale
b. si possono connettere solo ad alcuni ISP di livello 1.
c. un ISP di livello 2 che si connette ad un ISP di livello 1 viene definito Cliente (customer) dell’
ISP di livello 1
d. un ISP di livello 2 può essere un fornitore di un ISP di livello 3 o livello 2
3. ISP di livello 3
a. è il punto di accesso, dove si collegano gli accessi residenziali o aziendali

Inoltre :
1. due ISP di pari livello che si connettono direttamente tra di loro vengono definiti pari grado (peer),
2. il punto in cui un ISP si collega con altri ISP viene definito punto di presenza (POP point of presence)
3. aziende o istituzioni possono collegarsi direttamente a ISP di livello 1 o ISP di livello 2.

Figura 1.11 (vedere figura sul libro per note)

22
1.4 Ritardi, perdite e throughput nelle reti a commutazione di
pacchetto

1.4.1 Panoramica sul ritardo nelle reti a commutazione di pacchetto

Un pacchetto parte da un host A, passa attraverso una serie di router e collegamenti e conclude il viaggio in un
altro host B. Ad ogni nodo (router + collegamento) del percorso il pacchetto subisce dei vari tipi di ritardi:
1. Ritardo di elaborazione (processing delay)
Il tempo richiesto per esaminare l’intestazione del pacchetto e determinare dove dirigerlo.
Può essere incluso anche il ritardo per controllare eventuali errori a livello di bit occorsi durante la
trasmissione al nodo A. L’attesa è di microsecondi.
Dopo l’elaborazione il router dirige il pacchetto verso la coda.
2. Ritardo di accodamento (queuing delay)
Il pacchetto subisce un ritardo mentre attende in coda di essere trasmesso. L’attesa dipende dal
numero di pacchetti in coda. L’attesa è di microsecondi e millisecondi
3. Ritardo di trasmissione (transmission delay)
È il tempo necessario a trasmettere tutti i bit del pacchetto sul collegamento.
Il ritardo di trasmissione dipende dalla lunghezza del pacchetto.
Sia L la lunghezza in un pacchetto in bit, ed R la frequenza di trasmissione del collegamento del router
A con il router B, il ritardo di trasmissione è dato da L/R.
I pacchetti vengono trasmessi secondo la politica FIFO.
4. Ritardo di propagazione (propagation delay)
È il tempo necessario affinché un bit si propaghi dal router A al router B.
Il ritardo di propagazione non dipende dalla lunghezza del pacchetto ma esclusivamente dal tempo che
impiega un bit a percorrere la distanza tra il router A ed il router B.
Ogni singolo bit viaggia alla velocità di propagazione del collegamento.
Il ritardo di propagazione è dato da d/s dove d è la distanza tra i due router e s è la velocità del
collegamento.

Tutti questi 4 ritardi formano complessivamente il ritardo totale di nodo


La figura 1.12 raffigura un tipico scenario un pacchetto che arriva al nodo A deve poi essere inviato al nodo B
con i relativi ritardi.

23
Figura 1.12 (vedere figura sul libro per note)

Confronto dei ritardi di trasmissione e di propagazione

Per capire al meglio la differenza tra ritardo di trasmissione e di propagazione facciamo un‘analogia con le
automobili e le autostrade. Supponiamo che:
1. la distanza tra il casello A ed il casello B sia di 100 km
2. le auto viaggino(si propagano) a 100 km/h
3. 10 auto accodate procedano in ordine fisso (ogni auto è un bit la coda di auto è il pacchetto)
4. ciascun casello sia in grado di far transitare (trasmettere) un auto ogni 12 secondi.
5. la prima auto una volta raggiunto il casello prima di superarlo debba aspettare che tutte e 10 le auto
siano arrivate
Il tempo richiesto al casello per far passare l’intera fila di macchine corrisponde al ritardo di trasmissione ed è
pari 2 min, in quanto il casello è in grado di processare 5 macchine al minuto (12 secondi ad auto) ed il totale è
di 10 auto.
Invece il tempo necessario ad un’auto per spostarsi dal casello A al casello B è equivalente al tempo di
propagazione ed è pari a 100 km / (100 km/h) = 1 ora.
Quindi il tempo che intercorre da quando tutta la fila si trova di fronte al casello A a quando si trova al casello B
è di 62 minuti (2 minuti + 1 ora).

Figura 1.13 (vedere libro per note)

1.4.2 Ritardo di accodamento e perdita pacchetti

La componente più complessa del ritardo di un nodo è il ritardo d’accodamento, in quanto a differenza degli
altri ritardi, può variare da pacchetto a pacchetto.
Per esempio se arrivano 10 pacchetti contemporaneamente il primo non ha ritardo, mentre l’ultimo subirà un
ritardo grande in quanto dovrà aspettare 9 pacchetti prima di partire.
Quindi per il calcolo del ritardo d’accodamento si fa uso di misure statistiche come :
1. il ritardo di accodamento medio
2. la varianza del ritardo d’accodamento
3. la probabilità che il ritardo d’accodamento superi un valore specifico.
Il ritardo d’accodamento dipende da 3 fattori :
1. frequenza d’arrivo del traffico alla coda
2. frequenza di trasmissione del collegamento
3. natura del traffico entrante ovvero se il traffico arriva periodicamente o a blocchi

Approfondiamo l’argomento andando a trattare l’intensità di traffico data da La/R dove :


1. a = frequenza media di arrivo dei pacchetti nella coda in pacchetti al secondo
2. R = frequenza di trasmissione, ossia la frequenza in bit al secondo con la quale i pacchetti vengono

24
trasmessi sul collegamento
3. L = si assume che ogni pacchetto abbia la stessa lunghezza L.

Analizzando l’ intensità di traffico possiamo dedurre che :


■ La/R > 1 la frequenza media di arrivo dei bit in coda supera la frequenza di trasmissione in uscita,
quindi la coda crescerà all’infinito.
■ La/R ≤ 1 , il ritardo d’accodamento viene influenzato dalla natura del traffico in arrivo, ovvero:
● se i pacchetti arrivano a cadenza periodica (un pacchetto ogni L/R quindi il tempo necessario a
smaltire un pacchetto), ogni pacchetto troverà la coda vuota e non ci saranno ritardi
● se i pacchetti arrivano a blocchi ma periodicamente, si possono verificare dei significativi ritardi

Entrambi i casi descritti sono molto accademici nella realtà l’arrivo in coda è casuale, quindi in questo
caso non basta La/R per calcolare il ritardo. Ma possiamo dire che quando:
● più il fattore La/R si avvicina allo 0 tanto più arrivi gli dei pacchetti sono pochi e distanziati quindi
la probabilità di trovare “traffico” è bassa. Basso ritardo d’accodamento
● più il fattore La/R si avvicina ad 1 tanto più la frequenza d’arrivo dei pacchetti è alta, quindi la
coda aumenta sempre più. Alto ritardo d’accodamento
Questa differenza è visibile dal grafico mostrato nell’immagine 1.14
Figura 1.14 (non necessaria)

Perdita di pacchetti

Il buffer di un nodo ha una capacità finita, quindi può accadere che quando un pacchetto arrivi in un nodo trovi
la coda piena, e quindi non potendo essere memorizzato viene eliminato e perduto. I pacchetti persi
aumentano all’aumentare del traffico.
Quindi le prestazioni di un nodo vengono misurate sia in termini di ritardo ma anche in termini di perdita di
pacchetti.

1.4.3 Ritardo end-to-end

Analizzato il ritardo su un singolo router, occorre ora analizzare il ritardo complessivo da host d’origine ad host
di destinazione detto end-to-end delay. Se ipotizziamo che non ci sia congestione e che ci siano N-1 router tra
origine e destinazione, il ritardo end-to-end è dato da
dend-to-end = N (delab+ dtrasm+ dprop)
1. delab = ritardo d’elaborazione a ciascun router e presso il mittente
2. dprod = ritardo di propagazione
3. dtrasm = ritardo di trasmissione L/R dove R è la frequenza di trasmissione ed L la lunghezza del
pacchetto
Nella formula è N e non N-1 in quanto viene incluso anche il ritardo dell’host mittente.

1.4.4 Throughput nelle reti di calcolatori

Un'altra misura critica per le prestazioni è il throughput end-to-end.


Si consideri il trasferimento di un file da A a B, throughput istantaneo è la frequenza (in bps) alla quale B sta
ricevendo il file, ed è data da F/T bps dove:

25
1. F = la dimensione in bit del file
2. T = il tempo necessario a trasferire il file

Per capire meglio il throughput analizziamo i 4 esempi descritti nelle figure 1.15 e 1.16

Esempio 1.15

Nella figura 1.15 (a) abbiamo 2 host un server ed un client connessi da collegamenti di comunicazione e da un
router. Definiamo Rs come la frequenza di collegamento tra server e router mentre Rc quella tra router e client.
In questo scenario il throughput è dato da min (Rs,Rc), ovvero dal canale di comunicazione con la frequenza
più bassa definito collegamento collo di bottiglia, in quanto se:
1. Rs = Rc i bit passano senza alcun problema
2. Rs < Rc il collo di bottiglia è Rs.
3. Rs > Rc il collo di bottiglia è Rc. In questo caso tenendo conto che il router non riesce a trasmettere alla
stessa velocità di Rs deve utilizzare il buffer per memorizzare i pacchetti attesa di trasmissione
Abbiamo quindi che il tempo necessario a trasferire un file è di F/min(Rs,Rc)

Nella figura 1.15 (b) viene applicato lo stesso identico ragionamento dell’ esempio 1.15(b), modificando la
formula introducendo gli n canali di collegamento. Abbiamo quindi che il throughput è dato da
min(R1,R2,...,Rn).

Riassumendo abbiamo che :


1. throughput = min (Rs,Rc)
2. il tempo necessario a trasferire un file T = F/min(Rs,Rc)
3. throughput instantaneo = F/T

Figura 1.15

Esempio 1.16

Nella figura 1.16 (a) abbiamo un‘architettura che rispecchia l’attuale internet ovvero un server ed un client
collegato ad una rete di calcolatori. Se ipotizziamo che nella rete tutti i collegamenti abbiano una frequenza di
trasmissione molto alta superiore a Rs ed Rc abbiamo nuovamente che il throughput è dato min (Rs,Rc)

26
Nella figura 1.16 (b) si ipotizza invece:
1. di avere 10 sever e 10 client collegati al nucleo della rete.
2. stanno avvenendo 10 download che coinvolgono contemporaneamente 10 coppie client server
3. c’è un collegamento in comune che viene attraversato da tutti i 10 download, con frequenza R
4. Rs è la frequenza del collegamento server router
5. Rc è la frequenza del collegamento client router

In questo scenario il throughput è diverso in base a due situazioni:


1. Se R ha una frequenza molto alta diciamo 100 volte più grande di Rs e Rc allora il throughput è pari a
min (Rs,Rc)
2. Se R ha una frequenza uguale a Rs ed Rc R diventa il collo di bottiglia e quindi il throughput sarà R.
Per esempio supponiamo che
a. Rs = 2 Mbps
b. Rc = 1 Mbps
c. R = 5 Mbps
d. Il collegamento è in comune con i 10 download
In questa situazione il collo di bottiglia è R che fornisce 500 Kbps di throughput ad ogni download.

Figura 16

27
1.5 Livelli di protocollo e loro modelli di servizio

1.5.1 Architettura a livelli

Per capire meglio l’architettura a livelli partiamo con un analogia umana, andando ad analizzare il sistema di
una linea aerea nel suo complesso che è composto da :

Partenza Atterraggio

1. biglietteria (acquisto) 1. biglietteria (reclami)


2. controllo bagagli (imbarco) 2. controllo bagagli (ritiro)
3. gate (entrata) 3. gate (uscita)
4. pista di decollo 4. pista di atterraggio
5. instradamento aereo (decollo) 5. instradamento aereo (atterraggio)

Se dovessimo prendere un aereo faremo le seguenti azioni :

Partenza Atterraggio

1. compriamo un biglietto 10. possiamo lamentarci in biglietteria reclami


2. andiamo al controllo dei bagagli 9. ritiriamo i bagagli
3. ci dirigiamo al gate per l’imbarco 8. ci dirigiamo verso il gate di uscita
4. si sale sull’aereo e si decolla 7. l’aereo atterra
5. l’aereo è in volo 6. l’aereo è in volo

Figura 1.17

28
Figura 1.18

Da questa figura abbiamo le funzionalità della linea aerea divisa in strati. Possiamo notare che ciascun livello
combinato con quelli inferiori implementa la funzionalità di un servizio.
Ogni livello fornisce il proprio servizio al livello superiore:
1. effettuando determinate azioni all’interno del livello
2. sfruttando i servizi offerti da quello inferiore
Per esempio nell’analogia con l’aereo, il livello bagaglio e inferiori si ha il trasferimento di persone e bagagli
dall’imbarco al ritiro bagagli.
L’analogia con internet è come il sistema aereo trasporta passeggeri dall’origine alla destinazione così un
pacchetto viene trasportato dall’host di origine a quello di destinazione.
L’architettura a strati è basata sulla modularità, questo permette di cambiare l’implementazione del servizio
fornito senza problemi. In quanto il livello fornisce lo stesso servizio allo strato superiore e utilizza gli stessi
servizi dello strato inferiore. E come fare un’analogia con delle API, mantengo la firma uguale ma cambia il
codice interno, questo non crea alcun problema a chi consuma le mie API.
Facendo un‘analogia con il sistema aereo è come dire che il gate continua a far imbarcare e sbarcare persone,
ma internamente le sceglie in base alla lora altezza. Questo non fa cambiare il sistema in quanto la funzione
rimane la stessa imbarco e sbarco persone.

Stratificazione di protocolli

I protocolli di rete sono stati progettati in strati / livelli (layer), ed ogni protocollo appartiene ad un livello.
Come nell’esempio degli aerei ogni livello fornisce un servizio a quello superiore
1. effettuando determinate azione all’interno del livello
2. sfruttano i servizi offerti dal livello inferiore
Quest’ architettura si chiama modello dei servizi (service model).
Per esempio si vuole implementare un servizio per la consegna affidabile dei messaggi. Questo può essere
implementato utilizzando un livello n-1 che consegna i messaggi in modo non affidabile, lasciando al livello n il
compito di determinare e ritrasmettere i messaggi persi, rendendo così il servizio affidabile.
Un livello può essere implementato sia via software che hardware o in modo combinato.
● Livello applicazione (es: http e smtp) e trasporto quasi sempre software
● Livello rete misto
● Livello fisico e link sono hardware implementati nella scheda di rete
29
I livelli non sono tutti nello stesso luogo ma distribuiti tra host commutatori e altre componenti.
Ci sono vantaggi e svantaggi in questo tipo di architettura:

Vantaggi Svantaggi

● Metodologia strutturata ● Possibilità che un livello duplichi le


● Aggiornamenti facili funzionalità di quello inferiore
● Possibilità che un livello possa richiedere
informazioni presenti su un altro livello e
questo viola la separazione dei livelli.

L’immagine 1.19 raffigura la pila di protocolli (protocol stack) composta da 5 livelli, fisico, collegamento,link,
rete, trasporto, applicazione, che andiamo ad analizzare di seguito.

Figura 1.19

Livello di applicazione (application layer)

Le caratteristiche di questo livello sono :


1. comprende le applicazioni di rete ed i relativi protocolli come HTTP, SMTP, FTP.
2. gestisce la traduzione di nomi host (es www.google.it) nei relativi indirizzi a 32 bit utilizzato il protocollo
DNS.
3. è distribuito sui vari host, le applicazioni tramite protocolli si scambiano pacchetti che chiameremo
messaggi

Livello di trasporto (transport layer)

Si occupa di trasferire i messaggi dell’application layer tra il modulo client ed il modulo server di
un‘applicazione
Il transport layer può essere implementato da due protocolli :
1. TCP:
■ fornisce un servizio orientato alla connessione con consegna garantita dei messaggi

30
■ fraziona i messaggi più lunghi in segmenti
■ regola la frequenza trasmissiva quando il traffico è eccessivo
2. UDP, che fornisce un servizio:
■ minimale
■ senza connessione
■ senza affidabilità
■ senza controllo del flusso
I pacchetti a questo livello vengono chiamati segmenti

Livello di rete (network layer)

Si occupa di trasferire i pacchetti, detti datagrammi in questo livello, da un host ad un altro.


Il transport layer passa un segmento ed un indirizzo al network layer, che mette a disposizione il servizio di
consegna del segmento al livello di trasporto dell'host di destinazione.
Il livello di rete comprende il protocollo IP che definisce i campi del datagramma ed i protocolli di instradamento
che determinano i percorsi che i datagrammi devono seguire tra origine e sorgente

Livello di collegamento (link layer)

Si occupa di instradare i datagrammi passati dal livello di rete, dall’origine alla destinazione attraverso una
serie di routing e host.
Quindi il network layer passa al link layer il proprio datagramma che lo trasporta al nodo successivo, mentre in
ricezione il network layer passa il datagramma al link layer.
Un esempio di livello di collegamento è ethernet, wi-fi, p2p.
C’è da considerare che durante il percorso un pacchetto incontra diversi router e collegamenti, quindi
deduciamo che ci possano essere diversi livelli di collegamento con protocolli differenti. Per esempio un
datagramma sul primo router potrebbe essere gestito con ethernet mentre sul secondo con wi-fi.
I pacchetti di questo livello vengono chiamati frame.

Livello Fisico (physical layer)

Mentre il link layer ha il compito di trasferire interi frame da un elemento della rete a quello adiacente, il ruolo
del physical layer è quello di trasferire i singoli bit del frame da un nodo a quello successivo.
I protocolli di questo livello dipendono da quelli del link layer ed in più dall’effettivo mezzo trasmissivo come
ethernet, fibra ottica, doppino intrecciato (ogni tipologia di mezzo ha un suo protocollo).

1.5.2 Livelli, messaggi,segmenti, datagrammi e frame

Descriviamo a questo punto il percorso fisico che seguono i dati dall’origine a destinazione scendendo lungo la
pila dei protocolli

31
Figura 1.20

L’immagine è composta da :
1. Un host di origine, che implementa tutti e 5 i layer
2. Un commutatore a livello di collegamento, che implementa esclusivamente il link layer e physical layer.
Questo implica che non riconoscono gli indirizzi IP.
3. Un router, che implementa il network layer, link layer e physical layer è in grado quindi di gestire
l’instradamento (network layer).
4. Un host di destinazione, che implementa tutti e 5 i layer.

Come si può notare dalla figura ogni livello aggiunge una propria intestazione (informazioni aggiuntive) alle
informazioni del livello precedente. Questo processo si chiama incapsulamento, in quanto le informazioni del
layer precedente vengono incapsulate in un nuovo pacchetto che ha informazioni aggiuntive.
1. Il livello di trasporto potrebbe aggiungere al messaggio (dell’application layer) i dati necessari al livello
di trasporto sul lato di ricezione a consegnare il messaggio all’applicazione, oppure bit per il
rilevamento degli errori.
2. Il livello di rete aggiunge al segmento di trasporto le intestazioni proprie del livello di rete come indirizzi
dei sistemi terminali di origine e destinazione.
3. Il livello di collegamento aggiunge le proprie informazioni al datagramma.

A ciascun livello il pacchetto ha due tipi di campi


1. intestazione, dati aggiuntivi del layer corrente..
2. carico utile, pacchetto proveniente dal livello superiore

Facciamo un’analogia con una procedura di invio di una memo tra uffici con il servizio postale:
1. Alice si trova nell’ufficio A e vuole inviare una memo a Roberto che si trova nell’ufficio B

32
2. Alice scrive la memo, che rappresenta il messaggio del livello applicazione, lo mette nella busta scrive
il destinatario e il reparto in cui lavora. La memo, la busta ed il destinatario sono analoghe al segmento
del livello di trasporto
3. L’ufficio smistamento prende la busta, la mette in un’altra busta conforme ai requisiti di poste italiane su
cui scrive l’indirizzo dell’ufficio mittente e destinatario. Questa busta è uguale al datagramma a livello di
rete.
4. L’ufficio postale consegna la busta allo smistamento dell’ufficio destinatario, dove comincia il processo
di de-incapsulamento.
5. Viene aperta la busta ed estratta la busta con la memo che contiene il destinatario (ufficio + nome) ed
inoltrata al destinatario, Roberto, apre la busta e legge la memo.

33
CAPITOLO 2 - LIVELLO DI APPLICAZIONE

2.1 I principi delle applicazioni di rete

2.1.1 Architettura delle applicazioni di rete

Al momento sono utilizzate due principali architetture :


1. Architettura Client-Server (figura 2.2 a)
a. vi è sempre un host attivo chiamato server che risponde alle richieste di servizio di molti altri
host definiti client.
b. un classico esempio un sito web, il client richiede la pagina ed il server risponde fornendogliela.
c. il server dispone sempre di un indirizzo fisso detto indirizzo statico
d. il server ha un grosso carico di lavoro in quanto deve rispondere a tutte le richieste dei client.
e. tipiche applicazioni web, FTP, telnet
2. Architettura P2P (figura 2.2 b)
a. vi è una comunicazione diretta tra coppie arbitrarie di host chiamati peer, che non sono altro che
semplici computer
b. tipiche applicazioni BitTorrent, eMule
c. un punto di forza è la scalabilità, in quanto il carico di lavoro si distribuisce tra tutti i peer

Esiste anche un architettura ibrida che include sia client-server che p2p è il caso per esempio della
messaggistica dove i messaggi vengono scambiati tramite p2p e gli indirizzi ip degli utenti salvati tramite
client-server

34
Figura 2.2

2.1.2 Processi comunicanti

Processi client e server

Le applicazioni di rete sono costituite da una coppia di processi che si scambiano messaggi su una rete.
Per ciascuna coppia di processi comunicanti ne identifichiamo uno come client, ovvero è il processo che invia
la richiesta, ed uno come server, ovvero il processo che riceve la richiesta
Un esempio nell’architettura client-server può essere la richiesta di una pagina web, il browser che richiede è il
client mentre l’host che da la pagine è il server
Nelle architecture p2p un peer può essere sia client che server in base al ruolo che sta svolgendo in un
determinato momento, ovvero, se sta chiedendo un file (client) o sta inviando un file (server) .

L’interfaccia tra il processo e l’applicazione di rete

Quando un processo invia un messaggio ad un altro processo sulla rete, deve passare dal livello sottostante,
nello specifico deve passare attraverso un’interfaccia software chiamata socket.
Per capire meglio il concetto di socket facciamo un’analogia con un caso reale.
Un processo è assimilabile ad una casa mentre una socket alla porta.
La figura 2.3 mostra l’invio di un messaggio tra due host, e si può notare che la socket è l’interfaccia tra il
livello applicazione ed il livello trasporto. Chi crea l’applicazione può scegliere di utilizzare determinate porte in
base alle richieste del server.
Ricapitolando una socket è un‘interfaccia tra un processo applicativo e il protocollo a livello di trasporto.

35
L’applicazione a livello di trasporto spinge il messaggio fuori dalla socket e sull’altro versante il protocollo a
livello di trasporto ha il compito di consegnare il messaggio alla porta del processo ricevente.

Figura 2.3

2.1.3 I servizi di trasporto disponibili per le applicazioni

Molte reti mettono a disposizione vari protocolli di trasporto, che nello sviluppo di applicazioni occorre scegliere
in base alle proprie esigenze, cioè se per esempio si vuole un trasferimento dei dati affidabile senza perdita di
pacchetti, perché occorre creare un client mail oppure non affidabile in quanto occorre creare un player audio.
Quindi possiamo classificare i servizi del protocollo a livello di trasporto in:
1. Trasferimento affidabile
Garantisce che tutti i pacchetti arrivino a destinazione.
Un trasferimento senza perdita di pacchetti ottimo per client mail, trasmissione di file o invio documenti
web, in quanto il minimo errore potrebbe causare gravi problemi.
Mentre quando si parla di trasferimento non affidabile i dati potrebbero non arrivare mai al ricevente,
e questo è accettabile per quel tipo di applicazioni che tollerano perdite come per esempio applicazioni
multimediali audio/video.
2. Throughput
È la frequenza con la quale un processo mittente può inviare i bit al processo ricevente
Dato che il throughput può variare al variare delle sessioni aperte sulla banda, il livello di trasporto
fornisce un servizio che garantisce un throughput (es: throughput a r bps) ad una certa frequenza,
questo servizio può essere richiesto dal livello applicazione.
Le applicazioni che devono richiedere un throughput garantito vengono chiamate applicazioni
sensibili alla banda a differenza delle applicazioni elastiche che non ne hanno bisogno.
Un esempio di applicazione sensibile è il VoIP che necessita una frequenza di 32 kbps.
3. Temporizzazione
È un tipo di servizio che garantisce l’eliminazione dei ritardi end-to-end.
Questo tipo di servizio è molto importante per il VoIP (in caso contrario si avrebbe una telefonata a
tratti), giochi multiutente etc...

36
4. Sicurezza
È un tipo di servizio che garantisce la riservatezza, integrità dei dati, come per esempio il livello di
trasporto dell’host mittente può cifrare i dati e nell’host di destinazione decifrarli, ed in fine
l’autenticazione end to end.

2.1.4 Servizi di trasporto offerti da internet

Il livello di trasporto nello specifico mette a disposizione delle applicazioni due protocolli di trasporto
1. TCP, servizio orientato alla connessione e al trasporto affidabile dei dati
2. UDP, protocolli di trasporto leggero e minimalista senza connessione e trasporto inaffidabile
Per capire meglio il perché alcune applicazioni utilizzino TCP e altre UDP la figura 2.4 riassume i requisiti per
alcune applicazioni internet.
La figura 2.5 invece descrive i protocolli di applicazione e di trasporto di alcune applicazioni

Figura 2.4

Figura 2.5

37
Servizi di TCP

Questo protocollo offre i seguenti servizi:


1. Servizio orientato alla connessione
prima di incominciare a trasmettere i dati, client e server si scambiano delle informazioni di controllo a
livello di trasporto (questa procedura è detta handshaking), in modo da stabilire una connessione tra le
due socket (client e server), che rimane attiva anche in assenza di scambio di dati e viene
esplicitamente chiusa quando non più necessaria. La connessione dati è in full-duplex, cioè client e
server possono scambiarsi contemporaneamente.
2. Servizio di trasporto affidabile
viene garantito che i dati arrivino a destinazione senza errori (es: perdita e duplicazione dei dati) e
nell’ordine opportuno. Offre inoltre connessioni sicure (es: SSL) ed autenticazione.
3. Controllo della congestione
Questo meccanismo esegue una “strozzatura” del processo di invio quando il traffico di rete risulta
eccessivo.

Servizi di UDP

Questo protocollo è caratterizzato da:


1. Servizio leggero e minimalista
2. Senza connessione, quindi senza handshaking
3. Trasporto dati inaffidabile
Il protocollo non garantisce che i messaggi arrivino a destinazione e potrebbero arrivare in modo
arbitrario
4. Senza controllo congestione
Non esegue alcuna strozzatura sul processo di invio, ecco perchè molti progettisti scelgono questo tipo
di protocollo per applicazioni real-time, in quanto possono “spingere” i dati al livello sottostante a
qualsiasi frequenza. Si noti però che molti firewall bloccano UDP ecco perché alcuni progettisti sono
costretti ad utilizzare TCP.

Indirizzamento

Quando un processo invia un messaggio al destinatario deve specificarne anche l’indirizzo IP.
L’indirizzo IP è una stringa di 32 bit che identifica univocamente un host. In seguito si vedrà che l’utilizzo
diffuso del NAT implica che un host non indirizza univocamente un host.
Può succedere che su un host girino più processi, quindi oltre a utilizzare l’indirizzo IP occorre identificare il
processo destinatario e lo si può fare utilizzando il numero di porta (es : 80 per i server web, 25 SMTP).

2.1.5 Protocolli a livello di applicazione

I messaggi che due processi si scambiano sono disciplinati dal protocollo a livello di applicazione che
definisce:
1. i tipi di messaggi scambiati (richiesta o risposta)
2. la sintassi dei vari tipi di messaggio (quali sono i campi del messaggio e come vengono descritti)
3. la semantica dei campi, ossia il significato delle informazioni che contengono

38
4. le regole per determinare quando e come un processo invia e risponde ai messaggi
Alcuni protocolli sono pubblici specificati nel RFC altri privati, per esempio il protocollo di applicazione web
HTTP è pubblico.

2.2 Web e HTTP

2.2.1 Panoramica HTTP

HTTP è un protocollo a livello di applicazione web ed è implementato sia sul client sia server, che comunicano
tra di loro scambiandosi messaggi.
La terminologia utilizzata è:
1. pagina web, è costituita da oggetti HTML, immagini etc..
2. URL, è composta da due parti il nome dell’host ed il path
3. browser utilizzato per la visualizzazione delle pagine HTML è implementato sul client
4. server web, implementa il lato server di HTTP e contiene gli oggetti.
HTTP utilizza TCP (anziché UDP) come protocollo di trasporto.
Il client HTTP come prima cosa stabilisce una connessione TCP con il server, e i processi browser e server
accedono al TCP attraverso le proprie socket. Per esempio il client invia il messaggio alla propria socket che lo
inoltra a TCP. Uno dei vantaggi è che quando il client (quindi il protocollo HTTP) consegna il messaggio alla
socket non si deve preoccupare se il messaggio arriverà e se arriverà integro, in quanto se ne occuperà il
livello di trasporto con il protocollo TCP.
L’architettura di tipo client-server HTTP è di tipo stateless protocol (protocollo senza stato), in quanto il server
non memorizza alcuna informazione di stato del client.
Un server è sempre raggiungibile su un indirizzo IP.

Figura 2.6

2.2.2 Connessioni persistenti e non persistenti

39
In molte applicazioni internet durante la comunicazione tra client e server, vengono scambiati molti messaggi,
ad ogni messaggio corrisponde una richiesta dal client ed una risposta dal server.
Per scambiare un messaggio, come già visto, occorre aprire una connessione.
Se per ogni scambio viene aperta una nuova connessione parliamo di connessione non persistente, se
invece viene aperta una connessione dove vengono scambiati più messaggi parliamo di connessione
persistente.
Di norma HTTP lavora in modalità persistente, ma può essere configurato per lavorare in maniera non
persistente.
Prima di procedere occorre dare la definizione di RTT (round trip time), che è il tempo impiegato da un singolo
pacchetto per viaggiare dal client al server e poi ritornare al client. RTT include i ritardi di propagazione, di
accodamento nei router (e commutatori) e il ritardo di elaborazione del pacchetto.
La figura 2.7 descrive cosa succede quando un utente clicca un un link
Analizziamo ora le due tipologie di connessioni.

1. HTTP con connessione non persistente


ogni scambio di file richiede 2 RTT, il primo per stabilire una connessione (client richiede al server, il
server risponde), il secondo per la ricezione del file.
Il carico di lavoro a differenza delle connessioni persistenti è minore.
2. HTTP con connessione persistente
la problematica principale è dover stabilire e mantenere una connessione aperta. Per ogni connessione
si deve allocare un buffer TCP e mantenere variabili TCP sia nel client che nel server, quindi un carico
di lavoro sul server.
La cosa positiva è che mentre nelle connessioni non persistenti ogni scambio di pacchetti ha un onere
di 2 RTT, nelle connessioni persistenti abbiamo solo 1 RTT in quanto si apre la connessione una volta
sola.
Quando si apre la connessione, le richieste possono essere effettuate una di seguito l’altra
(back-to-back), senza aspettare le risposte di quelle pendenti (pipelining).
Il default di HTTP è connessione persistente con pipelining.

2.2.3 Formato dei messaggi HTTP

Messaggio di richiesta HTTP

Di seguito un tipico messaggio di una richiesta http

1. GET /somedir/page.html HTTP/1.1


2. Host: www.somescool.edu
3. Connection: close
4. User-agent: Mozilla/4.0
5. Accept-language: fr

La figura 2.8 rappresente una richiesta HTTP generica

40
Figura 2.8

Analizziamo ora la richiesta:


1. La prima riga è detta riga di richiesta, mentre le altre riga di intestazione
2. La riga di richiesta è composta da 3 campi descritti nella figura 2.8
3. Il campo metodo può assumere diversi valori: GET, POST, HEAD, PUT, DELETE
4. La riga di richiesta si può descrivere come il browser che implementa HTTP 1.1 sta richiedendo
l’oggetto /somedir/page.html.
5. La riga 2 specifica l’host su cui richiedere l’oggetto, è necessaria dalla cache dei proxy web
6. L’intestazione 3 indica che dopo aver fornito il file, il server deve chiudere la connessione.
7. La riga 4 e 5 (per la localizzazione) sono auto esplicative.
La figura 2.8 contiene la sezione Corpo dell’entità (body), che viene utilizzata in una richiesta di tipo POST, per
inviare delle informazioni al server necessarie per la risposta (es: dati in un form).
Le info di un form potrebbero essere inviate anche con un GET nell’URL come query string

Messaggio di risposta HTTP

Di seguito il messaggio di risposta all’esempio trattato precedentemente


1. HTTP/1.1 200 OK
2. Connection: close
3. Date: Thu, 03 Hul 2008 12:00:15 GTM
4. Server: Apache/1.3.0 (Unix)
5. Last-Modified: Sun, 5 May 2008 09:23:24 GTM
6. Content-Length: 6821
7. Content-Type: text/html
8. data data data data data

41
La figura 2.9 rappresenta una risposta generica

Analizziamo ora la risposta


1. La prima riga è detta riga di stato descritta nella figura 2.9
2. Le 6 righe successive righe d’intestazione
3. La riga 8 è il corpo dell’entità
4. La riga 2, indica che il server vuole chiudere la connessione dopo l’invio del messaggio
5. La riga 3 indica la data di creazione del messaggio di risposta
6. La riga 5 è utile per il caching ed indica l’ultima data di modifica del file
7. La riga 6-7 sono esplicative

2.2.4 Interazioni utente-server: cookie

I cookie consentono ai siti web di tener traccia degli utenti (in quanto HTTP è privo di stato).
Un cookie presenta 4 componenti:
1. Una riga di intestazione nel messaggio di risposta HTTP.
Es: un browser guest richiede una pagina, il server nel messaggio di risposta inserisce anche
l’istruzione per settare il cookie id guest, set-cookie: 1678 .
2. Una riga di intestazione nel messaggio di richiesta HTTP
Dopo che il server ha settato il cookie nel primo messaggio di risposta, tutte le richieste successive del
client contengono il cookie settato dal server, cookie: 1678
3. Un file cookie mantenuto sull’host e gestito dal browser.

I cookie possono essere utilizzati anche per creare un livello sessione utente al di sopra di HTTP privo di stato.
La figura 2.10 mostra un tipico esempio di funzionamento di cookie.

1. L’utente contatta per la prima volta il sito di amazon


2. Amazon crea un ID guest 1678 e lo salva sul database
3. Amazon risponde all’utente settando nell’intestazione anche il cookie ID set-cookie: 1678
4. Il browser utente vede nell’intestazione il cookie e lo aggiunge al file cookie

42
5. A questo punto tutte le successive richieste dell’utente contengono il cookie ID guest.

Figura 2.10

2.2.5 Caching web

Una cache web nota anche come server proxy è un entità di rete che soddisfa richiesta HTTP per conto di un
server web di origine, e viene usata per migliorare l’intensità del traffico come vedremo successivamente.
La cache web ha una propria memoria su disco e conserva copie di oggetti che sono stati chiesti di recente.
Generalmente sono acquistate e installata da un ISP. Per esempio un universitò può installare una cache sulla
propria rete interna e configurate tutti i browser per puntare alla cache, questo per migliorare il traffico.
La figura 2.11 mostra un esempio di un browser che sta richiedendo l’ oggetto http://esempio/oggetto.png
1. Il browser stabilisce una connessione TCP con la cache web ed invia la richiesta per un oggetto
2. La cache web controlla se l’oggetto è stato già memorizzato localmente, in caso positivo invia un
messaggio di risposta con l’oggetto richiesto
3. Se la cache web non dispone dell’oggetto, apre una connessione TCP verso il server di origine, ed
invia un messaggio di richiesta dell’oggetto voluto dal browser. Appena ricevuta la richiesta Il server di
origine invia un messaggio di risposta con l’oggetto.

43
4. Quando la cache riceve l’oggetto, lo salva localmente e lo invia al client all’interno di un messaggio di
risposta HTTP

Figura 2.11

Il caching web si è sviluppato per due ragioni :


1. Per ridurre i tempi di risposta alle richieste client.
2. Per ridurre il traffico sul collegamento d’accesso ad internet, con il vantaggio di non dover aggiornare
l’ampiezza di banda (richiedere più banda all’aumentare del traffico.)

Questi due punti possono essere chiariti analizzando le immagini 2.12 e 2.13.
In una rete senza cache (figuran 2.12) tutte le richieste vanno dalla rete locale al server d’origine passando per
il collegamento d’accesso, e subendo il ritardo della rete locale, della rete d’accesso e di internet.
In una rete con cache (figura 2.13), si riduce notevoltente il ritardo descritto dalla figura 2.12 in quanto circa il
40% delle richiesta verrà soddisfatto dalla cache web, che essendo nella rete locale ha dei tempi risposta
nettemente inferiori.

44
Figura 2.12

Figura 2.13

45
2.2.6 Get condizionale

Sebbene il caching riduca i tempi di risposta percepiti dall’utente, introduce un nuovo problema: la copia di un
oggetto nella cache web potrebbe essere scaduta quindi diversa da quella presente nel server web.
Per ovviare a questo è stato introdotto il GET condizionale.
In poche parole quando un browser invia una richiesta di un oggetto alla cache web e l’oggetto è presente
nella cache, quest’ultimo invia una richiesta al server web chiedendo se l’oggetto che ha memorizzato è stato
modificato:
■ Se l’oggetto NON è stato modificato, la cache invia al browser il file che ha memorizzato.
■ Se l’oggetto è stato modificato, il server web nella risposta ritorna anche il nuovo oggetto. La cache
web memorizza il nuovo oggetto e lo restituisce al browser.
Un esempio di oggetto non modificato:
1. Richiesta cache web
■ GET /img/logo.png
■ Host: www. myhost.com
■ If-modified-since : wed, 2 jul 2008 09:23:24 (data ultima modifica)
2. Risposta Server
■ HTTP/1.1 304 Not Modified
■ Date: Mon, 14 Jul 2008 15:39:29
■ Server: Apache/1.3.0 (Unix)
■ (corpo dell’entità vuoto)

2.3 Trasferimento di file: FTP


Per il trasferimento di un file, FTP crea due connessioni parallele TCP
1. Una di controllo
Viene utilizzata per l’autenticazione con username e password
2. Una per i dati
Viene utilizzare per l’effettivo scambio del file

Quindi un utente che vuole inviare un file prima effettua l’accesso con la connessione di controllo e poi invia il
file con la connessioni dati. C’è da notare che la connessione di controllo rimane sempre aperta mentre la
connessione dati viene chiusa subito dopo che l’invio del file è terminato. Quindi se un utente volesse inviare
due file dovrebbe:
1. Aprire una connessione di controllo
2. Aprire e chiudere una connessione dati per l’invio del primo file
3. Aprire e chiudere una connessione dati per l’invio del secondo file
4. Chiudere la connessione di controllo

Si può notare che FTP mantenendo la connessione di controllo aperta, deve mantenere lo stato dell’utente,
quindi associare la connessione ad uno specifico account.
A differenza di HTTP che è stateless, FTP mantiene lo stato utente.

46
2.3.1 Comandi e risposte FTP

I comandi e le risposte sono inviati attraverso la connessione di controllo in formato ASCII a 7 bit.
Ogni comando consiste in 4 caratteri ASCII maiuscoli in alcuni casi seguiti da un argomento.
Di seguito l’elenco dei più comuni
1. USER username: invia l’identificativo utente
2. PASS password: invia la password dell’utente
3. LIST:richiede l’elenco dei file nella directory corrente. L’elenco viene spedito utilizzando una
connessione dati e non quella di controllo.
4. RETR filename: recupera un file (get) dalla directory corrente. L’host remoto crea una connessione dati
ed invia il file
5. STOR filename: inserisce un file (put) nella directory corrente.

Ogni comando ha una corrispondenza 1 ad 1 con la risposta del server.


Ogni risposta è composta da un numero di 3 cifre (come codice di stato in HTTP) ed una descrizione Alcune
tipiche risposte:
1. 331 Username OK, password required
2. 125 Data connection already open; trasfer starting
3. 425 Can’t open data connection
4. 452 Error writing file

2.4 Posta elettronica


La figura 2.16 rappresenta una visione ad alto livello del sistema postale di internet

Figura 2.16
47
La figura è composta da tra elementi principali :
1. agenti utenti (Outlook, Thunderbird etc...)
2. server di posta
3. SMTP (simple mail transfer protocol)

Ogni utente con una mail ha una casella di posta (mailbox) in un server, ed utilizza l’agente utente come client
per scrivere, leggere ed inviare mail.
Un messaggio parte dall’agente utente, scrivendo il messaggio ed inviandolo. L’agente invia il messaggio
verso il server di posta del mittente e viene inoltrato al server di destinazione, dove potrà essere letto dal
destinatario attraverso un agente.
Se il messaggio non può essere consegnato, per esempio perchè il server destinatario è pieno, allora il server
mittente lo mantiene in coda e lo reinoltra ogni 30 minuti.

2.4.1 SMTP

Come già accennato precedentemente SMTP trasferisce i messaggi dal server di posta mittente a quello
destinatario. Essendo molto vecchio (risale a prima del 1982) ha alcune caratteristiche obsolete rispetto alle
attuali esigenze. Per esempio tratta il corpo del messaggio come ASCII 7 bit, che non è adatto allo scambio di
grossi file come immagini, audio e video, in quanto si è costretti a codificare in ASCII prima dell’invio e
decodificarli in ricezione.
Nella figura 2.17 viene descritto il tipico scenario SMTP :
1. Alice invoca il proprio agente utente dall’indirizzo del destinatario, Roberto, compone il messaggio ed
invia
2. L’agente utente di Alice invia il messaggio al server di posta mittente
3. Il lato client di SMTP che gira sul server di Alice, vede il messaggio ed apre una connessione con il
server SMTP che gira sul server di posta di Roberto
4. SMTP client e server si scambiano un handshaking, ed il lato server di SMTP invia il messaggio sulla
connessione TCP
5. Il lato server di SMTP recupera il messaggio e lo posiziona nella casella di posta
6. Roberto invocando il proprio agente può visualizzare il messaggio.

Figura 2.17

48
Analizzando più da vicino lo scambio di messaggi tra lato SMTP client e server notiamo che :
1. il lato client SMTP stabilisce una connessione TCP sulla porta 25
2. il server ed il client effettuano handshaking a livello applicativo.
3. il lato client SMTP invia il messaggio e può contare sul servizio di trasferimento affidabile di TCP
4. nel caso in cui il client abbia più di un messaggio da inviare può sfruttare la stessa connessione
(connessione persistente) e chiuderla al termine.

Di seguito un esempio di messaggio scambiato tra client e server subito dopo aver stabilito la connessione
TCP.
1. S indica il server con nome hamburger.edu
2. C indica il client con nome creper.fr
3. Il messaggio di testo inviato è Do you like ketchup? How about pickles ?
4. Il punto (.) indica la fine del messaggio testuale
5. Se il client volesse inviare un altro messaggio incomincierebbe dalla rifa MAIL FROM : <indirizzo>

Figura 2.17A

2.4.3 Formati dei messaggi di poste e MIME

Il messaggio inviato, contiene oltre al corso delle intestazioni che contengono delle informazioni di servizio,
descritte nella RFC 822.
Queste intestazioni contengono informazioni leggibili, ogni riga è costituita da una parola chiave seguita da
due punti a loro volta seguiti da un valore.
Ci sono alcune intestazioni obbligatorie quali From: e To: ed altre no come per esempio Subject: .
Queste intestazioni non sono da confondere con i comandi del paragrafo 2.4.1, in quanto quelli erano
necessari per la comunicazione SMTP questi invece fanno parte del messaggio stesso.
Un altra intestazione è Received: che è inserita dal Server destinatario subito dopo aver ricevuto il messaggio.
Quest’intestazione contiene il mittente ed il destinatario e la data di ricezione
Es: Received: from crepes.fr by hamburger.edu; 12 oct 98 15:37:39 GTM

49
Estensioni MIME per dati non ASCII

MIME (Multipurpose Internet Mail Extension) sono delle intestazioni utilizzate per l’invio di messaggi non ASCII
come per esempio testi che contengono caratteri non ASCII come il francese o messaggi che contengono
contenuti diversi da testo come immagini, video etc..
Le intestazioni MIME per il supporto dei contenuti multimediali sono:
1. Content-Type:
indica la tipologia di contenuto es: img/jpg.
2. Content-Transfer-Encoding:
Considerato che SMTP utilizza ASCII, occorre codificare il contenuto in ASCII. Quest’ intestazione
indica l’encoding utilizzato per codificare il messaggio in ASCII.
Quando un agente utente riceve un messaggio utilizza Content-Transfer-Encoding: per convertire il corpo del
messaggio nel formato originale e poi Content-Type per capire di che contenuto si tratta ed agire di
conseguenze.
Un esempio di intestazione con contenuto JPG
■ From: alice@crepes.fr
■ To: rob@hamburger.edu
■ Subject: picture of yummy crepes
■ MIME-Version: 1.0
■ Content-Transfer-Encoding: base64
■ Content-Type: image/jpg
■ riga vuota
■ (base64 encoded data .................... base64 encoded data)

Le intestazioni MIME per la gestione dei caratteri speciali non n inglesi è quoted-printable.

2.4.4 Protocolli di accesso alla posta

Quando il mittente invia un messaggio al destinatario (tramite SMTP), questo messaggio finisce nel server di
posta (sul proprio provider mail). Per far si che il messaggio finisca sull’agente utente destinatario vengono
utilizzati due protocolli POP3 (Post Office Protocol) e IMAP (Internet Mail Access Protocol) che trasferiscono i
messaggi dal provider mail all’agente utente.

POP3

Il protocollo POP3 è un protocollo di accesso alla posta:


■ estremamente semplice
■ con funzionalità sono piuttosto limitate
■ che non trasporta informazioni di strato tra le sessioni, questo semplifica molto l’implementazione
POP3 entra in azione quando l’agente utente apre una connessione TCP verso il server di posta sulla porta
110. Una volta che la connessione è stabilita, POP3 procede in tre fasi:
1. Autenticazione
L’agente utente invia le credenziali in chiaro (username e password) per autenticare l’utente
2. Transizione
Recupera i messaggi. Può anche marcare i messaggi per la cancellazione (necessario per la funzione

50
“scarica e cancella” descritta di seguito)
3. Aggiornamento
Questa fase parte subito dopo il comando quit che chiude la sessione POP3. In questo istante il server
cancella tutti i messaggi marcati per la rimozione

Un agente utente può essere configurato per:


1. scaricare e cancellare
vuol dire che quando l’agente scarica i messaggi dal server li marca come da cancellare. Quindi
abbiamo che il messaggio è caricato nell’agente utente ma non è più presente sul server mail.
2. scaricare e mantenere
l’agente utente lascia i messaggi sul server dopo averlo scaricati.

IMAP

Il protocollo IMAP è protocollo di accesso alla posta con molte più potenzialità rispetto al POP3:
1. permette di mantenere una gerarchia di cartelle/messaggi direttamente sul server, a differenza di POP3
che lo permette solo in locale.
2. associa una cartella ad ogni messaggio, in particolare quelli in arrivo sono associati ad INBOX
3. fornisce comandi per spostare messaggi, segnarli come letti, cancellarli etc. Tutte le modifiche vengono
memorizzate sul server.
4. permette di ottenere componenti sui messaggi (richiedere solo una parte dei messaggi). Per esempio
un agente utente può tenere solo l’intestazione o una parte del messaggio MIME. Questa caratteristica
è molto importante per le connessione con una banda limitata.
5. tutti gli agenti utente connessi allo stesso indirizzo (es: webmail, thunderbird), sono aggiornati con il
server mail. Quindi se cancello un messaggio, questo viene cancellato da tutti gli agenti utente

2.5 DNS: il servizio di directory di Internet


Gli host internet possono essere identificati in due modi :
1. hostname (es: www.google.com), non comprensibili dai server
2. indirizzo IP

DNS offre i seguenti servizi:


1. Traduzione hostname in IP
Tradurre gli host name in indirizzi IP. Facciamo un esempio di funzionamento del DNS nel caso di
richiesta della URL www.someschool.edu/index.html :
a. affinché l’host client sia in grado di contrattare il server www.someschool.edu, deve prima di
tutto conoscere il suo indirizzo IP
b. sull’host client gira il client dell’applicazione DNS (per recuperare l’IP)
c. il browser passa all’applicazione DNS il nome dell’host dalla URL www.someschool.edu.
d. il client DNS invia una query contenente l’hostname a un server DNS
e. il server DNS associa l’hostname all’IP e lo restituisce al client DNS.
f. ricevuto l’indirizzo IP il browser può aprire una connessione TCP verso il server HTTP sul
quell’indirizzo IP.
2. Host aliasing
51
Possono esserci degli host con un nome molto complesso es: realy.west.coast.enterprise.com (viene
definito hostname canonico), questo servizio offre la possibilità di creare un alias ovveri un indirizzo
più leggibile es: enterprise.com o www.enterprise.com. Il DNS può essere invocato da un applicazione
per ottenere l’indirizzo canonico di un alias.
3. Mail server aliasing
Lo stesso discorso dell’host aliasing può essere applicato per questo tipo di servizio. Se l’host canonico
è troppo lungo si può creare un alias. Es: rob@realy.west.coast.enterprise.com può avere un alias
rob@enterprise.com .
4. Distribuzione locale
Questo servizio viene utilizzato per distribuire il carico tra server replicati, come per esempio i server
web. I siti con parecchio traffico vengono replicati su più server con indirizzi IP differenti. Anche in
questo caso va associato comunque un host canonico a indirizzi IP. I DNS permettono di mappare più
indirizzi IP su un host canonico, succede quindi che quando i client DNS effettuano una query al server
DNS per la traduzione del host canonico, il server DNS ritorna una lista di indirizzi IP ordinata
casualmente. Dato che generalmente un client invia la sua richiesta HTTP al primo indirizzo IP, grazie
all’ordinamento randomico abbiamo una distribuzione casuale delle chiamate sui vari server replicati.

Le caratteristiche principali del DNS (domain name server) sono:


1. è un database distribuito in una gerarchia di server DNS
2. è un protocollo a livello applicazione che consente agli host di interrogare il database per mappare un
hostname sul relativo indirizzo IP.
3. generalmente sono macchine UNIX che eseguono il software Berkeley Internet Name Domain (BIND)
4. il protocollo DNS gira su UDP sulla porta 53
5. viene comunemente utilizzato da altri protocolli a livello di applicazione quali HTTP, SMTP e FTP.
6. introduce un ritardo aggiuntivo. Fortunatamente i server DNS si trovano nelle cache di un server DNS
vicino quindi i tempi si riducono.

2.5.2 Panoramica su DNS

Per la traduzione degli host name DNS utilizza un gran numero di servers organizzati in maniera gerarchica e
distruiti in tutto il mondo.
Esistono 3 classi di server DNS organizzati in una gerarchia illustarta nella figura 2.19, ed 1 il quarto che non
appartiene strettamente alla gerarchia :
1. Server radice (root server)
Esistono 13 server radice DNS etichettati da A a M, dislocati in tutto il mondo. Ogni server è un cluster
di server replicati
2. Server top-level domain (TLD)
Questi server si occupano dei domini di alto livello quali com, net, edu e gov, e di tutti i domini locali
come it,fr,uk etc..
3. Server di competenza (authoritative server)
Ogni organizzazione dotata di host internet pubblica (es: server web o di posta ) deve fornire record
DNS di pubblico dominio che mappino i nomi di tali host in indirizzi IP. Un organnizzazione può
scegliere di implementare il proprio server di compentenza o di pagare un fornitore di servizi per
ospitare questi record.
4. Server locale DNS
Questo server non apartiene strettamente alla gerarchia illustrata nella figura 2.19.
Ogni rete locale (ISP aziendale, universitario), ha un server DNS locale che assegna gli indirizzi IP per

52
identificare gli host all’interno delle rete privata. Se presente ogni chiamata per la mappatura passa da
qui

Figura 2.19

Ricerca di un DNS

Quando un host effettua una richiesta, la query viene inviata al server DNS locale, che opera da proxy ed
inoltra la query in una gerarchia di server DNS.
Analizziamo l’immagine 2.21 che rappresenta la ricerca di un DNS.
Supponiamo che :
1. L’host cis.poly.edu(host richiedente) vuole l’indirizo IP di gaia.cs.umas.edu
2. L’ host richiedente è all’interno di una rete universitaria che ha il DNS dns.poly.edu
3. Il server di competenza di gaia.cs.umas.edu è dns.umas.edu
Il flusso di ricerca è il seguente:
1. L’host richiedente cis.poly.edu invia un mesaggio, con l’host da tradurre, di richiesta al DNS locale
dns.poly.edu
2. Il server locale inoltra il messagio di richiesta ad un server radice
3. Il server radice analizza il suffisso in questo caso .edu e restituisce al server locale un elenco di indirizzi
ip per i server TLD che sono responsabili dei domini .edu
4. Il server locale ricevuta questa lista, reinoltra la richiesta dell’host da tradurre ad uno di questi indirizzi
TLD
5. Il server TLD analizza il suffisso emass.edu e risponde con l’indirizzo IP del server di competenza
ossia dns.umas.edu
6. Il sever locale ricevuto quest’indirizzo IP, reinoltra la richiesta dell’host da tradurre all’indirizzo IP
ottenuto, cioè il server di competenza dns.umas.edu
7. Il server di competenza risponde alla richiesta con l’indirizzo IP dell’indirizzo da tradurre
gaia.cs.umas.edu.
Si noti che per ottenere la mappatura sono stati inviati be 8 messaggi.Vedremo come il caching riduca i
messaggi scambiati
Da inserire query ricorsive e query iterative

53
Figura 2.21

Caching DNS

L’idea di base è che in una concatenazione di richieste, il DNS che riceve una risposta DNS può mettere in
cache le informazioni contenute.
Prendendo in considerazione l’esempio analizzato nella figura 2.21, ogni volta che il server locale dns.poly.edu
richeve una risposta da qualche DNS, può conservare in cache le informazioni contenute nella risposta. In
questo modo, per le richieste successive di cis.poly.edu contenute in cache non occorrerà inviare gli 8
messaggi per ottenere la mappatura, ma sarà immediata.
Dato che la mappatura hostname e IP non è permanente, i server DNS invalidano la cache dopo un certo
periodi (di norma 2 giorni).
Inoltre un server locale DNS può memorizzare gli indirizzi dei server TLD in modo da evitare la chiamata al
server radice.

2.5.3 Record e messaggi DNS

I server DNS memorizzano i così detti record di risorsa (RR, resource record), tra cui quelli che forniscono la
mappatura tra hostname ed indirizzo.
Un record di risorsa contiene i seguenti campi (Name, Value,Type, TTL)

54
■ TTL è il time to lice determina quando una risorsa va rimossa dalla cache
■ Il significato di Name e Value, dipede da Type
Di seguito le varie tipologie di RR:
■ Type = A
○ Name = nome dell’host
○ Value = indirizzo IP
○ Es = ( realy1.bar.foo.com, 145.37.93.126, A)
○ fornisce la corrispondenza tra hostname ed indirizo IP.
■ Type = NS
○ Name = è un dominio
○ Value = è l’hostname del server DNS di competenza che sa come ottenere gli indirizzi IP degli
host del dominio.
○ Es = (foo.com, dns.foo.com, NS)
○ viene usato per instradare le richieste DNS più avanti nella concatenazione
■ Type = CNAME
○ Name = alias per il nome canonico
○ Value = nome canonico
○ Es = (foo.com, realy1.bar.foo.com, CNAME)
○ fornisce agli host richidenti il nome canonico relativo a un hostname
■ Type = MX
○ Name = alias del nome canonico di un server di posta
○ Value = nome canonico di un server di posta
○ Es = (foo.com, mail.bar.foo.com, MX)
○ un esempo pratico è arvix usato per mitiko. Il loto mail server è su mail.cp.arvix.com. Con un
nodo MX facciamo puntare mitiko.org su arvix in questo modo (mitiko.org,mail.cp.arvix.com,
MX)

Occorre notare che :


1. Se un server DNS è di competenza di un certo hostname (siamo nell’ultimo livello per arrivare
all’indirizzo IP del host ), allora conterrà un recotd di tipo A. Anche se un server non fosse di
competenza, potrebbe comunque averlo nell cache
2. Se un server DNS non è di competenza per un certo hostname, allora conterra un record di tipo NS al
dominio di compentenza del hostname. Conterrà anche un record A che fornisce l’indirizo IP, al dominio
scritto nel campo value del record NS.

Messaggi DNS

I DNS comunicano attraverso due tipi di messaggi, le query di richiesta ed i messaggi di risposta. Entrambi
anno lo stesso formato descritto nella figura 2.23
La semantica dei messaggi e la seguente :
■ Sezione d’intestazione grande 12 byte composta a sua volta da :
● Identificatore, un campo da 16 bit che è id della richiesta.
● Flag composto da vari flag :
○ Un bit per iditificare se si tratta di una query (0) o di una risposta (1)
○ Un bit di competenza, impostato nei messaggi di risposta quando il DNS è competente
per l’ hostame richiesto
○ Un bit per la richiesta di ricorsione, viene impostato quando un client desidera che il

55
server DNS effettui una ricorsione quando non dispone del record richiesto.
● 4 campi number-of che indicano il numero di occorrenze delle quattro sezioni di tipo dati che
seguono l’intestazione
■ Sezione della domanda contiene informazioni sulla richiesta che sta per essere efettuata tra cui
● un campo con il nome richiesto
● un campo con il tipo della domanda sul nome richiesto. Per esempio un indirizzo host associato
ad un nome (tipo A)
■ Sezione risposta contiene i record di risorsa relativi al nome richiesti. Questa sezione può contenere
più record RR è il caso dei server replicati descritti in precedenza.
■ Sezione della competenza contiene i record di altri server di competenza
■ Sezione aggiuntiva racchiude altri record utili. Se per esempio la sezione di risposta contiene un
record MX che fornisce l’hostname canonico del serer diposta, la sezione aggiuntiva contiene un record
di tipo A che fornisce l’indirizzo IP del hostname canonico

Figura 2.23

Inserire record nel database DNS

Per inserire networkutopia.com nel databasse DNS occorre registrare il domino presso un ente di registrazione
registrar (è un entità commerciale che verifica l’unicità del dominio e lo inserisce nel database). Durante la
registrazione :
1. occorre fornire al registrare alcuni parametri di configurazione i nomi e gli indirizzi IP dei server DNS di
competenza
■ primario dns1.networkutopia.com con IP 212.212.212.1
■ secondario dns2.networkutopia.com con IP 212.212.212.2
2. il registar, per ciascuno dei due server, inserisce nei server TLD un record NS ed uno A,
■ (networkutopia.com,dns1.networkutopia.com,NS)
■ (dns1.networkutopia.com,212.212.212.1,A)

56
3. occorre inoltre accertarsi che nei propri server di competenza sia impostato :
■ un record A per www.networkutopia.com (www.networkutopia.com,212.212.212.4,A)
■ un record MX per mail.networkutopia.com (networkutopia.com,212.212.212.5, MX)
Completati questi passi sarà possibile visitare il sito web e mandare mail.
Per vedere se tutto funnziona correttamente simuliamo la richiesta di www.networkutopia.com
1. Alice richiede www.networkutopia.com
2. L’host di Alice invierà una richiestta al server locale DNS.
3. Se il server locale DNS non ha in cache gli indirizzi del server TLD .com contatta il server radice che
ritornerà i record per i server TLD. Il server TLD contiene i record elencati nel punto 1 e punto 2.
4. Il sever locale invierà una richiesta al 212.212.212.1, per mappare www.networkutopia.com,
richiedendo quindi un record A (perchè è il server di competenza)
5. Il server 212.212.212.1 restituirà 212.212.212.4 che è l’indirizzo IP di www.networkutopia.com

2.6 Applicazioni peer-to-peer


2.6.1 Distribuzione di file P2P

Consideriamo una tipica applicazione, cioè la distribuzione di un file voluminoso da un singolo server a un
gran numero di host.
Vediamo le differenze di quest’operazione tra un architettura client-server ed una peer-to-peer
■ client-server
Il server deve inviare una copia del file a ciascun peer, ponendo un enorme fardello sul server e
consumando molta banda
■ peer-to-peer
Ciascun peer può redistribuire agli altri qualsiasi porzione del file abbia ricevuto, aiutando così il server
nel processo di distribuzione.

BitTorrent

Analiziamo le linee generali :


■ BitTorrent è un protocollo P2P
■ Nel gergo l’insieme dei peer che partecipano alla distrubuzione di un file è chiamato torrent
■ I peer in un torrent scaricano parti(chunk) del file di uguale dimensione
■ Quando un peer entra a far parte di un torrent per la prima volta non ha parti del file.
■ Col passare del tempo accumula parti del file che invia agli altri peer mentre scarica altre parti.
■ Una volta che un peer ha acquisito un file può uscire dal torrent o rimanere per inviare parti del file ad
altri peer.
■ Un peer può lasciare il torrent in qualsiasi momento, per poi rientrare e continuare a scaricare

Entriamo nello specifico ed analizziano la figura 2.26


1. Ciascun torrent nodo ha un infrastruttura chiamato tracker, che mantiene la lista di tutti i peer iscritti a
quel torrent.
2. Quando Alice entra a far parte del torrent, il tracker selezione un sottoinsieme di peer presente ed invia
ad alice i loro indirizzi IP
3. Alice tenta di stabilire una connessione TCP con tutti i peer della lista. I peer con i quali è riuscita ad
ottenere una connnessione vengono chiamatu peer vicini (neightboring peer). I peer vicini possono
cambiare nel tempo in quanto alcuni possono lasciare il torrent ed altri possono connetersi con alice

57
4. Alice chiede periodicamente la lista delle parti ai peer ed in base a questo chiedà connessioni per
termianre il download
5. Alice deve decidere :
a. Quali parti chiedere ai propri vicini
Alice adotta la tecnica rate first (il più raro per primo). Cioè determina tra i suoi vicini quali parti
sono più rare. In questo modo si cerca di mantenere in numero uguale ogni copia.
b. A quali parti inviare le proprie parti
BitTorrent utilizza il seguent algoritmo di trading, che ha come idea di base dare priorità ai vicini
che le stanno inviando parti di file alla frequenza più alta.
Alice misura periodicamente la frequenza di invio e sceglie i 4 peer che stanno inviando a
frequenza più alta. Può accadere che uno dei 4 peer scelga di lasciare la connessione, allora
Alice sceglie casualmente un altro peer e se la connessione la soddisfa incomincia ad inviare
parti di file al peer scelto.
Un problema diffuso è il free-riding, nel quale un peer scarica senza inviare parti di file. Cioè se
Alice vuole scaricare ad una frequenza decende, deve anche inviare ad una frequenza decente.

Figura 2.26

2.7 Programmazione delle socket con TCP (da studiare)


2.8 Programmazione delle socket con UDP (da studiare)

58
CAPITOLO 3 - LIVELLO DI TRASPORTO

3.1 Introduzione e servizi a livello di trasporto


Il protocollo a livello di trasporto mette a disposizione una comunicazione logica tra i processi applicativi di host
differenti. Dal punto di vista dell’applicazione vuol dire che tutto procede come se i processi fossero
direttamente connessi.
I protocolli a livello di trasporto sono implementati nei sistemi terminali, ma non nei router di rete.
Lato mittente :
1. Il livello di trasporto converte i messaggi passati dal livello applicazione
2. Gli spezzetta ed aggiunge un'intestazione di trasporto
3. Passa il segmento a livello di rete.
Lato destinatario
1. Il livello di rete estrai il datagramma e lo passa a livello di trasporto
2. Il livello di trasporto elabora il segmento ricevuto e lo passa a livello applicazione.

Occorre notare che il livello di trasporto è implementato soltanto negli host terminali e non nei router.
Nella figura 3.1 viene descritto il livello di trasporto

59
Figura 3.1

3.1.1 Relazione tra i livelli di trasporto e di rete

La differenza principale tra livello di trasporto e livello di rete e che il livello di trasporto mette a disposizione
una comunicazione logica tra i processi che girano su host differente, mentre il livello di rete mette fornisce
una comunicazione logica tra host.

Nel paragrafo sono presenti delle analogie con la vita reale che non sono state riportate.

3.1.2 Panoramica sul livello di trasporto in Internet

A livello di trasporto, internet mette a disposizione due protocolli UDP e TCP che hanno il compito di estendere
i servizi di consegna offerti dal livello di rete con il protocollo IP (non affidabile) “tra sistemi terminali” a quello
di consegna tra “processi in esecuzione tra sistemi terminali”.

60
Il passaggio che avviene da “host to host” (IP) e “process to process” (UDP o TCP), quindi il passaggio tra
livello di rete a livello di trasporto, viene detto multiplexing e demultiplexing.
1. UDP offre un servizio non affidabile e senza connessione nello specifico :
a. multiplexing e demultiplexing
b. controllo di integrità includendo dei campi di riconoscimento dell’errore nell'intestazione del
segmento.
2. TCP, offre un servizio affidabile con connessione nello specifico :
a. multiplexing e demultiplexing
b. controllo di integrità includendo dei campi di riconoscimento dell’errore nell'intestazione del
segmento.
c. trasferimento dati affidabile : converte il servizio inaffidabile di IP in un servizio affidabile,
grazie al controllo del flusso, ai numeri di sequenza e agli acknowledgment e timer
d. controllo di congestione : evita che le connessioni TCP intasino i collegamenti ed i router
con un eccessiva quantità di traffico. In poche parole regola la frequenza alla quale il mittente
invia traffico in rete.

3.2 Multiplexing e demultiplexing


Il multiplexing e il demultiplexing permette di trasformare il servizio di trasporto host-to-host (del livello di rete),
in un servizio di trasporto process-to-process (del livello di trasporto).
In poche parole il livello di trasporto riceve i segmenti dal livello di rete e deve consegnarli al processo
applicativo corretto in esecuzione sull’ host.
Facendo un esempio, supponiamo che su un host ci siano in esecuzione un servizio FTP, due Telnet, e un
HTTP. Quindi il livello di trasporto quando arrivano dei segmenti deve scegliere a quale processo inviarli.
In realtà, il livello di trasporto non invia i dati direttamente al processo ma ad un socket con un identificativo
ben preciso, che gli inoltra al processo (figura 3.2).
Per indirizzare correttamente il segmento alla socket esatta,il livello di trasporto ha a disposizione alcuni campi
del segmento stesso come descritto nella figura 3.3 e sono :
1. il campo numero di porta di origine
2. il capo numero di porta di destinazione
I campi numero di porta sono composti da 16 bit e vanno da 0 a 65535. Quelli che vanno da 0 a 1023 sono
detti numeri di porta noti (es: HTTP 80, FTP 21).

Figura 3.2

61
Figura 3.3

Ora definiano singolarmente multiplexing e demultiplexing


1. Multiplexing
Il livello di trasporto dell’host d’origine, raduna porzioni di dati derivanti da vari socket, gli incapsula
inserendo le informazioni di intestazioni e invia questi dati a livello di rete
2. Demultiplexing
I segmenti arrivati dal livello di rete vengono analizzati dal livello di trasporto ed inoltrati alla socket
corretta.

Facendo un'analogia, il multiplexing e quando un portiere di un ufficio raccoglie tutte le lettere per imbucarle,
mentre il demultiplexing e quando lo stesso portiere prende le lettere dalla cassetta per consegnarle agli uffici
corretti.

Multiplexing e demultiplexing senza connessione (UDP)

Ogni socket UDP è identificata da :


1. un indirizzo IP, l’indirizzo dell’host d’appartenenza
2. un numero di porta, generato in fase si sviluppo dell’applicazione ed assegnato dal programmatore o
dal sistema.

Analizziamo ora la figura 3.4


1. Un processo nell’ host A con porta UDP 19157 voglia inviare dei dati ad un processo sul host B con
porta UDP 46428
2. Il livello di trasporto crea un segmento che include :
a. numero porta d’origine 19157
b. numero porta di destinazione 46428
c. dati applicativi
3. Il livello di trasporto passa il segmento al livello di rete che lo incampula in un datagramma con
l’indirizzo IP che effettua un tentativo di consegna
4. Se il segmento arriva sull’ host B, il livello di trasporto esamina il numero di potra di destinazione del
segmento (46428) e lo consegna alla socket identificata da 46428.
5. Se l’host B volesse inviare una risposta all host A, allora recupererebbe dal segmento la porta d’origine
e creerebbe il segmento di risposta dove la porta di origine è uguale alla porta 46428 e la porta di

62
destinazione 19157 (inverte le porta del segmento originale).

Figura 3.4

Multiplexing e demultiplexing orientato alla connesione (TCP)

Una socket TCP è identificata da :


1. Indirizzo IP d’origine + porta d’origine
2. Indirizzo IP di destinazione + porta di destinazione

Da notare la differenza con una socket UDP composta solo da indirizzo IP d’appartenza e porta.
Questo perchè occorre stabilire una connessione, ovvero creare un socket ad-hoc per ogni connessione.
Di conseguenza ogni socket di destinazione per essere identificata deve essere composta sia dall’indirizzo IP
del host + la porta e sia dall’ IP + porta dell’ host mittente che sta creando la socket.
Lo scambio di dati avviene seguendo questi passsi:
1. Si crea una connessione quindi viene creata una socket.
2. L’ host mittende invia un segmento che contiene i dati della socket appena creata
a. Indirizzo IP mittente + socket d’origine
b. Indirizzo IP destinatario + socket di destinazione
3. L’ host di destinazione quando riceve questo segmento, analizza i dati ed gli indirizza verso la socket
corretta, facendo il mactching con “Indirizzo IP mittente + socket d’origine e Indirizzo IP destinatario +
socket di destinazione” . Questo perchè è stata create una socket ad-hoc per la connessione con uno
specifico host mittente.

63
Figura 3.5

Server web e TCP (da studiare)


Da studiare ma di poco interesse.
Descrive come arrivano le richiesta ad un server HTTP sulla porta 80. Per ogni richiesta viene aperto una
connessione e quindi un socket.

3.3 Trasporto senza connessione : UDP

UDP è un protocollo essenziale, che :


1. implementa multiplexing/demultiplexing
2. implementa un minimo controllo d’errore
3. non implementa handshaking ed è per questo che è senza connnessione

Il comportamento di UDP in invio e ricezione è il seguente:


● Invio
1. Aggiunge il numero di porta di origine e destinazione utilizzato per multiplezing deplexing + due
altri piccoli campi
2. passa il segmento al livello di rete
● Ricezione
1. Utilizza il numero di porta di destinazione per consegnare i dati al processo applicativo corretto

64
Un esempio di protocollo UDP a livello applicativo è il DNS. Queste le operazioni eseguite quando
l’applicazione DNS effettua una questi query
1. L’applicazione DNS costruisce un messaggio di query e lo passa ad UDP senza alcun tipo di
handshaking
2. Il lato host UDP aggiunge campi di intestazione e lo trasferisce al livello di rete
3. Il livello di rete incapsula il messaggio in un datagramma e lo invia al server DNS
4. Il DNS che interroga (quello che ha inviato la query), rimane in attesa di risposta, se non riceve alcuna
risposta tenta di chiamare un altro server DNS oppure avvisa l’applicazione dell’impossibilità di ottenere
le informazioni

Ci si potrebbe chiedere il perchè costruire un applicazione con UDP. Molte applicazioni scelgono questa strada
per i seguenti motivi :
1. Controllo più sottile a livello di applicazione su quali dati sono inviati e quanto
UDP da un controllo maggiore rispetto a TCP in quanto si limita ad impacchettare i dati e a trasferirli
immediatamente al livello di trasporto.
TCP invece gestisce la congestione, rimane in attesa di della notifica di ricezione di un messaggio,
privilegiando l’affidabilità e trascurando il tempo rischiesto per ogni transazione.
Quindi il tipo di approccio TCP non è adatto add applicazioni real time che tollerano perdite di dati e
non sopportano un eccessiri ritardi nella trasmissione.
2. Nessuna connessione stabilita
UDP non stabilisce alcun tipo di connesione ed incomincia a sparara subito dati, non introducendo
quindi ritardo per stabilire una connnessione. TCP inceve ha un handshake a tre vie prima di iniziare il
trasferimento
3. Nessuno stato di connessione
UDP non mantiene alcuna informazione riguardante lo stato della connessione, quindi un server è in
grado di lanciare più applicazioni client rispetto a TCP che inceve mantiene lo stato della connessone
4. Intestrazioni di pacchetto più corte
UDP ha un intestazione di 8 byte mentre TCP 20

La figura 3.6 elenca alcune diffuse applicazioni internet ed i relativi protocolli

65
Figura 3.6

3.3.1 Struttura dei segmenti UDP

La figura 3.7 mostra la struttura di un segmento UDP che è così composta


1. Header
● N° porta origine e destinazione, utilizzati dall’host destinazione per consegnare il segmento al
processo corretto
● Checksum, utilizzato dall’host destinazione per capire se ci sono stati errori durante la
trasmissione
2. Dati applicazione
Questo campo viene riempito con il messaggio dell'applicazione, per esempio per applicazioni di
streaming audio è riempito con campini audio.

Figura 3.7

66
3.3.2 Checksum UDP

La checksum viene utilizzata per il rilevamento degli errori, ovvero se i bit sono stati alterati durante il loro
percorso.
La checksum funziona su due lati, invio e ricezione:
1. Invio del segmento
La checksum in fase di invio viene creata sommando tutte le parole da 16 bit nel segmento e facendo il
complemento bit a bit (ovvero converte i bit del risultato da 0 a 1 e viceversa).
2. Ricezione del pacchetto
Vengono sommate tutte le parole più il checksum e se il risultato è 1111111111111111 allora non ci sono
stati errori, in caso contrario, se soltanto un bit è 0 vuol dire che c’è stato un errore in trasmissione.

Nonostante anche gli altri livelli mettano a disposizione la gestione dell’errore, UDP implementa il checksum
ugualmente in quanto non c’è garanzia che tutti i collegamenti tra origine e destinazione controllino gli errori.
Sebbene UDP metta a disposizione il checksum, non fa nulla per correggere eventuali errori. Alcuni si limitano
a scartarlo altre lo inviano all’applicazione con un avvenimento,

3.4 Principi del trasferimento dati affidabile


Per trasferimento affidabile si intende che nessun bit trasferito sia corrotto o vada perduto, e che mantenga
l’ordine d’invio.
Il problema del trasferimento affidabile non è soltanto a livello di trasporto ma anche a livello di collegamento e
applicazione.
Il compito dei protocolli di trasferimento affidabile è quello di garantire un trasmerimento afffidabile ovvero
creare un canale affidabile dove porter scambiare i dati, come descritto nella figura 3.8 a.
La figura 3.8 b mostra l’interfaccia per i nostri protocolli di trasferimento dati.
● Il canale inaffidabile può essere composto o da un singolo collegamento oppure da una rete, ma
comunque da elementi con conessione inaffidabile.
● lato invio, viene invocato rdt_send() (reliable data transfer), per inviare i dati, con suffisso _send che
indica che l’operazione è chiamata lato invio
● lato ricezione vengono raccolti i pacchetti che arrivano tramite rdt_rcv(). Per passare il pacchetto al
livello superiore, il protocollo rdt chiamerà deliver_data()
● entrambi i lati si scambiano pacccheti di controllo invocando udt_send (unreliable data transfert)

67
Figura 3.8 a

3.4.1 Costruzione di un protocolli di trasferimento affidabile

Prima di procedere qui descritte le notazioni sulle figura:


1. L’evento che causa la transazione è scritto sopra la linea orizontale
2. Le azioni intraprese a seguito dell’evento sono scritte sotto la linea orizontale
3. Quando un evento non determina un azione e quando viene intrapresa un azione senza il verificarsi di
un evento, useremo la lettere Λ lambda, rispettivamente sotto o sopra la linea orizontaleper indicare la
mancana di un azione o di un evento.
4. Lo stato iniziale dell’automa è indicato con una freccia tratteggiata

Trasferimento dati affidabile su un canale perfettamente affidabile: rdt 1.0

In questo tipo di trasferimento descritto nella figura 3.9 (non è reale, ma viene proposto per incominciare ad
introdurre) si ipotizza che :
1. non c’è differenza tra unità di dati e pacchetto
2. tutti i pacchetti vanno dal mittente al destinatario su un canale perfettamente affidabile
3. non c’è alcun bisogno che il destinatario fornisca informazioni al mittente (es: es: possibili errori), dato
che niente può andare storto
4. il destinatario riceve i dati alla stessa frequenza del mittente.

Le figura 3.9a e 39b descrivono rispettivamente l’automa mittente e quello destinatario:


● Lato invio (mittente)
68
a. il mittente rimane in attesa di una chiamata dal livello superiore
b. il livello superiore chiama rdt_send(data) passando i dati
c. allo scattare dell’evento rdt_send(data), rdt crea un pacchetto con l’azione make_pkt(data) e lo
invia sul canale
● Lato ricezione (destinatario)
a. il destinatario rimane in attesa di una chiamata dal livello inferiore
b. il livello inferiore chiama rdt_rcv(packet) passando il paccchetto inviato dal mittente
c. allo scattare dell’evento rdt_rcv(packet), rdt:
i. estrae i dati con extract(packet, data)
ii. passa i dati estratti a livello superio con deliver_data(data)

Dato che gli automi hanno un unico stato le transazioni (indicate dalle frecce), hanno luogo necessariamente
tra quello stato e se stesso.

Figura 3.9

Trasferimento dati affidabile con errori sui bit : rdt 2.0

In questo tipo di trasmissione si ipotizza che :


1. I bit possono essere corrotti. Gli errori si possono verifica per esempio quando il pacchetto viene
trasmesso, propagato o nei buffer.
2. Tutti i pacchetti trasmessi vengono ricevuto nello stesso ordine d’invio
3. Il destinatario riceve i dati alla stessa frequenza del mittente.

Prima di procedere con la spiegazione del protocollo possiamo far un analogia con il mondo umano. Un tipico
esempio è la conversazione tra due persone. Chi riceve il messaggio può dire OK se ha capito oppure
Perfavore ripeti. Queste info permettono a chi invia il messaggio di far capire se deve ripetere o no.
69
Nel contesto delle reti di calcolatori, i protocolli di trasferimento dati affidabile basati su questa tipologia di
protocolli sono noti come protocolli ARQ(Automatic Repeat reQuest).
Per gestire la presenza d’errori, i prottocolli ARQ devono implementare
● Rilevamento dell’errore
E’ un meccanismo che serve al destinatario per rilevare gli errori. Questa tecnica richiede l’inivio di
informazioni aggiuntivi memorizzate nel checksum. UDP utilizza il checksum per rilevare gli errori
● Feedback del destinatario
E’ un meccanismo che permette al destinatario che permette di inviare una notifica al mittente. ACK in
caso positivo, NAK in quello negativo.
● Ritrasmissione
Un pacchetto ricevuto con errori sarà ritrasmesso.

La figura 3.10 illustra l’automa che descrive rdt2.0, viene divisa in due parti (nota : le operazion possono anche
essere salltate):
● Lato invio, presenta due stati
1. Stato sinistro
a. Rimane in attesa di una chiamata del livello superiore per raccogliere i dati
b. Il livello superiore chiama rdt_send(data) passando i dati
c. Allo scattare dell’evento rdt_send(data), rdt crea un pacchetto (sndpkt) con l’azione
make_pkt(data, checksum) che contiene sia i dati da inviare che il checcksum e lo invia
sul canale tramite l’operazione udt_send(sndpkt).
2. Stato destro
a. Rimane in attesa di un pacchetto ACK o NAK dal destinatario
b. Se viene ricevuto un ACK tramite rdt_rcv(rcvpkt) && isACK(), vuol dire che l’invio
dell’ultimo pacchetto inviato è andato a buon fine
c. Se viene ricevuto un NACK tramite rdt_rcv(rcvpkt) && isNACK(), vuol dire che l’invio
dell’ultimo pacchetto inviato non è andato a buon fine, e quindi viene reinviato l’ultimo
pacchetto e rimane in attesa di una risposta alla ritrasmissione.
● Lato ricezione ha ancora un solo stato, quanto viene ricevuto il pacchetto ne viene controllata la validità
1. Con l’istruzione rdt_rcv(rcvpkt) && corrupt(rcvpkt) si controlla se il pacchetto ricevuto è corrotto,
in caso positivo
a. viene generato un NAK con sndpkt = make_pkt(sndpkt)
b. viene inviato il NAK sndpkt con l’istruzione udt_send(sndpkt)
2. Con l’ istruzione rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) viene controllato se il pacchetto è senza
errori, ed in caso positivo
a. Si estraggono i dati con extract(rcvpkt,data)
b. Viene inviato il paccchetto al livello superiore con deliver_data(data)
c. Viene creato ed inviato ACK al mittente con sndpkt = make_pkt(ACK) udt_send(sndpkt)

Questo tipo di protocollo è definito stop-and-wait, in quanto dopo che il mittente ha inviato i dati rimane in
attesa di una risposta dal destinatario, e durante quest’ attesa non può ne ricevere ne inviare altri dati.

Questo protocollo rdt2.0 presenta un errore fatale, in quanto non tiene conto della possibilità che i pacchetti
ddi ACK e NAK possano a loro volte essere alterati

70
Figura 3.10

Trasferimento dati affidabile con errori sui bit : rdt 2.1

Come abbiamo visto nel paragrafo precedente rdt2.0 presenta un errore fatale in quanto non tiene
conto della possibilità che i pacchetti di ACK e NAK possano a loro volte essere alterati.
Prendiamo tre possibilità per gestire gli ACK e NAK corrotti

1. Per capire come potrebbe essere un’ ipotetica prima soluzione facciamo un analogia con il mondo
umano. Una persona A sta dettando ad una persona B. A detta una frase a B che non capisce,e quindi
risponde ad A “cosa hai detto?” . Ed è proprio qui che si genera il problema, potrebbe succedere che A
non capitte il “cosa hai detto” di B, e quindi risponderebbe “Cosa hai detto TU” (lo stesso concetto è
esprimibbile se B dicesse OK, ma non verrebbe capito da A), e così via.
2. Un altra alternativa è aggiungere dei bit di checksum che oltre ad identificare l’errore permettono di
correggerlo.
Problema
Questa soluzione però funziona per un canale che può danneggiare bit, ma non perderli
3. Un altro approccio è : se il miettente riceve un ACK o NAK alterato reinvia nuovamente il pacchetto.
Problema
71
Questa tecnica però ha un problema fondamentale, introduce i pacchetti dublicati, e quindi se il
destinatario che riceve nuovamente un pacchetto non riesce a capire se il pacchetto è arrivato per
correggere quello precedente oppure è uno nuovo.
Soluzione
Una soluzione a questo problema aggiungere un campo per numerare i pacchetti sequenzialmente.
(basta un bit 0 - 1).
Questo permette al destinatario di capire se un pacchetto è
a. una ritrasmissione, il numero di sequenza sarà uguale al pacchetto precedente
b. una nuova trasmissione, il numero di sequanza sarà diverso da quello precedente
Supponendo che non ci siano perdita di dati non occorre numerari ACK e NAK in quanto il mittente sa
che un ACK o NAK sono stati generati in risposta al pacchetto inviato più di recente.
Le figure 3.11 e 3.12 rapresentato gli automi rdt2.1. Come si può notare hanno il doppio degli stati di
rdt2.0, questo perchè l’automa deve capire anche se il paccchetto in invio o riceziona abbia sequenza 1
o 0.

Figura 3.11

72
Figura 3.12

Trasferimento dati affidabile con errori sui bit : rdt 2.2 (da studiare)

Il protocollo rdt2.1 per notificacare se il pacchetto è stato ricevuto correttamente o meno utiliza sia un ACK che
un NAK. Per ottimizzare si può pensare di introdurre un altro concetto, cioè inviare sempre un ACK insieme ad
un numero di sequenza (come prima 0 - 1).

da studiare pag 199.

73
Figura 3.13

Figura 3.14

Trasferimento dati affidabile su un canale con perdite ed errori sui bit : rdt 3.0

Supponiamo ora che il canale di trasmissione oltre a danneggiare i bit possa anche smarrirli.
Questo tipo di protocollo deve preoccuparsi di due aspetti :

74
1. Come rilevare lo smarrimento del pacchetti
2. Cosa fare quanto viene smarrito un pacchetto.

La migliore soluzione è quella di attendere un tempo t0 . Si può notare che calcolare di volta in volta questa
variabile è molto complesso o addirittuara impossibuile in quanto entrano in gioco una serie di variabili come il
tempo di andata e tirotno, il tempo di calcolo etc.. . Quindi la migliore soluzione e scegliere un tempo tale per
cui la perdita del pacchetto risulta probabile ma non garrantita.
Anche qui si potrebbe verifica il problema che se non è stato perduto, ma semplicemente cè un ritarto nella
trasmissione o nella risposta, il pacchetto viene rispedito con conseguente duplicato. Quest’aspetto è statpo
già risolto da rdt2.1 introducento il numero di sequenza.

Al mittente non importa se c’è stato un ritardo di trasmissione o nella risposta del destinatario, importa soltanto
che dopo un determinata attesa deve reinviare il pacchetto. E per questo ha la necessita di un contattore
(coundown timer). Il mittente quindi dovrà essere un gradi di:
1. Inizializzare il contatore ogni volta che invia un pacchetto
2. Rispondere ad un interrupt generato dal timer
3. Fermare il contatore

La figura 3.15 descrive un automa con rdt3.0

FIgura 3.15

La figura 3.16 descrive i vari scenari possibili che si possono verifica in rdt3.0

75
Riepilogo protocollo rdt

Queste le carateristiche principali di rdt :


● è un protocollo affidabile di tipo stop-and-wait, questo vuol dire che il mittente dopo che ha inviato un
pacchetto al destinatario attende che lui invii una risposta per indicare se i bit del pacchetto inviato
sono corrotti.
● visto che il mittente attende una risposta positiva dal destinatario, che indica pacchetto ricevuto con
successo o reinviami il pacchetto perchè era corrotto, fa parte della tipologia di protocollo ARQ
(Automatic Repeat reQuest) che devono implementare :
■ Rilevamento dell’errore
■ Feedback del destinatario, invio di un ACK o NAK
■ Ritrasmissione, in caso di NAK
RDT lavora nel seguente modo :
1. Tutti i pacchetti che invia sono numerati in modo sequenziale, nello specifico, la numerazione si alterna
con 0 e 1. Questo permette al destinatario di capire se un pacchetto è un:
a. una ritrasmissione, il numero di sequenza sarà uguale al pacchetto precedente
b. una nuova trasmissione, il numero di sequenza sarà diverso da quello precedente
2. Utilizza solo gli ACK come feedback (non ci sono NAK). Questo è possibile associando un numero di
sequenza
a. Se l’ ACK ha il numero di sequenza del’ ultimo pacchetto inviato, vuol dire che il pacchetto è
arrivato correttamente
b. Se l’ ACK ha il numero di sequenza del’ penultimo pacchetto inviato, vuol dire che l’ultimo
pacchetto non è arrivato correttamente
3. Il mittente invia un pacchetto e rimane in attesa di una risposta del destinatario.
4. Il destinatario analizza il pacchetto, e si possono verifica due situazioni :
a. Il pacchetto è ok
Invia un ACK associando il numero di sequenza del pacchetto corrente.
b. Il pacchetto è corrotto
Invia un ACK associando il numero di sequenza del pacchetto precedente.
5. Il mittente riceve il feedback e si possono verifica tre situazioni :
a. ACK con numeri di sequenza uguale all’ ultimo pacchetto inviato
Il destinatario ha ricevuto il pacchetto correttamente
b. ACK con numeri di sequenza uguale all’ penultimo pacchetto inviato
Il destinatario ha ricevuto il pacchetto con errori. In questo caro, viene ritrasmesso l’ultimo
pacchetto.
c. ACK corrotto
Viene reinviato l’ultimo pacchetto. Possimo notare che nel caso in cui l’ ACK corrotto fosse in
realtà un ACK posibito, il destinatario riceve un pacchetto duplicato. Ma non ci sono problemi
perchè confronta il numero di sequenza e se è uguale all’ultima trasmissione lo scarta.
6. Se il mittente non riceve un ACK entro un intervallo tempo t0 reinvia il pacchetto. Per fa ciò utilizza un
contatore.
7. Il principale problema sono le prestazioni, in quanto protocollo stop-and-wait.

76
Figura 3.16

3.4.2 Protocolli per il trasferimento dati affidabile con pipeline

Il problema principale dei protocolli rdt3.0 sono le prestazioni in quanto protocolli stop and wait, in quanto il
mittente prima di spedire un nuovo pacchetto deve attendere l’eventuale risposta del destinatario.
Una soluzione è quella di permettere al mittente di inviare più pacchetti senza dovere attendere il riscontro del
destinatario come mostrato nella figura 3.18, questa tecnica viene chiamata pipeling

77
Figura 3.18

Rispetto al protocollo rdt3.0 un prococollo con pipeling dovrà :

1. Increamentare l’intervallo dei numeri di sequenza, non più solo 0 e 1. In quanto ogni numero dovrà
identificare univocamente un pacchetto. La quantità dei numeri necessari dipende dal protocolli e da
come gestisce le perdite i file alterati e il ritardo.
2. Sia il mittente che il ricevente devono poter bufferizzare più di un pacchetto. Nello specifico il mittente
dovrà bufferizzare i pacchetti in trasmissione che non sono per i quali non ha ancora ricevuto un ACK.

Si possono identificare due differenti protocollo per la gestione con pipeling e sono Go-Back-N e Ripetizione
selettiva.

78
3.4.3 Go-Back-N

In un protocollo Go-Back-N, il mittente può trasmettere più pacchetti senza dover attendere la notifica, ma non
può avere più di n pacchetti in attesa di notifica. (cercare applet GBN per vedere il protocollo in funzione)

Lato Mittente

La figura 3.19 mostra una panoramica sul funzionamento lato mittente, dove :
1. N = è il numero massimo di pacchetti in attesa di notifica
2. base = è il numero di sequenza del pacchetto più vecchio non ancora riscontrato
3. nextseqnum = il più piccolo numero di sequenza inutilizzato, ovvero il numero di sequenza del
prossimo pacchetto da inviare.
Utilizzando i numeri di sequenza possiamo identificare 4 intervali nel protocollo :
1. [ 0, base-1 ] = i numeri di sequenza in questo range in questo range sono sono realativi a pacchetti
trasmessi e riscontrati
2. [ base, nextseqnum ] = i numeri di sequenza relativi a pacchetti inviati ma non ancora riscontrati
3. [ nextseqnum, base + N - 1 ] = i numeri di sequenza che possono essere utilizzati per inviare nuovi
pacchetti
4. [ numsequenza ≥ base + N ] = i numeri di sequenza in questo range non possono essere utilizzati fino
a quanto non viene sbloccato un pacchetto che è in [ base, nextseqnum ]. Questo perchè si possono
gestire al max n pacchetti per volta.
Dalla figura si può notare inoltre l’ ampiezza della finestra ovvero il numero massimo di paccchetti non ancora
riscontrati. Questa finestra trasla verso destra man mano che i pacchetto vengono riscontrati, permetterno ai
numeri di sequenza di [ numsequenza ≥ base + N ] di entrare nell’ampiezza di finestra ed essere processati.

Figura 3.19

Le figura 3.20 e 3.21 descrivono gli automi estesi di destinatario e mittente basati su ACK e privi di NAK.
Vediamo nel dettaglio il funzionamento dell’automa del mittente, che deve rispondere a tre tipi di evento:
1. Invocazione dall’alto. Quanto il livello superiore vuole inviare dei pacchetti chiamerà rdt_send(). Il
protocollo come prima cosa controlla che ci siano slot vuoti in caso positivo crea ed invia un pacchetto
e venogo aggiornate tutte le variabili sullo starto. In caso negativo restituisce il pacchetto al livello
superiore. Nella reatà quest’ ultimo passaggio viene gestito o tramite un buffer quindi il protocollo
mette in un buffer i pacchetto o da un flag che indica al livello superiore quando può mandare un
pacchetto.

79
2. Ricezione di un ACK. Il mittente riceve un ACK cumulativo che indica che tutti i pacchetti con un
numero di sequenza ≤ a n sono stati correttamente ricevuto dal destinatario. vedere il paragrafo
“Come opera GBN - Lato ricevente” per capire meglio
3. Eventi di time out. Quando si verifica un timeout, il mittente rispedisce tutti i pacchetti che ancora non
hanno avuto un riscontro (il mittente usa un unico contatore). Se si receve un ACK ma ci sono ancora
pacchetti trasmessi ma senza riscontro il timer viene fatto ripartire, in caso contrario viene stoppato.

Figura 3.20

80
Figura 3.21

Lato Destinatario

Lato destinatario abbiamo due situazioni :


1. Ricezione correta di un pacchetto, se un pacchetto con numero di sequenza n viene ricevuto
correttamente ed in ordine (ovvero l’ultimo pacchetto processato è n-1 ), viene inviato un ACK al
mittente per quel pacchetto e consegnato a livello superiore
2. Ricezione non corretta di un pacchetto, se un pacchetto contiene errori oppure non è in ordine, il
destinatario invia un ACK per il pacchetto in ordine ricevuto più di recente.

In questo protocollo il destinatartio scarta tutti i pacchetti che non sono in sequenza. Potrebbe anche
mantenerli in un buffer ma ciò complicherebbe l’architettura.
L’unica informazione che il destinatrio deve memorizzare è il numero di sequenza del successivo pacchetto
atteso, e viene memorizzato nella variabile expectedseqnum.

Come opera GBN

La figura 3.22 mostra come opera il protocollo con una finestra di 4 pacchetti.
● Lata mittente, vengono inviati i pacchetti da 0 a 3, ma poi deve attendere la notifica di ricezione per
poter inviare un altro pacchetto. Quando arrivano gli ACK0 e ACK1 la finestra slitta in avanti ed il
mittente può trasmettere altri pacchetti.
● Lato ricevente, il paccheto 2 viene perso e pertanto i pacchetti 3 e 4 vengono scartati perchè non
rispettano l’ordine. Quindi il destinarario invia nuovamente ACK1 comunicando che il pacchetto 1 è
arrivato correttamente e richiedendo di conseguenza i pacchetto successivi ad 1. (lato mittente accade
che ricevendo ACK1 lui reinvierà tutti i paccchetti in attesa con numeri sequenza > 1, in quanto per qui
pacchetti qualcosa è andato storto ).

81
Figura 3.22

3.4.4 Ripetizione Selettiva

Esistono degli scenari in cui GBN ha dei notevoli problemi di prestazione. Un esempio è se la finestra è
notevolmente grande, in quanto un errore su un singolo pacchetto potrebbe singificare la ritrasmissione di un
elevato numero di pacchetti.
Utilizzando invece il protocollo a ripetizione selettiva, vengono evitate le ritrasmissioni non necessarie :
1. forzando il mittente a ritrasmettere solo i pacchetti su cui esistono sospetti di errore
2. forzando il destinatario a mandare riscontri specifici su ogni singolo pacchetto.

Anche in questo protocollo viene usata una finestra di dimensione N. La figura 3.23 mostra la visione del
mittente e destinatario sui numeri di sequenza.

82
Figura 3.23

Esaminiamo nel dettaglio le azioni intraprese da mittente e destinatario

Lato Mittente

1. Invocazione dall’alto, quanto viene ricevuto un pacchetto dal livello superiore, il mittente controlla il
numero di sequenza da dare al nuovo pacchetto. Se rientra all’interno della finestra i dati vengono
impaccchettati de inviati in caso contrrio viene ridato al livello superiore come in GBN.
2. Timeout, in questo caso ogni singolo pacchetto avrà un proprio timeout logico (logico in quanto esiste
un solo contatore hardware), questo modo allo scadere verrà spedito solo un sinoglo pacchetto
3. ACK ricevuto, al ricevere di un ACK il mittente marca il relativo paccheto come ricevuto. Se si tratta del
pacchetto con numero di sequenza uguale a send_base (ovvero il primo della finesta), la finestra viene
spostata sul primo pacchetto non riscontrato. Se quando la finestra viene spostata rientrano anche
pacchetti (numeri di sequenza) non trasmessi, questi vengono inviati.

Lato Destinatario

In generale invierà un riscontro per tutti i paccheti ricevuti correttamente anche se non in sequeza. Questo
implica che dovrà bufferizzare i pacchetti fino a quando non sono stati tutti ricevuti per poi inviarli in blocco al
livello superiore.
1. Viene ricevuto correttamente un pacchetto nell’intervallo [ rcv_base, rcv_base + N-1 ],
■ il pacchetto ricade nella finestra del ricevente e viene inviato al mittente un ACK su quel singolo
pacchetto, e se non già presente viene bufferizzato
■ se il pacchetto presente un numero di sequenza uguale alla base della finestra (rcv_base),
vengono consegnati a livello superiore tutti i pacchetti consecutivi a partire da rcv_base. Es:

83
sono arrivati i pacchetti 3,4,5,7 ma non possono essere consegnati in quanto non sono tutti
manca il 2 (che è la base). Non appena arriva il 2 è possibile consegnare i pacchetti 2,3,4,5 ma
non il 7 in quanto manca il numero precedente, il 6.
2. Viene ricevuto correttamente un pacchetto nell’intervallo [ rcv_base - N, rcv_base + N-1 ], si tratta di un
pacchetto già riscontrato, ma viene comunque generato un ACK
3. In tutti gli altri casi si ignora il pacchetto.

Come opera SR

La figura 3.26 mostra un esempio di funzionamento di SR.

Figura 3.26

manca una parte del capitolo non necessarissima

3.5 Trasporto orientato alla connessione : TCP

84
3.5.1 Connessione TCP

Il protocollo TCP :
1. è orientato alla connessione, in quanto prima di effettuare lo scambio dati effettua un handshake per
stabilite i parametri del trasferimento dati.
Possiamo nostare che TCP lavora e conserva lo stato della connessione sui sistemi terminali. Tutti gli
elementi della rete intermedi (router, commuttori), non sanno minimamente che si tratta di una
connessiione TCP, si limitato a scambiare pacchetti.
2. offre un servizion full-duplex, il flusso dati tra mittente e destinatario può verificarsi
contemporaneamente nelle due direzioni
3. è punto a punto
4. non permette multicast.

Le connessioni TCP vengono instaurate come segue :


1. Il processo client che vuole iniziare uno scambio con con un processo server,informa il livello di
trasporto client di voler stabilire una connessione verso un processo server, creando una nuova socket
con l’indirizzo e la porta del processo server.
2. Il processo client invia un segmento speciale TCP
3. Il processo server risponde con un altro segmento speciale
4. Il processo client risponde un un terzo segmento speciale, che può contentere anche dati a livello
applicativo.
5. Effettuata la connessione i processo possono scambiare i dati
I punti 2-3-4 vengono definiti handshake a tre vie

Lo scambio dati TCP avviene come segue ( figura 3.28 ):


1. Un processo client vuole inviare dati ad un processo server
2. Il processo client invia i dati attraverso la socket
3. Superata la socket i dati vengono presi in carico da TCP in esecuzione nel client.
4. TCP dirige i dati verso il buffer d’invio TCP
5. TCP preleva i dati dal buffer d’invio e li spedisce al server.
6. La dimensione massima di dati che può essere prelevata e messa un segmento viene definita
dimensione massima di segmento (MMS), assicurandosi che il segmento TCO una volta incapsulato
in un datagramma IP a livello di collecamento stia all’interno di un frame.
7. TCP accopia i dati con un intestazione
8. Quando i dati arrivano al server vengoni ospitati nel buffer di ricezione
9. L’applicazione server attraverso il socket legge il flusso data dal suddetto buffer

85
Figura 3.28

3.5.2 Struttura segmenti TCP

Il segmento TCP consiste di campi intestazione e di un campi che contiene i dati applicativi.
Un file di grosse dimensioni come un immagine web, viene spezzetato in porzioni da MSS.
La figura 3.29, mostra la struttura dei segmenti TCP :
● Numeri di porta d’origine e destinazione
Utilizzati per il multiplex/demultiplex dei dati da e verso aplicazioni di livello superiore
● Checksum
Per controllare l’errore8 anni 48 anni
● Numero di sequenza e numero di ricontro (32 bit)
Vengono utilizzati per implementare il trasferimento dati affidabile
● Finestra di ricezione (16bit)
Utilizzati per il controllo di flusso, anche per indicare il numero di byte che il destinatario desidera
ricevere
● Lunghezza dell’intestazione (4 bit)
Specifica la lunghezza dell’intestazione TCP (in parole da 32 bit). L’intestazione ha lunghezza variabile
● Opzioni
Utilizzato per negoziare tra mittente e destinatario la dimensione massima del segmento (MSS). E’
opzionale e di lunghezza variabile. Viene anche definita l’opzione di time-stamping.
● Flag (6 bit)
Il campo flag è composto da 6 bit (6 differenti flag) :
○ ACK
Viene utilizzato per i segmenti di riscontro. Per indicare il riscontro di un segmento precedente
sicevuto con successo o meno
○ RST, SYN, FIN
Vengono utilizzati per impostare e chiudere la connesisone
○ PSH
Se ha valore 1 il destinatario deve inviare immediatamente i dati a livello superiore
○ URG
Utilizzata dal livello superiore a TCP del mittente per indicare che il segmento contiene dati
ugenti.

86
● Puntatore ai dati urgenti (16 bit)
Utilizzati per indicare la fine della posizione dei dati urgenti.

I campi PSH, URG, Puntatore ai dati urgenti nella realtà non vengono utilizzati

Figura 3.29

Numeri di sequenza e numeri di riscontro

Il numeri di sequenza e numeri di riscontro vengono utilizzati per implementare la connessione affidabile

● Numero di sequenza
I numeri di sequenza vengono utilizzati per numerare il flusso di byte trasmessi in ogni segmento. Da
notare che non vengono numerati i segmenti ma tutti i byte presenti nei segmenti (es: primo byte
numerato con 0 secondo byte con 1 etc..). Nel numero di sequenza ci andrà a finire il numero del primo
byte del segmento. Facciamo un esempio analizzando la figura 3.3.
Un host A vuole inviare ad un Host B un flusso di dati da 500.000 byte, con MSS vale 1.000 ed il primo
byte del flusso numerato con 0 ( come da procollo TCP numera tutti i byte del flusso di dati ).
Quindi secondo quanto detto sopra, il numero di sequenza del primo segmento sarà uguale al numero
del primo byte del segmento ovvero 0, anche il numero di sequenza del secondo segmento sarà
uguale al numero del primo byte del segmento ovvero 1000, il terzo segmento con 2000 e così via.

87
Figura 3.30

● Numero di riscontro
Immaginando un flusso dati da un Host B ad un Host A, il numero di riscontro χ scritto da A, indica il
numero di sequenza del byte successivo che A attende di ricevere da B. In poche parole A dice a B,
guarda che il prossimo segmento deve partire con un byte che ha un numero di sequenza χ. Facciamo
tre esempi per comprendere meglio :
1. Semplice
A ha ricevuto da B tutti i byte numerati da 0 a 535. A è in attesa di un altro segmento che ha
come numero del primo byte 536. A scriverà nel numero di riscontro 536 indicando così che si
aspetta il semento che ha come primo byte quello numerato con 536.
2. Segmento mancante
A ha ricevuto il segmento [ da 0 a 535 ] e [ da 900 a 1000 ], manca quindi quello intermedio [ da
536 a 899]. Nel numero di riscontro quindi A indicherà [da 536 a 899] (riscontro cumulativo).
3. Segmento non ordinato
A riceve il terzo segmento[ da 900 a 1000 ] prima di ricevere il secondo [da 536 a 899]. I
comportamenti sono 2 :
a. A scarta i segmenti non ordinati
b. A mantiene i byte non ordinati in attesa di quelli mancanti per colmare il vuoto

Telnet : un caso esemplare di numeri di sequenza e di riscontro (da studiare)

3.5.3 Stima del tempo di andata e ritorno e timeout (da studiare)

Stima del tempo di andata e ritorno (da studiare)

Intervallo di timeout di ritrasmissione (da studiare)

3.5.4 Trasferimento dati affidabile

TCP crea un servizio di trasporto dei dati affidabile al di sopra del servizio inaffidabile di IP, assicurando che
il flusso dei dati in arrivo è esattamente quello spedito.
Andiamo ad analizzare come TCP gestisce il trasferimento affidabile, analizzando prima l il trasferimento con
un solo timeout e poi quello con ricontri duplicati.

88
La figura 3.33 mostra una rappresentazione simplificata del trasferimento con un solo timeout.
In questa configurazione, esistono tre eventi principali :
1. Dati provenienti dall’applicazione (livello superiore)
Non appena i dati giungono dal livello superiore TCP li incapsula in un segmento e lo passa ad IP.
Ciascun segmento include un numero di sequenza che rappresenta il numero del primo byte del
segmento.
Se il timer non è già in funzione per qualche altro segmento lo avvia.
2. TImeout
Quando scatta il timeout, TCP ritrasmette il segmento non ancora riscontrato con il più piccolo numero
di sequenza e riavvia il timer.
3. Ricezione ACK
Il mittente nella variabile SendBase, memorizza il numero di sequenza del più antico byte non
riscontrato. Di conseguenza da SendBase - 1 indietro ci sono tutti i byte che sono stati ricevuti
correttamente.
Quando il destinatario invia un ACK al mittente, quest’ ultimo confronta il valore y di ACK con la propria
variabile SendBase. TCP utilizza riscontri cumulativi, quindi se y è più grande di SendBase, vuol dire
che l’ ACK appena inviato sta riscontrando tutti i byte (e i relativi segmenti), con numero di sequenza
tra SendBase e y, che non erano stati riscontrati.
Il mittente aggiorna SendBase, con il valore di y, e se non ci sono segmenti non riscontrati riavvia il
timer.

89
Figura 3.33

Alcuni scenari interessanti

Per capire meglio il funzionamento di TCP consideriamo 3 esempi

Esempio 1

La figura 3.34, mostra un caso in cui l’ Host A invia un semgmento ad un Host B, con di sequenza 92 e
contenga 8 byte
1. A invia il segmento ed attente un ACK da B con numero di riscontro 100 (cioè 92 + 8 )
2. B invia ACK che però va perso
3. In A non ricevendo alcun ACK si verifica il timeout e il segmento che inizia con numero di sequenza 92
viene reinviato.

90
4. B ricevendo il segmento reinviato, si accorge di avercelo già e lo scarta

Figura 3.34

Esempio 2

La figura 3.35 mostra un caso in cui l’host A invia due segmenti a B


1. il primo con numero di sequenza 92 e contiene 8 byte
2. il secondo con numero di sequenza 100 con 20 byte.
3. entrambi arrivano correttamente a B e B invia due ACK separati, il primo numerato 100 ed il secondo
120
4. i due ACK non arrivano ad A prima del timeout
5. quando si verifica il timeout A reinvia il primo segmento e riavvia il timer
6. Il secondo segmento verrà ritrasmesso solo se il suo ACK arriverà prima del nuovo timeout
Fino a quando l’ ACK del secondo semento non arriva prima del nuovo timeout, il seconod segmento
non verrà ritrasmesso ( definizione del libro controllare questa definizione punto 6).

91
Figura 3.35

Esempio 3

La figura 3.36 mostra un caso in cui l’host A invia due segmenti a B come quelli dell’ esempio 2.
1. L’ ACK per il primo segmento A viene perso subito prima del timeout
2. A riceve il riscontro del secondo segmento ovvero quello con riscontro 120 (dicendo quindi puoi
inviarmi i segmenti con numero di sequenza che partono da 120).
3. A sapendo che B ha ricevuto ha dato l’ ACK per il secondo segmento, capisce che anche il primo è
arrivato altrimenti B non avrebbe mai dato l’ ACK per il secondo segmento. Quindi non rispedisce nulla.
Questo viene chiamato riscontro cumulativo, con questo metodo si ha il vantaggio che la perdita di un
riscontro non blocca la trasmissione se confermato dal riscontro successivo (il riscontrom del primo
segmento viene confermato dal riscontro del secondo segmento ).

92
Figura 3.36

Raddoppio dell’intervallo di timeout

Allo scadere del timeout TCP reinvia il segmento non ancora riscontrato con il più piccolo numero di sequenza.
Ma ogni volta, TCP imposta il successivo intervallo di timeout con il doppio del valore precedente.
Se per esempio il TimeoutInterval (la variabile che contiene il valore di timeout) associato al più vecchio
semento non ancora riscontrato sia 0,75 secondi quando scade la prima volta. Quando TCP ritrasmettere
questo segmento imposterà il nuovo valore di TimeoutInterval al doppio, quindi 1,5 secondi.
In ogni caso ogni volta che arrivano nuovi dati dal livello superiore o arria un ACK TimeoutInterval viene
settato con i valori di default iniziali.
Questa modifica permette un maggiore controllo della congestione, in quanto un probabile motivo per la
perdita di dati potrebbe essere una congestione della rete ovvreo molti pacchetti arrivano presso una o più
code. TCP quindi raddoppiando il timeout evita di congestionare ancora di più la rete, evitando di reinviare
troppo costantemente i segmenti non riscontrati.

Ritrasmissione Rapida

La ritrasmissione rapida viene utilizzata nel seguente scenario :


1. Il destinatario riceve un segmento con numero di sequenza superiore a quello atteso (in poche parole il
destinatario ha ricevuto 1 si aspetta di ricevere 2 ma riceve 3).
2. Il destinatario per notificare che non ha ricevuto 2, invia un ACK che riscontra nuovamente 1.
(ricordiamo che in TCP non ci sono riscontri negativi e quindi non può inviare un NAK sul pacchetto 2),
ovvero l’ultimo pacchetto che ha ricevuto in ordine.

93
Riscontrare il segmento 1 con numero di sequenza 92 e lungo 8 byte vuol dire inviare un ACK = 100
(92+8) ovvero dire mi serve il segmento che ha numero di sequenza uguale a 100 (il secondo).
3. Il mittente continuerà ad inviare pacchetti, ma il destinatario visto che non ha ancora il segmento 2
risponderà sempre con un ACK sul segmento 1.
4. Se il mittente riceve 3 ACK sullo stesso segmento, ne deduce che quello successivo è andato perso
(nel nostro caso il 2), e quindi lo reinvia (nel nostro caso il pacchetto 2) senza aspettare la scadenza
del timeout, questo reinvio viene definito ritrasmissione rapida

In poche parole il mittente se riceve 3 ACK su un pacchetto con numero di sequenza n, vuol dire che io
destinatario non ha ricevuto correttamente il pacchetto con numero di sequenza n+1. Come già detto accade
questo perchè il destinatario non ha modo di mandare un NAK su un pacchetto non ricevuto.

La figura 3.37 ne mostra un esempio

Figura 3.37

94
Go-Back-N o ripetizione selettiva (SR) ?

Ci chiediamo a questo punto se TCP è GNB o SR. Ricordiamo che i riscontro TCP sono cumulativi e che i
segmenti ricevuti correttamente, ma in modo disordinato, non vengono singolarmente riscontrati dal
destinatario.
TCP lato mittente deve memorizzare il SendBase ovvero il numero di sequenza più piccolo tra i byte trasmessi
e non riscontrati ed il NextSeqNum ovvero il numero di sequenza del successivo byte da inviare.
Fino a qui sembrerebbe che TCP sia molto simile a GBN ma esistono delle differenze chiave.
Molte implementazioni TCP bufferizzano i segmenti ricevuti correttamente ma non in ordine.
Ora analizziamo cosa succedere quando
1. Il mittente invia una sequenza di segmenti da 1,2,...n, che arrivano al destinatario in ordine e senza
errori.
2. Il riscontro per il pacchetto n < N vada perduto, ma i restanti N-1 riscontri giungano al mitente prima dei
rispettivi time-out.
Vediamo il comportamento dei diversi protocolli sull’esempio precedente
● GNB trasmetterebbi il pacchetto n e tutti i pacchetti da n+1 a N
● TCP ritrasmetterebbe al massimo il segmento n. Perdipiù non ritrasmetterebbe nemmeno il segmento n
se ricevesse il riscontro del segmento n+1 prima della scadenza del timeout del segmento n.

Una modifica proposta a TCP è il riscontro selettivo che consente al destinatario di riscontrare in modo
selettivo i segmenti non in ordine anzicchè riscontrare cumulativamente l’ultimo segmento ricevuto senza errori
e nell’ordine giusto. Se combinato con la ritrasmissione selettiva (evitare la ristrasmissione dei segmenti che
sono già stati riscontrati in modo selettivo dal destinatario), TCP assomiglia molto a un generico protocollo SR.
Quindi lo possiamo collocare tra GBN e SR.

3.5.5 Controllo di flusso

Ricordiamo che TCP imposta dei buffer di ricezione,e quindi quado un host TCP riceve dei dati non li passa
direttamente al livello superiore ma li deposita in un buffer, in questo modo il livello applicativo potrà recuperare
i dati in qualsiasi momento. Se però l’applicazione è lenta nel recuperare i dai è possibile che il mittente mandi
in overflow il buffer.
Per quest’ ultimo motivo TCP mette a disposizione un servizio controllo di flusso.
Questo servizio viene offerto facendo manentere al mittente una variabile chiamata finestra di
ricezione(RcvWindow), che da al mittente l’informazione dello spazio disponibile nel buffer, e quindi è in grado
di controllare il proprio flusso si dati se il buffer è pieno.
Prima di procedere con un esempio, descriviamo le variabili necessarie lato destinatario e lato mittente per il
controllo del flusso :
● Lato destinatario
1. RcvBuffer = contiene la dimensione del buffer
2. LastByteRead = numero dell’ultimo byte del flusso letto dal livello superiore a TCP in B
3. LastByteRcvd = numero dell’ultimo byte del flusso che arriva dalla rete.

95
4. RcvWindow = variabile utilizzata nell’instezione del segmento per comunicare al mittente lo
spazio disponibile nel buffer
● Lato Mittente
1. LastByteSent = numero dell’ultimo byte inviato
2. LastByteAcked = numero dell’ultimo byte di cui è stato ricevuto un ACK
3. RcvWindow = variabile utilizzata nell’instezione del segmento per recuperare dal destinatario lo
spazio disponibile nel buffer.

Procediamo con un esempio :


1. Host A sta inviando un file di grosse dimensioni a Host B
2. B imposta il buffer di ricezione e memorizza la sua dimensione in RcvBuffer
3. Di tanto in tanto il processo applicativo in B legge dal buffer
4. In ogni istante per non andare in overflow dobbiamo avere che LastByteRcvd - LastByteRead ≤
RcvBuffer.
5. Il destinatario ad ogni ACK setta la RcvWindow = RcvBuffer - [LastByteRcvd - LastByteRead] per
comunicare al mittente lo spazio disponibile nel buffer, e lo passa al mittente nel campo
dell’intestazione del segmento chiamato campo finestra.
6. L’ host A per evitare che il buffer di B vada in overflow deve mantenere il valore di LastByteSent -
LastByteAcked ≤ RcvWindow.

In quest’esempio abbiamo un problema fondamentale, ovvero : il buffer di B è totalmente pieno quindi


RcvWidow = 0, lo comunica ad A, ed a non ha più niente da inviare a B. Questo implica che B non risponderà
più ad A e quindi non potrà più comunicare il nuovo valore di RcvWindow, quindi A vede il buffer sempre pieno
anche se con il passare del tempo si sta svuotanto, e di conseguenza A va in stallo.
Per risolvere questo problema le specifiche TCP impongono che A quando vede RcvWindow = 0 deve
comunque continuare ad inviare segmenti da 1 byte, in questo modo B risponde sempre con RcvWindow
aggiornato

3.5.6 Gestione della connessione TCP

Apertura di una connessione

Un processo applicativo su un client A che vuole stabilire una connessione con un altro processo applicativo
su un server B, informa il proprio protocollo TCP di voler avviare questa connessione. TCP a sua volta chiede
a TCP di B di aprire una connessione.
Analizziamo nel dettaglio il funzionamento :
1. Passo 1, TCP sul lato client invia un segmento speciale a TCP lato server, il segmento è così
composto:
a. non contiene dati a livello applicativo
b. il bit dell’intestazione SYN viene impostato a 1
c. il lato client riempie il campo dell’intestazione numero di sequenza con un numero casuale
(client_isn).
d. il segmentoi viene incapsulato in un datagramma IP ed inviato al server
2. Passo 2, Quando il datagramma IP con il segmento TCP SYN arriva al server :
a. il server estrae il segmento dal datagramma
b. allora i buffer e le variabili della connession

96
c. invia un segmento di connessione garantita (talvolta chiamato SYNACK) al client TCP così
composto :
● non contiene dati a livello applicativo
● il bit dell’intestazione SYN è impostato a 1
● il campo di riscontro assume valore client_isn + 1
● il lato server riempie il campo dell’intestazione numero di sequenza con un numero
casuale (server_isn). Con questsa operazione e come se il server dicesso : “Ok ho
ricevuto il tuo pacchetto SYN, e sono d’accordo con la connessione”, e questo è il mio
numero di sequenza server_isn.
3. Passo 3, Quando il client TCP riceve il segmento SYNACK :
a. alloca i buffer e le variabili alla connessione
b. invia un altro segmento che riscontra il SYNACK così composto:
● viene settato il campo riscontro con il valore server_isn + 1
● il bit SYN viene posto a 0, dato che la connessione è stata stabilit
● questo segmento potrebbe contenera dati applicativi

Completati questi passaggi gli host client e server possono scambiarsi i dati.
Nella figura 3.39 viene descritto l’ handshake a tre vie che abbiamo appena trattato.

Figura 3.39

Chiusura di una connessione

In ogni istante ciascundei due processi client e server può decidere di terminare la connessione, ed in tal caso
tutte le risorse (buffer e variabili) vengono deallocate.
Per esempio supponiamo che il client decida di chiudere la connessione :
97
1. Il processo applicativo client invia una comando di chiusura a TCP client
2. TCP client invia un segmento speciale a TCP server con il bit FIN impostato a 1
3. Quando il TCP server riceve questo segmento, risponde inviando un segmento di riscontro anch’esso
con bit FIN impostato a 1.
4. Quando il client riceve il riscontro del server, invia un altro segmento che riscontra del segmento inviato
dal server.

Stati di una connessione

Le figure 3.41 e 3.42 descrivono rispettivamente gli stati assunti dal client e server nelle azioni descritte nei
paragrafi “Apertura di una connessione” e “Chiusura di una connessione”.

Figura 3.41

98
Figura 3.42

3.6 Principi del controllo di congestione

3.6.1 Cause e costi della congestione

Cominciamo a parlare del controllo della congestione analizzando tre casi via via più complessi. Ci
concentreremo su come avviene la congestione e non su come evitarla o reagire

Scenario 1 : due mittenti e un router con buffer illimitati

La figura 3.43 descrive questo scenario ovvero due host A e B con una connessione che condivide un hop
intermedio.
Lo scenario descritto è :
1. L'host A sta inviando dati originari tramite una socket al livello di trasporto(vengono mandati nelle
socket una sola volta) sulla connessione ad una frequenza di λ in .
2. Il livello di trasporto incapsula ed invia i dati senza compiere nessun altra operazione come (controllo
errori, controllo flusso etc...).
3. Ignorando l’overhead del livello di trasporto, possiamo dire che A invia al router ad un tasso di λ in
4. L’host B opera allo stesso modo di A alla stessa frequenza λ in
5. I pacchetti da A a B passano attraverso un router ed un collegamento di capacità R
6. Ipotizziamo che i buffer del router abbiano dimensione illimitata.

99
Essendo R la capacità di trasmissione del collegamento, ogni host, ha la possibilità di trasmettere a R/2, in
quanto devono dividersi la banda (sono due host).
In ogni caso :
● se la frequenza di trasmissione si avvicina a R/2 il ritardo medio cresce sempre di più
● se la frequenza di trasmissione supera R/2 il numero medio di pacchetti in coda nel router cresce
senza limite ed il ritardo medio tra origine e destinazione tende all’infinito
Questo perchè il router non riesce a inviare dati alla stessa velocità a cui li riceve perché il collegamento ha un
limite di R/2, che quindi è il collo di bottiglia.

Figura 4.43

DA RIVEDERE

Scenario 2 : due mittenti e un router con buffer finiti (da studiare)

In questo scenario vengono apportate le seguenti modifiche rispetto al precedente :


1. Assumiamo che il buffer abbia dimensioni finite. Questo implica che se i pacchetti giungono in un buffer
pieno, vengono scartati. Considerato che stiamo lavorando su connessioni affidabili siamo sicuri che
prima o poi i pacchetti persi verranno ritrasmessi.
2. Diamo a λ in lo stesso significato dello scenario presecente (punto 1 ), mentre con λ’in il tasso con il
quale il livello di trasporto invia i dati in rete.

Scenario 3 : quattro mittenti, router con buffer finiti e percorsi multihop (da studiare)

3.6.2 Approcci al controllo di congestione

Possiamo fare una distinzione tra i livelli di rete che offrono o meno assistenza esplicita al livello di trasporto
per controllare la congestione.
● Controllo di congestione end-to-end :
In questo caso il livello di rete non fornisce supporto esplicito al livello di trasporto per il controllo della

100
congestione.
In questo caso sono i sistemi terminali a doversi accorgere e correggere la congestione, osservando i
comportamenti della rete come per esempio ritardi o perdita di pacchetti.
Nello specifico il protocollo TCP, gestisce la connessione in questo modo (nei sistemi terminali), in
quanto il livello di rete IP non fornisce assistenza a riguardo. TCP inoltre per accorgersi della
congestione si basa sulla perdita dei pacchetti, e di conseguenza diminuisce la finestra.
● Controllo di congestione assistito dalla rete :
In questo caso i componenti a livello di rete (ossia i router), forniscono un feedback esplicito al mittente
sullo stato di congestione della rete.
Questo avviso può essere inoltrato al mittente in due modi :
a. Viene inviato un pacchetto di ingorgo (choke packet)
b. Viene marcato un campo di un pacchetto che indica congestione.
Quest’ approccio è stato recentemente proposto anche a TCP/IP.

3.6.3 Un esempio: il controllo di congestione ATM ABR

non da studiare

3.7 Controllo di congestione TCP


Per il controllo della congestione TCP impone ad ciascun mittente un limite alla frequenza di invio in funzione
della congestione di rete percepita. Se il mittente TCP si accorge che la rete è libera allora incrementa il tasso
di invio in caso contrario, se è intasata diminuisce il tasso di invio.
Ci sono tre punti essenzieli su cui ragionare :
1. Come TCP riduce il tasso di frequenza
TCP fa tener traccia sia agli estremi dela connesione una variabile aggiuntiva overo la finestra di
congestione detta CongWin. Questa variabile viene utilizzare per ridurre il trasso di frequenza. Nello
specifico funziona che la quantità di dati che non è stata riscontrata al mittente non può superare il
minimo tra i valori CongWin e RcvWindow(spazio disponibile nel buffer destinatario), ovvero

LastByteSent - LastByteAcked ≤ min{CongWin, RcvWindow}


Abbiamo che la frequenza di invio del mittente è CongWin/RTT (studiare il perchè a pag 250 punto 1)
2. Come TCP si accorge della congestione
Se la rete è eccessivamente congestionata, vuol dire che uno o più buffer dei router lungo il percorso è
pieno e quindi vanno in overflow, causando la perdita di datagrammi, che viene considerata dal
mittente come un indicazione di congestione sul percorso, e quindi diminuisce la propria frequenza
d’invio.
Possiamo aggiungere che TCP regola la propria finestra di congestione (e di conseguenza la
frequenza di trasmissione), in base alla frequenza con la quale arrivano i riscontri dal destinatario.
● Se la frequenza è bassa (perchè il persorso presenta ritardi elevati oppure il collegamento è
lento), la finestra di congestione viene ampliata piuttosto lentamente.
● Se la frequenza è alta, allora la finestra di congestione verrà ampliata rapidament
Considetato che TCP utilizza i ricontri per scatenare (o temporizzare) l’incremento della finestra di
congestione, si dice che TCP è auto-temporizzante (self-clocking).

101
3. L’algoritmo utilizzato dal mittente per variare la frequenza d’invio
Per il controllo della congestionre tra end point TCP utilizza un algoritmo chiamato algoritmo di
controllo della congestione TCP ( TCP congestion control algorithm ), che presenta tre componenti
principali :
● Incremento additivo e decremento moltiplicativo (AIMD)
● Partenza lenta (slow start)
● Reazione ai time out
Queste componenti verranno descritte nel paragrafo successivo.

Algoritmo di controllo della congestione TCP

Incremento additivo e decremento moltiplicativo (AIMD)

Per controllare la congestione TCP, ogni volta che si accorge della perdita di un pacchetto decrementare
frequenza d’invio (in quanto ipotizza che ci sia congestione, che i buffer siano pieni e quindi scartino i
datagrammi), invece ogni volta che arriva un ACK incrementa la frequenza d’invio (in quanto suppone che se
l’ACK è arrivato allora la rete è libera e puo aumentare la frequenza d’invio)
● Perdita di pacchetti (per diminuire la frequenza d’invio).
Ogni volta che un pacchetto viene perso, TCP dimezza il valore di CongWin (viene detto decremento
moltiplicativo). Il valore di CogWin non può scendere al di sotto di 1 MSS. Un esempio è : CogWind è
impostato a 20Kb, TCP si accorge di uno smarrimento e lo porta a 10Kb, si accorge di un altro
smarrimento e lo porta a 5Kb.
● Frequenza d’arrivo degli ACK (per aumentare la frequenza d’invio)
Viene ipotizzando che se arrivano gli ACK ci sia banda non utilizzata, e quindi viene incrementa la
frequenza di invio ovvero CongWin. Quindi ogni qual volta viene ricevuto un ACK, TCP incrementa di x
CongWin con l’obbiettivo di far arrivare l’incremento a 1 MSS. Questo effetto può essere ottenuto in
diversi modi, un esempio è quello di incrementare CongWin di MSS/CongWing byte ad ogni riscontro.
Per esempio MSS vale 1.460Byte e CongWin 14.600 Byte, quindi quando arriva un ACK CongWin
viene incrementato di 1/10 MSS. Questa fase dell’incremento viene detta congestion avoidance.

Partenza lenta (slow start)

Quando si stabilisce una connessione TCP, il valore di CongWin viene impostato a 1 MSS, il che comporta una
frequenza di invio pari a MSS/RTT (es: MSS = 500byte , RTT = 200ms la frequenza di trasmissione è di
20kbps). Dato che la banda disponibile pu essere molto più grande di MSS/RTT, si sprecherebbe banda in
quando la frequenza verrebbe incrementata linearmente come descritto nel paragrafo precedente. Per ovviare
a questo problema, all’inizio della connessione TCP fa crescere esponenzialmente CongWin (),
increamentandolo di 1 MSS ad ogni riscontro e fino a quando non si verifica un evento di smarrimento,
momendo in cui, comincia a farla crescere linearmente (come descritto nel paragrafo precedente).
La figura 3.52 ne mostra un esempio :
1. TCP invia un segmento ed attende un riscontro
2. Se il segmento viene riscontrato prima di uno smarrimento, TCP incremente CongWind di 1 MSS ed
invia 2 segmenti.
3. Se riceve gli ACK per i due segmenti inviati allora incrementa CogWind di 2 MSS (1 MSS per ogni
segmento).

102
4. Questa procedura continua fino a quando non arriva uno smarrimento, momento in cui comincia ad
incrementare linearmente (come paragrafo precedente).

Nota : aumentato la frequenza si aumenta la banda disponibile e quindi può inviare più segmenti
contemporaneamente.
Viene chiamato slow start perchè parte piano e poi incomincia ad incrementare esponenzialmente

Figura 3.52

Reazione agli eventi timeout

Come abbiamo già descritto nei seguenti paragrafi TCP reagisce ad un evento di smarrimento. Quello che c’è
da precisare e che reagisce diversamente in base a se l’eventp sia scattato per timeout oppure per ricezione
di tre ACK duplicati.
● In caso di tre ACK duplicati, si comporta esattamente come abbiamo descritto precedentemente
● In caso di timeout, il mittente entra in fase di partenza lenta, imposta inizialmente CongWin a 1 MSS,
aumentandolo in modo esponenziale, fino a che non raggiunge la metà del valore che aveva prima del
timeout (controllando la variabile Threshold). Dopo di che ricomincia a crescere linearmente.
Per far ciò, per far ciò TCP controlla la variabile Threshold (soglia), che inizialmente viene impostata ad
un valore molto alto, e poi ad ogni evento di timeout assume il valore di CongWin/2.
Quello che ci chiediamo adesso è perchè vengono utilizzati due approcci differenti se si tratta di un evento di
smarrimento scattato con tre ACK duplicato piùttosto che da un timeout.

103
Il motivo e che a differenza del secondo caso nel primo caso, possiamo dire che almeno qualche segmento è
stato ricevuto dal mittente e quindi indica ce la rete ha ancora la capacità di consegnare pacchetti.
Ci sono due tipi di algoritmi che trattano gli eventi di smarrimento in modo differente
1. TCP Tahooe, che entrava nella fase di partenza lenta dopo ogni smarrimento, non si curava del fatto
che si trattasse di timeout o tre ACK duplicati
2. TCP reno, si comporta esattamente come abbiamo descritto facendo differenza tra gli eventi di
smarrimento.
Possiamo notare che l’eliminazione della fase di partenza lenta dopo tre ACK duplicati viene chiamata
ripristino rapido (fast recovery).

Descrizione macrospocipa del throughput TCP (da studiare)

3.7.1 Equità (da studiare)

Equità e UDP

Molte applicazione multimediali, di fonia e video, preferiscono utilizzare UDP piùttosto che TCP, in quanto non
vogliono che le loro tasso di trasmissione venga ridotto anche se la rete è congestionata.
Preferiscono perdere dai dati ed avere una frequenza constate piùttosto che, non perderne ed avere una
frequenza altalenante (vedi TCP).
Le applicazione che girano su UDP non sono eque, non cooperano ne adeguano la frequenza trasmissiva in
modo appropriato.
Visto che TCP diminuisce la frequenza trasmissiva in base alla cogestione, le connessioni TCP potrebbero
essere lasciate fuori a favore delle UDP.

Equità e connessioni TCP in parallelo

Può accadere che un’ applicazione basata su TCP, apra più connessioni in parallelo. Come per esempio alcuni
browser aprono connessioni in parallelo per trasferire il contenuto di una pagina web.
Questo implica che su un collegamento gongestionato questo tipo di applicazioni ottengono una banda
superiore.
Supponiamo che su collegamento di frequenza R ci siano 9 applicazioni client/server, ognunna con una sola
connessione TCP. Se ne aggiunge un altra sempre con una connessione, allora il traffico sarà equamente
suddiviso tra tutte e 10 ed ognuna avrà una banda pari a R/10. Se unvece se anzichè avere la 10 applicazione
con un sola connessione con ben 11 collegamenti, allora più della metà della banda sarebbe destinata ad essa
mentre le restanti 9 dovrebbero divederlsi la banda restante.

104
CAPITOLO 4 - LIVELLO DI RETE

4.1 Introduzione
La figura 4.1 mostra una rete con due host e parecchi router. Analizziamo ora l’invio di un pacchetto da H1 a
H2
1. Il livello di rete di H1 prende i segmenti del livello di trasporto li incapsula in un datagramma e li invia al
router più vicino R1
2. Il livello di rete di H2 riceve i datagrammi dal router più vicino R2, estrae i segmenti e li invia a livello di
trasporto.

Figura 4.1
105
4.1.1 Inoltro e instradamento

Il roulo del livello di rete è molto semploice ovvero instradare i pacchetti da un host ad un altro. E per far cio
svolge due importanti funzioni :
1. Inoltro (forwarding), è l’azione locale con cui il router trasferisce i paccchetti da ingresso in uscita.
Quando un router riceve un pacchetto lo deve trasferire sull’appropriato collegamento in uscita. Ad
esempio un pacchetto che arriva a R1 dall’host H1 deve essere ino0ltrato al successivo router sul
cammino verso H2.
2. Instradamento (routing), il processo di rete che determina i percorsi del pacchetto lungo il cammino.
II livello di rete deve determinare, tramite algoritmi d’instradamento, il percorso che i pacchetti
devono fare.
Facendo un analogia con autista in autostrata, l’instadamento è lo studio del percorso da fare, gli svilcoli sono
gli inoltri.
Per scegliere i cammini di ogni pacchetto durante l’inoltro, i router fanno riferimento alla tabella d’inoltro.
Quindi quando arriva un paccetto, viene analizzata la sua intestazione ( in base al protocollo utilizzato, può
contenere l’indirizzo di destinazione o la connessione a cui appartiene) e confrontato questo valore con la
tabella di inoltro che indicherà il collegamento in uscita per quel pacchetto.
La figura 4.2 mostra un esempio :
1. arriva un pacchetto con valore nell’ intestazione 0111
2. il livello di rete cerca il valore 0111 nella tabella d’ inoltro e ne recupera il relativo collegamento in uscita

Le tabelle di inoltro vengono popolate attraverso gli algoritmi di inoltro che possono essere:
● Centralizzati, ad esempio un algoritmo in esecuzione su un sito centrale che passa le informazioni di
instradamento a ciascun router
● Decentralizzati, ad esempio con una parte dell’ algorimto distribuito in esecuzione sul router
In entrambi i casi il router riceve info per configurare le proprie tabelle di inoltro.

106
Figura 4.2

In questo capitolo indicheremo con Commutatore di pacchetto (packet switch), un generico pacchetto che si
occupa dal trasferimento di un pacchetto in entrata su un collegamento analizzando la sua intestazione. Noi li
chiameremo Router

Instaurazione della connessione

Alcune architettura a livello di rete (es: ATM e frame-relay, no internet), richiedono che router lungo il cammino,
effettuino handshake prima di inviare i dati (come fa TCP), e questo processo viene detto instaurazione della
connessione

4.1.2 Modelli dei servizi di rete

Il livello di rete offre diversi modelli di rete che definiscono le caratteristiche del trasporto end-to-end
Consideriamo alcuni servizi :
1. Consegna garantita, consegna pacchetti garantita
2. Consegna garantita con ritarlo limitato, consegna pacchetti garantita con limite di ritardo specificato
3. Consegna in ordine, garantisce che i pacchetti giungano a destinazione nell’ ordine d’invio
4. Minima ampiezza di banda garantita
5. Jitter limitato, garantisce che il lasso di tempo tra la trasmissione di due pacchetti consecutivi sia
uguale a quello di ricezione.
6. Servizi di sicurezza, fornisce un servizio di riservatezza, integrità e autenticazione.

107
Possiamo notare che il livello di rete Internet mette a disposizione solo il servizio noto come best-effort, ossia
con il massimo impegno possibile.
La tabella 4.1 compara i servizi offerti dai diversi livelli di rete.

Tabella 4.1

4.2 Reti a circuito virtuale e a datagramma


Anche il livello di rete offre un servizio con o senza connessione.
Si può notare che a differenza del servizio con o senza connessione del livello di trasporto (TCP e UDP) che
lavorano sugli end-point, nel livello di rete lavorano sia sugli end-point che sui router lungo il cammino. Quindi
non è possibile che una parte del cammino sia con connessione e l’altra senza connessione. Di conseguenza
tutta la rete di calcolatori (es: internet, ATM, frame-relay etc..) deve essere con connessione o senza
connessione.
Le reti di circuito con connessione vengono chiamate reti a circuito virtuale (VC, virtual circuit)(es: ATM,
frame-relay), mentre quelle senza connessione reti a datagramma (es: internet)

4.2.1 Reti a circuito virtuale

Un circuito virtuale consiste di :


1. Un percorso tra host origine e destinazione (ovvero una serire di collegamenti e router )
2. Ogni collegamento ha un proprio numero identificativo di VC per ogni connessione attiva.
3. Una riga per ogni VC nella tabella d’ inoltro a cui è associato un VC in entrata ad uno in uscita ( figura
4.3A).

Per capire meglio prendiamo in esame la figura 4.3 ( i numeri accanto ai router R, sono i numeri dell’ intefaccia
di collegamento) e supponiamo che :
1. L’ Host A richieda di stabilire un circuito virtuale con l’ Host B.
2. La rete sceglie il percorso A-R1-R2-B
3. I numeri dei 3 VC relativi ai 3 colleamenti sono 12-22-32
Analiziamo ora il cammino del pacchetto :
1. L’host A invia il pacchetto. Il pacchetto avrà come numero VC dell’ instezazione 12, ovvero il numero
relativo al VC del primo collegamento

108
2. Arrivato ad R1, il router cerca nella tabella di inoltro il VC in ingresso e ne recupera il VC in uscita,
sostituendolo all’attuale numero VC. Nello specifico viene sostituito 12 con 22 il numero VC relativo al
secondo collegamento. Infine inoltra il pacchetto a R2
3. Arrivato ad R2, si comporta alla stessa maniera di R1. Cerca 22 nella tabella di inoltro, e stostituisce il
numero VC dell’intestazione con 32 il numero relativo al terzo collegamento. Inoltra il pacchetto a R2
4. Il pacchetto arriva a destinazione nel Host B

Figura 4.3A

Figura 4.3

Ogni volta che si stabilisce un nuovo circuito virtuale (quindi una nuova connessione) attraverso un router, si
aggiunge una riga alla tabella d’ inoltro del router stesso. Mentra quando viene terminato si cancella la relativa
riga.
Possiamo aggiungere inoltre che i router devono mantenere informazioni sullo stato della connessione
attive. Quindi aggiungere una riga nella tabella di inoltro, quando la connessione viene aperta ed eliminarla
quando viene chiusa
Il ciclo di vita dei circuiti virtuali si articola in tre fasi:
1. Instaurazione
a. Il livello di trasporto contatta il livello di rete specificandon e il destinatario ed attende che la rete
imposti il VC
b. Il livello di rete determina il percorso tra mittente e destinatario, i numeri VC dei collegamenti, ed
aggiunre una riga nelle tabelle di inoltro di tutti i router
2. Trasferimento dati
Stabilito il circuito virtuale i pacchetti possono incominciare a partire (figura 4.4).
3. Terminazione

109
a. Il mittente informa il livello di rete che vuole terminare la connessione
b. Il livello di rete comunica la decisione all’ host di destinazione ed aggiorna le tabelle di inoltro
nei router per indicare che la connessione non esiste più

Figura 4.4

4.2.2 Reti a datagramma

Quando il sistema terminale vuole inviare un paccheto in una rete a datagramma, prima lo contrassegna con
l’indirizzo del destinatario e poi lo immette nella rete (figura 4.5).
Le reti a datagramma non contengono informazioni sullo stato, inoltre nel percorso i router utilizzano gli
indirizzi di destinazione per inoltrare i pacchetti
Infatti le tabelle d’ inoltro dei router fammo corrispondere gli indirizzi di destinazione ai collegamenti. Quindi
quando arriva un datagramma, il router utilizza l’indirizzo di destinazione per cercare nella tabella di inoltro a
quale collegamento inoltrarlo.
Per capire meglio facciamo un esempio ipotizando di avere 4 collegamenti (da 0 a 3), e la tabella d’inoltro
come in figura 4.5 A :
1. In un router arriva un pacchetto con indirizzo di destinazione 11001000 00010111 00010110 10100001
2. Per cercare il collegamento relativo all’indirizzo, utilizza la tabella di inoltro che lavora sulla
corrispondeza del prefisso. Ovvero confronta la prima parte dell’ indirizzo, i primi 21 bit (in rosso), per
trovare la corrispondenza con l’interfaccia di collegamento. Nel nostero caso si tratta della riga 1.
Quindi il pacchetto viene inoltrato al collegamento 0.
Possiamo notare che vige la regola di corrispondenza a prefisso più lungo. Per la riga 2 della tabella ha
i primi 22 bit uguali all’indirizzo, quindi dovrebbe vincere lei, ma poichè i successivi non sono uguali
allora non viene presa in considerazione e quindi anche se la prima riga ne ha di meno uguali, sono
tutti uguali e quindi vince.

110
Figura 4.5

Figura 4.5 A

4.2.3 Origini delle reti a circuito virtuale e a datagramma (da studiare)

4.3 Cosa si trova all’ interno di un router (da studiare)

4.4 Protocollo Internet (IP): inoltro e indirizzamento di Internet


La figura 4.12 da una panoramica ad alto livello del livello di reta

111
Figura 4.12

4.4.1 Formato datagrammi

Analiziamo il datagramma di IPv4 (Figura 4.13) che è composto da :


● Numero di versione. Composta da 4 bit, per identificare la versione del protocollo IP utilizzato
(IP,IPv4,IPv6)
● Lunghezza dell’ instestazione. Composto da 4 bit. Un datagramma IPv4 può contenere un numero
variabile di opzioni quindi la lunghezza dell’intestazione può variare. Questo campo quindi serve a dire
quanto è lunghe l’intestazione e quindi da quando partitanno effettivamente i dati del datagramma
● Tipo di servizi. Chiamato TOS serve a distingure la tipologia del datagramma, ad esempio quello che
richiedono basso ritardo o affidabilità.
● Lunghezza del datagramma. Rappresenta la lunghezza totale del datagramma intestazione + dati
● Identificatore,flag, spostamento laterale di frammentazione. Questi campi sono relativi alla
frammentazione discussa di seguito
● Tempo di vita. Chiamato TTL (Time to live), è stato introdotto per evitare che resti in circolazione nella
rete per sempre. Ogni volta che un router elabora il datagramma lo decrementa di 1. Quando arriva a 0
viene eliminato
● Protocollo. E’ usato dal destinatario finale ed indica a quale protocollo del livello di trasporto va
passato il datagramma. Ad esempio TCP o UDP. Corrisponde al numero di porta del livello di trasporto
● Checksum dell’ intestazione. Consente ai router di rilevare errori sui bit nei datagrammi rcevuti. Il
calcolo avviene esattamente come descritto per il checksum del paragrafo 3.3
● Indirizzi IP d’origine e destinazione. Quando un host crea un datagramma inserisce il proprio
indirizzo IP e quello di destinazione.
● Opzioni. Questi campi consentono di estendere l’intestazione IP. Non vengono utilizzate spesso e sono
di lunghezza variabile ed a volte un datagramma può anche non contenerle. Considerato che erano
utilizzate poco da IPv6 sono state eliminate.
● Dati (carico utile). Nella maggior parte dei casi il campo contiene il segmenti del livello di trasporto
(TCP o UDP), ma puo contenere anche altro come ICMP.

112
Figura 4.13

Frammentazione dei datagrammi IP

I protocolli a livello di collegamento hanno dei limiti sulla dimensione dei pacchetti che possono trasportare.
Questo limite è detto unità massima di trasmissione (MTU, maximum transimission unit). Dato che i
datagrammi IP vengono incapsulati nei frame a livello di collegamento, se MTU del collegamento utilizzato è
inferiore alla dimensione dei datagrammi IP, questi devono essere divisi in piccoli pezzi della dimensione dei
frame del livello di collegamento. Questo processo è detto frammentrazione, ed ogni pezzo è detto frammento
(il frammmento è comunque un datagramma) .
Il datagramma frammentato deve essere ricomposto nella destinazione, prima che arrivi al livello di trasporto,
in quanto TCP e UDP comprendono solo i datagrammi completi. Per evitare di introdurre complessita
nell’architettura, questo processo viene fatto nell’ end-point, sfruttando i campi identificazione, flag e
spostamento laterale di frammentazione, seguendo questo processo :
1. I frammenti ( che ricordiamo sono cmq datagrammi ) sono identificati da
a. indirizzo di origine e destinzione
b. identificatore numerico del datagramma originario
2. Quando la destinazione (livello di rete) riceve i frammenti analizza l’identificatore numerico e
riassembla i frammenti con identificatore uguale, in un unico datagramma
3. Riassemblato il datagramma originale, il livello di reta lo passa a livello di trasporto (TCP, UDP).
4. Per capire quando finiscono i frame di un datagramma, l’ultimo frame ha flag = 0 mentre tutti gli altri a 1
5. Il campo spostamento laterale viene utilizzato per capire l’ordine dei frame, e controllare eventuali
perdite (visto che IP non è un protocollo affidabile)
6. Se anche solo un frame non arriva a destinazione, viene scartato l’intero datagramma ovvero tutti i
frame associati ad esso. Nel caso in cui il livello di trasporto sia TCP, ovvero protocollo affidabile, non
ricevendo un datagramma, lo richiede nuovamente.

La frammentazione dei datagrammi rende il sistema vulnerabile di seguito due possibili attacchi DoS:

113
1. Il primo chiamato Jolt2, invia all’host attaccato un flusso di frammenti inaspettati senza mai inserire il
flag=0. In questo modo l’host tenta di ricostruire il datagramma e collassa.
2. Vengono inviato frammenti che si sovrappongono tra di loro ovvero con spostamento laterale errato.

In IPv6 la frammentazione e stata elimitata evitando così questa tipologia di attacchi.

4.4.2 Indirizzamento IPv4

Andiamo ad analizzare il modo in cui gli host e i router sono connessi per formare una rete.
Vediamo alcune caratteristiche degli indirizzi IP :
1. Sono lunghi 32 bit (4 byte)
2. Sono solitamente scritti nella notazione decimale puntata, in cui ciascun byte dell’indirizzo è scritto in
forma decimale ed è separato da un punto

Definiamo interfaccia il confine tra host/router e il collegamento fisico. Vediamone alcune caratteristiche :
● Un host generalmente ha una sola interfaccia in quanto ha un solo collegamento,
● Un router che può ricevere ed inoltrare dati ha almeno due interfacce, una in ingresso ed una in uscita.
● Ad ogni interfaccia è associato un indirizzo IP univoco a livello mondiale
● Una parte dell’ indirizzo IP è determinata dalla sottorete a cui è collegata. Questo funzionamento è
descitta nella figura 4.15.

La figura 4.15 descrive il funzionamento degli indirizzi di interfaccia e sottoreti:


1. E’ presente un router con 3 interrfacce e quindi 3 indirizzi differenti
2. Prendendo come esempio la parte sinistra dell’immagine vediamo che è composta da 3 host ed un
l’interfaccia del router, con questa caratteristiche :
a. La rete che connette i 3 host e l’interfaccia è detta sottorete o rete IP
b. I 3 host e l’interfaccia hanno la prima parte dell’indirizzo IP uguale (223.1.1), che identifica la
rete a cui sono connessi.
c. IP assegna alla sottorete l’indirizzo 223.1.1.0/24, che vuol dire che i 24 bit più a sinistra dell’ IP
ovvero 223.1.1 identificano l’indirizzo della sottorete, e la nostazione /24 è detta maschera di
sottorete (subnet mask). La figura 4.16 descrive l’indirizzo IP della sottorete.
d. Ogni host all’interno della sottorete avrà un indirizzo IP della forma 223.1.1.xxx

114
Figura 4.15

Figura 4.16

Una sottorete non è definita tale solo se collega più host come definito dalla Figura 4.16, composta da 3
sottoreti differenti ognuna delle quali connette più host, ma come definito dalla figura 4.17 anche la
connessione tra due interfacce di router differenti viene definita sottorete. Infatti la figura 4.17 ha 6 sottoreti di
cui 3 sono quelle che connettono più host insieme, e le altre 3 sono quelle che connettono le interfacce dei
router, quindi R1-R2, R1-R3, R2-R3. In generale possiamo dare la seguente definizione di sottorete :
E’ detta sottorete una rete isolata i cui punti terminali sono collegato all’interfaccia di un host o di un router

115
Figura 4.17

Per assegnare gli indirizzi IP alle sottoreti viene utilizzata la strategia Classless Interdomain Routing (CIDR)
:
1. L’indirizzo IP viene diviso in due parti, e mantiene la forma decimale puntata a.b.c.d/x
2. Gli x bit più a sinistra dell’indirizzo vengono detti prefisso

Possiamo notare che un organizzazione potrebbe contenere più sottoreti, quindi all’ organizzazione verrà
assegnato un indirizzo IP che avrà un prefisso comune con le proprie sottoreti. A loro volta le sottoreti
conterrano degli host che avranno un IP composto dal prefisso comune dell’orgnizzazione più quello della
sottorete più la parte specifica che gli identifica. Come vedremo nel paragrafo 4.6, quando i router dovranno
inoltrare un dataramma ad un host interno all’organizzazione dovranno conoscere soltanto il prefisso dell
organizzazione. In questo modo le tabelle d’inoltro saranno molto più piccole. Quando poi il datagramma
entrerà all’interno dell’ organizzazione, i router interni utilizzeranno i restanti byte dell’indirizzo (tolto quelli del
prefisso), per inoltrare il datagramma al host o ad un altra sottorete (che fare la stessa cosa prenderà i restanti
byte e lo inoltrerà).

Ci sono altre tipologie di indirizzi IP :


1. Classfull addressing, da studiare pag 308
2. Indirizzo IP broadcast, viene utilizzato da un host per fare un invio broaddcast a tutti gli host sulla
sottorete, e lo fa emettendo un datagramma con indirizzo 255.255.255.255.

Come ottenere un blocco di indirizzi (da studiare)

da studiare
116
Dice che un organizzazione che ha una sottorete può richiedere un blocco di indirizzi IP da utilizzare per i
propri host o router

Come ottenere l’indirizzo di un host : DHCP

Un’ organizzazione che ha ottenuto un blocco di indirizzi IP può scegliere di assegnare un indirizzo ad un host
manualmente o settare la modalità automatica (per le interfaccie vengono configurati manualmente).
La modalità automatica viene gestita da DHCP (Dynamic Host Configuration Protocol), che consente ad un
host di ottenere un indirizzo IP automaticamente e i dati della configurazione della rete (subnet, server locale
DNS etc..)
DHCP ha queste proprietà :
1. L’amministratore può settare DHCP, in modo che ogni host riceva un indirizzo IP persistente, oppure
assegni ad ogni host che si connette un indirizzo IP temporaneo, che sarà diverso tutte le volte che
l’host si connetterà alla rete.
2. Viene chiamato anche protocollo plug-and-play per la capacità di assegnare indirizzi IP
dinamicamente.
3. Ogni volta che un host si aggiunge alla rete DHCP alloca un indirizzo arbitrario dagli indirizzi disponibili,
mentre ogni volta che un host lascia la rete rende l’indirizzo nuovamente disponibile.
4. E’ adatatto nelle reti LAN, dove gli utenti vanno e vengono. Quindi DHCP assegnerà dinamicamente gli
indirizzi gli utenti.
5. E adatto anche nelle reti d’accesso degli ISP residenziali. Per esempio in una rete residenziale ci sono
2.000 utenti, ma non saranno mai tutti collegato contemporameamente. Quindi assegnare IP statici
sarebbe inutile. Mentre assegnando IP dimanici (automatici), farebbe risparmiare risorse.

DHCP è un protocollo client-server. Un client è di solito un host, che oltre all’indirizzo IP vuole ottenere le info
sulla configurazione di rete.
Ogni sottorete dispone di un server DHCP, e nel caso in cui non la disponga, server un servizio di appoggio
(generalmente un router), che conosca l’indirizzo IP del server DHCP.
La figura 4.20 mostra un server DHCP, collegato alla sottorete 223.1.2/24, con il router che opera da agente
d’appoggio per i clien delle sottoreti 223.1.1/24 e 223.1.3/24

117
Figura 4.20

La figura 4.21 mostra le fasi usate dal protocollo DHCP, per assegnare gli indirizzi IP agli host e fornirgli
infomazioni sulla subnet. Nella figura yiaddr (your internet address) indica l’indirizzo IP assgnato al client
appena connesso. Si ipotizza che il server DHCP sia nella sottorete :
1. Individuazione del DHCP server
Appena un host si collega deve identificare il server DHCP. Non conoscendo il suo indirizzo IP, invia un
pacchetto UDP sulla porta 67 incapsulato nel datagramma IP, che conterrà :
a. il messaggio di identificazione DHCP
b. indirizzo destinatario 255.255.255.255 (ricordiamo che quest’indirizzo invia in broadcast il
datagramma)
c. indirizzo sorgente 0.0.0.0 cioè questo host
2. Offerte del server DHCP
Un server DHCP che riceve un messaggio di identificazione, risponde al client con un messaggio di
offferta DHCP, che viene inviato in broadcast a tutti i nodi della sottorete e composto da :
a. ID transazione del messaggio di identificazione ricevuto
b. l’indirizzo IP proposto al client
c. la maschera di rete
d. la durata della connessione dell’indirizzo IP
Dato che nella rete sono possono essere presenti più server DHCP, il client potrebbe trovarsi nella
condizione di dover scegliere la miglior offerte
3. Richiesta DHCP
Il client sceglierà tra le varie offerte e risponderà con i parametri di configurazione (inviati
precedentemente dal DHCP server)
4. Conferma DHCP
Il server risponde alla richiesta con un ACK che coferma i parametri di configurazione.

118
5. Il client riceve l’ ACK, e quindi usa l’indirizzo IP.

Figura 4.21

Traduzione degli indirizzi di rete

Ogni dispositivo IP richiede un indirizzo IP anche tutti i dispositivi nelle sotto reti SOHO quali small office, home
office, ovvero reti locali. Nel caso delle reti locali non c’è bisogno di richiedere un indirizzo IP a ISP tanto ampio
da coprire tutti i dispositivi nella sottorete, ma viene utilizzata la traduzione degli indirizzi di rete NAT
(network address translation).
Per sfruttare il nat viene utilizzato un apposito router NAT, ed il funzionamento è illustrato nella figura 4.22
1. Il router è un router NAT privato ovvero che consente agli host della rete privata di connettersi con
quella pubblica (es: il classico router per connettersi ad internet).
2. L’ indirizzo IP dell’ interfaccia che connette il router alla rete privata (10.0.0.4) è del tuipo 10.0.0.0/8 che
è una delle tre parti dello spazio di indirizzi IP riservato alle reti private (ovvero indirizzi comprensibili
solo per i dispositivi interni).
3. Ongi host ha indirizzo di sottorete 10.0.0.0/24

119
4. Il router NAT non compare come router all’esterno ma come un unico dispositivo con un unico indirizzo
IP
5. Il router ottiene il proprio indirizzo il dal server DHCP del proprio ISP
6. I dispositivi nella rete privata ottengono il proprio indirizzo IP router che manda in esecuzione un server
DHCP

La domanda che sorge è se i dispositivi nella rete privata non sono visibili all’esterno come fanno a
comunicare, ovvero per esempio come fa il router, che riceve un datatrama, a capire a quale dispositivo nella
rete privata inoltrarlo ?
La risposta è la tabella di traduzione NAT, il cui funzionamento è descritto di seguito facendo un esempio :
1. L’host nella privata (es: domestica) con indirizzo IP 10.0.0.1 richiede una pagina web ad un server web.
2. L’host crea il datagramma, gli assegna tra le altre cose un numero di porta casuale es: 3345 e lo invia
al router NAT
3. Il router NAT riceve il datagramma e :
a. Sostituisce l’indirizzo IP del host privato con il proprio indirizzo pubblico 138.76.29.27
b. Genera un nuovo numero di porta es: 5001 e lo sostituisce al vecchio 3345
c. Aggiunge un record nella propria tabella di traduzione NAT. Il record come descritto dalla figura
4.22 è composto da indirizzo indirizzo router pubblico, nuova porta | indirizzo host privato,
vecchia porta. Nel nostro esempio 138.76.29.27, 5001 | 10.0.0.1, 3345
d. Invia il datagramma con il nuovo indirizzo IP e porta al server web
4. Il server web ricevuto il datagramma,ignaro della manipolazione, risponde al router NAT con un
datagramma che ha come indirizzo di destinazione quello del router NAT con il numero di porta da lui
generato, nel nostro esempio risponde con 138.76.29.17:5001
5. Il router NAT ricevuto il datagramma :
a. Recupera l’indirizzo destinazione ed il numero di porta che è nel datagramma nel nostro
esempio 138.76.29.17:5001
b. Fa il matching di quest’indirizzo 138.76.29.17:5001 nella tabella di traduzione, recuperando
l’indirizzo e la porta dell’hosting nella rete privata.
c. Sostituisce l’indirizzo e la porta di destinazione del datagramma con quelli trovati nella tabella
d. Inoltre nella rete privata il datagramma con il nuovo indirizzo e porta.

120
Figura 4.22

NAT a comunque dei difetti che vengono descritti di seguito :


1. L’uso dei numeri di porta per individuare gli host e non i processi di indirizzamento potrebbe causare
dei problemi, in quanto alcuni processi si attendono delle risposte su numeri di porta prestabiliti (es:
HTTP su 80)
2. NAT viola il cosidetto argomento end-to-end : gli host dovrebbero communicare tra loro direttamente
senza intromissioni di nodi ne modifica di indirizzi IP e porte
3. Interferenza con applicazioni P2P, in quanto se un Perr è coperto da NAT non può agire da server e
accettare connessioni TCP. Ci sono però degli espedienti per risolvere il problema
4. Si dovrebbe usare IPv6 per risolvere il problema degli indirizzi IP e non tamponare con i numeri di porta

UPnP

Il servizio di attraversamento del NAT è sempre più spesso fornito da UPnP (universal Plug and Play), un
protocollo che consente ad un host di individuare e configurare un NAT.
Con UPnP un host può chiedere una corrispondenza NAT tra i propri indirizzo IP privato e numero di porta
privato e Indirizzo IP pubblico e numero di porta pubblico. Se il NAT accetta la richiesta e crea una
corrispondenza, allora i nodi esterni possono iniziare connessioni TCP verso l’indirizzo IP pubblico e relativo
numero di porta.

4.4.3 Internet Control Message Protocol (ICMP)

ICMP viene usato da host e router per scambiarsi informazioni a livello di rete è composto da :
● Campo tipo
● Cambpo codice
● Contiene l’intestazione e i primi 8 byte del datagramma IP, in modo che quando arriva un messaggio
ICMP, il destinatario possa capire quale datagramma e andato in errore.

121
ICMP è spesso considerato parte di IP, ma dal punto di vista architetturale si trova sopra IP proprio come TCP
e UDP. Di fatto i messaggi ICMP vengono trasportati come carico utile all’interno dei datagrammi e quando un
host riceve il messaggio ne fa il demultiplexing dei contenuti. Infatti entrabi i comportamenti sono ugiali TCP e
UDP.

ICMP viene più comunemente usato per inviare info del tipo
1. Notifica degli errori
Se per esempio da qualche parte nel percorso di un datagramma, un router non riesce a torvare l’host
di destinazione, crea ed invia un messaggio ICMP del tipo 3 con codice 0 (“Rete di destinazione
irragiungibile”). Questo messaggio lo si può riscontrare in Telnet,HTTP, FTP
2. Ping
Per effetture un ping un Host invia un ICMP di tipo 8 con codice 0. L’host di destinazione vedendo la
richiesta echo, risponde con un ICMP di tipo 0 e codice 0
3. Riduzione del trasso trasmissivo

La figura 4.23 mostra alcuni tipo di messaggi ICMP

Figura 4.23

4.4.4 IPv6

IPv6 nasce dall’esigenza di avere un maggior numero di indirizzi IP.

Formato dei datagrammi IPv6

122
La figura 4.24 mostra il formato dei datagrammi di IPv6 ed i cambiamenti più significativi:
● Possibilità di indirizzamento.
Viene aumentata la dimensione dell’ indirizzo IP da 32 a 132 bit. Viene aggiunto agli indirizzi unicast e
multicast (255.255.255.255) anche un nuovo tipo detto indirizzo anycast, che consente di inviare un
datagramma a tutti gli host all’interno di un gruppo.
● Intestazione a 40 byte a linea di flusso
Sono stati eliminati o resi opzionali una serie di campi IPv4. La risultate intestazione è a lunghezza
fissa e consente una più facile elaorazione dei datagrammi IP.
● Etichettatura e priorità di flusso
Da vedere

Un confronto tra le figura 4.13 e 4.24 evidenzia la struttura più semplice e più efficiente dei datagrammi del
protocollo IPv6 in cui sono definiti i seguenti campi :
● Versione, campo di 4 bit che identifica la versione del protocollo IP utilizzato
● Classe di traffico, campo di 8 bit simile a TOS di IPv4
● Etichetta di flusso, campo a 20 bit utilizzato per identificare un flusso di datagrammi
● Lunghezza del carico utile, campo a 16 bit (intero senza sengo), indica il numero di byte nel
datagramma che seguono l’intestazione a lunghezza fissa di 40 byte
● Intestazione successiva, identifica il protocollo a cui verrà consegnato il datagramma. Es : TCP / UDP
● Limite di hop, come IPv4, il valore di questo campo viene devrementato di 1 in ogni router lungo il
percorso. Quando arriva a 0 il datagramma viene eliminato
● Indirizzi origine e destinazione
● Dati, carico utile che viene passato al protocollo di destinazione descritto in Intestazione succesiva

Confrontanto IPv6 e IPv4 notiamo che sono stati eliminati i seguenti campi :
● Frammentazione/riassemblaggio
IPv6 non consente la frammentazione e il riassemblaggio dei datagrammi, in quanto afferma che è un
operazione troppo onerosa. Quindi nel caso in cui un router riceva un datagramma IPv6 troppo grande
per essere inoltrato sul collegamento lo elimina ed invia al mittente un messaggio d’errore ICMP
“Pacchetto troppo grande”. Sarà il mittente quindi ad inviare nuovamente i dati con una dimensione del
datagramma inferiore.
● Checksum dell’ intestazione:
La checksum dell’intestazione è stata eliminata per queste considerazioni : viene già datta dai
protocollo di trasporto (es: TCP e UDP) e di collegamento (es: ethernet), quindi sarebbe stato
ridondante farla anche in quello di rete, e visto che è onerosa è stata eliminata
● Opzioni
Non fa più parte dell’ intestazione standard, anche se non è stata eliminata del tutto infatti è una delle
intestazioni successive a cui punta l’intestazione di IPv6. Eliminandolo l’intestazione rimane fissa a 40
byte.

Con IPv6 è stata rilasciat aanche una nuova versione di ICMPv6 in cui sono stati aggiunti nuovi tipi e codici tra
cui “paccheto troppo grande”, e la funzione per la gestine dei gruppi multicast.

123
Figura 4.24

Figura 4.13 (ripeterla anche qui per comodità)

Passaggio da IPv4 a IPv6

Passare da IPv4 a IPv6 è semplice se un router che gestisce IPv6 riceve un datagramma IPv4, in quanto è
retrocompotibile. Il problema e se un router che gestisce IPv4 riceve un datagramma IPv6. Ci sono vari modi
per ovviare a questo problema, quello che studieremo noi è il Tunneling.

La figura 4.26 descrive un esempio:


1. I router A, B, E, F gestiscono datagrammi IPv6
2. Tutti i router dentro il tunnnel gestiscono datagrammi IPv4
124
3. Supponiamo che il router A voglia inviare un datagramma IPv6 ad E
4. La difficoltà riscontrata e ci sono dei router nel cammino (nel tunnel) che gestiscono IPv4
5. Per risolvere questo problema quando il router B riceve il datagramma IPv6 da A :
a. si accorge che dopo ci sta un router che gestisce IPv4
b. deve quindi trasformare il datagramma IPv6 in IPv4.
c. per farlo prende l’intero datagramma IPv6 e lo pone nel campo dati di un datagramma IPv4.
d. questo datagramma viene indirizzato al router E ed inviato nel tunnel, dove ci sono router che
gestiscono IPv4
e. i router IPV4 nel tunnel prendono il datagramma e lo inoltrano come se fosse un normale
datagramma IPv4.
f. quando il datagramma arriva al router E IPv6 determina che contiene un datagramma IPv6, lo
estrae e lo instrada come se lo avesse ricevuto da un nodo IPv6.

Figura 4.26

4.5 Algoritmi d’instradamento


Ci occuperemo delle funzioni di instradamento che ha il compito di determinare i buoni percorsi attraverso i
router della rete.
Prima di procedere diamo alcuni termini :
● router predefinito o router di primo hop, è il router a cui è connesso direttamente un host

125
● router origine, router predefinito di origine
● router destinazione, router predefinito di destinazione

Il compito di un algoritmo di instradamento è quello di trovare un “buon percorso”, tra router di origine e router
di destinazione. Solitamente un percorso ottimale è quello a costo inferiore.

Per simulare i problemi d’instradamento si utilizza un grafo.


Ricapitolando la definizione di grafo :
● un grafo (G,E) è un insieme N di nodi e un insieme E di lati o archi, dove ciascun arco collega una
coppia di nodi N
● un cammino in un grafo è è una sequenza di nodi (x1,x2,...xp) tali che ciascuna delle coppie
(x1,x2),(x2,x3),...,(xp-1,xp) sia un lato di E.

Esaminando la figura 4.27 possiamo dire che :


● Nel contesto d’instradamento a livello di rete
■ i nodi sono i router che prendono decisioni sull’instradamento
■ gli archi rappresentano i collegamenti fisici tra i router
● Ad un arco è associato un valore che ne indica il costo che riflette lunghezza fisica, velocità del
collegamento, prezzo richiesto (a noi interessa solo il costo senza preoccuparci come siano calcolati).
● Data un arco che collega x e y (x,y) denotiamo con c(x,y) il suo costo. Se la coppia non appartiene ad
E denotiamo con c(x,y) = ∞
● Un nodo y viene detto adiacente (vicino) ad un nodo x, se (x,y) è un lato di E. Nella figura u e v sono
adiacenti.
● Il costo di un cammino è la somma di tutti i costi degli archi lungo il cammino.
● Il compito di un algoritmo è quello di trovare il cammino meno costoso detto cammino a costo minimo
● Nella figura 4.17 il cammino a costo minimo da u a w è dato da (u,x,y,w) che ha costo 3 ovvvero la
somma del costo di ogni singolo arco

Figura 4.27

Ci sono diversi modi di classificare un algoritmo :


1. globali o decentralizzati :
● Algoritmo d’instradamento globale
Calcola il cammino a costo minimo avendo una conoscenza globale e completa della rete.

126
Questi algoritmi sono anche detti a algoritmi al stato del collegamento, in quanto devono
conoscere i costi di ciascun collegamento nella rete
● Algoritmo d’instradamento decentralizzato
Il cammino a costo minimo viene calcolato in modo distribuito e iterativo. Nessun nodo conosce
i costi di tutta la reta, ma inizialmente conosce solo i costi degli archi addiacenti, poi attraverso
un processo iterativo e lo scambio di informazioni con i nodi adiacenti calcola il persorso a costo
minimo verso una destinazione. Questo tipo di algoritmo è chiamato algoritmo a vettore di
distanza DV (distance-vector algorithm), poichè ogni nodo elabora un vettore di stima dei costi
(distanze) verso tutti gli altri nodi della rete.
2. statici o dinamici
● Algoritmi d’ instradamento statici
I cammini cambiano molto raramente spesso per un intervento umano (es: modifica manuale di
una tabella di inoltro)
● Algoritmi d’ instradamento dinamici
Determinano gli instradamenti al variare del volume del traffico o della topologia della rete.
Quindi quest’algoritmo può essere eseguito o periodicamente o su richiesta per esempio a
seguito del cambiamento del costo di un arco.
3. sensibili al carico:
● Algoritmi sensibili al carico (load-sensitive) (load-insensitive in caso contrario)
In questo tipo di algoritmi i costi dei collegamenti variano dinamicamente per riflettere il livello
corrente di congestione del collegamento sottostante, in quanto se si associa un alto costo ad
un ad collegamento trafficato l’algoritmo eviterà di percorrerlo.Algoritmi sensibili al carico

4.5.1 Algoritmi d’instradamento a stato del collegamento (LS)

In questo tipo di algoritmi, la topologia di rete e tutti i costi dei collegamenti sono noti, ossia disponibili in input
all’ algoritmo LS (link-state). Per far conoscere la topologia di rete e i costi dei collegamenti, ogni nodo invia
agli altri nodi della rete dei pacchetti di stado che riportano le informazioni dei collegamenti adiacenti al nodo
che sta inviando. In questo modo tutti i nodi della rete hanno le stesse informazioni e quindi quando
lancieranno l’algoritmo LS, otterranno tutti lo stesso risultato, ovvero la stessa tabella di intradamento.
L’algoritmo LS che andremo ad analizzare è l’ algoritmo di Dijkstra, che ha queste caratteristiche :
1. Calcola il cammino a costo minimo da un nodo di origine a tutti gli altri della rete.
2. Quest’ algoritmo viene eseguito su ogni nodo per calcolare la tabella di inoltro verso gli altri nodi
3. E’ iterativo
4. Dopo la k-esima iterazione (dopo che ha scandagliato tutti i nodi della rete e creato le relative tabelle di
inoltro), i cammini a costo minimo sono noti a k nodi di destinazione.

Prima di procedere con l’analisi definiamo le seguenti notazioni:


1. D(v) : costo minimo del cammino dal nodo di origine alla destinazione v. In questo caso il nodo di
origine non è il primissimo nodo, ma è il k-esimo nodo che sta analizzando l’algoritmo
2. p(v) : il nodo che sta prima del nodo v, lungo il cammino dall’origine a v
3. NI : è un sottoinsieme di nodi che contiene tutti in nodi necessari per il cammino a costo minimo
dall’origine alla destinazione v (inlcuso). Es : se devo andare da a a d e la rete è composta dai nodi da
a a f, N sarà composto dai nodi a,b,c,d

127
L’algoritmo descritto nella figura 4.3 A consiste in un passo di inizializzazione seguito da un ciclo che viene
eseguito una volta per ogni nodo della rete (che è un grafo). Quando l’algoritmo termina avrà calcolato il
cammino minimo dal nodo di origine u a tutti gli altri nodi.

Figura 4.3 A

Per capire meglio facciamo un esempio prendendo in considerazione la figura 4.27 e la figura la tabella 4.3,
che rispecchia l’esecuzionde dell’algoritmo LS sulla rete della figura 4.27. L’esempio calcola i percorsi a costo
minimo da u a tutte le sue destinazioni. Inoltre la tabella 4.3 rispecchia i passi dell’algoritmo, dove le righe
forniscono i valori delle variabili dell’algoritmo al termine dell’iterazione :
1. Nel passo di inizzializzazione vengono recuperati i costi (valori dei cammini a costo minimo noti a u )
relativi al collegamento dei nodi adiacenti e settati con questo le rispettive variabili. Nel nostro esempio
:
a. I nodi adiacenti ad u sono v,w,x che hanno rispettivamente un costo del collegamento pari a
2,5,1.
b. Possiamo notare che il costo di w, non è quello minimo in quanto seguento il percorso u->x->w
il costo è 4. Ma in questo momento (nell’inizializzazione), ci interessa conoscere il costo del
collegamento diretto tra due nodi.
c. Analizzando la tabella per esempio la prima 1 riga e 4 colonna abbiamo che D(w) = 5 e p(w) =
u. Ovvero ci dicono che il costo del cammino dall’origine a w, ovvero da u a w è 5, è che il nodo
predecessore di w è u.
d. Dato che i nodi y e z non sono adiacenti, il loro costo viene messo ad ∞ (vedere tabella).
2. Nella prima iterazione prendiamo in considerazione i nodi adiacenti ad u non ancora aggiunti ad N, che
hanno un costo minimo.
a. Nel nostro caso x è adiacente ad u ed ha il costo minimo ( tra tutti i nodi adiacenti ad u ) pari a
1, quindi lo inseriamo nell’ insieme N.
b. A questo punto viene aggiornata tutta la tabella quindi ricalcolati tutti i D(*) con i nodi presenti in
N eseguendo la riga 12 di LS. E come se dicessimo devo andare da u ad w, ma a
quest’iterazione oltre che andarci direttamente come nel passo 1, posso controllare se
passando da x (perchè sta in N) riesco a risparmiare piuttosto che andarci direttamente. Quindi
in poche parole prendo in considerazione altre ai cammini adiacenti ad u, anche quelli adiacenti
ad x

128
c. Utilizzando queste informazioni andiamo a vedere come viene modificata la tabella :
i. Il costo del cammino fino a v ovvero D(v), non è cambiato. In quanto anche prendendo in
considerazione x, risulta il cammino minimo.
ii. D(x), è cambiato, in quanto passando dal nodo x, il costo totale è 4. Viene anche
aggiornato il valora di p(w) che adesso passsa da u ad x.
iii. Visto che adesso u può sfruttare x (perchè in N), riesce a raggiungere y e quindi nella
tabella vengono anche aggiornati i ralativi valori che da ∞ passano a D(y) = 2 e P(y)= x
3. Nella seconda iterazione, prendiamo in considerazione i nodi adiacenti a u e x (ovvero in nodi in N), e
troviamo i cammini a costo minore che collegano u alle varie destinazioni che non sono in N.
a. Quindi in questo caso abbiamo u deve arrivare a v,w,y (x è in N quindi non lo prendiamo in
considerazione).
b. Troviamo che i cammini a costo minimo sono u->v e u->x->y che hanno un costo pari a 2.
c. Essendo 2 dobbiamo scegliere aritrariamente il nodo da inserire in N, e scegliamo y.
d. Quindi N adesso sarà u,x,y e aggiorniamo la tabella secondo il nuovo N (e seguendo la logica
del punto 1) :
i. D(v) ovveo per arrivare a v da u rimane invariato
ii. D(w) viene modificato a 3 in quanto passando da y si risparmia, quindi si ha che
u->x->y->w. Viene di conseguenza anche modificato p(w) con p(w) = y.
iii. Viene eliminado D(x) in quanto non è più un nodo estremo.
4. Nel terza iterazione vengono presi in considerazione i nodi adiacenti ad y ripetendo i passi di 2 e 3
5. Nelle successive iterazione vengono presi via via i nodi adiacenti ai all’ultimo nodo aggiunto a N
ripetendo i passi di 2 e 3.

Quando l’algoritmo termina, abbiamo per ciascun nodo il suo predecessore lungo il cammino a costo minimo
dal nodo originale. Per ciascun predecessore abbiamo il rispettivo predecessore ed in questo modo riusciamo
a costruire l’intero percorso dall’ origine a tutte le destinazione. La tabella di inoltro in un nodo, diciamo u, può
pertanto essere costruita da queste informazioni memorizzando, per ciascuna destinazione,il nodo del
successivo nodo sul cammino a costo minimo da u, alla destinazione. La figura 4.28 mostra i cammini a costo
minimo risultati e la tabella di inoltro di u per la rete in figura 4.27.

Ci sta l’ultima parte da studiare

Figura 4.27 (ripeto la figura per comodità)

129
Tabella 4.3

Figura 4.28

4.5.2 Algoritmo d’instradamento con vettore distanza (DV) (da studiare)

L’algoritmo d’instradamento con vettore distanza è :


1. Distribuito, perchè ogni nodo riceve parte delle informazioni da uno o più dei suoi vicini. E dopo aver
effetturato il calcolo con queste nuove info restituisce i risultati
2. Iterativo, questo processo si ripete fino a quando non avviene un ulteriore scambio di informazioni. Non
necessità di un segnale stop per fermarsi
3. Asincrono, non richiede che tutti i nodi operino a passo con gli altri

da studiare

Algoritmo con vettore distanza (da studiare)

da studiare

Algoritmo con vettore distanza: modifica dei costi e gusti dei collegamenti (da studiare)

130
da studiare

Algoritmo con vettore distanza: aggiunte dell’inversione avvelenata (da studiare)

da studiare

Confronto tra gli algoritmi LS e DV (da studiare)

Facciamo un brave riepilogo degli algoritmi LS e DV:


● Algoritmo LS
Ciascun nodo dialoga con tutti gli altri nodi via broadcasc, ma comunica loro solo i costi dei
collegeamenti direttamente connessi.
● Algoritmo DV
Ciascun nodo dialoga solo con i vicini direttamente connessi informandoli delle stime a costo minino da
se stesso a tutti i nodi che conosce nella rete

da studiare

Altri algoritmi d’instradamento (da studiare)

da studiare

4.5.3 Instradamento gerarchico

Negli algoritmi LS e DV trattati fino abbiamo visto la rete come una semplice collezione di router interconnessi
e tutti applicavano lo stesso algoritmo di intradamento. Ma questo produce due problemi :
1. Scala
Al crescere dei router il tempo richiesto per calcolare, memorizzare e comunicare le informazioni di
intradamenteo diventa proibitivo. Queste le criticità sui due algoritmi :
a. LS, aggironamenti e cambiamenti di percorso a costo minimo, richiederebbero un enorme
quantità di traffico che non lascierebbero banda per i dati
b. DV, un elevato numero di interazioni tra i router, non permetterebbe all’algoritmo di convergere
2. Autonomia amministrativa
Ogni società dovrebbe essere libera di gestire autonomamente i router all’interno della propria rete
scegliendo gli algoritmi per instradare i pacchetti nella propria rete, ma potendo comunque connettersi
con l’esterno.

Entrambi i problemi possono essere risolti organizzando i router in sistemi automi (AS, autonomous system),
che hanno queste caratteristiche :
1. Generalmente gestiti da un unica amministrazione (es : ISP o rete aziendale)
2. Si connnettono all’esterno attraverso dei router chiamati router gateway (inoltrano i pacchetti
dall’interno all’esterno )
3. Le tabebelle di inoltro dei router sono generate da due protocolli
a. protocollo d’instradamento interno o protocolli gateway interni (intra-AS ) al sistema
autonomo, che permette ai router di calcolare il percorso minimo tra i router interni alla rete

131
b. protocollo d’instradamento esterno (inter-AS) al sistema autonomo, permette di calcolare
calcolare il percorso minimo tra AS differenti.

Tabelle di inoltro dei router in un AS

Le tabelle di inoltro di tutti i router sono generati da entrambi i protocolli, in quanto per scegliere il percorso
migliore tra mittente e destinazione devono :
● conoscere come muoversi meglio all’interno della rete
● sapere quale sia il AS meno costoso a cui inoltrare il pacchetto fuori dalla rete interna

Per capire meglio facciamo un esempio basandoci sulla figura 4.32 :


1. Consideriamo una sottorete AS6 (anche se non presente nella figura)
2. AS1 apprende da inter-AS che AS6 è reggiungibile da AS3 (e non da AS2), questo implica che i router
interni sanno che per inoltrare i pacchetti ad AS6 devono inoltrare i pacchetti ad AS3, e che per
raggiuntere AS3 devono utilizzare il router gateway 1c

3. AS1 propaga quest’ informazione a tutti i suoi router interni.


4. Quando per esempio il router 1d ottiene le informazioni del punto b, determina attraverso intra-AS, il
percorso a costo minimo interno alla rete per raggiungere il router 1c, e quindi determina l’interfaccia I
sulla quale dovrà inoltrare il pacchetto. Quindi nella sua tabella di inoltro avrà la seguente riga (AS6, I),
ovvero per raggiungere AS6 deve inoltrare i pacchetti sull’interfaccia I .

Un problema che si potrebbe verifica è il seguente :


1. Consideriamo la sottorete AS8 (non in figura).
2. AS1 apprende da inter-AS che AS8 è raggiungibile sia da AS2 che da AS3. Questo implica che i router
all’interno della rete possono utilizzare due router gateway per raggiungere AS8, ovvero 1c e 1b.
3. AS1 propaga quest’ informazione a tutti i suoi router interni.
4. Quando i router ricevono quest’informazione del punto b, devono scegliere il router a cui inoltrare i
pacchetti che devono raggiungere AS8, per farlo si limitano a scegliere il percorso a costo minimo tra i
router 1c e 1b (intradamento a patata bollente). Quindi per esempio se per arrivare a 1c costa di
meno rispetto che arrivare a 1b, verrà scelto il percorso per 1c e la relativa interfaccia I che permette di
raggiungerlo. E quindi inseriranno nella propria tabella di inoltro la riga (AS8,I).

132
Figura 4.32

Conclusioni

Possiamo aggiungere che :


● un AS può passare le informazioni di intradamento, per raggiungere un altro AS, agli AS confinanti.
● internet è costituita da una gerarchia di ISP interconnessi (cap. 1.5) che a volte corispondono ad un
AS, altre volte dividono la propria rete in più AS

Riassumento possiamo riche che:


1. Il problema di scala viene risolto dato che un router intra-AS necessita soltanto delle informazioni sui
router del proprio sistema autonomo
2. Il problema dell’ indipendenza amministrativa, viene risolto dato che ogni organizzazione può eseguire
qualsiasi protocollo d’intradamento intra-AS, però ciascuna coppia si sistemi connessi deve adottare lo
stesso protocollo d’instradamento quando scambiaa informazioni di raggiungibilità.

Possiamo terminare dicendo che un sistema autonomi è un insieme di router sotto lo stesso controllo
amministrativo e tecnico, che eseguono lo stesso protocollo d’instradamento.

4.6 Instradamento in Internet


In internernet i protocolli intra-AS più utilizzani sono :
● RIP, routing information protocol
● OSPF, open shortest path first

Ciascun sistema autonomo è costituito da più sottoreti.

133
4.6.1 Instradamento interno al sistema internet (si parla di RIP)

Il protocolli d’intradamento RIP ha queste caratteristiche :


1. E’ un protocollo a vettore di distanza che opera in modo simile all’ algoritmo DV
2. Utilizza il conteggio degli hop come metrica, che indica il numero di sottoreti attraversate lungo il
percorso minimo dal router d’origine al router alla sottorete di destinazione. La figura 4.34, mostra un
sistem autonomo con sei sottoreti e una tabella che indica il numero di hop dall’origine A a tutte le
desinazioni
3. I router adiacenti si scambiano gli aggiornamenti d’instradamento circa ogni 30 secondi, utilizzando un
messsaggio di risposta RIP (o annunci RIP), che comprende un elenco di sottoreti di destinazione
(max 25), nonchè la distanza del mittente rispetto a ciascuna di tali sottoreti. Questi aggiornamenti
come negli algoritmi DV sono i vettori di distanza che nello specifico sono le distanza sul percorso
minimo tra il router stesso e le sottoreti del sistema autonomi.
4. Se un router non riceve aggironamenti per 180 secondi, non viene considerato più raggiungibile.
Quando questo accade viene modificata la tabella di instradamento e mandato un annuncio a tutti i
router vicini.
5. E’ implementato come un protocollo a livello di applicazione utilizzando il livello di trasposto con UDP e
porta 520, di fatto per inviare i messaggi di risposta, viene creato un segmento UDP e poi trasportato in
un classico datagramma IP. (è strano che per gestire una problematica a livello di rete venga utilizzato
una soluzione a livello di applicazione)
La figura 4.39 mostra una tipica implementazione di RIP in un sistema UNIX, come ad esempio una
workstation che funziona da router in cui un processo chiamato routed esegue RIP, ovvero mantiene
informazioni di instradamento e scambia messaggi con i processi routed nei router vicini.
6. Di solito viene utilizzato negli ISP di livello inferiore o nelle reti aziendali.

Figura 4.34

134
Figura 4.39

Per capire meglio il funzionamenti degli annunci RIP, analizziamo l’ esempio descritto nella figura 4.35 :
1. Le linee che connettono i router sono le sottoreti
2. Le linee tratteggiate indicano la continuazione del sistema autonomo e quindi ha molti più router e
collegamenti di quello mostrati.
3. Ciascun router mantiene una tabella d’ instradamento RIP, che include il vettore distanza e la tabella
di inoltro.
4. La figura 4.36 mostra la tabella d’ instradamento del router D così composta :
a. Analizzando le colonne :
i. La prima identifica la sottorete di destinazione
ii. La seconda colonna identifica il router successivo lungo il cammino più breve verso la
sottorete di destinazione
iii. La terza colonna indica il numero di hop (ossia il numero di sottoreti da attraversare
inclusa quella di destinazione) per giungere alla sottorete di destinazione lungo il
cammmino pù breve.
b. Analizzando le righe, possiamo dire che ne avrà una per ogni sottorete del sistema autonomo
5. Analizzando la tabella d’ instradamento del router D in figura 4.36 abbiamo che :
a. La prima riga dice che per inviare un datagramma da D alla sottorete w, il datagramma deve
essere prima di tutto inoltrato ad A, e che il numero di hot da D a w, è 2 in quanto conta sia la
sottorete x che w.

Figura 4.35

135
Figura 4.36

La figura 4.37 un annuncio che A manda a D in cui viene riportato che la sottorete z è distante solo 4 hop dal
router A (perchè magari i router verso z sono diminuiti).
Quest’a ggiornamento implica che la tabella di instradamento di D (figura 4.36), deve esere modificata con le
informazioni passate da A, in quanto guardando la 3 riga risulta che c’è un nuovo percorso a minor costo dato
proprio dall’aggironamento di A. La figura 4.38, ci mostra l’aggiornamento, nello specifico la 3 riga è stata
modificata e diche che per arrivare da D alla sottorete z deve passare da A ci sono 5 hop per arrivare a
destinazione

Figura 4.37

Figura 4.38

136
4.6.2 Instradamento nei sistemi autonomi in internet (si parla di OSPF)

I protocolli di instradamento OSPF hanno queste caratteristiche :


1. viene utilizzato ampiamente in internet per il routing interno dei sistemi autonomi.
2. generalmente utilizzati negli ISP di livello superiore
3. è un protocollo a statto di collegamento che utilizza il flloding (inondazione) di informazioni di stato del
collegamento e l’algoritmo di Dijkstra per la determinazione del percorso minimo
4. Ogni router costituiste una mappa (cioè un grafo) dell’intero sistema autonomi.
5. Un router utilizza l’algoritmo Dijkstra per determinare un albero di tutte le rotte minime da se verso gli
altri nodi
6. I costi dei collegamenti vengono fissati dagli amministratori e possono o essere fissati tutti a 1 oppure
con un valore inversamente proprorzionale al carico
7. Gli annunci OSPF sono contenuti in messaggi OSPF che vengono trasportati direttamente da IP, con
un protocollo di livello superior, con identificativo 89. Di conseguenza OSPF deve implemetare
funzionalità quali, trasferimento dati affidabile, broadcast.
8. Gli aggiornamenti delle informazioni d’instradamento che un router invia agli altri in broadcast (con
annuncio OSPF)vengono fatti in due casi :
a. quando si verifica un cambiamento nello stato di un collegamento
b. ogni 30 minuti anche se non ci sono stati cambiamenti

Tra i vantaggi OSPF, abbiamo :


1. Sicurezza
Gli scambi tra router (come gli aggiornamenti), possono essere autenticati per evitare manomissioni
delle tabelle dei router. OSPF supporta due tipologie di autenticazione :
a. Semplice
Si configura in tutti i router la stessa password, che deve essere poi inviata in chiaro con i
pacchetti OSPF
b. MD5
Si basa su chiavi segrete condivise configurate su ogni router. Quando un router manda un
pacchetto OSPF calcola l’ MD5 del cotennuto e lo include nel pacchetto. Il router che lo riceve
calcola anch’esso l’ MD5 del pacchetto e lo confrota con quelle inviato dal mittente. Se sono
uguali tutt’ ok.
Insieme ad MD5 vengono utilizzatai anche i numeri di sequenzee per evitare attacchi di
ripetizione.
2. Percorsi con lo stesso costo
Quando più percorsi verso una destinazione hanno lo stesso costo, OSPF consente di usarli tutti senza
dover sceglierne solo uno per inviare tutto il traffico.
3. Supporto integrato per l’instradamento unicast e multicast
Per consentire l’instradamento multicast viene impiegato una semplice estensione i OSPF MOSPF
4. Supporto alle gerarchie in un dominio di instradamento
OSPF offre la possibilità di strutturare i sistemi autonomi in modo gerarchico.

Come già descritto nei vantaggi, OSPF riesce a gestire un sistema autonomo gerarchico. Ciò vuol dire che può
essere formato da più aree che formano una sotto rete e che a loro volta fanno girare OSPF.

137
La figura 4.40 mostra un sistema autonomi OSPF strutturato gererchicamente con quattro aree, in cui
possiamo identificar 4 tipologie differenti di router :
1. Router interni
Si trovano un aree in aree non dorsale ed effettuano soltanto instradamente interno al sistema
automono
2. Router di confine d’area.
Appartengono sia a un area gerarchica sia ad una dorsale.
3. Router di dorsale (non di confine)
Il ruolo principale è quello di instradare il traffico tra le aree del sistema autonomo. Infatti all’interno di
un area dorsale i router interni apprendono dell’esistenza delle rotte verso le altre aree dalle
informazioni inviate in broadcast dai suoi router di dorsale. Tale informazione è un annuncio sullo stato
dei collegamente, che comunica il costo di un persorso verso un’ altra area anzicchè il costo di un
collegamento
4. Router di confine.
Scambiano informazioni d’instradamento con i router di altri sitemi autonomi e possono ad esempio
utilizzare BGP per l’instradamento tra autonomi.

Figura 4.40

4.6.3 Instradamento tra sistemi automi (si parla di BGP)

Il border gateway protocol BGP, determina i percorsi per le coppie origine-destinazione che interessano più
sistemi autonomi e mette a disposizione di ciascun sistema autonomo un modo per :
1. ottenere innformazioni sulla raggiungibilità delle sottoreti da parte dei sistemi confinanti
2. progare le informazioni di raggiungibilità a tutti i router interni a un sistama autonomi
3. determinare percorsi “buoni” verso le sottorei sulla base delle informazioni di raggiungibilità e delle
politiche del sistema autonomo

In particolare permette a ciascuna sottorete di comunicare la propria esistenza al resto di internet.

138
Fondamenti di BGP

Cominciamo nel descrivere BGP prendendo come contesto la rete descritta nella figura 4.32 e i concetti
sull’instradamento gerarchico trattato nel paragrafo 4.5.3.
BGP ha queste caratteristiche :
1. BGP permette di conoscere quali sono le destinazioni raggiungibili attaverso sistemi di automi vicini
2. In BGP due coppie di router,chiamati peer BGP, si scambiano informazioni d’instradamento su
connessioni TCP (semi-permanenti) sulla porta 179. Ogni connessione TCP con i relativi messaggi
viene chiamata sessione BGP
3. La figura 4.41 mostra le connessioni TCP della rete descritta in 4.32. La linea tratterriata tra due router
indica una conessione tra due router nonchè una sessione. Se la linea è tratteggiata con
a. tratteggio lungo, si parla di una sessione BGP esterna (eBGP) ovvero che coinvolge due
sistemi di automi, e quindi collega due router gateway di sistemi di automi differenti. (router 3a,
1c, 1b, 2a)
b. tratteggio breve, si parla di sessione BGP interna (iBGP), ovvero connessioni quindi sessioni
che collegano router interni ad un sistema autonomo. Si può notare che le linee di sessione
BGP non sempre corrispondono ai collegamenti fisici
4. In BGP le destinazioni non sono host ma prefissi CIDR che rappresentano una sottorete o una
collezione di sottorete. Per esempio :
a. ad AS2 sono connesse 4 sottoreti : 138.116.64/24, 138.116.65/24, 138.116.66/24,
138.116.67/24
b. AS2 potrebbe aggregare aggregare i loro prefissi e usare BGP per annunciare il singolo
prefisso 138.16.64/22 a AS1
5. Prendiamo in considerazione le sessioni della figura 4.41, per spiegare come BGP distribuisce le
informazioni tra sistemi di automo :
a. AS3 invia ad AS1 la lista dei prefissi raggiungibili da AS3(da se stesso) utilizzando il router
gateway 3a
b. AS1 utilizza iBGP per distribuire i prefissi tra i router interni al sistema autonomo
c. tenendo conto che tutti i router grazie al punto b. sono a conoscenza delle lista dei router di
AS3, AS1 invia ad AS2 le linformazioni ricevute da AS3 utilizzando il router gateway 1b
d. quando un router viene a conoscenza di un nuovo prefisso lo memorizza in una nuova riga nella
tabella di inoltro

139
Figura 4.32 (ripetuta per comodità)

Figura 4.41

Attributi del percorso e rotte BGP

Prima di procedere diamo alcune definizione :


● numero di sistema autonomo (ASN, autonomous systen number), è un numero che identifica
univocamente un sistema autono
● attributi BGP, vengono inclusi in un annuncio di un prefisso per una sessione BGP
● rotta, viene utilizzato per indicare un annuncio insieme ai sui attributi
● reti stub, sono sistemi autonomi che trasportano solo traffico di cui sono l’ origine o la destinazione.
Non hanno ASN

Due importati attributi sono :


● AS-PATH, quest’ attributo elenca i sistemi autonomi attraverso i quali è passato un annuncio. Viene
utilizzato per :

140
■ evitare gli annunci reiterati, ovvero se si accorge che è presente nella lista allora scarta
l’annuncio
■ gestire le politiche di importazione, ovvero decide se scartare o meno una rotta in base agli
AS presenti in quest’attributo. Per esempio un AS potrebbe decidere di cancallare una rotta
perchè non vuole inviare traffico su uno dei sistemi presenti nel AS-PATH
● NEXT-HOT, dato che ogni router a più interfacce e di convegienza più indirizzi IP, utilizza questo campo
per dire al proprio modulo d’instradamento quale interfaccia deve utilizzare per un determinato
percorso. Per esempio arriva una rotta su la seconda interfaccia, il router inserisce la rotta sulla propria
tabella d’inoltro la riga (ASx,l) dove l è l’interfaccia da utilizzare per inoltrare un pacchetto con percorso
minimo verso ASx. Per far capire al modulo d’instradamento chi è l’interfaccia l, passa l’indirizzo IP
dell’interfaccia nell’ attrobuto NEXT-HOT.

Selezione dei percorsi BGP

Come detto BGP utilizza eBGP e iBGP per distribuire le rotte ai router all’interno dei sistemi autonomi. In tal
modo un router può ricavare più di una rotta verso un determinato prefisso e quindi dovrà scegliere solo una
da inserire all’ interno della propria tabella di inoltro. Quindi utilizza le seguenti regole scegliere quella da
inserire:
● Si selezionano le con il valore dell’attributo preserenza locale più alto, il cui valore può essere :
■ impostato direttamente da un router
■ recuperato da un altro router nello stesso sistema autonomo
● Tra le rotte con lo stesso valore di preferenza locale si seleziona quella con AS-PATH più breve
● Tra le rotte con lo stesso valore di preferenza locale e la stessa lunghezza AS-PATH si seleziona quella
il cui router di NEXT-HOP è più vicino, ovvero quello che presenta il percorso con costo minore
determinato dall’algoritmo intra-AS (patata bollente).
Ci sono altre regole che però sono tralasciate.

Politiche d’instradamento (Da studiare)

4.7 Instradamento broadcast e multicast (Da studiare)

4.7.1 Algoritmi d’instradamento broadcast (Da studiare)

Flooding incontrollato (Da studiare)

Flooding controlllato (Da studiare)

Broadcast con spanning tree (Da studiare)

Algoritmi di broadcast (Da studiare)

141
4.7.2 Multicast (Da studiare)

Internet Group Management Protocol (Da studiare)

Algoritmi d’instradamento multicast (Da studiare)

Instradamento multicast in internet (Da studiare)

142
CAPITOLO 5 - LIVELLO DI COLLEGAMENTO E RETI
LOCALI

5.1 Livello di collegamento : introduzione e servizi


Prima di procedere diamo alcune definizioni :
● Nodo : indica un host o un router indistintamente
● Collegamento : canale di comunicazione che collegano due nodi adiacenti lungo un cammiino

Per trasferire un datagramma da un estremo ad un altro, viene incapsulato in un frame a livello di


collegamento e viene inviato sul collegamento stesso. Il nodo di destinazione riceve il frame ed estrare il
datagramma

143
Figura 5.1

5.1.1 Servizi offerti a livello di collegamento

I protocolli a livello di collegamento hanno queste caratteristiche :


● vengono utilizzati per trasportare i datagrammi lungo un singolo canale
● definiscono il formato e le azioni che devono essere intraprese sui pacchetti.
● scambiano frame in cui vengono incapsulati i datagrammi .
● un datagramma lungo il cammino tra mittente e destinazione può essere gestito da diversi protocolli a
livello di collegamento. Per esempio nel primo collegamento può essere gestito da Ethernet, PPP su
l’ultomo e WAN su uno intermedio. Occorre tenere conto che protocolli differenti potrebbero offrire
servizi differenti. Per esempio non tutti i protocolli gestiscono la consegna affidabile.

Ogni protocollo a livello di collegamento può offrire servizi differenti. Qui l’elenco di quelli disponibili :
● Framing, quasi tutti i protocolli incapsulano il datagramma in un frame, che è composto da un campo
dati in cui viene inserito il datagramma ed un campo header

144
● Accesso al collegamento (link access), il protocollo utilizzato è MAC (medium access control), che
gestisce le regole di immissione dei frame nel collegamento. Per esempio su un canale condiviso, aiuta
a coordinare la trasmissione dei frame da parte di molti nodi.
● Consegna affidabile (reliable delivery), questi protocolli garantiscono il trasporto di un datagramma
senza errori. E’ realizzato attraverso acknowledgment e ritrasmissioni. E’ utillzato per evitare di dover
ritrasmettere i dati dall’origine alla destinazione. Infatti se un errore si è verificato in un collegamento
intermedio la ritrasmissione avviene da un nodo all’altro del collegamento intermedio.
● Controllo del flusso (flow controll), evita che il noto trasmittente saturi quello riceventi (magari perchè
ha un buffer piccolo)
● Rilevazione degli errori (error detection), viene utilizzato per rilevare gli errori. Il mittente inserisce un
bit di controllo dell’errore all’interno del frame ed il destinatario lo controlla.
● Correzione degli errori (error correction), è simile alla rilevazione degli errori ma in più permette di
identificare il punto esatto dove si è verificato in modo da portelo correggere
● Half-duplex e full-duplex, nella trasmissione full-duplex mittente e destinatario possono trasmettere
contemporaneamente in half-duplex uno per volta.

Occorre osservare che i protocolli di collegamento implemetano i servizi tra due nodi estremi su un
collegamento, mentre il livello di trasporto lo fa tra due host.

5.1.2 Dove è implementato il livello di collegamento ?

Per un dato collegamento, il protocollo del livello di collegamento è sostanzialmente realizzato da un


adattatore (figura 5.2), noto anche come scheda di interfaccia di rete (NIC,network interface card), ed ha
queste caratteristiche :
● E’ implementato per la maggior parte in hardware, ma anche in software
● L’ adattatore :
a. è composto di solito un chip che implementa molto servizi a livello di collegmaneto visto
preceventemente.
b. si collega al bus dell’host e viene considerato come un qualsiasi dispositivo di I/O
c. è un entità semi autonoma il cui compito è trasferire un frame da un adattatore ad un altro.
● lo scambio dei frame avviene in questo modo :
a. Il controllore che è dentro l’adattatore prende il datagramma che è stato memorizzato nella
memoria dal livello superiore
b. lo incapsula in un frame
c. lo trasmette nel canale di comunicazione eseguendo il protocollo di accesso al canale (es
Ethernet, Wi-Fi)
d. Lato ricevente l’adattatore riceve il frame
e. Estrae il datagramma e lo consegna al livello di rete
● L’implementazione software, consiste in un programma che viene eseguito dalla CPU dell’host
tipicamente implementa funzioni del livello più alto come :
a. la ricezione di un datagramma dal livello di rete
b. l’assemblaggio delle informazioni di indirizzamento a livello di collegamento
c. l’attivazione del controller hardware
Lato ricezione il software :
a. risponde agli interrupt del controllore
b. effettua la gestione di condizioni di errore
c. effettua il passaggio del datagramma a livello superiore

145
Figura 5.2

5.2 Tecniche di rilevazione e correzione degli errori (da studiare


X)

5.3 Protocolli di accesso multiplo


Esistono due tipi di collegamento di rete :
● Punto a punto, è costituito da un trasmittente ed ricevemte collegati da un collegamento
● Broadcast, può avere più trasmittenti e riceventi sullo stesso canale broadcast condiviso, Ethernet e
Wireless LAN ne sono un esempio. Quindi quando un nodo trasmette un frame tutti gli altri ne ricevono
una copia.

Quello ce andremo ad analizzare è come coordinare l’accesso di più nodi trasmittenti e riceventi a un canale
broaddcast condiviso, ossia il problema dell’ accesso mutiplo.
Nelle reti di calcolatori questo problema si traduce nel determinare quando nodo può trasmettere su un
determinato canale condiviso. Questo compito è gestito dai protocolli di accesso multiplo.
Se questo non fosse gestito ci si potrebbe imbattere nel problema della collisione, ovvero due o più nodi
trasmettono contemporaneamente e nessuno dei frame sarà in grado di interpretare i frame in quento
risulteranno “ingrabugliati”
La figura 5.9 mostra una serie ci canali ad accesso multiplo.
I protocolli ad accesso multiplo possono essere classificati in :
● Protocolli a suddivisione di canale (channel partitioning protocol)

146
● Protocollo ad accesso casuale (random access protocol)
● Protocolli a rotazione (taking-turn protocol)

Figura 5.9

5.3.1 Protocolli a suddivisione di canale

Esistono tra tipologie di protocolli a suddivisione di canale :


1. TDM (time division multiplexing)
Supponiamo che il canale supporti N nodi e la sua velocità trasmissiova sia R bps.
TDM, suddivide il tempo in intervalli di tempo (time frame) e poi divide ciascun intervallo di tempo in N
slot che vengono assegnati agli N nodi. Quindi quando un nodo ha un pacchetto da inviare deve farlo
nella sua slot ti tempo assegnata, e questa cosa avviene a rotazione dopo che termina l’ n-esimo
intervallo di tempo. Le dimesioni degli slot sono tali da consentire la trasmissione di un pacchetto. La
figura 5.10 mostra un esempio di TDM.
Un aspetto negativo di TDM è lo spreco di tempo infatti se soltanto un nodo deve inviare dei pacchetti
deve comunque attendere il suo turno, ovvero attendere che finisca l’ n-ennesimo intervallo di tempo
dato da R/N.
I vantaggi invece sono che evita collissioni e vi è una divisione equa
2. FDM (frequency division multiplexing)
Supponiamo che il canale supporti N nodi e la sua velocità trasmissiova sia R bps.

147
Divide il canale in frequenza differenti (ciascuna con una larghezza di banda di R/N) quindi crea N
canali di R/N bps e assegna ciascun frame ad un nodo. La figura 5.10 mostra un esempio di FDM.
Un aspetto negativo di FDM è lo spreco di banda infatti se soltanto un nodo deve inviare dei pacchetti
gli altri comunque occuperanno la banda.
I vantaggi invece sono che evita collissioni e vi è una divisione equa
3. CDMA accesso multiplo a divisione di codice (code division multiple access)
CMDA assegna ad ogni nodo un codice. Ogni nodo utilizzerà il codice per codificare i dati inviati, quindi
i nodi saranno in grado di associra i dati ai relativi nodi proprietari. Di conseguenza nodi differenti
potrenno trasmettere simultaneamente in quanto nonostante le interferenze generate i nodi potranno
comunque associare i dati al relativo proprietario.

Figura 5.10

5.3.2 Protocolli ad accesso casuale

I protocolli ad accesso casuale permettono ad un nodo di trasmette sempre alla massima velocità consentita
dal canale, cioè R bps. Quando si verifica una collisione, i nodi coinvolti ritrasmettono ripetutamente i loro
frame fino a quando non raggiungono la destinazione senza collisione. La ritrasmissione del frame non è
immediata, ma il nodo attenre per un periodo di tempo casuale (random delay) stabilito indipendentemente. Le
differenti scelte arbitrarie del tempo di attesa operate dai diversi nodi posssono consentire ai frame di
attraversare il canale senza ulteriori collisioni.

Slotted ALOHA

Assumiamo che :
● tutti i frame sono della stessa dimensione
● il tempo è diviso in slot uguali (cioè uno slot è il tempo necessario a trasmetere un pacchetto)
● i nodi cominciano la trasmissione solo all’inizio degli slot
● i nodi sono sincronizzati in modo che tutti sappiano quando iniziano gli slot

148
● se in uno slot due o più frame collidono i nodi coinvolti rilevano l’evento prima del termine dello slot
(perchè è una funzionalità data dal broadcast (mia interpretazione) ).

Di seguito le operazioni che vengono eseguite in Slotted ALOHA:


1. Quando un nodo ha un nuovo frame da spedire, attende fino all’inizio dello slot successivo e poi
trasmette l’intero frame
2. Se non si verifica una collisione, l’operazione ha avuto successo, quindi non occorre effettuare una
ritrasmissione e il nodo può predisporsi per un altro invio
3. Se si verifica una collisione, il nodo la rileva prima del temrine dello slot e ritrasmette con probabilità p
(un numero tra 0 e 1), il suo frame durante gli slot successivi, fino a quanto l’operazione non ha
successo.

Le caratteristiche principali di Slotted ALOHA sono :


● quanto è attivo un solo noto (ovvero quando un solo nodo deve inviare), permette di trasmettere
continuamente alla massima velocità
● è fortemente decentralizzato, in quanto ciascun nodo rileva le collisioni e decide indipendentemente
quandi ritrasmettere. E’ comunque necessario che i nodi sincronizzino le loro trasmissioni a partire
dall’inizio di uno slot.
● funziona bene quando è attivo un solo nodo
● Ha due principali problemi :
1. se una certa frazione di slot presenta collisioni andrà specata
2. a seguito di una collisione una certa frazione degli slot sarà vuota in quanto i nodi prima di
ritrasmettere attendono del tempo.
● l’ efficenza di questo protocollo è data dal numero di slot vincenti (ovvero gli slot in cui si riesce a
trasmettere un pacchetto senz collisioni) e il numero di nodi attivi con un elevato numero di pacchettida
sedire

La figura 5.11 rappresenta lo Slotted ALOHA

manca lo studio dell’efficenza

149
Figura 5.11

ALOHA

Pure ALOHA detto anche solo ALOHA, non necessita di slot e quindi neanche di sincronizzazione.
Appena arriva un frame ovvero un datagramma del livello di rete, o trasmette immediatamente ed interamente
nel canale broadcast.
Se un frame va in collisione, il nodo finesce cmq di trasmettere tutti i byte al suo interno, e poi lo ritrasmette
immediatamente con probabilità p.

manca lo studio dell’efficenza

CSMA: accesso multiplo

I protocolli ALOHA analizzati, prendono la decisione di trasmettere indipendemente dall’attività degli altri nodi
collegati. Ovvero :
1. un nodo non presta attenzione al fatto che vi sia un altro nodo che sta trasmettendo e quindi ne arresta
la propria trasmissione
2. un nodo non blocca la trasmissione se un altro nodo inizia a interferire con la sua trasmissione.

Queste due problematiche possono essere sintetizzate in :


1. rilevazione della portante (carrier sensing)
Un nodo ascolta il canale prima di trasmettere. Se il canale è occupato ovvero un nodo sta già
trasmettendo un frame, allora attende un intervallo di tempo casuele dopo di che ascolta nuovamente
il canale. Se il canale è libero inizia la trasmissione, altrimenti attende nuovamente
2. rilevazione della collisione (collision detection)
Il nodo che sta trasmettendo è comunque in ascolto sul canale, e se rileva che un altro nodo sta
trasmettendo un frame che interferisce con il suo, arresta la propria trasmissione e determina in
quanlche modo il momento in cui può ricominciare a ritrasmettere.

Possiamo dire che CMSA(carrier sense multiple access) implemente solo la prima regola, mentre CSMA/CD
(carrier sense multiple access with collision detection) le implementa entrambe.
La domanda che potrebbe sorgere sul punto due è : visto che ci sta la rilevazione della portanza, quindi il
controllo se il canale è libero o meno, come si può verificare la collisione?
Il problema è che se per esempio un nodo B invia a tempo t0 il proprio frame, prima che raggiunga l’altro nodo
D trascorre del tempo, che dipende dal tipo di canale utilizzato. E quindi può succedere che B invia il frame,
ma quando D controlla il canale lo trova vuoto perchè ancora il frame di B non ha raggiunto D, e quindi D invia
il proprio frame rispettando le regole. Ma in realtà il canale è occupato e quindi i frame si scontrano.
Utilizzando collision detection i nodi quando verificano la collisione si interrompono aspettando un tempo x
prima di ripartire. Questo evita che il frame debba essere reinviato per intero come succede nei casi in cui non
c’è collision detection.

Protocolli a rotazione (Taking turning protocol)

I protocolli a rotazione sono nati per far fronte alla problematica di ALOHA e CSMA che quando sono attivi M
nodi, non riescono a far avere un throughtput vicino a R/M bps.
150
I protocolli a rotazione che esamineremo sono due :
1. Protocolli poolling
In questo protocollo esiste un nodo principale che indica agli altri quanto poter incominciare ad inviare
un numero prefissato di frame. Il nodo principale quindi a turno invia un messaggio agli altri nodi con
l’indicazione di incominciare ad inviare i frame.
● I vantaggi sono :
a. eliminazione collissioni e slot
b. quindi efficienza più elevata
● Gli svantaggi sono :
a. introduzione del ritardo di polling, ovvero il tempo richiesto per notificare ad un nodo che
può incominciare a trasmettere
b. se il nodo principale si guasta l’intero canale diventa inattivo
2. Token-passing protocol
Viene utilizzato un frame detto token, che circola fra i nodi seguendo un ordine prefissato. Quando un
nodo ha il token incomincia a trasmettere un numero prefissato di frame, quanto termina passa il token
ad un altro nodo seguendo l’ordine. C’è da notare che se un nodo non ha frame da inviare, passa
subito il token ad un altro nodo.
● I vantaggi sono :
a. decentralizzato ed efficente
● Gli svantaggi sono :
a. il guasto di un nodo può mettere fuori servizio un intero canale
b. se un nodo si dimentica accidentalmente di inoltrare il token, occorre invocare procedure
di recupero, per rimetterlo in circolazione

5.3.4 Reti locali (NO da studiare)

5.4 Indirizzi a livello di collegamento

5.4.1 Indirizzi MAC

Ogni scheda scheda di rete presente in un nodo possiede un indirizzo a livello di collegamento chiamato in vari
modi indirizzo fisico, indirizzo LAN, indirizzo MAC con queste caratteristiche :
1. e’ lungo 6 byte
2. l’indirizzo di una scheda viene assegnato dal produttore e non cambia mai
3. è univoco in tutto il mondo, questo è possibile in quanto i costruttori quando richiedono a IEEE un
blocco di spazi di indirizzi da assegnare ai propri dispositivi. IEEE riserva un blocco di 224 indirizzi,
fissando i primi 24 bit dell’indirizzo e lasciando alla società il compito di assegnare ad ogni scheda i
rimanenti 24
4. ha una struttura piatta ovvero non gerarchica
5. è analogo al codice fiscale di una persona

151
Figura 5.16

5.4.2 Protocollo per la risoluzione degli indirizzi (ARP)

Il problema che si pone e come si fa conoscendo l’indirizzo IP di un nodo a risalire ad l’indirizzo MAC (che
verrà poi utilizzato per creare il datagramma inserendolo nell’instazionee insieme all’indirizzo IP). Questo
potrebbe essere necessario se il livello di collegamento di un nodo vuole trasmettere un datagramma al livello
di collegamento di un altro nodo un altro nodo.
La codifica di un indirizzo IP nel relativo indirizzo MAC avviene grazie ad ARP (address resolution protocol) ma
solo nella stessa rete LAN.
La figura 5.17 mostra un esempio di LAN in cui ci sono sia indirizzi IP che MAC.
Il protocollo ARP utilizza una tabella chiamata tabella ARP (figura 5.18) per mappare gli indirizzo IP con quelli
MAC.
Quando un nodo utilizza il protocollo ARP per conoscere un indirizzo MAC a partire da uno IP si possono
verifica due scenari :
1. La corrispondenza indirizzo IP / indirizzo MAC è già presente in tabella
In questo caso ARP ritorna semplicemente l’indirizzo MAC associato all IP passato in input.
2. La corrispondenza indirizzo IP / indirizzo MAC non è presente in tabella
a. ARP invia un pacchetto ARP in broadcast a tutti gli altri nodi che contiene l’indirizzo IP del
nodo relativo all’ indirizzo MAC che si vuole conoscere.
b. Quando i nodi ricevono il pacchetto confrontano l’indirizzo IP presente nel pacchetto con il
proprio
c. se corrisponde, vuol dire che il nodo richiedente vuole conoscere il suo indirizzo MAC, e quindi
il nodo ricevente crea una risposta inserendo il proprio indirizzo MAC inviandola al richiedente
d. quanto il richiedente riceve la risposta aggiorna la propria tabella ARP

Possiamo notare che ARP è plug-and-play, in quanto viene aggiornato ogni qual volta viene cambiata rete
LAN senza la necessità dell’intervento di un amministratore.

152
Figura 5.17

Figura 5.18

Come inviare un datagramma a un nodo esterno alla sottorete

La figura 5.19 mostra uno scenario in cui un nodo nella sottorete 1 vuole inviare un datagramma a livello di
collegamento ad un nodo nella sottorete 2.
Per far cio un nodo nella sottorete 1 deve :
1. Recuperare tramite ARP l’indirizzo MAC del router che collega le due reti.
2. Creare un frame e spedirlo all’adattatore del router
3. L’adattatore del router capisce che il frame è indirizzato a lui e lo passa al livello di rete
4. Il router consulta la propria tabelle ARP e capisce che il pacchetto deve essere inviato all’ adattatore
che si collega con la rete 2 (222.222.222.220).
5. Anche quest’ultimo addatatore passa il frame al proprio livello di rete, incapsula i datagramma in un
frame, e per capire a quale nodo della rete 2 inviare il frame viene consultata la tabella ARP, recuperato
l’indirizzo MAC, viene inviato il frame al nodo di destinazione

153
Figura 5.19

5.5 Ethernet
Ci sono due diverse tipologie di ethernet :
1. Ethernet con topologia a bus (fino a metà anni 90, figura 5.20 )
E’ una LAN broadcast dove tutti i frame trasmessi sono elaborati da tutti gli adattatori collegato al bus
2. Ethernet con topologia a stella basata su hub (da fine anni 90’, figura 5.21)
a. host e router direttamente collegato ad un hub
b. un hub è un dispositivo a livello fisico che agisce sui singoli bit piuttosto che sui frame
c. quando un bit arriva su un hub, questo lo amplifica e lo trasmette su tutte le interfacce
d. negli hub si possono verifica collisioni se ricevono contemporameamente dati da due interfacce
3. Ethernet con topologia a stella basata su switch (inizio 2000)
a. si continua ad usare la topologia a stella ma l’ hub viene sostituito da uno switch che evita le
collisioni ed è un vero e proprio commutatore di pacchetto store-and-forward

Possiamo aggiungere che i router lavorano fino al 3 livello mentre gli switch fino al 2 quindi i primo hanno rete,
collegamento e fisico, i secondi solo collegamento e fisico.

Ethernet fornisce un servizio


1. non affidabile
2. senza nessuna forma di handshake
3. senza connessione

154
Figura 5.20

Figura 5.21

5.5.1 Struttura dei pacchetti Ethernet (da studiare)

5.5.2 CSMA/CD: protocollo di accesso multiplo di Ethernet (da studiare)

Efficienza di Ethernet (da studiare)

5.5.3 Tecnologie Ethernet (da studiare)

155
5.6 Switch a livello di collegamento*
Di seguito le caratteristiche di uno switch :
● il suo ruolo è ricevere i frame a livello di collegamento in ingresso ed inoltrarli sui collegamenti in uscita.
● è trasparente per i nodi nel senso che un nodo indirizza un frame al nodo a cui lo vuole inviare senza
sapere che in mezzo ci sarà uno switch.
● utilizza un buffer nel momento in cui il tasso d’arrivo dei frame in entrata e superiore a quello in uscita

5.6.1 Switch : inoltro e filtraggio*

Lo switch compie due principali azioni :


1. Filtraggio
E’ la capacità dello switch di stabilire quale frame deve essere inoltrato e quale debba essere scartato
2. Inoltro
Consiste nell’ individuare l’interfaccia sulla quale deve essere inoltrato il frame. L’ inoltro avviene
utilizzanto una tabella di commutazione (switch table, figura 5.27 ), che è composta da :
a. Indirizzo MAC del nodo destinazione
b. Interfaccia di destinazione
c. Il momento in cui è stato creato il record

La figura 5.26 mostra un esempio di rete con switch.


Descriviamo ora il processo di come uno switch compie filtraggio ed inoltro, ipotizzando che arrivi un frame sul
interfaccia x con indirizzo di destinazione DD-DD-DD-DD-DD-DD (da ora in avanti solo D), e si possono
verifica 3 diverse situazioni :
1. Non vi è una voce D nella tabella computazionale
Viene inviato il frame su tutte le interfacce dello switch esclusa x. In poche parole si invia il frame in
broadcast
2. Vi è una voce che associa D all’ interfaccia x
Visto che l’interfaccia in entrata è uguale a quella di inoltro vuol dire che il frame proviene da un
segmento LAN che contiene già l’adattatore con indirizzo D. Quindi non è necessario inoltrare il
segmento
3. Vi è una voce che associa D all’ interfaccia y ≠x
Il frame deve essere inoltrato all’ interfaccia y

156
Figura 5.26

Figura 5.27

5.6.2 Autoapprendimento*

A questo punto sorge la domanda, ma come vengono configurale le tabelle di commutazione ?


Non c’è bisogno di alcun intervento da parte di un amministratore di sistema o di un protocollo di
configurazione.
Di seguito il procedimento della creazione automatica delle tabelle di configurazione :
1. Inizialmente la tabella è vuota
2. Ogni volta che riceve un frame lo switch crea un record nella tabella di commutazione inserendo queste
informazioni :
a. Indirizzo MAC del mittente
b. Interfaccia da cui arriva il frame
c. Data di creazione del record
3. Se dopo un tot di tempo detto agin time, lo switch non riceve più frame da un determinato nodo
mittente elimina il relativo record dalla tabella

157
Figura 5.28

5.6.3 Proprietà della commutazione a livello di collegamento*

Utilizzare uno switch al posto di collegamento broadcasto come i bus e topologie a stella con hub porta i
seguenti benefici :
1. Eliminazione delle collisioni
Utilizzando lo switch non ci sono collisioni in quanto mette i frame nel buffer ed invia un solo frame per
volta sull’ intefaccia in uscita
2. Collegamenti eterogenei
Dato che lo switch isola un collegamento da un altro, i diversi collegamenti nella LAN possono avere
velocità differenti. In quanto anche se in ingresso arriva ad una velocità superiore ad un dato
collegamento in uscita, lo switch bufferizza i frame.
3. Gestione
Facilita la gestione di rete da parte dell’amministratore che per esempio non è costretto a gestire questi
problemi :
a. Se un adattatore ha un mal funzionamenti ed invia continuamente frame ad uno switch,
quest’ultimo si accorge del problema e disconnette il nodo non funzionante
b. Se viene tagliato un cavo, viene disconnesso solo il nodo che è collegato con quel cavo alo
switch

Switch e router a confronto*

Manca tutta la parte descrittiva ma la tabella 5.1 spiega molto bene le differenze rta switch e router.
C’è da aggiungere che :
1. I router :
a. sono commutatori di pacchetto a livello 3
b. lavorano con gli indirizzi IP
c. utilizza gli algoritmi di inoltro
2. Gli switch
a. sono commutatori di pacchetto a livello 2
b. lavorano con indirizzi MAC
c. autoapprendono

158
Tabella 5.1

Figura 5.29

5.7 PPP: protocollo punto-punto (da studiare)


Il protocollo punto a punto collega dirattente due nodi.

da studiare

5.5 - 5.6 - 5.7 nuovo libro (da studiare)

159
CAPITOLO 6 - WIRELESS E RETI MOBILI

6.1 Introduzione
In una rete wirless si possono identificare i seguenti elementi (Figura 6.1) :

● Host wireless
sono dispositivi periferici che eseguono applicazioni, possono essere mobili (es: smartphone, tablet) o
non mobili (pc desktop)
● Collegamenti wireless
L’ host si connette alla stazione base o ad un altro host attraverso il canale di comunicazione
wireless. Differenti tecnologie comportano diversi tassi transmissivi e variano anche le massime
distanze utili. La figura 6.2 mostra un idea approssimativa dei tassi transmissivi e delle distanze di un
collegamento in base alla tecnologia utilizzata.
● Stazioni base
Una stazione base è responsabile dell’invio e della ricezione dei dati tra gli host wirless ad essa
associati, e quindi fa comunicare gli host con il resto del mondo.
Un host è associato ad una stazione base se :
■ L’host si trova nell’aria di copertura della stazione base.
■ Un host la utilizza per trasmettere dati nel resto della rete.Un esempio sono gli access point
nella LAN 802.11
Un host si può operare in due modi :
■ modalità infrastruttura, gli host si connettono ad una stazione base
■ reti ad hoc, gli host wirless non hanno un infrastruttura a cui collegarsi e quindi devono
provvedere ai servizi di instradamento, assegnazione IP, DNS etc..

Viene definito handoff il processo che permette ad un Host di cambiare stazione base (spostandosi
nella sua zona di copertura)

● Infrastruttura di rete
E’ la rete più ampia con la quale l’ Host potrebbe volersi connettere

Le reti wirless possono essere formare da varie tipologie di rete. Possiamo classsificare le reti wirlsess
secondo due criteri :
1. se un pacchetto attraversa un solo collegamento wirless (hop) oppure più di uno
2. se vi è un infrastruttura come una stazione base oppure no.
In base a questi criteri possiamo avere :
● Hop singolo, con infrastruttura
■ queste reti hanno una stazione base che si collega ad una rete più grande ( es: internet )
■ tutte le comunicazioni tra stazione e host sono su un unico collegamento ( es: rete 802.11, rete
domestica etc.. )
● Hop singolo, senza infrastruttura
■ nella non vi è una stazione base, ma uno dei nodi può coordinare la trasmissione degli altri nodi
(es: reti blutooth e 802.11 in modalità ad hoc)

160
● Hop multipli, con infrastruttura
■ è presente una stazione base che si collega ad un rete più grande
■ alcuni nodi potrebbero collegarsi ad altri nodi per comunicare con la stazione base (es: reti
sensori wirless e reti mesh)
● Hop multipli, senza infrastruttura
■ Non c’è una stazione base
■ I nodi possono dover ritrasmettere i messaggi a parecchi altri nodi per raggiungere la
destinazione
La figura 6.2 mostra il raggio d’azione e la frequenza trasmissiva.

Figura 6.1

Figura 6.2
161
6.2 Collegamenti wireless e caratteristiche di rete
Le principali differenze tra le reti cablate (es: Ethernet) e le reti wirless sono :
● Attenuazione del segnale
Il segnale si attenua quando :
■ attaversa alcuni ostacoli ( es: muri)
■ all’ aumentare della distanza
● Interferenze da parte di altre sorgenti
Le interferenze possono essere causate da :
■ sono sorgenti radio che trasmettono alla stessa frequenza
■ rumore elettromagnetico ambietale (es: microonde)
● Propagazione su più cammini (multipath propagation)
La propagazione su più cammini si può verifica quando una parte delle onde elettromagnetiche si
riflette su oggetti e sul terreno, percorrendo cammini di diversa distanza tra il mittente ed il destinatario.
Questo fenomino disturba il segnale che giunge al destinatario.
Nelle reti wirless a causa di questi disturbi viene introdotto un protocollo di trasferimento affidabile anche nel
livello di collegamento.
Rivolgendo l’attenzione sugli host che ricevono il segnale abbiamo che:
● un host riceve un segnale elettromagnetico che potrebbe essere degradato rispetto al segnale originale
(per i motivi descritto sopra).
● Per questo motivo viene introdotto il rapporto segnale rumore (SNR, signal-to-nois ratio), che è una
misura relativa dell’intensità di segnale ricevuto, cioè quanto è stato degratato il segnale.
● SRN si misura in decibel

In una rete wirless possono sorgere due altri problemi, che generano una collisione. Supponiamo che le
stazioni A e C stiano trasmettendo a B.
● Problema del termilane nascosto (hidden terminal), figura 6.4a
Sasce dal fatto che ostacoli fisici presenti nell’ambiente (per esempio una montagna o un
palazzo),potrebbero impedire ad A e C di sentirsi l’ un l’ altro (e quindi evitare evitare la collisione
ascoltando il canale), anche se le loro trasmissioni interferiscono pressp la destinazione B, creando
così una collisione.
● Fading, figura 6.4b
Succede quando A e C sono collocate in modo tale che il loro segnale non è abbastanza potente da
essere rilevato vicendevolmente (e quindi anche se si ascolta il canale non si percepisce occupato), ma
le loro trasmissioni interferiscono con la stazione ricevente B.

162
Figura 6.4

6.2.1 CDMA (da studiare importante)

6.3 Wi-Fi 802.11 wireless LAN


Lo standard IEEE 802.11 wirless (Wi-Fi) risulta il più utilizzato per le connessioni LAN senza fili.
Esistono numerosi standard 802.11 (802.11a,b,g), e la tabella 6.1 ne descrive le principali differenze che sono
sulla frequenza utilizzata e sulla velocità di trasferimento.
Ad ogni modo tutti li standard 802.11 hanno delle caratteristiche in comune ::
● utilizzano lo stesso protocollo di accesso al mezzo CSMA/CA
● stessa struttura del frame a livello di collegamento
● possono funzionare sia un modalità infrastruttura che ad hoc
● possono ridurre la frequenza trasmissiva per raggiungere distanze più consistenti
Esiste anche un nuovo standard 802.11n che usa antenne a più ingressi e più uscite che trasmettono segnaldi
diversi.

Tabella 6.1

163
6.3.1 Architettura 802.11

La figura 6.7 mostra i componenti base di 802.11, con queste caratteristiche :


● set di servizio di base (BSS, basic service set), che contiene una o più stazioni wireless(è un host )
ed una stazione base centrale detta access point AP che si collega un commutatore o router per poi
uscire su internet. In una rete domestica si trovano un AP ed un router che spesso sono assemblati
nello stesso dispositivo che connettono BSS ad internet.
● Ogni stazione base ha un indirizzo MAC globalmente univoco (come in ethernet)
● Le reti wirless che utilizzano gli AP sono anche chiamate wireless LAN d’infrattuttura (come detto
primo paragrafo).
● Le stazioni BSS possono raggrupparsi per formare sistemi ad hoc come da figura 6.8. Una rete ad hoc
potrebbe essere composta al volo da un gruppo di persone in uno stesso luogo che vogliono
scambiarsi dei dati tra di loro nonostante l’assenza di un AP (es: quando creo una rete tra due pc
utilizzando wi-fi)

Figura 6.7

Figura 6.8

164
Canali e asssociazioni

Prima di inviare o ricevere pacchetti dati da 802.11 le stazioni devono assorciarsi a un AP.
Per permettere l’associazione ogni AP ha due identificativi :
1. SSID (service set identifier)
per esempio la funzionalità di windows “visualizza reti disponibili”, mosta gli SSID degli AP raggiungibili
2. Numero canale
Il protocollo 802.11 definisce nella frequenza da 2.4 Ghz a 2.485, 11 canali parzialmente sovrapposti.
Due canali non si sovrappongono se sono distanziati da almeno 4 canali, infatti gli unici canali che non
si sovrappongono sono 1, 6, 11 (e se quindi un amministratore vuole che in canali non si
sovrappongano ne sceglie questi tre altrimenti uno tra gli 11). Il numero canale è quindi il canale che è
stato assegnato al AP. Potrebbero esserci nella stessa stanza più AP con canali differenti es 1 e 6.

Quando un host (stazione wirless) vuole connettersi ad un AP deve effettuare una scansione per cercare l’ AP
a cui connetterci. Possiamo notare che potrebbero esserci molti AP a cui connettersi (es: sono in un bar e
vedo AP del bar e quello di una casa vicina), questo fenomeno viene chiamato giungla Wi-Fi. Un host può
cercare gli AP in due modi :
● Scansione Passiva
a. Gli AP inviano periodicamente dei frame beacon, che contengono il proprio SSID e il MAC.
b. La stazione wirless analizza gli 11 canali (descritti sopra) in cerca dei frame beacon provenienti
dagli AP
c. Di norma la stazione wirless seleziona AP, in base alla potenza con la quale riceve il frame
beacon. Un altro parametro di scelta sono anche le prestazioni della connessione, in quanto un
AP potrebbe essere sovraccarico di host e quindi occorre dividere la banda con molti più host
d. La stazione host sceglie AP (in base a quanto descritto sopra) e gli invia un frame di richiesta
associazione.
e. AP ricevuta la richiesta invia una risposta d’associazione
● Scansione Attiva
a. Un host invia broadcast un frame sonda che viene ricevuto da tutti gli AP nel suo raggio
b. AP ricevuto il frame sonda, risponde con un frame di sonda risposta.
c. La stazione host sceglie AP (tra quelli che hanno inviato il frame di sonda risposta)e gli invia un
frame di richiesta associazione.
d. AP ricevuta la richiesta invia una risposta d’ associazione

Una volta ottenuta l’associazione un un AP (con una delle due scansioni) l’host deve ottente l’indirizzo IP della
sottorete e per farlo deve inviare un messaggio di richiesta DHCP nella sottorete (come succedeva nel cap 4
per cercare il server DCHP) e lo fa utilizzando l’ AP a cui si è connesso.

Per associarsi ad alcuni AP è possibile che venga richiesta l’autenticazione, e ci sono due modi per effettuarla
:
1. Basata sul indirizzo MAC
2. Basata su Utente e Password (utilizzata negli internet cafè)

6.3.2 Protocollo MAC 802.11

In questo contesto per stazioni intendiamo sia stazioni wirless che AP.

165
Il protocollo MAC 802.11 ha le seguenti caratteristiche :
● utilizza CSMA/CA (CA, collision avoidance = prevenzione di collisioni ), per gestire più stazioni che
vogliono trasmettere frame sullo stesso canale.
● utilizza uno schema di avvenuta “ricezione/ritrasmissione” a livello di collegamento sfruttando un
protocollo di tipo ARQ. Perchè è molto elevato il tasso di errore nei bit.

CSMA/CA

A differenza di ethernet non implementa il collision detection (quindi CSMA/CD), per due principali motivi :
● troppo costoso costruire un hardware che possa rilevare le collisioni
● l’adattatore non potrebbe rilevare tutte le collisioni a causa del problema del terminale nascosto

Non utilizzando la rilevazione delle collisioni, una volta che una stazione inizia a trasmettere un frame, lo
trasmette interamente e non può tornare indietro.

Descriviamo di seguito il processo nel caso in cui ci sia una stazione che abbia un frame da trasmettere
(Figura 6.10):
1. Se la stazione percepisce che canale è inattivo, attende un periodo ti tempo noto come spazio
distribuito di interframe (DIFS, distributed inter-frame soace), e poi trasmette il frame
2. Altrimenti si comporta in questo modo:
a. attende per un tempo x scelto casualmente.
b. allo scadere di x ricontrolla il canale :
i. se è inattivo decrementa il valore di x,
ii. se è attivo lascia il valore invariato.
c. quando il valore di x arriva a 0 (solo a questo punto) la stazione invia il frame
Questo processo viene chiamato processo di ritardo casuale (backoff)
3. Una volta inviato il frame, la stazione rimane in attesa di un riscontro, e si possono verifica due casi :
a. il riscontro viene ricevuto, se ha un altro frame da inviare riparte dal punto 2
b. il riscontro non viene ricevuto, la stazione ritorna al passo 2, per ritrasmettere il frame ma con
un valore maggiore.

L’obbiettivo principale di 802.11 e evitare le collisioni in quanto non possono intercettarle e interrompere il
flusso come in CSMA/CD. Per questo qua to incontrano il canale occupato entreranno nel processo di ritardo
casuale. In questo modo quando il canale sarà nuovamente inattivo una delle stazioni inizierà prima dell’altra,
e quindi l’altra ascolta il canale lo trova occupato e non invia evitando così collisioni inutili.

Schema di conferma di avvenuta ricezione

Questo schema funziona nel seguente modo :


1. Quando una stazione riceve un frame senza errori (passa il controllo CRC), attende un breve periodo di
tempo, noto come breve spazio inter-frame (SIFS, short inter-frame space), dopo di che invia al
mittente un frame di conferma di avvenuta ricezione.
2. Se la stazione trasmittente non riceve questo riscontro entro un arco di tempo stabilito, ritrasmette il
frame, utilizzando un protocollo CSMA/CA per accededere al canale.
3. Se il frame di confefrma non viene ricevuto dopo un numero prefissato di ritrasmissioni, la stazione
trasmittente passerà oltre e scarterà il frame.

166
Terminali nascosti : RTS e CTS

Il problema dei terminali nascosti viene descritto nella figura 6.11 :


● Ci sono due stazioni wireless H1 e H2 ed un AP
● H1 è nel raggio d’azione di AP (e quindi può comunicare con lui ) ma non in quello di H2 (e quindi non
è visibile)
● H2 è nel raggio d’azione di Ap (e quindi può comunicare con lui ) ma non in quello di H1 (e quindi non è
visibile)
Il problema si pone in questo scenario :
1. H1 sta trasmettendo frame ad AP
2. H2, mentre H1 sta ancora trasmettendo, deve trasmettere un frame ad AP.
3. H2 non rilevando H1 attende un tempo casuale DIFS e poi trasmette causando così una collisione

Figura 6.11

Per evitare le collisioni in caso di terminali nascosti, 802.11 include un sistema di prenotazione, utilizzando due
frame di controllo : richiesta di invio ( RTS, request to send ) e libero di spedire (CTS, clear to send) per
riservare l’accesso al canale. Di seguito il loro utilizzo :
1. Quando host trasmittente vuole inviare un frame dati, invia in broadcast un RTS, che viene ricevuto da
tutte le altre stazioni wireless nella sua portata incluso l’ AP, indicando il tempo totale richiesto per la
trasmissione del frame dati e del frame conferma
2. Quando AP riceve RTS, risponde diffondendo in broadcast il frame CTS questo per due motivi:
a. informa il trasmittente che può incominciare ad inviare i dati
b. comunica alle altre stazioni di non trasmettere durante il periodo di tempo riservato,
permettendo anche di raggiungere le stazioni wirless che non sono nella portata di H1, quindi
H2 viene raggiunto ed attende prima di trasamettere.
Possiamo aggiungere che :

167
● i frame RTS e CTS sono piccoli e quindi anche se generassero una colissione sarebbe di breve durata.
Quindi una volta che questi sono trasmessi con successo, i successivi frame DATI ed ACK
dovrebbero essere trasmessi senza collisioni.
● lo scambio di RTS e CTS introduce un ritardo e consuma risorse del canale, e per questo motivo sono
utilizzati solo per la trasmissioni di lunghi frame dati

La figura 6.12 mostra uno scenario di utilizzo dei paccheti RTS e CTS

Figura 6.12

6.3.3 Pacchetto IEEE 802.11

I frame 802.11, sono descritti nella figura 6.13

168
Figura 6.13

Payload e CRC
Contiene i dati del frame e quindi può contenere :
● un datagramma IP
● un paccchetto ARP nel caso in cui si tratti di un frame per la gestione dello schema di avvenuta
ricezione

Indirizzo
Un frame 802.11 contiene 4 campi indirizzo di 6 byte ciascuno. I primi tre per interconnessione ed il quarto per
le reti ad hoc. Vengono trattati solo i primi tre
● L’indirizzo 2 è l’indirizzo MAC della stazione che trasmette, che può essere un host o un AP
● L’indirizzo 1 è l’indirizzo MAC della stazione che riceve, che può essere un host o un AP
● L’indirizzo 3 gioca permette di interconnettere un BSS con una rete cablata. Per capirne meglio il
funzionamento facciamo un esempio

Per capire meglio l’indirizzo 3 facciamo un esempio basato sulla figura 6.14, supponendo di voler inviare un
datagramma dall’ interfaccia router R1 alla stazione wireless H1 :
1. Il router che conosce l’indirizzo IP di H1, utilizza ARP per determinare l’indirizzo MAC di H1, incapsula il
datagramma in un frame ethernet e lo invia. Il campo indirizzo sorgente conterrà il MAC di R1 e quello
destinazione l’indirizzo MAC di H2.
2. Quando il frame ethernet giunge su AP, questo lo converte in un frame 802.11 e riempie i campi:
a. indirizzo 1 = con l’indirizzo MAC di H1
b. indirizzo 2 = con il proprio indirizzo MAC
c. indirizzo 3 = con il MAC di R1, in questo modo H1 può determinare l’indirizzo dell’interfaccia che
ha inviato il fame nella sottorete
3. Quando H1 deve rispondere riempie i campi :
a. indirizzo 1 = con l’indirizzo MAC di AP
b. indirizzo 2 = con il proprio indirizzo MAC
c. indirizzo 3 = con il MAC di R1
4. Quando AP riceve il frame 802.11 lo converte in un frame ethernet riempiendo i campi
a. indirizzo sorgente = con l’indirizzo MAC di H1
b. indirizzo destinazione = con l’indirizzo MAC di R1

169
Quindi l’indirizzo 3 permette ad AP di conoscere l’indirizzo MAC del destinatario appropriato mentre
costruisce il frame ethernet

Figura 6.14

Numero di sequenza, durata e controllo del pacchetto

Esaminiamo i tre campi :

● Numero di sequenza
Serve per distinguere una trasmissione da una ritrasmissione.
Infatti se una stazione trasmittente non riceve la conferma di avvenuta ricezione, reinvia il frame Può
accadere però che la conferma sia andata persa e che quindi in realtà sia arrivato correttamente.
Quindi sulla ritrasmissione il ricevente si troverebbe un duplicato. Ed il numero di sequenza (come in
rtd), permette di capire se il frame è nuovo o se è una ritrasmissione
● Durata
Viene utilizzato per la funzione di riservare il canale per un periodo di tempo (invio frame dati + ACK )
● Controllo del pacchetto
Ci sono diversi campi per il controllo del pacchetto :
■ tipo e sottotipo, vengono utilizzati per definire se un pacchetto è RTS, CTS, ACK o frame dati
■ to e from.

170
171
CAPITOLO 8 - LA SICUREZZA NELLE RETI

8.1 Sicurezza di rete

Possono essere identificate le proprietà desiderabili per la sicurezza della comunicazione :


● Riservatezza, si possono intendere più cose
■ Il messaggio scambiato dovrebbe essere comprensibile solo mittente e destinatario. Si utilizza
la crifratura e Decifratura. In modo da rendere il messaggio incomprensibile a chi non
possiede la relativa chiave. Questa è detta Segretezza
■ Mantenere segreta la connessione tra mittente e destinatario, ovvero non far conoscere a terzi
che Alice sta comunicando con Roberto, o anche la frequenza con la quale sta comunicanto
etc..
● Integrità del messaggio
Occorre essere sicuri che il messaggio scambiato non sia stato corrotto accidentalmente o da terzi
rurante il suo percorso. Per far ciò si utilizza una variante del checksum
● Autenticazione
Mittente e destinatario devono essere reciprocamente sicuri della loro identità. Per esempio come
capire che la mail inviata da Alice sia effettivamente di Alice.
● Sicurezza operativa
Occorre mettere in sicurezza le intranet collegate in internete, da possibili atatcchi.

Consideriamo un caso reale descritto nella figura 8.1 in cui Alice vuole inviare un messaggio a Roberto.
Prima di tutto si scambiano due pacchetti di controllo e poi incominciano ad inviare i dati effettivi.
A questo punto un malintenzionato (Tommaso) potrebbe :
1. Mettersi in ascolto per intercettare i pacchetti di controllo
2. Rimuovere o aggiungere messaggi o modificare il loro contenuto
Quindi Tommaso potrebbe rubare dati, sovraccaricare il sistema etc, modificare la tabella di instradamento
DNS nei router durente il percors etc..

Figura 8.1

172
8.2 Principi di crittografia
Le tecniche di crittografica consentono al trasmittente di mascherare i dati.
La figura 8.2 mostra alcuni termini importanti
Supponiamo che Alice voglia inviare un messaggio a Roberto, per esempio “Ciao Roberto”, questo messaggio
è detto testo in chiaro (plaintext o cleartext). Questo messaggio viene poi trasformato da un algoritmo di
cifratura in un messaggio criptato (ciphertext) che risulta illegibile a qualsiasi intruso.
Per cifrare il messaggio Alice utilizza una chiave KA che viene data all algoritmo di criptazione. Per decifrare il
messaggio Roberto passa all’ algoritmo di decifratura la chiave KR . In sostanza quando Roberto riceve un
messaggio cifrato KA(m), lo può decifrate calcolando KR(KA(m)) = m.
Nei sistemi a chiave simmetrica le chiavi sono identiche. Nei sistemi a chiave pubblica si utilizzano due
chiavi una conosciuta a tutti l’altra o solo a Roberto o solo ad Alice.

Figura 8.2

8.2.1 Crittografia a chiave simmetrica

Analiziamo tre algoritmi a chiave simmetrica


1. cifrario di Cesare, dove si sostituisce ciascuna lettera del messaggio in chiaro con un’altra sfalsata
rispetto alla prima k posti nell’alfabeto. Per esempio se k=3, la lettara “a” diventa “d”, la “c” diventa “f”, e
così via. Lo scambio procede in senso ciclico, cioè quando finisce l’alfabeto si ricomincia d’accapo (k
risulta essere la chiave).
2. cifrario monoalfabetico che è un evoluzione del cifrario di cesare. Anche in questo caso si sostituisce
una lettera dell’alfabeto con un altra. La stostituzione a differenza del cifrario di cesare, viene fatta
cambiando tutte le occorrenze di una lettera con un’altra (sempre la stessa), scelta in modo arbitrario.
Quest’algoritmo è più efficente del precedente, perchè ci sono 26 possibilità di accoppiamente tra le
lettere dell’alfabeto quidni 1026 permutazioni.
Per riuscire a decifrate questo tipo di algoritmo, ci sono vari modi :
a. Attacco a testo cifrato
Vengono utilizzate informazioni statistiche, per rendere più agevole la decriptazione, come per

173
esempio in inglese le lettere “e”, “t” sono quelle che ricorrono di più nelle parole, oppure, in
italiano, “che”, “zione”, “mente”
b. Attacco con informazioni sul testo in chiaro
L’intruso conosce possibili accoppiamenti (testo in chiaro/testo cifrato). Come nel caso di
tommaso che sa che nle messaggio ci sta il nome di roberta e da qui potrebbe risalire a possibili
accoppiamenti
c. Attacco con testo in chiaro scelto
L’intruso riesce ad ottenere la forma cifrata di un messaggio a lui noti. E da qui risalire allo
schema utilizzato per criptare.
3. cifratura polialfabetica che è un evoluzione delle precedenti, ed impiega molteplici sostituzioni
monoalfabetiche. In sostanza le varie occorrenze della stessa lettere vengono codificate in modo
diverso in base alla posizione in cui appaiono nel messaggio in chiaro.
Per fare un esempio, partiamo dalla figura 8.4, è stato applicato due l’algoritmo di cesare all’alfabeto la
prima con chiave k=5 che chiameremo alfabeto C1, la seconda con chiave k=19 che chiameremo
alfabeto C2.
La cifratura polialfabetica, lavora sui nuovi alfabeti, ovvero prende un messaggio e dice segui questa
sequenza C1, C2, C2, C1, C2 (schema di ripetizione) per criptare. Che vuol dire la prima lettera del
messaggio sostituiscila con C1, la seconda con C2, la teza con C2, la quarta con C1, la quinta con C2
e poi si ricomincia ciclicamente ovvero la sesta nuovamente con C1 e così via. In questo modo lettere
uguali avranno codifiche differenti.
Quindi per decriptare un messaggio occorre conosscere le chiavi di cesare e lo schema di ripetizione.

Figura 8.4

Cifrari a blocchi

Questa tecnica crittografica è utilizzata nei protocolli internet sicuri come PGP(posta eletronica), SSL (TCP),
IPSec (trasporto a livello di rete).
In un cifrario a blocchi
Il cifrario a blocchi suddivide il messaggio da cifrare in blocchi a k bit elaborando poi separatamente ognuno di
questi blocchi nel seguente modo, facciamo un esempio per k = 64, illustrato nella figura 8.5:
1. In ingresso arriva uno degli n blocchi risultati dalla suddivisione del messaggio in blocchi da 64 bit
2. Il singolo blocco di 64 bit viene diviso in 8 blocchi da 8 bit.
3. Ognuno di questo 8 bit viene elaborato dalle relative tabelle di corrispondenza (nell’immagine T1,..T8),
tra il blocco in chiaro (8 bit) ed il blocco cifrato.
4. Tutti gli 8 blocchi vengono assemblati un un unico blocco da 64 bit.
5. Questo blocco viene mescolato secondo una funzione, ottenendo così il blocco da 64 bit in uscita
6. I punti da 1 a 5 vengono ripetuto n volte, ottenendondo così il blocco da 64 bit cifrato.
La chiave di quest’algoritmo di cifratura è composta dalle 8 tabelle di corrispondenza

174
Figura 8.5

Esistono vari algoritmi che utilizzano il cifrario a blocchi e che :


● utilizzano funzioni piuttosto che tabelle di corrispondenza
● utilizzano una stringa come chiave

Tre di questi algoritmi sono :


1. DES
a. blocchi da 64bit
b. chiave da 56bit
c. supponendo una chiave da 56 bitpuò essere decriptato, con attacco brutale, in meno di 1 giorno
2. 3DES, viene applicato 3 volte il DES con 3 chiavi differenti
3. AES
a. blocchi da 128 bit
b. chiavi da 128,192 o 256 bit
c. un attacco che decripterebbe DES con chiave a 56bit in 1 secondo ci impiegherebbe 149 trilioni
di anni per decrifrare AES con chiave a 128 bit

Per ciascun algoritmo, possiamo aggiungere che


● Una chiave di un algoritmo determina le corrispondenze nelle tabelle (T1,...,T8) e le permutazioni dell’
algoritmo.
● L’ attacco a forza bruta consiste nel ripetere le operazioni su tutte le chiavi applicando l’algoritmo di
decifratura con ciascuna chiave.

8.2.2 Crittografia a chiave pubblica

A differenza della cifratura a chiave simmetrica deve sia Alice che Roberto, dovevano avere la stessa chiave di
codifica/decodifica, nella cifratura a chiave pubblica, Alice avrà una chiave plubblica e Roberto avrà sia una
chiave pubblica che una private. Indicheremo con K+ , K- rispettivametne chiave pubblica e privata.

175
Per capire meglio il funzionamento facciamo un esempio un cui Alice vuole inviare un messaggio m a Roberto:
1. Alice si procura la chiave pubblica e l’algoritmo di criptazione (tutti la possono accedere a queste info)
di Roberto.
2. Alice genere un messaggio criptato che indicheremo con K+(m), con le info del punto 1, cioè passando
chiave pubblica e testo m all’ algoritmo di criptazione fornito da Roberto
3. Quando Roberto riceve il messaggio, per decriptarlo, utilizza la sua chiave privata ed un algoritmo di
decodifica, in altri termini K-(K+(m)).

Quindi possiamo dire che esistono degli algoritmi che K-(K+(m)) = m e devono avere i seguenti requisiti :
1. Dati K-(*) K+(*) devo avere che K-(K+(m)) = m. Ovvero un algoritmo in grado di criptare con una chiave
pubblica e decriptare con una chiave privata divera
2. Data la chiave pubblica K+ deve essere impossibile calcolare la privata K-

Un algoritmo che soddisga queste esigente è RSA

Algoritmo RSA

RSA di basa su due punti fondamentali:


1. la scelta della chiave pubblica e privata
2. gli algoritmi di cifratura e decifratura

Per ottenere la chiave pubblica e privata occorre seguire i seguenti passi :


1. Scegliere due numeri primi di valore elevato: p, q.
2. Calcolare n = pq, z = (p-1)(q-1)
3. Scegliere e(encryption) (con e < n) tale che non abbia fattori in comune con z. (e, z sono detti
“relativamente primi”).
4. Scegliere d(decryption) tale che ed-1 sia esattamente divisibile per z. (in altre parole: ed mod z = 1 ).
5. La chiave pubblica è K+ = (n,e), quella privata è K- = (n,d).

Quindi per criptare e decriptare un messaggio m , supponendo di utilizzare le chiavi pubbliche e privare
descritte precedentemente, quindi rispettivamente (n,e) e (n,d) occorre :
1. Per criptare un messaggio per esempio una stringa di bit o un numero m < n
c = me mod n
2. Per decriptare il messaggio il messaggio criptato c ricevuto
m = cd mod n
3. Quindi possiamo dire che = K-(K+(m)) = (me mod n)d mod n

Manca esempio page 605.

Chiavi di sessione

Possiamo notare che RSA richiede tempi di elaborazione lunghi. Quindi per grandi messaggi i tempi di
elaborazione sarebbero lunghissimi. Quindi si utilizza DES in modo congiunto ad RSA nel seguente modo :
1. Alice cripta il proprio messaggio con DES utilizzando una chiave detta chiave di sessione Ks
2. Alice cripta la propria chiave di sessione con RSA utilizzando la chiave pubblica di Roberto.
3. Alice informa Roberto della chiave di sessione ed invia i dati

176
4. Roberto ricevuta la chiave di sessione Ks criptata, la decripta utilizzando la propria chiave privata RSA
5. Roverto una volta ottenuta la chiave di sessione decriptata la utilizza per descriptare con DES il
messaggio inviato da Alice

8.3 Integrità dei messaggi


Definiamo il problema dell’integrità dei messaggi facendo un esempio, Roberto riceve un messaggio, che può
essere cifrato o in chiaro, e crede che sia arrivato da Alice. Per autenticare questo messaggio quindi valutarne
l’integrità Roberto deve verifica che :
1. il messaggio sia stato effettivamente inviato da Alice
2. il messaggio non sia stato alterato lungo il cammino

Priima di spiegare come risolvere i precedenti punti occorre avere una panoramica sulle funzioni hash
crittografiche

8.3.1 Funzioni hash crittografiche

Una funzione hash crittografica :


1. Prende in input m, produce un valore a lunghezza fissa, H(m)
2. Deve essere computazionalmente impossibile trovare due messaggi x e y tali che H(x) = H(y). Questo
vuol dire che se Trudy modifica il messaggio non può ricreate in alcuno modo l’ hash del messaggio
originale
3. Dato l’ hash calcolato è impossibile risalire al messaggio originale

Due funzioni hash molto comuni sono


1. MD5 (Messsage Diggest) che ha queste caratteristiche :
a. Calcola una hash di 128 bit con un processo a 4 fasi Con una stringa x di 128 bit arbitrari,
appare difficile Costruire un messaggio m il cui hash MD5 sia uguale a x
2. SHA-1 (Secure Hash algorithm) che ha queste caratteristiche:
a. Calcola un hash di 160bit

8.3.2 Codice di autenticazione dei messaggi

Per realizzare l’integrità dei messaggi, occorre utilizzare sia le funzioni hash crittografiche che una chiave di
autenticazione, che si tratta di una stringa di bit che è conosciuta sia da Alice che da Roberto. Quindi l’integrià
del messaggio è realizzata come segue :

1. Alice crea un messaggio m.


2. Alice concatena il messaggio m alla chiave di autenticazione s, quindi (m+s), e e ne fa l’ hash, H(m+s).
creando così il codice di autenticazione del messaggio MAC (message authentication code) ,
3. Alice aggiunge il MAC al messaggio m, creando così il messaggio esteso (m, H(m+s))
4. Alice invia il messaggio esteso a Roberto
5. Roberto riceve il messaggio esteso.
6. Roberto conoscendo m e s, calcola anche lui il MAC H(m+s).
7. Se il MAC che ha calcolato Roberto è uguale al MAC che Alice ha inviato nel messaggio esteso, vuo,
dire che va tutto bene, in caso contrario, il messaggio è stato alterato.
177
Rimane ancora la questione importante di come venga distribuita la chiave di autenticazione condivisa tra le
entità di comunicazione.
La figura 8.9 descrive il processo

Figura 8.9

8.3.3 Firme digitali

La firma digitale permette di sapere con certezza che il mittente che ha firmato ed inviato il messaggio sia
effettivamente reale.
La firma digitale utilizza il meccanismo di crittografia asimmetrica al contratio. Vediamo un esempio (descritto
nella figura 8.10) :
1. Roberto vuole firmare un documento (file o messaggio) m
2. Roberto utilizza la sua chiave privata criptare il documento K-(m) e lo invia ad Alice
3. Alice utilizza la chiave pubblica per descriptare il messaggio K+(K-(m)) = m (come abbiamo visto nei
capitolo precedenti).

Figura 8.10

178
Possiamo subito verifica che la firma digitale garantisce la proprietà di non ripudio: Roberto non può negare
di aver firmato il documento e Alice può verificare che :
● Roberto ha firmato M
● Nessun altro ha firmato M
● Roberto ha firmato M e non M’.

C’è però un problema nel precedente algoritmo, cioè per messaggi troppo lungi applicate un algoritmo RSA a
chiave pubblica e private potrebbe essere molto oneroso. Quindi un anziche criptare l’intero documento si
utilizza una funzione hash con il procedimento descritto di seguito:
1. Roberto vuole firmare un documento (file o messaggio) m
2. Roberto calcola l’hash di m, H(m)
3. Roberto firma solo l’hash K-(H(m)). Essendo l’ hask più piccolo di m, lo sforzo computazionale sarà
minore rispetto a firmare l’intero messaggio.
4. Roberto invia il messaggio m e hash firmata K-(H(m)).
5. Alice ricevuto descripta l’ hash firmato inviato da Roberto K+(K-(H(m))) ottenendo così l’hash semplice
del messaggio H(m)
6. Alice calcola l’hash del messaggio in chiaro e lo contronta con l’hash (appena decriptato) di Roberto.
Se corrispondono tutt’ ok, il messaggio non è stato modificato ed è sicura che appartiene a Roberto.

La figura 8.11 e 8.12 descrivono rispettivamente le azioni di Roberto e Alice

Figura 8.11

179
Figura 8.12

Certificazione della chiave pubblica (da studiare)

8.4 Autenticazione end-to-end


In questo capitolo verrà affrontato il problema di come un entità possa autenticarne un’ altra mentra è in corso
una comunicazione di rete.
Verranno analizzate le diverse versioni del protocollo di comunicazione che chiamereo ap (autentication
protocol).

8.4.1 Protocollo di autenticazione ap1.0

Il più semplice protocollo e che Alice invii un messaggio a Roberto dicendo di essere Alice. Ma è facilmente
hackerabile da Tommaso.

180
Figura 8.15

8.4.2 Protocollo di autenticazione ap2.0

Se alice avesse un indirizzo di rete conosciuto ( per esempio IP ), che utilizza abitualmente, Roberto potrebbe
autenticarla verificando la corrispondenza fra l’indirizzo l’indirizzo IP del datagramma che trasporta il
messaggio, e l’indirizzo IP di Alice. Tenendo conto che è possibile modificare l’indirizzo IP di un datagramma,
Tommaso potrebbe create un datagramma con l’indirizzo IP di Alice ed inviare il messaggio.

Figura 8.16

8.4.3 Protocollo di autenticazione ap3.0

Questo protocollo prevede l’utilizzo di una password condivisa tra due entità. Nello specifico Alice invia una
passord a Roberto. Dopo di che tutti i successivi che invierà a Roberto, conterranno anche la password in
modo che Roberto possa confrontare la password inviata prima da Alice con quella nel messaggio.
Ma anche questa tecnica non è sicura, in quanto se Tommaso intercetta la comunicazione di Alice può
scoprirne la password e quindi impersonificarsi lei nella comunicazione con Roberto.

181
Figura 8.17

8.4.4 Protocollo di autenticazione ap3.1

Un evoluzione di ap3.1 potrebbe essere quello di criptare la password con chiave simmetrica. Alice cripta la
password e Roberto la descripta e confronta quella inviata da alice con quella del messaggio.
Ma anche questa tecnica non è sicuta in quanto Tommaso potrebbe fare un attacco di replica, intromettersi
nella comunicazione prendere la versione criptata della password e utilizzare quella per scambiare messaggi
con Roberto (ovvero replicare la password su n messaggi), che non potrebbe mai accorgersi del problema.

Figura 8.17

8.4.5 Protocollo di autenticazione ap4.0

Il problema di apt3.1 è che la stessa password viene utilizzata più volte e quindi è soggetta ad un attacco di
replica, in quanto Roberto non sa se la password è inviata da Alice o si tratta di una registrazione inviata da
Tommas.
Una soluzione potrebbe essere quella di utilizzare un algoritmo per generare una password ad ogni
comunicazione.
Per implementare ciò, possiamo utilizzare una sorta di handshake :
1. Alice invia un messaggio a Roberto
2. Roberto genera un nonce (un numero di protocollo che utilizzera una sola volta) e lo invia ad Alice, per
assicurarsi che ci sia proprio lei dall’altro capo
3. Alice cripta in nonce con la chiave simmetrica che condivide con Roberto e la invia a lui.
4. Roberto ricevuto il nonce lo decrifra, se è quello che lui ha inviato allora Alice è autenticata

182
8.4.6 Protocollo di autenticazione ap5.0

Il protocollo ap5.0 (genera come ap4.0 una chiave ad ogni connessione) anzichè utilizzare la crittografia
simmetrica come apt4.0 utilizza quella a chiave pubbblica :
1. Alice invia un messaggio a Roberto
2. Roberto genera un nonce (un numero di protocollo che utilizzera una sola volta) e lo invia ad Alice, per
assicurarsi che ci sia proprio lei dall’altro capo
3. Alice cripta nonce con la propria chiave privata e la invia a Roberto.
4. Roberto ricevuto il nonce lo decrifra con la chiave pubblica di Alice, se è quello che lui ha inviato allora
Alice è autenticata.
La figura 8.20 descrive apt5.0 ed include anche la richiesta di Roberto ad Alice per ottenere la sua chiave
pubblica

Ora mostriamo uno scenario in cui Tommaso finge di essere Alice figura 8.20:
1. Tommaso invia un messaggio a Roberto
2. Roberto genera un nonce (un numero di protocollo che utilizzera una sola volta) e lo invia ad Tommaso
pensando che sia Alice
3. Tommaso cripta nonce con la propria chiave privata e la invia a Roberto.
4. Roberto deve chiedere la chiave pubblica ad Alice ed invia la richiesta. Ma roberto si intromette ed invia
la sua chiave Pubblica.
5. Roberto ricevuto il nonce lo decrifra con la chiave pubblica di Tommaso autenticandolo come Alice

Questo è un problema che è presente nella normale gestione delle chiavi pubblica e private, e come descritto
nel paragrafo 8.3, ci viene in contro il CA che certifica le chiavi pubbliche attestandone la proprietà.

Figura 8.20

La figura 8.21 descrive una possibile intrusione da parte di Tommaso, sfruttando proprio la falla descritta nel
punto precedente. In questo modo Tommaso riceve da Roberto ed invia ad Alice. Roberto ed Alice ricevendo
messaggi pensano che sia tutt’ok ma in realtà Tommaso sta leggento tutto.
Questo tipo di attacco viene chiamato man-in-the-middle

183
Figura 8.21

8.5 Rendere sicura la posta elettronica

8.5.1 Email sicura

Le caratteristiche affinche uno scambio mail tra Alice e Roberto sia sicuro sono :
1. Riservatezza
2. Autenticità del mittente
3. Integrità del messaggio
4. Autenticità del ricevente

Per garantire la riservatezza (descritta nella figura 8.22) il testo della mail viene criptato utilizzando la chiave
di sessione (paragrafo 8.2.2) :
1. Alice sceglie una chiave simmetrica e la utilizza per criptare il suo messsaggio
2. Alice cripta la chiave simmetrica con la chiave pubblica di Roberto
3. Alice contatena messaggio criptato e chiave simmetrica criptata ed invia il pacchetto a Roberto
4. Roberto ricevuto il pacchetto, descripta la chiame simmetrica con la propria chiave privata ed utillizza la
chiave simmetrica decriptata per descriptare l’intero messaggio di Alice
Non viene utilizzato RSA su l’intero messaggio inquanto sarebbe troppo oneroso (vedi paragrafo 8.2.2)

184
Figura 8.22

Per garantire l’ autenticazione del mittente e l’ integrità del messaggio (descritta nella figura 8.23) ma non
la riservatezza vengono utilizzate le firme difgitali e le funzioni hash :
1. Alice applica la funzione hash (es: MD5) al suo messaggio, per ottenere una sintesi
2. Alice cripta il risultato della funzione hash con la sua chiave privata creando così una firma digitale
3. Alice concantena il messaggio in chiaro con la funzione hash criptata ed invia il pacco Roberto
4. Roberto ricevuto il pacco decripta la sintesi (funzione hash criptata) con la chiave pubblica di alice
5. Roberto applica la funzione hash al messaggio in chiaro e lo confronta con la sintesi descriptata. Se
coincidono tutto è sicuro che provenga da alice e che non sia stato modificato.

E’ possibile create un combo per garantire contemporaneamente Riservatezza, Autenticità del mittente,
Integrità del messaggio descritto dalla figura 8.24, utilizzanto entrambe le procedure descritte
precedentemente.

Figura 8.23

185
Figura 8.24

8.5.2 PGP (Pretty Good Privacy)

PGP è uno schema di cifratura della posta elettronica divenuto uno standera. A seconda delle versioni il
software utilizza :
1. Per la sintesi del messaggio SHA o MD5
2. Per la crittografia a chiave simmetria CAST, 3DES, IDEA
3. Per la crittografia a chiave pubblica RSA.
PGP è installabile come software o come publing su client di posta elettronica.
Una volta installato PGP crea una coppia di chiavi una pubblica ed una privata. La chiave pubblica può essere
distribuita in vari modi :
1. Esponendola sul proprio sito web ed invitando il ricevente ad andare a prenderla da li
2. Inviarla ad un server di chiavi pubblice PGP
PGP inoltre fornisce un meccanismo di certificazione della chiave pubblica diverso da CA, ovvero sono
certificate attraverso una rete di fiducia.

8.6 Rendere sicure le connesssioni TCP : SSL


SSL (Secure sockets layes) ( TLS è il suo successore dalla servione SSLv3 ) è un protocollo di crittografia
utilizzato Da TCP per gestire :
1. La riservatezza
Un esempio e che Roberto stia comprando in un e-commerce. Un intruso potrebbe intercettare l’ordine
e recuperare le info sulla carta di credito
2. L’integrità dei dati
Un esempio e che Roberto stia comprando in un e-commerce. Un intruso potrebbe intercettare l’ordine
e farli comprare 100 volte un articolo dell’ordine.
3. L’autenticazione de client e del server
Per esempio se non venisse utilizzata l’autenticazione del server, il sito potrebbe mostrate il logo di
Ebay, ma in realtà è gestito da un malintenzionato che potrebbe rubare i dati della carta.

186
SSL è per lo più utilizzato dal protocollo http, ovvero https. In realtà essendo un protocollo che rende sicura
TCP, può essere utilizzato da qualsiasi applicazione utilizzai TCP. SSL fornisce una semplice API.
Come mostra la figura 8.27 nonostrante SSL risieda tecnicamente a livello applicativo (di fatto lo sviluppatore
deve includere le librerie fornita da SSL), dal punto di vista dello sviluppatore è un protocollo a livello di
trasporto

Figura 8.27

8.6.1 Quadro generale (SLL semplificato)

Prima di parlare del SSL completo, viene proposta una versione semplificata. In entrambi i casi vengono
composti da tre fasi :
1. Handshake
2. Derivazione delle chiavi
3. Trasferimento dati.
Chiameremo Roberto il client e Alice il server

Handshake

Durante le fasi di handshake, Roberto ha bisogno di :


1. Stabilire una connessione TCP con Alice
2. Verificare l’identità di Alice
3. Inviarle una chiave segreta principale che verrà utilizzata da entrambi per generare tutte le chiavi
simmetriche di cui hanno bisogno per la sessione SSL (figura ).

La figura 8.28 descrive handshake:


1. Una volta stabilita la connessione Roberto manda ad Alice un messaggio di hello
2. Alice risponde con il proprio certificato che contiene la sua chiave pubblica. Il certificato è stato
attestato da CA quindi Roberto sa con certezza che si tratta di Alice
3. Roberto genera la chiave segreta principale MS (master secret) che verra usata solo per queste
sessione
4. Roberto crypta MS con la chiave pubblica di Alice e creata EMS (Encrypted master secret).
5. Roberto invia ad Alice EMS
6. Roberto ha così autenticato Alice e nessun altro conosce MS

187
Figura 8.28

Derivazione delle chiavi

Una volta che sia Roberto che Alice hanno MS, lo utilizzano per generare 4 altre chiavi il cui utilizzo è descritto
di seguito :
1. ER = chiave di cifratura di sessione per i dati inviati da Roberto ad Alice
2. MR = chiave MAC di sessione per i dati inviati da Roberto ad Alice
3. EA = chiave di cifratura di sessione per i dati inviati da Alice ad Roberto
4. MA = chiave MAC di sessione per i dati inviati da Alice ad Roberto
Le due chiavi E verrano usate per cripatare i dati mentre le due chiami M MAC per verifica l’integrità dei dati.
In SSL semplificato per ottentere le 4 chiavi possiamo pensare che MS venga divito in 4, ma in realtà in quello
completo non è così

Trasferimento dati

Ricordiamo che TCP è un protocollo a flusso di byte. SSL quindi divide il flusso di byte in record a cui aggiunge
il MAC (per la verifica dell’ integrità) e successivamente cripta il record + il MAC.
Di seguito il processo in invio :
● Per create il MAC, Roberto utilizza una funzione hash sui dati del record utilizzando MR come chiave
● Per cifrare il pacchetto Roberto utilizza la chiave di sessiore ER
● Il pacchetto + MAC cifrato viene inviato a TCP che lo immette in rete

Vediamo che questo processo ha una falla, ovvero se Tommaso si introducesse nel flusso dati potrebbe
cancellare e invertire o sostituire segmenti (record). Per esempio potrebbe prendere sue segmenti invertirli ed
aggiustare i numero di sequenza nel corretto ordine.

188
Il processso in ricezione con questo problema potrebbe essere:
1. TCP non si accordge della invezione dei pacchetti e passa i due record a sottolivelo SSL
2. SSL di Alice decifra i due record
3. SSL di Alice utilizza il MAC in ciascun record per verifica l’integrità dei dati
4. SSL decrifra i dai e li passa a livello applicativo, ma questi dati non saranno corretti in quanto invertiti

Questo problema viene risolto da Roberto non includendo effettivamete il numero di sequenza nel record ma lo
include nel MAC quando effettua il calcolo. Quindi ora il MAC è un hash + MR + il numero di sequenza. Alice
controlla l’integrità dei dati includendo nel calcolo del MAC il numero di sequnza appropriato.

Record SSL

La figura 8.29 mostra un record SSL (i record che vengono scambiati da Roberto e Alice). Ed è composto da :
● Tipo, indica se si tratta di un record per handshake o dati
● Versione, auto esplicativa
● Lunghezza, server per estrarre il record SSL dal flusso di byte TCP
● Dati e MAC, esplicativi e vengono ciptati entrambi con ER

Figura 8.29

8.6.2 Un Quadro più completo

Ora verra anaizzato SSL completo

Handshake SSL

SSL non impone ad Alice e Roberto di utilizzare algoritmi particolari per cifrare simmetricamente o a chiave
pubblica, ma lascia accordarsi duranre la fase di handshake.
Il processo effettivo di un SSL completo è il seguente :
1. Il client invia assieme al proprio nonce la lista degli algoritmi supportati
2. Il server sceglie dalla un algoritmo a chiave simmetria, uno a chiave pubblica, ed uno per il MAX, ed
invia le proprie scelte insieme ad un certificato e al nonce del server
3. Il client :
a. verifica il certificato
b. estrae la chiave pubblica del server
c. genera MS e lo cripta con la chiave pubblica del server
d. invia MS al server

189
4. Client e server estraggono le 4 chiavi come specificato dallo standard SSL (e descritto in SSL
semplice). E da ora in avanti tutti i messaggi verranno cifrati e autenticati con il MAC
5. Il client invia un MAC di tutti i messaggi di handshake
6. Il server manda un MAC di tutti i messaggi di handshake

I punti 5 e 6 servono per proteggere l’handshake. Lo scambio degli algoritmi è in chiaro, quindi Tommaso
potrebbe manometterli eliminando gli algoritmi più sicuri. Per evitare questo client e server creano un MAC dei
messaggi inviati e ricevuti e se lo scambiano, per verifica se ci sono incongruenze

Chiusura della connessione

Per terminare la connessione possiamo fare un esempio ed immaginfare che sia Roberto a volerla chiudere.
Quindi potrebbe inviare un segmento TCP FIN ad Alice. Ma questo espone la connessiona ad un attacco
chiamto truncation. Dove Tommaso potrebbe mettersi in mezzo ed inviare ad Alice un TCP FIN, quindi Alice
chiudere la connessione anche se non è stato Roberto a richiederla.
Per evitare ciò, prima di inviare TCP FIN occorre inviare un record SSL con il campo tipo settato su chiusura.
Anche se il campo tipo è in chiaro, non ci sono problemi di sicurezza in quanto viene autenticato con il MAC
del record.

8.7 Sicurezza a livello di rete : IPsec e VPN(preso da 6 ed.)


Il protocollo IPsec (IP security), è una suite di protocolli che fornisce sicurezza a livello di rete,Per fornire
sicurezza a livello di rete occorre :
1. Integrità dei dati
2. Reply attack prevention
L’ host è in grado di accorgersi se è stato invertito l’ordine dei datagrammi o ne sono stati eliminati etc..
3. Riservatezza
Gli host devono cifrare il campo dati del datagramma prima di inviarlo in rete
4. Autenticazione della sorgente
Quando un host di destinazione riceve un datagramma con un indirizzo IP sorgente, autentica la
sorgente assicurando che è stato veramente l’host a generare il datagramma evitando così lo spoofing
Un datagramma sicuro potrebbe comprendere un TCP segment, UDP segment, TCP handshake etc..

8.7.1 IPsec e VPN

VPN (Virtual Private Network) è una rete di telecomunicazioni privata, instaurata tra soggetti che utilizzano,
come infrastruttura di trasporto, un sistema di trasmissione pubblico e condiviso, come ad esempio la Rete
Internet. Scopo delle reti VPN è offrire alle aziende, a un costo inferiore, le stesse possibilità delle linee private
in affitto sfruttando reti condivise pubbliche. Si può vedere dunque una VPN come l'estensione, a scala
geografica, di una rete locale privata aziendale che colleghi tra loro siti interni all'azienda stessa variamente
dislocati su un ampio territorio sfruttando l'instradamento tramite IP per il trasporto su scala geografica e
realizzando di fatto una rete LAN, detta appunto virtuale e privata, logicamente del tutto equivalente ad
un'infrastruttura fisica di rete (ovvero link fisici di collegamento) appositamente dedicata.
Il traffico dati prima di lasciare i rispettivi host ed andare sulla rete pubblica viene criptato.

190
La figura 8.27 6 ed. mostra un esempio di VPN, ed è comporta da :
1. Una sede centrale con rete privata e due laptop al suo interno
2. Una filiale con rete privata ed laptop
3. Un addetto alle vendite che si connette direttamente ad internet
Ci possono essere diversi scenari
1. Il traffico avviene tra due computer all’interno della rete privata, come ad esempio tra i due pc all’interno
della sede centrare (punto 1), i datagrammi non vengono criptati.
2. Il traffico avviene tra due host che non sono nella stessa rete privata, come ad esempio tra un host
della sede centrale (punto 1) ed un addetto alle vendite (punto 3). In questo casi i dati vengono criptati
seguendo il seguente flusso :
a. Il router della sede centrale converte il classico datagramma IPv4 in un datagramma IPsec
inviandolo nella rete pubblica
b. Il datagramma IPsec inviato in rete è composto
■ un header IPv4 (come mostrato in figura) per essere compreso dalla rete pubblica
■ un header IPsec per gestire la sicurezza
■ dati criptati
c. Quando il datagramma IPsec arriva all’ addetto alle vendite, i dati vengono decripatti e passati a
livello supertiore, per sesempio a TCP o UDP

Figura 8.27 6 ed.

8.7.2 I protocolli AH e ESP

I princiopali protocolli di IPsec sono


1. Intestazione per l’autenticazione (AH,authentication header), che fornisce solo :

191
a. Autenticazione della sorgente
b. Integrità dei dati
2. Incapsulamento sicuro del carico utile (ESP,encapsulation security payload)
a. Autenticazione della sorgente
b. Integrità dei dati
c. Riservatezza
Entrambi i protocolli partono con un handshake creando un canale logico a livello di rete chiamato
associazione di sicurezza (SA,security association) descritto di seguito.

8.7.3 Security Association (SA)

SA è un canale logico a livello di rete che viene creato da due host prima di incominciare lo scambio di IPsec.
Le caratteristiche principali si SA sono :
1. Con SA viene trasformato il livello di rete senza connessione in uno con connessione logica.
2. SA è unidirezionale, quindi vanno creati due canali per lo scambio tra mittente e destinatario

La figura 8.28 6 ed. mostra una SA da un router 1 (R1) ad un router 2 (RS). Ogni router router mantiene le
informazioni di stati delle propria connessione SA che sono
1. un identificatore a 32bit detto indice dei parametri di sicurezza (SPI, security parameter index).
2. l’ interfaccia SA di origine (in quesot caso 200.168.1.100) e quella di destinazione (in questo caso
193.68.2.23)
3. L’ algoritmo di criptazione da utilizzare (es: 3DES con CBC)
4. La chiave di criptazione
5. La funzione hash da utilizzare per l’integrità dei dati (es: HMAC con MD5)
6. La chiave di autenticazione

Figura 8.28 6 ed.

8.7.3 IPsec datagram

IPsec datagram utilizza due tipologie di paccchetto : tunnel mode e transport mode, ma verrà trattata
esclusivamente la prima.
La figura 8.29 6ed. mostra come è formato un datagramma IPsec.
Utilizzando il cotesto della figura 8.28 6ed, analiziamo cosa accade quando l’host 172.16.1.17 invia ad R1 un
normale datagramma IPv4 :
1. R1 riceve il datagramma IPv4

192
2. Aggiunge in coda al datagramma IPv4 originale (che include gli header originali) un campo chiamato
“ESP trailer”
3. Cripta il risultato con l’algoritmo e la chiave specificati in SA
4. Crea il pacchetto enchilada, aggiungendo in testa al pacchetto ottenuto con 3. un campo chiamato
“ESP header”
5. Create il MAC dal paccchetto enchilada usando l’algoritmo specificato in SA
6. Aggiunte il MAC in coda ad enchilada, formando il pacchetto dati
7. Creata un nuovo IP header con il classico IPv4 e lo aggiunte in prima del pacchetto dati

Quindi il pacchetto finale è composto da un classico IP header seguito dal pacchetto dati. Quindi la rete è in
grado di analizzarlo e recapitarlo al destinaterio.

Di seguito il processo cha avviene quando R2 riceve il datagramma IPsec:


1. Controlla l’indirizzo IP del datagramma assicurandosi che il destinatario fosse realmente lui.
2. Controlla enchilada utilizzando SPI per determinare a quale connessione SA è collegato. ( ricordiamo
che SPI è un codice che collega il datagramma alla connessione SA )
3. Calcola il MAC di enchilada e verifica che è uguale a ESPMAC (verifica l’integrità dei dati)
4. Controlla il numero di sequenza per verifica che il datagramma non sia duplicato.
5. Descripta i dati criptati con il punto 3. precedente utilizzando l’ algoritmo associaro in SA
6. Estrae il datagramma IP originale
7. Instrada il datagramma IP al livello superiore

Un altro importante aspetto di IPsec è Security Policy Database(SPD), che indica la tipologia di datagrammi
(in relazione all’indirizzo ip sorgente e di destinaize, ed al protocollo utilizzato) che devono essere processati
da IPsec e come devono essere processati

Figura 8.29 6ed.

8.7.5 IKE: Key Management in IPsec (da studiare)

da studiare capitolo 6 ed.

193
8.8 Sicurezza nelle wireless LAN (da studiare)

8.9 Sicurezza operativa : firewall e sistemi di rilevamente delle


intruzioni (da studiare)

194

Potrebbero piacerti anche