Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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
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.
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
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.
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.
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à.
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.
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.
da studiare
Commutazione di circuito
Spieghiamo in dettaglio il funzionamento di una rete a commutazione di circuito partendo dalla Figura 1.8
Figura 1.8
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.
I circuiti dei collegamenti sono implementati tramite due diverse tipologie di multiplexing:
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
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.
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.
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.
22
1.4 Ritardi, perdite e throughput 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.
23
Figura 1.12 (vedere figura sul libro per note)
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).
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
24
trasmessi sul collegamento
3. L = si assume che ogni pacchetto abbia la stessa lunghezza L.
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.
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.
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).
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
Figura 16
27
1.5 Livelli di protocollo e loro modelli di servizio
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
Partenza Atterraggio
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
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
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
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.
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).
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.
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
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
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) .
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
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.
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
Servizi di UDP
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).
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.
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
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.
40
Figura 2.8
41
La figura 2.9 rappresenta una risposta generica
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.
42
5. A questo punto tutte le successive richieste dell’utente contengono il cookie ID guest.
Figura 2.10
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
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)
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.
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
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.
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
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
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
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.
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)
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
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
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
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
58
CAPITOLO 3 - LIVELLO DI TRASPORTO
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
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.
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.
Figura 3.2
61
Figura 3.3
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.
62
destinazione 19157 (inverte le porta del segmento originale).
Figura 3.4
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
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
65
Figura 3.6
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,
67
Figura 3.8 a
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.
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
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
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).
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
FIgura 3.15
La figura 3.16 descrive i vari scenari possibili che si possono verifica in rdt3.0
75
Riepilogo protocollo rdt
76
Figura 3.16
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
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
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.
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
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
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
Figura 3.26
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.
85
Figura 3.28
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
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
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
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
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
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
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.
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.
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.
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
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.
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
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
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 3 : quattro mittenti, router con buffer finiti e percorsi multihop (da studiare)
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.
non da studiare
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.
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.
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
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).
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.
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
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
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
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
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
111
Figura 4.12
112
Figura 4.13
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.
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.
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à).
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
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
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
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.
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
Figura 4.23
4.4.4 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
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.
Figura 4.26
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.
Figura 4.27
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
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.
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.
129
Tabella 4.3
Figura 4.28
da studiare
da studiare
Algoritmo con vettore distanza: modifica dei costi e gusti dei collegamenti (da studiare)
130
da studiare
da studiare
da studiare
da studiare
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.
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
132
Figura 4.32
Conclusioni
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.
133
4.6.1 Instradamento interno al sistema internet (si parla di RIP)
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)
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
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
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
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.
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.
141
4.7.2 Multicast (Da studiare)
142
CAPITOLO 5 - LIVELLO DI COLLEGAMENTO E RETI
LOCALI
143
Figura 5.1
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.
145
Figura 5.2
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
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
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) ).
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.
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.
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.
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
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
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
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.
154
Figura 5.20
Figura 5.21
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
156
Figura 5.26
Figura 5.27
5.6.2 Autoapprendimento*
157
Figura 5.28
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
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
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
Tabella 6.1
163
6.3.1 Architettura 802.11
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è)
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.
166
Terminali nascosti : RTS e CTS
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
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
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
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
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
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-
Algoritmo RSA
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
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
Priima di spiegare come risolvere i precedenti punti occorre avere una panoramica sulle funzioni hash
crittografiche
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 :
Figura 8.9
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.
Figura 8.11
179
Figura 8.12
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
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
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
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
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
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
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.
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
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
187
Figura 8.28
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
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
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.
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
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.
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
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.
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
193
8.8 Sicurezza nelle wireless LAN (da studiare)
194