Sei sulla pagina 1di 123

01.

Introduzione:
o 01.01 Scopi delle reti di calcolatori e loro classificazione
o 01.02 Grid, cloud e virtualizzazione.
o 01.03 Hardware di rete.
o 01.04 Software di rete e gerarchie di protocolli.
o 01.05 Modelli di riferimento OSI e TCP/IP.
o 01.06 Esempi di reti e standardizzazione delle reti.

Una rete è una connessione fisica e logica di due o più dispositivi per la trasmissione di informazioni, la
condivisione di risorse hardware e software. Una rete è diversa da un sistema distribuito, che invece è un
sistema che per portare a termine un determinato compito, utilizza una rete di calcolatori. La garanzia della
comunicazione e della coerenza delle informazioni scambiate in un sistema distribuito è compito del
Middleware (DBMS, Weserver e altri strumenti basati sul mettere a disposizione un contenuto). Internet è
una connessione tra più reti informatiche, il World Wide Web invece che si appoggia su Internet è un sistema
distribuito.

La qualità di una rete di computer (rete di telecomunicazione) è influenzata da 4 aspetti:

- Consegna  il sistema deve consegnare al giusto destinatario, ed esso deve essere il solo a ricevere
il dato a cui il mittente voleva inviarlo (no attacchi man in the middle)
- Precisione  i dati non devono essere corrotti
- Tempestività  i dati devono essere scambiati in un tempo ragionevole
- Jitter  variazione di errore con cui i dati giungono al destinatario

Le componenti che identificano una comunicazione sono:

- Mittente
- Destinatario
- Messaggio (audio, testo, video, …)
- Mezzo (cavo, wireless, …)
- Protocollo  insieme di regole che governano la comunicazione tra i due nodi che si scambiano il
messaggio

La comunicazione può avvenire in 3 modalità:

- Simplex  sempre e solo un destinatario e un mittente, la direzione di comunicazione è unica


- Half-duplex  un dispositivo può essere sia cliente che destinatario ma mai contemporaneamente
- Full-duplex  cliente e destinatario contemporaneamente

Lo scopo di una rete è di facilitare le comunicazioni., condividendo informazioni e risorse con un utente
remoto. La condivisione di risorse hardware (ex. stampanti) abbatte i costi.

Client-server è un paradigma di comunicazione. Il client è solitamente utilizzato dall’utente e si dice essere


attivo, mentre il server, che fornisce informazioni, è reattivo, ovvero in base alle azioni del client fornisce un
determinato servizio.

Se all’interno di una rete non sono specificati chi sono sempre e solo client e chi sono sempre e solo server,
ma i ruoli cambiano di continuo, la comunicazione prende il nome di peer-to-peer, ossia comunicazione tra
due dispositivi equivalenti che sono in grado sia di richiedere che di fornire un servizio. Il P2P è nato con
ARPANET negli USA negli anni ’60, e l’idea era quella di condividere cicli di clock di CPU, in modo tale da non
dover acquistare più CPU. Nel 2000 è tornato in auge grazie a Napster (servizio di musica con violazione di
copyright). Il P2P ridistribuisce il carico di lavoro senza focalizzarlo solo in un punto (come accadrebbe in un
server). Il P2P Puro, dove non è presente un server centrale che permette di far connettere tra loro diversi
nodi, viene integrato con una rete Overlay, ovvero una rete virtuale sovrapposta che permette di mappare e
indicizzare i nodi per mappare la rete.

Le funzioni di una rete sono:

- Garantire accesso ad informazioni remote


- Garantire la comunicazione tra persone, tramite metodi asincroni (mail), sincroni (IM) o multimediali
(VoIP o videoconferenze)
- Garantire il funzionamento della multimedialità (multiplayer, …)
- Garantire il commercio elettronico
- Garantire l’apprendimento e la formazione tramite corsi online o materiale reperibile

Per e-commerce si intende l’insieme delle applicazioni e dei protocolli dedicati alle transazioni commerciali.
Le vendite online possono assumere diverse forme:

- B2C  le aziende vendono un oggetto direttamente al consumatore finale


- B2B  commercio tra aziende di solito intermediarie
- G2C  servizi offerti dal Governo ai cittadini
- C2C  compravendita di oggetti tra privati (ebay, subito.it, …)
- P2P  file sharing

Negli ultimi anni sono diventati famosi altri paradigmi come la virtualizzazione, il cloud e il grid computing.
Un sistema grid è un’infrastruttura che permette di elaborare grandi quantità di dati facendo uso di più
risorse all’interno della stessa rete, cioè le varie risorse collaborano per un fine unico a tutte dividendosi il
lavoro da svolgere. Il cloud è un’idea di marketing in cui beni come software o hardware sono forniti come
servizi sotto pagamento tramite internet da grossi provider. La virtualizzazione è utilizzata come ausilio nei
sistemi cloud, in cui è importante astrarre hardware e software su una sola macchina, cioè fornire un
componente hardware come risorsa in forma virtuale.

Il concetto di grid è quello di coordinare diverse risorse che vengono utilizzate per risolvere problemi con
grosse quantità di dati. La condivisione e la coordinazione comprende sia hardware che software. I problemi
trattati dal grid computing sono di tipo data-intensive, cioè che utilizzano grosse quantità di dati, e il compito
del grid è quello di coordinare le applicazioni che utilizzano questi dati nel miglior modo possibile tramite
protocolli e interfacce che garantiscano un servizio efficiente e qualitativo.

Cloud Computing

Comprende tutte quelle risorse, applicazioni, griglie di calcolo ad alta velocità di cui un’utente può usufruire
tramite un servizio on-demand fruibile tramite internet.

I servizi vengono distribuiti tramite 3 differenti modalità:

- SaaS  Software as a Service, un software, un’applicazione, è disponibile su richiesta


- PaaS  Platform as a Service, una piattaforma è resa disponibile per effettuare testing, la
manutenzione di un progetto senza spendere soldi per acquistarne una propria (Database, API, …)
- Iaas  Infrastructure as a Service, l’utente fruisce di un’infrastruttura completa, ovvero una
macchina virtuale

Al momento dell’installazione, esistono 3 modelli di base di cloud computing:

- Public Cloud  è la più utilizzata, le risorse vengono fornite tramite internet con l’utente che non
deve gestire la manutenzione del cloud
- Private Cloud  è il cloud computing che viene gestito da un’azienda, i dati vengono memorizzati in
un database interno all’azienda che si deve occupare quindi anche della manutenzione
- Community Cloud  è un ibrido tra il cloud pubblico e quello privato. I servizi di cloud sono utilizzati
da diverse community che possono fornire i propri servizi e utilizzare i servizi di altre community.

A seconda del modello di cloud adottato, un utente e un provider hanno diversi ruoli e responsabilità. A
seconda del contratto stipulato l’utente rinuncia ad alcuni tipi di servizi o si garantisce l’utilizzo di altri. Nelle
architetture on-premise (in sede), cioè una postazione locale, l’utente deve gestire tutto, SO, server, Storage,
Dati, Applicazioni, Middleware, Virtualizzazione. Nel momento in cui si utilizza il cloud computing, queste
responsabilità diminuiscono per l’utente. Se si utilizza su SaaS, l’utente dee gestire solo i dati, le applicazioni,
l’esecuzione e il sistema operativo. Nel PaaA l’utente dovrà gestire solo l’applicazione e i dati, mentre nel Iaas
gestisce tutti il provider.

Virtualizzazione

Una macchina è un software isolato in grado di essere eseguito come se fosse una macchina fisica. L’hardware
sul quale queste macchine virtuali sono basate (RAM, CPU, …) è condiviso tra più macchine virtuali, ciascuna
isolata alle altre e con i propri dati e il proprio SO. Risolve il problema del sottoutilizzo dell’hardware, che
viene cosi diviso e utilizzato da diverse macchine virtuali.

E’ importante l’utilizzo di un’infrastruttura virtuale, che permette di allocare determinati tagli di memoria ad
ogni VM. Questa infrastruttura permette di gestire al meglio l’allocazione di una risorsa tra più macchine
virtuali, il riavvio dopo una failure, ottimizzare le risorse favorendo stabilità alla struttura, ovvero di avere un
servizio on-demand e always-on. La virtualizzazione permette di consolidare i server, ovvero ridurre il numero
di pc in una sala macchine lasciando solamente i server ma garantendo comunque i servizi offerti, visto che
più macchine possono essere simulate nella stessa macchina. L’utilizzo di più macchine server in un solo case
si definisce tecnologia blade.

Business Continuity: continuità operativa, consiste in un processo che controlla constantemente lo stato
dell’infrastruttura per riconoscere possibili minacce alla quale è esposta l’azienda, elaborando così quelle che
sono le contromisure da prendere per garantire l’erogazione dei servizi dell’azienda in caso di condizioni
avverse.

Rapid Provisioning: consente di velocizzare la creazione di macchine virtuali clonandone una esistente e
modificandola in base alle esigenze.

Data Center

E’ il fulcro di ogni attività di business e garantisce il funzionamento dei servizi 24h su 24. E’ l’insieme di tutte
le risorse e le apparecchiature che sono necessarie per gestire il sistema informativo di un azienda. Esempi
di risorse sono server, storage, router, …. Grazie alla virtualizzazione e al cloud, i data center si sono evoluti
e sono diventati data center virtuali o cloud data center. Questi data center server, oltre a gestire server fisici,
gestiscono anche server virtuali, ovvero creati sui server fisici esistenti, ai quali si può accedere anche in
remoto facilitando la manutenzione. I vantaggi di avere un Virtual Data Center sono affidabilità, sicurezza e
scalabilità. Si può gestire un Virtual Data Center (VDS) anche tramite il cloud sottoforma di IaaS, ma ciò
comporta pericoli sulla sicurezza dei dati, sulla privacy, e soprattutto che l’efficienza di un VDS dipende
fortemente dalla qualità dei servizi offerti dal cloud. Per poter utilizzare la virtualizzazione è necessario avere
a disposizione una solida infrastruttura hardware e software di base. I software più utilizzati sono VirtualBox,
VMWare, Xen e Parallelels.
Classificazione delle reti

- PAN  Personal Area Network, si estendono per pochi metri nell’intorno dell’utilizzatore
- LAN  Local Area Network, si estendono per un centinaio di reti, sono reti casalinghe o di piccoli
uffici
- MAN  Metropolitan Area Network, coprono solitamente i territori cittadini
- WAN  Wide Area Network, reti più estese che raggiungono la copertura di svariati km e coprono
macro-regioni o l’intero territorio nazionale
- Wireless  trasmettono le comunicazioni senza filo, con onde elettromagnetiche
- Home network  rete casalinga, mista tra cablata e wireless
- Internetwork  reti che collegano una LAN ad una WAN per esempio, fanno da tramite

Poi esiste la suddivisione:

- Broadcast  punto-multiplo punto, cioè il nodo mittente invia il messaggio ad un insieme di nodi
destinatari
- Punto-Punto  si effettua la comunicazione con un collegamento diretto punto punto tra i due nodi.
Sarebbe l‘implementazione hardware del paradigma P2P

Divisione per topologia della rete (in base alla struttura logica):

- Bus  unico mezzo di trasmissione chiamato bus a cui si collegano tutti i pc


- Anello  ciascun pc è collegato con altri due pc formando un anello dove tutti possono essere
raggiunti da altri
- Stella  i pc sono coordinati da un pc coordinatore a cui sono collegati tutti i pc
- Gerarchica  come un albero, con un nodo radine (gateway o coordinatore) e pc collegati ad esso
come foglie dell’albero
- Magliata  ogni nodo è connesso a tutti gli altri nodi della rete

Rete PAN

Esempi: computer collegato ad una stampante, sensori di uno smartphone che monitorano funzioni vitali...
Coprono un raggio di pochi metri e usano tecnologia come onde elettromagnetiche, USB, FireWire e
infrarossi. Usano protocolli WiFi, Bluetooth, ZigBee, USB, HDMI, FireWire.

Rete LAN

Sono costituite da almeno due dispositivi, coprono uno o più edifici (come ad esempio un campus
universitario). Sono progettate per condividere risorse ed abbattere i costi ed avere un’unica connessione ad
internet. Le topologie utilizzate sono quelle a bus e ad anello. Sarà però necessario regolare i conflitti nel caso
in cui più dispositivi cerchino di comunicare contemporaneamente.

Rete MAN

Sono nate in America per trasmettere la TV via cavo. Un’antenna era posta in un luogo con un buon segnale,
e poi il segnale veniva mandato tramite connessione in fibra ottica ad intere cittadine che implementavano
una rete con topologia ad anello con funzionalità backbone. In Europa una tipologia di MAN è il WiMax, che
è un’alternativa alla DSL.

Rete WAN

Rete con linee di comunicazione a grande distanza. E’ composta da più sottoreti (ex. delle LAN o MAN) che
trasmettono delle informazioni ai router che si passano informazioni fra di loro per farle arrivare al giusto
destinatario che potrebbe potenzialmente essere anche dall’altra parte del mondo.
Commutazione di pacchetto (rete internet): un messaggio viene diviso in pacchetti, con i pacchetti che
vengono inviati singolarmente ai router che li smista e li manda al destinatario che ricomporrà il messaggio
originale. I pacchetti possono percorrere strade diverse, aumentando la possibilità di perdita di informazioni.
In caso di guasti non ci sono problemi, infatti i pacchetti percorreranno una strada diversa seguendo gli
algoritmi di routing.

Commutazione di circuito (telefonia): i nodi del percorso sono riservati per tutta la durata della trasmissione,
non possono essere utilizzati contemporaneamente da altri host. Ogni pacchetto che viene inviato percorre
la stessa strada. Un messaggio è più difficile che venga perso, ma se cade un nodo, un router, la connessione
viene persa.

Reti wireless

Una tipologia di reti sempre più in auge negli ultimi anni sono quelle senza fili (wireless) e le reti mobili. Le
due cose non sempre coincidono. Normalmente le reti senza fili funzionano attraverso onde
elettromagnetiche. Ci sono diversi standard e architetture che una rete wireless può usare. Le reti wireless
prevedono un gateway che le connette a reti cablate. Le reti cellulari (o mobili) sono anch’esse reti senza fili
e come tali rispecchiano i principi base di tutte le reti wireless. Le reti wireless sono classificate per:

- tipologia di interconnessione  ad esempio a corto raggio, P2P etc


- standard  adottati nelle diverse tipologie LAN, MAN, WAN; i più usati derivano dallo standard IEEE
802 ma non sono i soli, soprattutto se ad esser prese in considerazione sono le reti mobili

Una rete wireless ha un gateway che la connette ad una rete cablata. Due possibili soluzioni per una rete
wireless su aeromobili:

- la prima soluzione consiste nell’avere ogni singolo dispositivo equipaggiato con un modem, mobile,
che permette la connessione ad internet;
- la seconda soluzione, molto più efficiente, prevede una singola rete LAN sull’aeromobile, con un
gateway (un router) che gestisce un’unica connessione linkata alla terra.

Domotica: la domotica è una rete di dispositivi all’ interno della casa che comunicano tra loro.

Criteri di valutazione per una rete

- Performance  si valuta il ritardo o la banda passante


- Affidabilità  capacità di trasmettere senza errori
- Sicurezza  i dati non devono essere manipolati durante la trasmissione

Protocollo: insieme di regole che governa la comunicazione tra due host. Un protocollo è caratterizzato da

- Sintassi: l’insieme delle regole che la comunicazione deve seguire per essere considerata valida
- Semantica: la giusta sequenza dei comandi in modo che le informazioni trasmesse abbiano senso
- Sincronizzazione: ossia la gestione del tempo in maniera tale che non ci siano conflitti nella
comunicazione

Gli standard possono essere:

- De facto: ossia nessuna norma li ha regolati a priori e sono diventati tali per il loro vasto uso e la
diffusione che hanno raggiunto
- De iure: un ente o un’organizzazione ne ha dettato le regole a priori e chiunque voglia seguire quello
standard deve prendere la norma e seguirla

Esempi di standard: ISO, ANSI, IEEE, EIA/TIA, ETSI, …


A partire dall’hardware si avrà lo strato 1, lo strato 2 e così via. Ciascuno stato comunica tramite un suo
preciso protocollo. La trasmissione dei pacchetti avviene sullo strato 1. Due dispositivi comunicanti che si
trovano sullo stesso strato si chiamano peer, e comunicano per mezzo di un preciso protocollo, cioè un
insieme di procedure e regole che caratterizzano operazioni tecniche di una certa complessità. Ogni strato,
chiamato anche livello, fornisce tramite interfacce dei servizi al livello superiore nascondendone i dettagli
implementativi. Nella comunicazione, ovvero in uno scambio di un pacchetto, vengono aggiunte informazioni
tra gli strati, dall’alto (livello 7) verso al basso (livello 1). Queste informazioni vengono aggiunte in cima o in
fondo al pacchetto (header o tail). Questo processo viene detto di incapsulamento. Nel destinatario, il
processo sarà inverso, con il pacchetto che passerà dal primo all’ultimo livello, dal basso verso l’alto, con le
informazioni sull’header o sulla tail che verranno spacchettate.

Per la corretta ricezione di un pacchetto è importante curare:

- Indirizzamento
- Gestione degli errori  il messaggio deve arrivare in maniera integra al destinatario
- Controllo di flusso  nonostante la diversa capacità trasmissiva, tutti i nodi devono riuscire a
comunicare
- Multiplexing  gestire più comunicazioni tra gli stessi canali
- Routing  gestire la strada che il pacchetto prenderà

I servizi forniti da ciascun livello sono di due tipi:

- Orientati alla connessione  telefonia classica, i canali sono riservati fino alla fine della
comunicazione
- Non orientati alla connessione  i pacchetti vengono inoltrati senza che il mittente si preoccupi di
che strada percorrano per arrivare al destinatario. Ogni pacchetto dovrà aver specificato il mittente
ed il destinatario poiché potrebbe non percorrere la strada che hanno percorso tutti gli altri
pacchetti.

Un servizio può essere anche affidabile o meno. Se è affidabile, il mittente riceve notifica dell’avvenuta
ricezione del destinatario dei pacchetti.

Datagramma: servizio connection-less non affidabile.

Il VoIP è un servizio orientato alla connessione ma non affidabile (telefonia tramite IP).

Servizi e protocolli non vanno assolutamente confusi. I servizi hanno un flusso verticale, cioè passano da
livello a livello aggiungendo man mano informazioni. I protocolli invece sono regole che due peer utilizzano
per ricavare informazioni sul messaggio ricevuto nello stesso livello.

Ci sono due modelli (standard) di riferimento:

- ISO/OSI fornito da OSI (Open System Interconnection) che è un modello de jure


- TCP/IP (Trasmission Control Protocol / Internet Protocol) chiamato anche modello internet, che è un
modello de facto

Modello ISO/OSI

E’ costituito da 7 livelli

- Fisico  si occupa della trasmissione vera e propria dei pacchetti tra i nodi della rete. I servizi forniti
sono: gestione dei mezzi e delle interfacce, codifica dei segnali, gestire la velocità di trasmissione in
base al mezzo utilizzato, sincronizzazione dei clock per mettere in comunicazione due nodi, gestione
della connessione, gestione del flusso dei dati (simplex, half duplex, full duplex)

- Data link  si occupa dell’affidabilità di trasmissione. I servizi offerti sono: divisione del flusso di bit
in pacchetti, detti frame, etichettatura dei nodi a cui i pacchetti devono arrivare, gestione del flusso
della trasmissione, individuazione degli errori e correzione, controllo dell’accesso al mezzo di
comunicazione

- Rete  si occupa della trasmissione dei pacchetti dal mittente al destinatario tramite
l’indirizzamento. I servizi offerti sono: indirizzamento dal punto di vista logico quando si lavora con
più reti diverse, instradamento, ovvero la gestione degli algoritmi che decidono il percorso che il
pacchetto dovrà percorrere.

- Trasporto  si occupa dello smistamento tra i processi dei messaggi ricevuti (lo strato sottostante,
quello di rete, non fa la differenziazione dei pacchetti). I servizi offerti sono: indirizzamento dei
processi, divisione del messaggio originale di un processo in piccoli segmenti, gestione della decisione
tra comunicazione orientata alla connessione o connection-less, controllo del flusso dei processi,
controllo degli errori dei pacchetti passati attraverso il livello di rete.

- Sessione  si occupa di stabilire, mantenere e sincronizzare la comunicazione tra i sistemi: I servizi


offerti sono: sincronizzazione dei processi (inserendo dei punti di controllo durante la trasmissione),
controllo del dialogo che permette ai due sistemi di far comunicare i processi sia in modalità half che
full-duplex.

- Presentazione  si occupa di gestire la semantica e la sintassi dell’informazione trasmessa. I servizi


offerti sono: standardizzare il modo in cui due nodi diversi rappresentano l’informazione, crittografia
del messaggio da inviare, compressione del messaggio (decodifica delle immagini, parsing HTML, …)

- Applicazione  interfaccia che permette all’utente di usufruire di un servizio di rete (mail, file
manager, pagina internet, …)

Modello TCP/IP

Esisteva prima del modello ISO/OSI. I livelli di questo standard non coincidono quindi precisamente con quelli
dello standard ISO/OSI. I livelli previsti dal modello TCP/IP sono 4:

- Host-To-Network  include i protocolli di basso livello e i mezzi fisici utilizzati per la comunicazione
- Internet  si basa sul protocollo IP, che include altri 4 protocolli di servizio ARP, RARP, ICMP, IGMP
- Trasporto  si basa sui protocolli UDP e TCP
- Applicazione  corrisponde agli ultimi 3 del livello ISO/OSI, ovvero sessione, presentazione,
applicazione.

Il modello ISO/OSI è ben strutturato gerarchicamente, con ogni protocollo che appartiene ad un livello ben
definito. Ciò non accade nel modello TCP/IP, nel quale più livelli sono accorpati insieme. Il modello ISO/OSI è
un modello concettuale, quindi utilizzato principalmente per descrivere e capire le funzioni di una rete,
mentre quello TCP/IP nasce dall’utilizzo di protocolli utilizzati per risolvere dei “problemi”, cioè per risolvere
in maniera concreta un qualcosa ed implementarlo in maniera fisica.

Il modello OSI risulta troppo complesso da implementare e non esistono tutti i protocolli per ogni livello ben
distinguibile del modello, per cui solitamente si utilizza il modello TCP/IP, anche se al di sotto del livello di
rete, nel livello Host-To-Network, non c’è nessuna divisione e regna il caos. Una buona soluzione è quella di
usare un modello ibrido, composto dai primi 4 strati del modello OSI e dall’ultimo strato del livello TCP/IP
(specificando quando possibile a quale livello del modello ISO/OSI ci si riferisce).

Esempi di rete

Internet  sistema telematico che connette in un’unica rete milioni di dispositivi digitali

X.25  vecchia tecnologia implementata sui primi 3 livelli dello stack ISO/OSI, è stata una delle prime reti a
commutazione di circuito

Frame Relay  implementazione più recente di X.25, ma non prevede il controllo del flusso e l’ack,
nonostante sia un servizio orientato alla connessione

ATM  protocollo DataLink che viene utilizzato per trasmettere ADSL

Ethernet  tecnologia tipica delle reti LAN, che identifica oltre al livello DataLink anche i mezzi fisici usati

WiFi

Origini di Internet

Internet è nata per battere i sovietici nella corsa allo spazio. Il presidente Eisenhower, preoccupato che
l'America perdesse la propria egemonia scientifica, tecnologica, economica e militare dopo il lancio nello
spazio dello Sputnik sovietico nel 1957, riunì attorno a sé i migliori cervelli dell'epoca e nominò il rettore del
Mit James Killian a capo dell'ARPA, Advanced Project Research Agency (Agenzia per i progetti di ricerca
avanzata) per contrastare il milione di scienziati messi in campo dalla Russia. Nel 1972 l'ARPA assunse compiti
militari diventando DARPA (Defense Advanced Project Research Agency). L'idea semplice era di creare una
rete distribuita di computer per evitare gli spostamenti umani e usare le risorse di calcolo laddove c'erano
già, ma doveva risolvere il problema di far parlare i computer tra di loro. Vennero in aiuto le ricerche quasi
contemporanee di Leonard Kleinrock, Paul Baran e Dondal Davies, che intorno al 1965 erano arrivati a
teorizzare la trasmissione dei dati a commutazione di pacchetto. Gli studi successivi di Vinton Cerf e Bob Kahn
risolsero il problema di non perdere pezzi di informazione. Nel 1985 nasce NSFNet, la rete della Fondazione
americana per la scienza (National Science Foundation), che doveva collegare i centri di supercomputing
americani con delle dorsali di tramissione dedicate (backbone). Nel 1990 ARPANET fu chiusa e la rete della
NSF andò incontro a un processo di evoluzione includendo anche aziende private. Nel 1990 la rete era
utilizzata specialmente per scopi governativi, ma poi nel 1991, con la nascita del World Wide Web (creato da
Tim-Berners Lee) la rete Internet venne utilizzata pubblicamente da tutti i cittadini. Il WWW si basava sul
modello TCP/IP e su un collegamento ipertestuale tra le pagine HTML (HyperText Markup Language).

Struttura di Internet

Un cittadino che voleva usufruire della rete internet doveva comunicare con l’ISP, ovvero l’Internet Service
Provider, che mettevano a disposizione dei POP (Point of Presence) ai quali il cittadino si collegava tramite la
rete telefonica di casa, per ottenere l’accesso ad Internet. Più POP erano collegati tramite i NAP (Network
Access Point), che permettevano a più ISP di comunicare tra loro.
Rete ATM

ATM è un protocollo sviluppato nei primi anni 90 ed orientato alla connessione. I pacchetti, chiamati celle,
sono molto piccoli (53 Bytes, 5 di header + 48 di payload) e questo aiuta la velocità del protocollo causando
solo un piccolo overhead nei calcoli e un ritardo costante nella trasmissione. L’header aggiunto contiene
l’informazione chiamata label che indica il circuito virtuale da seguire: l’etichetta è composta da VPI (Virtual
Path ID) e VCI (Virtual Channel ID); ogni canale può contenere fino a 2^16 path. Il fatto che tutte le celle
seguano lo stesso cammino garantisce la consegna in ordine, ma non l'integrità informativa ovvero che tutti
i pacchetti siano consegnati. Su ATM sono stati definiti una varietà di modelli di servizio che si adattano sia
al traffico telefonico (CBR: banda costante, forti garanzie su banda e ritardo) sia a quello IP (VBR: banda
variabile, nessuna garanzia).

Rete ETHERNET

Il suo nome è dovuto alla parola Etere, che era il mezzo attraverso il quale, durante l‘800, si pensava
viaggiasse la luce. Nasce dal problema di collegare più elaboratori ad un’unica stampante nel laboratorio di
Xerox a Palo Alto. E’ diventato uno standard nel 1983 quando La DEX, la Intel e la Xerox proposero al comitato
IEEE 802 il progetto della rete, che raggiungeva i 10 Mbps  IEEE 802.3. Negli anni 80’ ha dovuto affrontare
la concorrenza dello standard IEEE 802.5 di IBM (token ring) che viaggiava a 16 Mbps. Nasce nel laboratorio
Xerox di Palo Alto, dove Metcalfe e Boggs utilizzarono un cavo coassiale che passava in ogni corridoio del
laboratorio, nel quale tramite un piccolo foro venivano collegati i computer del laboratorio. La lacuna
principale di questa implementazione era che, nel caso in cui il cavo avesse subito un danneggiamento
all’interno di un qualsiasi punto del laboratorio, l’intera rete cadeva.

Rete WIRELESS

E’ stato rilasciato per la prima volta nel 1997 dopo che il gruppo di lavoro 11 del comitato IEEE 802 ha
approvato lo standard  IEEE 802.11 che metteva in comunicazione i dispositivi senza fili in una piccola rete
domestica (WLAN). Ci sono due possibili implementazioni di una rete wireless:

- Ad hoc, in cui ogni dispositivo può comunicare direttamente (come una sorta di P2P) con un altro
dispositivo connesso alla rete
- Ad infrastruttura, in cui due dispositivi comunicano tramite una Base Station (BS)

Rispetto alla rete Ethernet, le reti wireless devono gestire alcuni problemi. Infatti, mentre nella connessione
Ethernet, un nodo prima di inviare i dati si assicura che il canale di trasmissione sia libero, mentre nelle reti
wireless potrebbe succedere che due nodi A e C riescono entrambi a comunicare con un nodo B, ma non
riescono a comunicare tra loro, quindi potrebbe succedere che sia A che C iniziano la trasmissione a B
(problema del terminale nascosto  il raggio di copertura di rete di un nodo non copre l’intera rete). Altro
problema che potrebbe accadere è quello del gestire le comunicazioni tra nodi che comunicano con due base
station differenti. Se il nodo A fa riferimento all’access point AAP, mentre il nodo B fa riferimento all’access
point BAP, il problema è quello di far comunicare i due access point AAP e BAP. Una soluzione adottata in
questo caso è quella di collegare fisicamente gli AP ad una rete Ethernet. Inoltre, è importante il problema
del movimento dei dispositivi.

Standard importanti: Ethernet 802.3, PAN (Bluetooth) 802.15, Reti Wireless (WLAN) 802.11, Broadband
Wireless 802.16
02. Livello applicazione:
o 02.01 Posta elettronica: MIME, SMTP, IMAP, POP3.
o 02.02 Trasferimento file: FTP.
o 02.03 World Wide Web e HTTP.
o 02.04 DNS - Domain Name System.
o 02.05 CDN - Content Delivery Network.
o 02.06 CDN e Video Streaming
o 02.07 Browser APIs e Protocolli

Il principale compito di questo livello è quello di gestire le applicazioni che girano su particolari nodi della
rete detti generalmente Host, in quanto includono tutti gli strati dello stack. Il livello applicazione ha
caratteristiche peculiari in quanto non fornisce servizi ai livelli superiori tramite i suoi protocolli. Fornendo i
propri servizi direttamente agli utenti la sua flessibilità consente di togliere o aggiungere protocolli con una
certa facilità. A questo livello è possibile trovare protocolli standardizzati (come ad esempio http o i protocolli
di mail) e protocolli non standard (tutti quelli sviluppati ad hoc da aziende private). I paradigmi del livello
applicazione più usati sono il paradigma Client/Server e quello P2P.

Posta elettronica

E’ un servizio di comunicazione asincrono. I vantaggi sono la velocità, la possibilità di raggiungere più nodi
contemporaneamente, l’abbattimento dei costi e la possibilità di allegare dei documenti (aggiunta in un
secondo momento). Le caselle postali elettroniche sono identificate da un indirizzo e-mail definito da una
stringa: utente@{host}network. Scomponiamo la stringa in tre parti:

- La prima parte (user) , chiamata anche parte locale, identifica la casella nominativa dell’ utente
- Host è l’identificativo del nome del server mail; esso spesso viene omesso per semplicità in quanto
identificato dal DNS, che esplicita quale sia il server mail per un dominio
- La terza parte identifica il dominio dove trovare il server mail.

Il sistema di posta elettronica si divide in 4 componenti:

- Mail User Agent  applicazione client che può usufruire del servizio di posta elettronica per
comporre o ricevere una mail (scrivi la mail)
- Mail Transfer Agent  software che permette di inoltrare la mail tramite il protocollo SMTP da un
host ad un altro (il messaggio passa dal server di posta di Gmail del mittente a quello del destinatario)
- Mail Delivery Agent  prende in carico il messaggio dall’MTA e lo consegna al destinatario (dal server
di posta viene inoltrato al giusto indirizzo mail)
- Mail Retrival Agent  si occupa di prendere dalla casella mail il messaggio di posta elettronica e
presentarlo in forma visibile all’utente (spesso fa parte del MUA)

SMTP

E’ uno dei primissimi protocolli comparsi su Internet (antecedente all’http). Il protocollo tratta i caratteri
come codici ASCII a 7 bit, per questo motivo ha difficoltà a trattare con file di tipo binario e lingue con caratteri
non latini. Una volta scritta una mail, attraverso il MUA, il messaggio viene accodato nell’ attesa che il server
mail del mittente apra una connessione TCP e si colleghi al server mail del destinatario comunicando
attraverso il protocollo SMTP. Dopo l’iniziale handshake tra i due server il messaggio viene spostato dal server
del mittente a quello del destinatario, in attesa che quest’ultimo lo legga attraverso il proprio MUA. SMTP
utilizza connessioni persistenti, ovvero i due host instaurano una connessione TCP e il canale rimane lo stesso
per tutta la comunicazione. Il formato dei messaggi SMTP è lo standard RFC 822 del 1982:
- Header  contiene le informazioni di servizio come mail mittente, mail destinatario, …
- Body  contiene il testo del messaggio

Parole chiave dell’header:

- To  indirizzo mail destinatario


- Cc  indirizzo mail destinatari secondari
- Bcc  indirizzo mail di destinatari che però risulteranno sconosciuti agli altri destinatari
- From  nome persona che ha creato il messaggio
- Sender  mail del mittente
- Received  storico di tutti i nodi percorsi che viene aggiornato dai MTA
- Return-Path  utile per tenere una traccia del percorso del mittente

From e Sender possono essere diversi  SPAM

Vista la difficoltà nel rappresentare caratteri non latini e nel gestire i file binari, lo standard che si utilizza oggi
al posto dello standard RFC 822 è lo standard MIME.

MIME

Allo standard RFC 822 si aggiungono cinque campi nell’header:

- MIME-Version  la versione di MIME usata


- Content-Description  stringa ASCII che specifica cosa è il messaggio
- Content-Id  identificatore unico del messaggio
- Content-Type  definisce la natura del corpo del messaggio
- Content-Transfer-Encoding  specifica come il corpo del messaggio è stato codificato

Un’ esempio di estensione MIME è l’invio di un’immagine allegata. La voce dell’header specifica proprio la
tipologia del contenuto (immagine) specificandone la codifica (jpeg). La codifica per la trasmissione
attraverso la rete è invece in base64, un tipo di codifica che traduce i dati binari in codifica ASCII (ecco perché
non conviene inviare file di grande dimensione via mail!).

Col passare degli anni le esigenze sono aumentate, e il protocollo SMTP si è evoluto in ESTMP (Extended
STMP). La differenziazione tra il protocollo STMP e ESTMP è il comando che viene utilizzato Dal MUA, che in
STMP è HELO mentre in ESMTP è EHLO. ESMPT aggiunge anche il comando STARTTSL. SSL e TSL sono un
metodo per criptare un canale di comunicazione tra due nodi e renderlo più sicuro. Il comando STARTTLS
non fa altro che forzare una comunicazione su canale non sicuro su uno sicuro che usa SSL/TLS. La
comunicazione può essere quindi criptata o meno, e in base a questo esistono due porte assegnate per ogni
protocollo. I tre protocolli più famosi sono POP, IMAP e STMP, POP usa la porta 110, ma se usa una
connessione criptata con SSL/TSL utilizza la 993, IMAP usa la porta 143, ma nel caso in cui la connessione sia
criptata son SSL/TSL utilizza la porta 995, mentre STMP usa la 25, e se criptata usa la 465. Utilizzare 2 porte
per ogni protocollo però era poco fattibile, per cui si decise di utilizzare un’unica porta per ogni protocollo,
in cui la comunicazione partita in chiaro (plaintext), con la possibilità poi di usare STARTTSL da parte del client
per modificare la comunicazione in una comunicazione criptata criptata. Quindi ESTMP e il suo comando
STARTTSL nascono per utilizzare un’unica porta per protocollo e per permettere la modifica del tipo di
comunicazione. Questa tipologia di implementazione però non è ancora del tutto utilizzata perché parecchi
software non sono ancora stati aggiornati e utilizzano la doppia porta. STARTTSL portava comunque problemi
di connessione e molto spesso portava a trasferire password e username in chiaro. Pertanto si utilizza tutt’ora
la doppia porta per connessioni plaintext e connessioni criptate.
L’unica eccezione in cui si utilizza STARTTSL è nel protocollo SMPT. Infatti, l’invio della mail al MTA veniva
effettuato dal MUA, che utilizzava il protocollo STMP. STMP però era nato originariamente per il
trasferimento della mail tra il server mittente e quello destinatario. Pertanto, l’invio della mail dal MUA al
MTA avviene ora tramite la porta 587, e non tramite la 25 che utilizzava SMTP. La porta 587 non richiede
l’uso di STARTTSL, ma è buona normale utilizzare sempre un canale criptato per l’invio di una mail. L’utilizzo
della nuova porta 587 con l’upgrade con STARTTSL ad una comunicazione criptata, ha diminuito lo spam, in
quanto i messaggi distribuiti in modo randomico non comprendono comunicazioni criptate. La porta 25 è
quindi stata chiusa sui pc degli utenti poiché le mail non vengono più inviate tramite quella porta. Tuttavia
non è ancora completo il passaggio alla porta 587 come unica porta in quanto ancora alcuni utenti utilizzano
la 465, che è una porta tramite la quale si può comunicare solamente con TSL/SSL.

Una volta che la mail viene inviata (tramite porta 587 con STARTTSL o 465 con TSL/SSL), ci sono due possibili
strutture:

- Connessione TCP permanente tra i due host che intendono scambiarsi la mail, con entrambi gli host
che devono essere connessi ad internet  il messaggio può essere inviato solamente quando
entrambi sono online
- L’host mittente comunica e invia la mail ad una macchina dell’ISP (che è sempre online) e l’host
destinatario si connetterà alla macchina dell’ISP e scaricherà poi la sua mail  il messaggio può
essere sempre inviato

Nasce quindi il problema di come l’host destinatario comunica con l’ISP per ottenere la propria mail. Nasce
quindi il protocollo POP3 tramite il quale il pc del destinatario contatta la macchina dell’ISP e copia la sua
mailbox. POP3 viene avviato quando l’utente avvia il lettore della posta. Il lettore delle mail (client) si
connette sulla porta 110 al server POP3 della macchina dell’ISP, e una volta autenticatosi (con nome utente
e password) potrà scaricare la copia delle proprie mail che era salvata sulla mailbox dell’ISP. Le mail sulla
mailbox dell’ISP verranno cancellate dato che oramai la lista della mail è salvata sul client, ed il client si
disconnetterà. La limitazione dell’utilizzo di POP3 è che alla mailbox sul server ISP poteva accedere un solo
dispositivo alla volta, visto che la lista della mail veniva scaricata sul client attualmente connesso e poi
cancellate dalla macchina ISP. Nel caso in cui un altro dispositivo avesse voluto accedere allo stesso account
mail (ex. due accessi diversi da un pc fisso e uno portatile) la mailbox risultava essere vuota e quindi non era
possibile leggere e cancellare/inoltrare le mail.

Nasce quindi IMAP, che a differenza di POP3, non scarica sulla macchina la lista di mail, ma esse rimangono
a vita sul server ISP, con il client che una volta effettuata la connessione potrà eseguire comandi per
consultare/eliminare/inoltrare le varie mail. Il server IMAP è attivo sulla porta 143, e i comandi più utilizzati
sono:

- Login
- List  lista delle caselle mail e delle mail presenti in esse
- Status
- Examine  specifiche di caselle mail e mail, quante per ogni tipo, ecc.ecc.
- Select
- Create/Delete/Rename
- Fetch
- Store
- Close/Expunge  elimina mail definitivamente che hanno il flag \delete
- Logout
- Subscribe
- Unsubscribe
POP3

• Vantaggi

• Le email vengono scaricate sul computer dell'utente.

• I messaggi possono essere letti quando l'utente è offline.

• Aprire gli allegati è semplice e veloce in quanto sono già scaricati.

• Minore spazio di archiviazione sul server

• Molto popolare, facile da configurare e utilizzare

• Svantaggi

• Non è possibile accedere alle e-mail da altre macchine (a meno che non sia configurato per
farlo).

• Esportare la cartella di posta locale su un altro client di posta elettronica o macchina fisica
può essere difficile.

• Gli allegati di posta elettronica possono contenere virus che possono esporre il PC
dell'utente a danni se vengono aperti localmente e il loro antivirus non è in grado di rilevarli

IMAP4

• Vantaggi

• La posta elettronica è disponibile per qualsiasi macchina che ha un client configurato con
lo stesso account IMAP

• I messaggi e-mail non vengono persi in caso di arresto anomalo del sistema o furto del PC
poiché vengono archiviati online

• Possibilità di impostare flag di stato del messaggio

• Gestione remota delle caselle postali (elenca / crea / rinomina / elimina)

• Supporto per l'aggiornamento simultaneo in cartelle condivise su client diversi

• Libertà di visualizzare in anteprima solo parti del messaggio senza scaricare l'intera e-mail

• Gli utenti possono decidere quando scaricare gli allegati

• Svantaggi

• E-mail non accessibili se non si ha una connessione attiva

Webmail

Caselle mail sul web, in cui il MUA è il browser (ex. Yahoo, HotMail). La comunicazione avviene tramite il
protocollo HTTP, che viene utilizzato al posto dei protocolli IMAP o POP3. Le mail vengono inoltrare tramite
HTTP piuttosto che tramite il protocollo SMTP.

Aspetti importanti delle mail scritte che per essere inviate, e non bloccate o segnalate come spam, devono
essere rispettati sono la reputazione, il DNS, la quantità di email inviate e un eventuale indirizzo IP pubblico
di proprietà e l’autenticazione.
FTP File Transfer Protocol

Protocollo utilizzato per il trasferimento di file tra due file-system di due host. La comunicazione può essere
autenticata tramite user e password oppure anonima. Il client si connette al server con una connessione TCP
che verrà dedicata ai comandi. Tramite questa connessione che è persistente, verrà fatta l’autenticazione e
verranno eseguiti i vari comandi. Per il trasferimento vero e proprio del file invece, per ogni file viene aperta
una connessione TCP che al completamento del trasferimento viene chiusa. La porta della comunicazione
viene settata con il comando PORT (generalmente è sulla porta 21).

FTP può agire in maniera passiva o attiva:

- Attiva  la connessione di controllo è stabilita dal client, mentre quella dei dati dal server
- Passiva  entrambe le connessioni (dati e controllo) sono stabilite dal server

Uno sviluppo di FTP è TFTP, che viene nelle reti locali e solitamente non tra reti remote. A differenza di FTP,
che si basa su una connessione TCP, la connessione è UDP. Il ritardo è minimo (visto l’uso di UDP) ma in
compenso c’è meno sicurezza nel trasferimento dei dati, inoltre è molto facile da implementare. TFTP è
composto da 5 tipologie di messaggi:

- Richiesta di lettura
- Richiesta di scrittura
- Dati
- ACK
- Error

Il client effettua una richiesta di lettura/scrittura di un determinato file al server che è in attesa sulla porta (a
meno di modifiche) 69. Il server inizia a rispondere con dei pacchetti di tipo Dato in cui è scritto anche il
numero del blocco (ovvero il numero del pacchetto). Ogni volta che il pacchetto viene inviato dal server, il
client risponde con un pacchetto ACK che significa che il pacchetto è arrivato a destinazione e si può
proseguire con il blocco successivo. Nel caso in cui l’ACK non arrivi entro un determinato tempo, il pacchetto
viene considerato perso e viene invito nuovamente. I pacchetti di tipo Dato hanno il blocco informazione di
512 byte. Quando al client arriva un pacchetto con blocco informazioni minore di 512 byte, significa che è
l’ultimo pacchetto che esso riceverà. Nel caso in cui il client abbia mandato l’ACK di un pacchetto (non
l’ultimo) e il server tardi ad inviare il pacchetto successivo, il client invia nuovamente l’ACK.

Nella sua prima implementazione, il protocollo soffriva del problema della sindrome dell’apprendista
stregone, che comporta l’invio dello stesso pacchetto più volte ciclicamente dopo che il server è andato in
timeout e l’ACK del client ha tardato ad arrivare al client. Da quel momento si invia ogni pacchetto due volte.
Questo problema è stato risolto facendo si che il mittente del pacchetto non reinvii un pacchetto di dati in
risposta ad un ACK duplicato.

World Wide Web

Nel 1989 T. Berners-Lee trovò una soluzione per lo scambio e la diffusione di grandi quantità d’informazioni
tra le comunità di scienziati e ricercatori di tutto il mondo che avevano bisogno di trovare un modo rapido
per scambiarsi le informazioni e i risultati degli studi. Inventando il linguaggio HTML (Hyper Text Markup
Language), implementò un sistema tale che tutti i documenti elettronici potessero essere collegati tra loro
tramite il testo e/o le immagini (ipertesto), inventando di fatto il World Wide Web. Il browser consentì la
ricerca e la consultazione dei documenti elettronici presenti sul Web da parte di tutti, anche dei non esperti.
L’architettura su cui si basa il web è quella client – server:

- I client sono dispositivi connessi a Internet forniti di software di accesso al Web.


- I server sono computer che memorizzano pagine Web, siti o app. Quando un dispositivo client
desidera accedere a una pagina Web, una copia della pagina Web viene scaricata dal server sul
dispositivo client per essere visualizzata nel browser Web dell'utente.

Quello che succede quando digitiamo l’indirizzo della risorsa a cui vogliamo accedere:

- Il browser passa al server DNS il nome mnemonico che ritorna l'indirizzo IP del server su cui è
reperibile la risorsa
- Il browser instaura una connessione TCP con il server che ha la risorsa.
- Il browser invia un messaggio di richiesta HTTP (HyperText Transfer Protocol) al server, chiedendogli
di inviare una copia del sito Web al client.

Per essere individuato, ogni documento ha una sua locazione univoca, che può essere specificata come:

- URI (Uniform Resource Identifiers), una stringa che identifica una risorsa sul web e come essa può
essere acceduta
- URL (Uniform Resource Locators), sottoinsieme di URI che descrive l’indirizzo dove trovare la risorsa
- URN (Uniform Resource Names), con questo termine si suole indicare il Nome della risorsa (senza
per questo specificarne necessariamente il luogo dove trovarlo)

L’URI definisce in modo univoco una risorsa (URL + URN), cioè chi e dove, URN stabilisce chi e URL dove.

http è un protocollo di livello applicazione utilizzato per trasferire risorse all’interno della rete. Lo schema
utilizzato per il trasferimento è client-server, con i due host che però non comunicano a volte in maniera
diretta, ma potrebbe accadere che nella comunicazione si passi tramite altri dispositivi come gateway, proxy,
cache, …

I metodi utilizzati per le richieste HTTP sono:

- GET  richiesta di leggere una pagina web


- POST  richiesta di modificare una risorsa web
- PUT  richiesta di creare una nuova risorsa web
- HEAD  richiesta di leggere l’header di una pagina web
- DELETE  richiesta di cancellare una risorsa
- TRACE  richiesta di stampare la richiesta in arrivo
- CONNECT  richiesta di mantenere la connessione per un uso futuro
- OPTIONS  richiesta di specifiche caratteristiche della risorsa (ex. metodi di richiesta http che sono
previste dalla risorsa)

Ogni richiesta HTTP ha un codice di risposta che indica l’esito positivo o meno della richiesta. I codici sono:

- 1**  il server accetta di esaudire la richiesta del client


- 2**  esito positivo della richiesta con corrispondente risposta
- 3**  la richiesta viene reindirizzata
- 4**  errore nella richiesta (risorsa non accessibile o non trovata)  ERRORI CLIENT
- 5**  errore del server che non può esaudire la richiesta  ERRORI SERVER

HTTP è stato migliorato con la versione HTTP 1.1, in cui tramite una stessa connessione TCP è possibile
effettuare più domande/risposte, inoltre è stata inserita il chunk encoding, ovvero una tecnica che viene
utilizzata quando la quantità di dati della pagina web è molto grande, quindi i dati vengono divisi in porzioni
detti chunk che vengono inviati e direttamente renderizzati dal client che così ha un rendering dinamico della
pagina. Altra novità di HTTP 1.1 è quella di poter mappare più domini con lo stesso indirizzo IP. Utilizzano
meno connessioni TCP si è ridotto il ritardo delle risposte poiché ci sono molte meno handshake e il traffico
di rete risulta meno congestionato.
HTTP è un protocollo stateless, ovvero non tiene conto delle cose successe in altre connessioni precedenti
con un determinato client. Alcuni siti però utilizzano delle informazioni sulla connessione con un client
chiamati cookies, ovvero delle piccole informazioni, dei piccoli pezzi di codice, che il server invia al client, che
il browser del client può memorizzare così da utilizzarlo in connessioni future con il server. Queste piccole
informazioni permettono al server di etichettare un determinato client, conoscendo ad esempio quali sono
le sue richieste più frequenti così da presentare pubblicità su misura ecc.ecc. I cookies sono utilizzati anche
per capire se più richieste provengono dallo stesso browser, permettendo ad un utente di rimanere loggato.

Le funzioni principali dei cookies sono:

- Gestione delle sessioni di login, carrello della spesa, punteggio di giochi, cioè tutto quello che un
server deve ricordare
- Personalizzazione del sito in base all’utente che lo sta visitando
- Tracciamento e analisi della navigazione dell’utente

Vantaggi di un server stateless

- Prestazioni migliorate: un amministratore di sistema può avviare N copie di un sito Web (su N
macchine) e qualsiasi macchina può soddisfare ogni richiesta proprio perché indipendente dallo
stato.
- Affidabilità migliorata: se per qualsiasi motivo una macchina si arresta o dovesse avere qualche
problema, è possibile avviarne un'altra uguale e nessun dato verrà perso in tale processo.

Svantaggi di un server stateless

Il problema principale è quello di tenere traccia delle richieste che provengono dallo stesso client loggato.
Come fa ad esempio un server su cui ci si è loggati con una richiesta HTTP contrassegnata con X a sapere che
lo stesso utente sta accedendo al servizio con un’altra connessione HTTP Y? In un server stateless nel
momento in cui arriva la seconda connessione, la prima è stata già «dimenticata». Oppure su un sistema
replicato, la richiesta Y potrebbe essere servita da una macchina diversa rispetto alla richiesta X, non
saprebbe quindi nemmeno chi è il client.

I cookies nascono proprio per sopperire a questo problema. Una volta impostato un cookie, che viene inviato
dal server al client, in ogni successiva richiesta da quel client a quel server il cookie verrà inviato dal client,
con il server che riconoscerà il determinato client. Buona norma è quella di settare la scadenza dei cookie e
aggiornarli periodicamente.

Molto semplicemente, quando l’utente si logga con una richiesta HTTP, il server invia un cookie al client dove
sono memorizzati una copia di user e password. Quando il client eseguirà una nuova richiesta al server, il
browser imposterà il cookie e il server riconoscerà il client. Il problema principale è la sicurezza: chiunque ha
accesso al pc può vedere i cookie e quindi username e password.

Un modo più sicuro per utilizzare questo meccanismo è modificare il cookie. Al posto di username e password
in chiaro viene impostata una parola in codice, un secret che è difficilmente decifrabile dal client e quindi da
utenti che hanno accesso al computer. Il secret ha una scadenza, cioè viene riaggiornato ogni determinato
lasso di tempo. Lo username e la password sono memorizzati sul server, mentre sul client (browser)
solamente il secret.

L’utilizzo di una struttura con dei cookie con una determinata durata è quello che viene chiamato sessione.
In HTTP 1.0 non era possibile effettuare più richieste in un’unica sessione, mentre in HTTP 1.1 si possono
effettuare più risorse nella stessa sessione.
Una sessione si compone di tre fasi:

1. Il client stabilisce la connessione TCP


2. Il client invia la richiesta HTTP al server
3. Il server elabora la richiesta ed invia la risposta

Con HTTP 1.1 si continua a ciclare sui punti 2 e 3 finchè la sessione risulta essere ancora valida.

Vantaggi utilizzo di una sessione

L’utilizzo di una sessione porta a numerosi vantaggi, come ad esempio la sicurezza, con un malintenzionato
che dovrebbe rubare il secret ogni volta che cambia una nuova sessione, la possibilità di scambiare
informazioni fra richieste eseguite nella stessa sessione.

Svantaggi utilizzo di una sessione

Il server deve avere una memoria in cui salvare i dati relativi ad un client per poter effettuare il
riconoscimento delle credenziali, ma in caso di crash del server questi verranno persi, inoltre per una
struttura sicura il client dovrebbe contattare il server numerose volte per mantenere viva la sessione. Se il
client non volesse effettuare continue connessioni per tenere viva la sessione, si potrebbe impostare un
tempo più lungo di durata della sessione, ma andrebbe a discapito della sicurezza. E’ necessario quindi un
tradeoff tra usabilità e sicurezza.

Riassunto COOKIES vs SESSIONI

Cookies

- Conservano piccole quantità di dati nel client (ma possibile anche una copia su server)
- I dati conservati sul client sono visibili a chiunque provi ad accedervi (anche altri server)
- È quindi necessario cercare di non immettere dati sensibili o in chiaro

 Utilizzati quando si devono memorizzare piccole quantità di dati tra diverse richieste che non devono
essere segreti

Sessioni

- I dati sono conservati su server ed è possibile accedere ad essi attraverso una chiave randomica
memorizzata sul client
- La chiave casuale (secret) è memorizzata sul client attraverso un cookie, anche se la durata della
chiave dovrebbe essere breve

 Utilizzati quando devono essere memorizzate grandi quantità di dati tra richieste che devono essere
mantenute segrete

Esiste una terza via, IndexedDB, ma non è compatibile con tutti i browser e quindi raramente utilizzato.
IndexedDB è una API che agisce lato client e memorizza importanti quantità di dati tra cui è possibile ricercare
dati tramite indici.

L’utilizzo dei cookies è regolato da uno standard che viene utilizzato se il sito da cui provengono i cookies
offre beni e servizi o profila persone. Lo standard è un regolamento chiamato GDPR (General Data Protection
Regulation). Profilazione significa raccogliere informazioni sulle attività e sulle ricerche dell’utente per
prevederne il futuro comportamento. Questo permette una identificazione della persona, cosa che non può
essere effettuata senza che l’individuo ne sia a conoscenza. Una politica di utilizzo di cookies deve pertanto
essere modificabile a piacimento da parte dell’utente, deve risultare consultabile da parte dell’utente per
capire quali cookies sono utilizzati da terzi e come si comportano, deve risultare chiara e soprattutto l’utente
deve accettare la politica di utilizzo dei cookies.

Una politica di cookies conforme alla GDPR deve:

- • Spiegare all’ utente cosa sono e cosa fanno


- • L’uso che se ne fa sul sito
- • Mettere un link alle informative dei proprietari di cookie di terze parti che vengono utilizzati dal
sito.
- • Spiegare come si tiene traccia dell’interazione degli utenti con il sito. Esistono diversi servizi di
analisi e molti modi in cui utilizzare l'analisi, tutti con implicazioni diverse per la privacy degli utenti.
- • Il remarketing è uno strumento pubblicitario molto potente che consente di "seguire" gli utenti che
hanno lasciato il sito Web e di visualizzare i propri annunci su altri siti che visitano: esso richiede una
menzione speciale nella politica sui cookie.
- • Molti siti Web utilizzano altre tecnologie per tracciare e identificare i propri utenti, come web
beacon e pixel tag: questi non sono veri e propri cookie, ma hanno implicazioni sulla privacy e
interagiscono con i cookie.
- • Fornire l’intera lista dei cookies usati
- • Spiegare come controllare e fornire il consenso all’ uso di questi cookie (il consenso deve essere
esplicito!)

Web caching

La memorizzazione nella cache Web viene eseguita conservando le risposte HTTP e le risorse Web nella cache
allo scopo di soddisfare le richieste future da una memoria locale (solitamente veloce) anziché dai server di
origine. Possono essere applicate varie tecniche di memorizzazione nella cache Web, la più elementare delle
quali è la memorizzazione lato client, in cui un utente di un sito Web utilizza la cache HTTP incorporata nel
browser. Questa è una tecnica semplice che aiuta a ridurre la latenza nella richiesta di risorse da un sito Web
e ad alleggerire il traffico di rete. Se la risorsa richiesta è presente nella cache e non è cambiata sul sito allora
viene ritornata proprio quella risorsa, altrimenti si procede ad una nuova richiesta sul sito. Il meccanismo di
caching funziona grazie a dei token, precisamente ad un campo Etag nella risposta HTTP da parte del server.
Una volta inviata la richiesta, il server restituisce una risposta (una pagina web) e indica al client per quanto
tempo essa può essere salvata in cache (ad esempio 120 secondi). Passati questi 120 secondi si presuppone
che la pagina web sia cambiata quindi per renderizzarla il client dovrà fare una nuova richiesta. Presumendo
che questi 120 secondi siano passati, il client vuole nuovamente la stessa pagina web, ed effettua una nuova
richiesta, ma la pagina web non è cambiata. Il client si troverebbe a riscaricare gli stessi dati in cache,
rendendo il tutto un inutile spreco di tempo e connessione. E’ stato quindi inserito il campo Etag, che
contiene un fingerprint, che viene inserito nel pacchetto HTTP di risposta del server nel momento in cui esso
restituisce la pagina web. Se il client, passati i 120 secondi, volesse nuovamente la stessa pagina, effettuerà
una richiesta HTTP al server con l’Etag specificato, e il server risponderà se la pagina è cambiata o meno. Se
non è cambiata, il client utilizzerà la copia salvata in cache senza effettuare il download, altrimenti effettuerà
una nuova richiesta HTTP dove scaricherà la pagina aggiornata.
Transparent proxy

In alcuni casi un server con web caching viene utilizzato come filtro, ovvero come server di una rete tramite
cui passano tutte le richieste dei client della rete. In questo caso il server prende il nome di transparent
proxy. Poiché ogni connessione web passa per tale proxy, è possibile la memorizzazione automatica di tutti
i documenti nella cache del sistema, in cui risiederanno per diversi giorni, in modo che un successivo accesso
al documento, anche da un'altra postazione, consenta di riceverlo direttamente da lì anziché dal server
internet. Il vantaggio è ovviamente la diminuzione del traffico verso e da internet e l'incremento di velocità
di navigazione. Inoltre, con un Transparent Proxy si può anche avere una funzione di filtraggio e l'eventuale
blocco o redirezione dei pacchetti TCP/IP finalizzato a particolari obiettivi:

- proteggere i minori dal rischio di imbattersi in siti porno, incitanti alla violenza, al gioco d'azzardo e
altro (parental control)
- impedire al personale di un'azienda o di un ente di perdere tempo frequentando siti non connessi
con l'attività lavorativa
- migliorare l'utilizzo della banda disponibile

Si chiama transparent proxy perché NON MODIFICA la richiesta dell’utente, ma la elabora cercando di
esaudirla tramite la cache o la filtra.

HTTP 2.0

Nasce con l’intento di migliorare le performance e la sicurezza (TLS diventa la connessione di default). Gli
obiettivi da raggiungere erano diminuire il tempo di caricamento della pagina, e questo viene raggiunto
attraverso:

- • Compressione delle intestazioni HTTP


- • La tecnica del push lato Server
- • La pipeline delle richieste (si inviano più connessioni sulla stessa connessione senza aspettare le
risposte)
- • Soluzione al problema Head-of-line in HTTP (cioè cosa succede quando viene superato il numero
massimo di richieste parallele supportato dal browser)
- • L’uso di una singola connessione TCP per il caricamento multiplo degli oggetti di una pagina WEB.

Logicamente il nuovo protocollo deve rimanere compatibile con le versioni precedenti pur lavorando con le
nuove tecnologie presenti sul web. Per essere compatibile con le precedenti versioni, in HTTP 2.0 rimangono
invariati quasi tutti i codici e la sintassi d’alto livello, quello che cambia e come i dati vengono scambiati tra
client e server per aumentare le performance. Quindi il passaggio dei dati viene migliorato con la
compressione di alcuni di essi (le intestazioni ad esempio), permettendo l’invio multiplo degli stessi ed
evitando il problema bloccante dell’HOL. La velocità di caricamento delle pagine si migliora anche grazie alla
minification, ossia riducendo la quantità di codice necessario e usando una migliora tecnica di packing dello
stesso pur non rinunciando al corretto funzionamento (ad esempio di immagini o script). Attenzione che la
minification non è necessariamente efficiente, ma deve essere considerata di caso in caso. Inoltre, per
velocizzare ancora il caricamento di una pagina si usa in meccanismo di push lato server, che consiste
nell’inviare al client delle informazioni non ancora richieste ma che si sa serviranno al corretto funzionamento
dei dati richiesti. HTTP 2.0 si basa su un concetto di stream, ovvero una sequenza bidirezionale di frame tra
client e server che condividono uno stream id, che permette di avere una comunicazione multiplata su una
singola connessione. Infatti, un’unica connessione TCP può avere più stream. Le risposte del server possono
essere non in ordine rispetto alle richieste pervenute dal client, sarà il browser del client a rimettere in ordine
i frame per renderizzare la pagina. In HTTP 2.0 le intestazioni vengono compresse e codificate (con codifica
di Huffman) a differenza di quanto avviene in HTTP 1.1 in cui esse vengono trasmesse in chiaro. Ci sono anche
dei contro, come ad esempio l’incremento dell’uso della CPU per codificare e decodificare i dati. Se poi i dati
da trasmettere sono già pochi ed entrano in un singolo frammento TCP, allora il gioco può non valere la
candela. HTTP 2.0 ha inoltre introdotto un algoritmo di compressione dell'intestazione, HPACK, considerato
sicuro agli attacchi. HPACK utilizza tre metodi di compressione:

- • Dizionario statico - Un dizionario di 61 campi di intestazione comunemente usati, alcuni con valori
predefiniti.
- • Dizionario dinamico - È vuoto all'inizio della comunicazione ma viene riempito in seguito con i valori
scambiati. Contiene un elenco di intestazioni effettive utilizzate.
- • Codifica Huffman - Un codice Huffman statico viene utilizzato per codificare qualsiasi stringa: nome
o valore che ne riduce la dimensione. L’elenco indicizzato dei valori precedentemente trasferiti
consente di ricostruire le chiavi e i valori dell'intestazione completa.

DNS Domain Name System

All’inizio i siti erano pochi nella rete, quindi i nomi con i relativi indirizzi IP erano memorizzati in un file, ma
col crescere del tempo i siti aumentarono e di conseguenza gestire un file del genere non era più efficiente.
Nasce nel 1983 il DNS, che permette di tradurre un nome di una risorsa web nel relativo indirizzo IP così da
poter stabilire una connessione TCP o inviare pacchetti UDP. I domini DNS sono organizzati come un insieme
di rami discendenti simili alle radici di un albero. Ogni ramo è un dominio, ogni sottogruppo è un
sottodominio. Quindi lo spazio dei nomi DNS per Internet è organizzato gerarchicamente. È costituito dalla
directory principale, rappresentata da un punto (.) e da due gerarchie di domini di livello superiore, una
organizzativa e una geografica. È essenziale conoscere il nome di dominio completo Fully Qualified Domain
Name (FQDN) per riconoscere il preciso host all’interno della gerarchia DNS. Un nome di dominio completo
è il nome di dominio che specifica la sua posizione esatta nella gerarchia DNS. Specifica tutti i livelli di dominio
incluso il dominio di primo livello e la zona radice. Ex. dato un host miopc e un dominio miodominio.i, il FQDN
è miopc.miodominio.it. Il Root DNS è il livello più alto nella struttura gerarchica del sistema. Il Root Name
server per quella zona risponde alle richieste della zona e risponde ad altre richieste fornendo un elenco di
server dei nomi autorevoli per il TLD (dominio di primo livello) appropriato. I Root DNS sono molto
importanti perché sono il primo passo per la risoluzione di un nome di dominio. Questi server contengono
l'elenco globale dei domini di primo livello. I Name server di livello successivo sono proprio i TLD (Top Level
Domain). Ci sono molti TLD server nel mondo e sono organizzati principalmente in due sottocategorie
(geografici e organizzativi). Il livello successivo nella gerarchia DNS sono i domini di secondo livello. Questo è
il dominio che si trova direttamente sotto il TLD: è la parte principale del nome di dominio. I Root DNS sono
13, sparsi in tutti il mondo.

Funzionamento risoluzione nomi

Un server DNS è configurato con una lista iniziale degli indirizzi noti dei Root server. Il file contenente tale
lista viene aggiornato periodicamente in modo affidabile e autorevole. Quando un client effettua una
richiesta a quel server, esso risponde tramite la cache (se aveva già trovato la risposta da una precedente
ricerca) o eseguendo i seguenti passaggi per conto del cliente:

1. Viene eseguita una query su uno dei Root server per trovare il server autorevole per il dominio di
primo livello richiesto.

2. Viene ricevuta una risposta che punta al name server per quella risorsa.

3. Il server percorre l’albero gerarchico da destra a sinistra, passando da nameserver a nameserver,


fino al passaggio finale che restituisce l'indirizzo IP dell'host in questione.
4. Viene quindi dato in risposta l'indirizzo IP della risorsa.

Il protocollo DNS è leggero, e utilizza UDP per messaggi di dimensione minore di 512 byte e TCP per
connessioni che richiedono quantità di dati maggiore (come ad esempio il cambio di zona ovvero il cambio
di DNS Root). Il servizio agisce sulla porta 53. I primi sei campi del pacchetto sono di dimensione fissa di 16
bit, mentre i restanti sono di dimensione variabile.

Composizione pacchetto DNS

- Identificatore: campo di 16 bit utilizzato per abbinare la risposta alla relativa richiesta
- QR: 1 bit, richiesta (0) o risposta (1)
- Opcode: 4 bit, tipo richiesta
o QUERY Richiesta standard
o IQUERY Richiesta inversa (obsoleta da RFC3425)
o STATUS Query sullo stato del server
o NOTIFY Notifica aggiornamento database (RFC1996)
o UPDATE Aggiornamento dinamico del database (RFC2136)
- AA: 1 bit, risposta dal server autorevole (1) o dalla cache (0)
- TC: 1 bit, risposta troppo grande per UDP (1).
- RD: 1 bit, chiedere una risposta ricorsiva (1) o iterativa (0) •
- RA disponibile: 1 bit, il server gestisce o meno ricorsivo (1).
- Z: 3 bit, riservati ad usi futuri e per ora sempre a 0
- Rcode: 4 bit che in una risposta indicano diverse cose
- QDCOUNT Numero intero a 16 bit senza segno che specifica il numero di voci nella sezione Domande.
- ANCOUNT Numero intero a 16 bit senza segno che specifica il numero di record di risorse nella
sezione Risposta. Può essere 0, nel qual caso nel messaggio non è presente alcun record di risposta.
- NSCOUNT Numero intero a 16 bit senza segno che specifica il numero di record di risorse del server
dei nomi nella sezione Autorità. Può essere 0, nel qual caso nessun record autoritativo è presente
nel messaggio.
- ARCOUNT Numero intero a 16 bit senza segno che specifica il numero di record di risorse nella
sezione aggiuntiva. Può essere 0, nel qual caso nessun record aggiuntivo è presente nel messaggio.

Ci sono poi una serie di altri bit usati dagli aggiornamenti, come ad esempio quelli di DNSSEC

- AD Dati autenticati: 1 bit, utilizzati da DNSSEC


- Controllo CD 1 bit disabilitato, utilizzato da DNSSEC
- 4 bit Rcode, codici di errore: NOERROR, SERVFAIL, NXDOMAIN (nessun dominio di questo tipo),
RIFIUTATO ..

Query DNS

La query DNS consiste normalmente in una domanda per messaggio, ma è possibile averne un numero
diverso, definito da QDCOUNT, ed essa ha un formato definito come di seguito:

- QNAME: Il nome richiesto, il suo contenuto dipenderà dal valore di QTYPE (sotto), ad esempio, una
richiesta per un record A in genere richiederà una parte host, come ad esempio in www.ripe.net; una
query MX richiederà solo il nome di dominio di base, ad esempio ripe.net. Il nome richiesto viene
diviso in etichette rimuovendo i punti di separazione.
- QTYPE: Valore a 16 bit. I record richiesti per quella risorsa. Questi valori sono assegnati da IANA. I
seguenti sono i valori più comunemente usati: A, AAAA, MX, CNAME, PTR, SRV etc.
- QCLASS: Valore a 16 bit. La classe di record richiesta ad es. Internet, etc. Questi valori sono assegnati
da IANA.
DNS lavora su un albero gerarchico di domini. Ad ogni dominio sono assegnate un insieme di record delle
risorse. La funzione di DNS è quella di associare i nomi di dominio ai record delle risorse. Un record delle
risorse è una quintupla formata da:

- Nome di dominio  indica il dominio a cui si riferisce il record


- TTL Time to live  è un indicatore sulla stabilità di un record. Ad informazioni molto stabili viene
assegnato un tempo alto, viceversa per quelle meno stabili.
- Class  solitamente è sempre IN, cioè Internet (infatti questo campo è facoltativo)
- Type indica il tipo di record memorizzato
o SOA  Start Of Autority
o A  indirizzo IP dell’host
o MX  Mail eXchange
o TXT  testo
o NS  nome del server
o CNAME  nome canonico
o PTR  puntatore
o HINFO  informazioni sull’host
- Value  dipende dal valore di type

Quando un risolutore richiede l’utilizzo di DNS, la richiesta viene inoltrata al server DNS locale. Se il DNS locale
riesce a esaudire la richiesta, fornisce al risolutore un record autorotitativa, ovvero un record fornito
dall’autorità che lo gestisce. Nel caso in cui il server DNS locale non contenga informazioni su tale dominio,
la richiesta viene propagata ai DNS server antenati fino ad arrivare ad ottenere l’informazione desiderata,
che ripercorrerà il cammino inverso. Una volta tornata al risolutore, l’informazione verrà salvata in cache
(una risposta prelevata dalla cache non è autoritativa) per il tempo time-to-live. Naturalmente, in questo caso
non essendo un’informazione autorevole il time-to-live sarà piuttosto basso. Questa forma è chiamata
interrogazione ricorsiva, in cui ogni DNS server nel caso in cui non riesca a risolvere il nome, lo inoltra ad un
TLD. L’altra possibilità è l’interrogazione iterativa, in cui ogni volta che la richiesta DNS non può essere risolta,
la richiesta fallisce e viene però indicato come valore di risposta il nome del DNS server a cui inviare la
successiva domanda.

Server autoritativo: server in cui sono memorizzati i record di una precisa zona. Normalmente una zona
contiene più di un server autoritativo (ne contiene almeno uno), così in caso di guasti, i dati non vanno persi
completamente. Esegue una query e viene interrogato da altri server nel DNS. I dati che riceve in risposta da
altri server vengono memorizzati nella cache. I server autoritativi non sono autoritativi per i dati memorizzati
nella cache e non svolgono query ricorsive.

DNS Cache

Per DNS cache si può intendere sia la cache interna al client che quella presente su un server che di solito si
usa per diminuire i tempi di latenza dovuti ad una richiesta DNS. La pulizia regolare della cache DNS è
importante per garantire un accesso coerente alle pagine Web. Se una pagina Web ha cambiato la posizione
del proprio server Web nel tempo trascorso dalla memorizzazione nella cache del suo indirizzo IP, un browser
Web potrebbe restituire un errore HTML 404, sebbene il sito sia ancora online, la cache fornisce al browser
un indirizzo IP impreciso. In secondo luogo, una cache DNS pulita protegge la sicurezza generale della rete,
dalla cancellazione dei dati personali alla prevenzione del poisoning. Molti sistemi operativi (come MacOS e
Windows) e quasi tutti i browser Web creano automaticamente una cache DNS. La cancellazione dei record
delle risorse DNS impedisce agli agenti malintenzionati di acquisire e abusare di queste informazioni
personali.

Zone Transfer: Una Zone Transfer è il trasferimento di massa di un intero file di zona da un server a un altro.
Questo è stato spesso utilizzato tra server master e slave, ad esempio. I trasferimenti avvengo tramite
protocollo TCP in quanto sono abbastanza corposi. Il tipo di richiesta è incrementale (denotato dalla sigla
IXFR) al contrario delle normali query che sono denotate come AXFR. Zone Transfer, se non bene eseguito, è
vulnerabile ad attacchi che potrebbero rivelare molte informazioni topologiche sulla rete interna. In
particolare, se qualcuno ha intenzione di sovvertire il DNS, attraverso spoofing o poisoning, troverà delle
informazioni molto utili sulla topologia di rete.

I DNS coinvolgono diversi aspetti delle tecnologie Internet come ad esempio la mail: infatti i server mail fanno
riferimento ai DNS per trovare la destinazione di una mail (tramite il record MX). Inoltre, è possibile avere
uno scenario in cui cambiare DNS aiuta ad aumentare le prestazioni della navigazione attraverso la
diminuzione della latenza che può essere dovuta:

- • Alla location del server DNS


- • Alla scalabilità del server DNS (se non è scalabile le performance HW possono peggiorare con
impatti sulla latenza)
- • Tecniche CDN che abbassano la latenza

Il protocollo DNS è stato uno dei primi protocolli ad essere implementato in Internet e si è focalizzato sulla
semplicità e la velocità e non sulla sicurezza, infatti i dati viaggiano in chiaro, con un messaggio UDP che non
prevede sessione. Sono vulnerabili a diversi attacchi ed errori, per questo c’è bisogno di attendibilità della
fonte del messaggio.

Una nuova implementazione di DNS è stata creata nel 2005 con DNSSEC. Il protocollo DNSSEC poggia
sull'utilizzo della crittografia asimmetrica e, di conseguenza, usa uno schema che prevede l'impiego di due
chiavi, aggiunge inoltre nuovi campi al DB. DNSSEC si basa su un criptosistema a chiave pubblica, un
procedimento di crittografia asimmetrica, in cui le parti coinvolte non si scambiano alcuna chiave segreta
comune, ricorrendo invece ad una coppia di chiavi, composta da una chiava pubblica (Public key) e da una
privata (Private key). Tramite le chiavi private, tutte le informazioni DNS, i record di risorsa visti
precedentemente, vengono dotati di una firma digitale. Grazie alla chiave pubblica, invece, i client verificano
la firma e confermano così l’autenticità della sorgente dati. Ogni name server possiede una propria chiave di
zona, con la quale riesce a rendere sicuri i record delle risorse. La chiave pubblica di zona è integrata nel file
di zona come DNSKEY Resource Record, mentre con la chiave privata viene firmata ogni singola
informazione. In questo modo nascono i RRSIG Resource Records, che vengono così aggiunti ai record di
risorse di base. Questa combinazione rimane invariata, indipendentemente venga salvata nella cache o
trasmessa su un altro name server. Infine, arriva al client richiedente, che riesce a validare la firma con l’aiuto
di un risolutore DNS e di una chiave pubblica.

Architettura server

All’inizio di Internet, l’architettura della rete probabilmente prevedeva un solo server verso il quale venivano
inoltrate tutte le richieste, il quale poi tramite collegamenti ipertestuali avrebbe reindirizzato l’utente sulle
altre pagine desiderate. Questa architettura però era poco scalabile all’aumentare dei pc connessi alla rete,
che aumentando richieste avrebbero aumentato anche il traffico e avrebbero potuto causare il blocco del
server visto l’alto traffico o nel caso di un guasto, la perdita dell’intera quantità di informazioni. Si decise così
di utilizzare un’architettura multi-server, che però portava con sé dei problemi:

- Scambio di informazioni tra i server


- Quale server dovrebbe utilizzare un client?

Inoltre, la quantità di dati gestita dai server deve essere bilanciata così da rendere la struttura più efficiente.
Per un’architettura di questo tipo, i server sono tutti mappati con lo stesso IP pubblico, con il bilanciatore
che, accolta una richiesta, la indirizza al server più opportuno. Come sceglie il bilanciatore a quale server
affidare una richiesta? Le principali modalità sono 2: round robin oppure in modo randomico, cioè
fregandosene dello stato del server ma seguendo una casualità o uno schema, oppure in base a decisioni
ponderate, chiamate load-based.

Utilizzare un bilanciatore porta a dei vantaggi ma anche a degli svantaggi:

Vantaggi:

- Permette il ridimensionamento dell’hardware indipendentemente dagli indirizzi IP, cioè permette di


aggiungere più server senza dover configurare indirizzi IP visto che è uno unico per tutti i server
- È relativamente facile da mantenere

Svantaggi:

- L’apparecchiatura è costosa
- Se dovessero esserci problemi nel bilanciatore, il servizio non sarebbe ancora efficiente
- Dove si pone il bilanciatore? Deve trovarsi in una situazione favorevole a tutti gli IP che potrebbero
fare delle richieste ai server

Specialmente la locazione del bilanciatore è un serio problema. Per le connessioni TCP, avere un RTT (Round
Trip Time, cioè il tempo fa l’invio di una richiesta e la risposta dell’ACK) è molto importante, invece per lo
streaming video è importante la larghezza di banda. La posizione del bilanciatore quindi deve essere un
compromesso tra le varie esigenze.

È molto importante la velocità di connessione per un’esperienza d’uso migliore. Abbassare il tempo di
caricamento di una pagina comporta anche l’incremento di guadagno di una società.

Soluzione di Strawman

Una possibile soluzione alla lontananza dal bilanciatore è la memorizzazione sulla cache degli ISP di alcuni
dati delle pagine web, il che permetterebbe di diminuire il tempo di caricamento di una pagina. In questo
caso, la pagina verrebbe richiesta una sola volta, ed il contenuto sarebbe più vicino all’host richiedente il
servizio. Questa soluzione però NON risolve il problema. Infatti:

- Il numero di pagine di Internet cresce esponenzialmente ed è impossibile memorizzare anche solo


gran parte dei dati delle pagine web
- Alcuni dati sensibili, come dati bancari ad esempio, non possono essere memorizzati in chiaro sulla
cache fisica dell’ISP, sarebbero vulnerabili

CDN

Il CDN (Content Delivery Network) è una rete di calcolatori server che collaborano come un sistema
distribuito per la consegna di contenuti agli host che li richiedono. Funge in pratica da intermediario tra il
server che fornisce il servizio e i client host che lo richiede. Una CDN copia i dati dei server, creandone una
copia che a questo punto può essere fruibile da tutti gli host client, che non faranno richieste direttamente
al server padre del servizio, ma ai server CDN. L’80/90% del traffico internet passa tramite CDN. Le
componenti principali di una CDN sono:

- Server distribuiti  a volte sono situati direttamente negli ISP, ma si trovano sempre negli IXP (punti
di scambio tra due ISP diversi), e sono connessi da una rete ad alta velocità di connesione
- Client  un qualsiasi host che può effettuare una richiesta da qualsiasi parte nel mondo
- Glue  ovvero il collante, ovvero un qualcosa che invia la richiesta di un host ad server più vicino
che contiene la replica del servizio richiesto dall’host.
Alcuni esempi di CND sono Akamai, Edgecast, Google, Facebook, Limelight, ….

I server che compongono una CDN sono organizzati in cluster, per migliorare l’efficienza e l’affidabilità (alcuni
server potrebbero essere spenti per risparmiare energia o per failure). Ogni zona può contenere più cluster
di server. Questi cluster sono, come detto, posti sugli ISP o negli IXP, ovvero dove più ISP si scambiano tra
loro dati.

Il compito di una CDN è quello di velocizzare la fruizione di contenuti, quindi dovrà reindirizzare una richiesta
di un host al server ottimale, ovvero il server più vicino, che può esaudire la sua richiesta. Per poter
implementare la scelta del server ottimale, si utilizza la struttura di comunicazione del DNS. Infatti, i server
della CDN non sono altro che server autoritativi, che gestiscono il traffico e i domini della propria zona e
gestiscono i contenuti che copieranno dai server che forniscono servizi. Il vantaggio di utilizzare
un’infrastruttura DNS sono molteplici, infatti DNS è una struttura ampiamente utilizzata e già conosciuta, gli
URL possono rimanere gli stessi e tramite il campo TTL (Time To Live) si avranno sempre dati aggiornati e
sicuri.

Funzionamento di una CDN

Un server che offre servizi “vende” il suo sito web ad una CDN. La CDN elabora tutti i contenuti del sito e
modifica gli URL delle risorse che offre il sito. Solitamente, una pagina HTML è un file piccolo e leggero, ma
con contenuti collegati (come immagini e video) che sono pesanti. La CDN allora, dopo aver modificato gli
URL, fornisce le pagine HTML leggere direttamente dal sito come accadeva in precedenza, mentre le altre
risorse più pesanti, come immagini e video, sono copiati sui server della CDN. Quindi, nel momento in cui
l’utente richiederà una risorsa immagine o video, la richiesta dell’host non arriverà al server provider di
contenuti, ma si fermerà ai server della CDN.

Ex. Un utente vuole accedere al servizio del sito www.furryvideo.com. Si connette e tramite il DNS, nella
maniera classica, ottiene la pagina HTML del sito. Quando l'utente fa clic su uno dei collegamenti ipertestuali,
il browser chiede a DNS di cercare cdn-server.com. Il browser invia quindi una richiesta HTTP a questo
indirizzo IP, pensando di ottenere un file MPEG. Questo non avviene poiché cdn-server è solo un server HTTP
fittizio della CDN, il quale esaminerà la richiesta dell’host e cercherà all’interno della sua rete il server ottimale
che ospita tale risorsa.

CDN che utilizza Anycast

Un provider CDN che configura la sua rete su Anycast (piuttosto che una CN che utilizza Unicast come nel
caso descritto prima in cui si effettuano query ricorsive) assegna un unico indirizzo IP a tutti i suoi server che
compongono la rete. Una richiesta che viene dall’Australia, che conterrà l’IP della rete Anycast, sarà
instradata al server CDN più vicino geograficamente all’host che effettua la richiesta. La richiesta poi verrà
diradata a tutti gli altri nodi della rete tramite router e il protocollo BGP, cioè Border Gateway Protocol.
Utilizzare Anycast avvantaggia il provider CDN, infatti la gestione della rete sarà molto più semplice e la
configurazione DNS che andrà fatta sui nodi della rete sarà uguale per tutti in quanto l’indirizzo IP è unico. Lo
svantaggio principale è l’utilizzo di BGP, che potrebbe essere non ottimale. Una rete Anycast protegge anche
da un attacco di tipo DdoS.

Ottimizzare le performance

E’ difficile ottimizzare le performance della distribuzione di un servizio. Infatti ci sono molteplici fattori che
influiscono su di esso, come larghezza di banda, velocità di connessione, posizione geografica del client,
ecc.ecc. Inoltre, il percorso più corto che porta al server CDN più vicino non è sempre il migliore, in quanto il
server potrebbe avere già milioni dii richieste da eseguire. Una buona idea sarebbe quella di cachare i
contenuti, visto che la maggior parte delle richieste da parte di client sono tutte dello stesso numero ristretto
di siti web.
Servizi di streaming

L’incremento della richiesta di servizi streaming odierno ha costretto le maggiori compagnie di


telecomunicazione ad utilizzare una CDN. Le CDN principali che offrono servizi streaming multimediali sono:

- Akamai  AvidMobile, MTV


- Level 3  FOX Network
- Limelights Networks  Nintendo

Jet-Stream

StreamZilla è un servizio di streaming che non lavora più come una normale CDN, ma lavora tramite lo
streaming HTTP che offre migliori performance rispetto alle normali CDN. Jet-Stream ingloba le maggiori CDN
europee e, introducendo nuovi algoritmi di bilanciamento del carico, ha ridotto il costo dello streaming el
50% garantendo più efficienza e velocità nella fruizione dei contenuti.

Multi CDN

Ogni server che propone servizi si “vende” a più CDN, in modo tale che i suoi servizi siano fruibili al 100%. Se
infatti un server si vendesse ad una solo CDN, un anno a tale rete porterebbe il sito ad essere irraggiungibile.
In una soluzione multi-CDN invece, gli stessi dati sono salvati su più CDN Server, e l’host gli otterrà al server
della CDN più vicina. Inoltre, avendo più server di più CDN diverse che salvano gli stessi contenuti, il carico si
distribuisce in maniera migliore.

Web Browser

Sono i software maggiormente utilizzati al giorno d’oggi. Ci sono 5 browser principali:

- Chrome
- Internet Explorer
- Firefox
- Safari
- Opera

In ordine di tempo, il primo browser fu il WorldWideWeb (da non confondere con il World Wide Web) che
fu creato da Tim Berners Lee, che fu rinominato poi in Nexus per non confonderlo appunto con il WWW. Poi
fu la volta di Lynx, che era un browser testuale senza la possibilità di rappresentare contenuti multimediali.
Mosaic che permetteva di rappresentare i contenuti multimediali. Si passò poi a Netscape Navigator, fino ad
arrivare al 1995 con la nascita di Internet Explorer. Opera nasce nel 1996, mentre Safari di Apple nel 2003.
Poi è la volta di Mozilla nel 2004. Nel 2008 nasce Google Chrome. Microsoft lancia poi nel 2015 Microsoft
Edge per combattere l’egemonia di Chrome.

La funzione di un browser è quella di ottenere una risorsa web da un server e visualizzarla nella pagina. Ogni
risorsa è identificata da un URI (Uniform Resource Identifier). Non esiste uno standard di architettura nella
costruzione di un browser. Ad esempio, Chrome ha i processi browser che si occupano di ottenere la risorsa
che poi collaborano con gli altri processi, come ad esempio i plugin, i processi di rendering, i processi di utility
e i processi della scheda video per la visualizzazione del contenuto, mentre altri browser potrebbero adottare
diverse strutture.
Componenti di un browser (Chrome)

Browser  è la parte principale del browser. Include la arra di ricerca, i pulsanti di indietro-avanti-ricarica.
Inoltre, gestisce quelle che sono le operazioni importanti invisibili, ovvero inoltrare richieste HTTP e ottenere
le risposte dai server.

Renderer  Controlla l’intera pagina del browser dove viene riprodotto il contenuto di una pagina. È in grado
di analizzare HTML, XML e CSS. È un processo a singolo thread. L’operazione chiave che esegue questo
modulo è quella di parsing HTML. Il parsing crea dei nodi che organizza in un albero di contenuti. Stessa cosa
avviene con i file CSS che vengono elaborati da un parser CSS che crea a sua volta un albero di rendering. A
questo punto i due alberi vengono visitati e grazie alla GPU i nodi vengono tradotti in elementi grafici. Alcuni
dei moduli di rendering più famosi sono Blink, Gecko, EdgeHTML, Trident e WebKit.

Plugin  Software addizionali che vengono installati per precisi scopi (ex. Adobe Flash Player)

GPU  Gestisce i processi della GPU in maniera autonoma rispetto agli altri processi. I processi sono
molteplici in quanto le richieste di visualizzare contenuti provengono da diverse app nella stessa superficie
(lo schermo).

Sicurezza e memoria (Chrome)

Un browser può sandboxare alcuni processi (eseguirli in un ambiente separato, senza che vi sia
comunicazione con le altre features) se ritenuti potenzialmente dannosi per garantire la sicurezza. Il
problema principale di un browser è quello della gestione della memoria. Infatti ogni volta che una pagina
viene aperta, vengono creati dei nuovi processi che gestiranno il parsing e il rendering dei contenuti. Questa
tecnica crea problemi al crescere dei nuovi processi aperti, infatti i processi a differenza dei thread non
possono condividere memoria. Per risolvere questo problema, Chrome limita il numero di processi che
potranno essere creati. In questi anni, l’architettura di Chrome sta lentamente cambiando in maniera
invisibile per far si che sia un browser sempre più efficiente. L’idea generale è:

- Quando Chrome può utilizzare il 100% della CPU, divide i servizi in più processi per ottenere più
stabilità e più efficienza.
- Quando Chrome ha un limite di risorse, i servizi sono concentrati in un unico processo per salvare
memoria.

Ricerca di una risorsa su Chrome

La barra di ricerca di Chrome permette di ricercare un URL o semplicemente un sito tramite le sue
informazioni. Colui che si occupa della gestione della barra di ricerca è il servizio UI che riconosce se la ricerca
è un URL o una semplice richiesta testuale e prende le opportune decisioni. Una volta che l’utente a digitato
un URL o una stringa, la UI invia una richiesta alla rete per ottenere la risorsa, utilizzando protocolli come
DNS e stabilendo una connessione TLS (che sui browser è indicato con il lucchetto). Una volta che i dati della
risposta iniziano ad arrivare, il browser controlla i primi campi dei pacchetti, specialmente il campo Content-
Type, che indica che versione di MIME è stata utilizzata dal server per poter visualizzarne i dati. A volte il
campo Content-Type può anche essere vuoto. In base a ciò che è memorizzato nella parte payload dei
pacchetti della risposta (la parte payload è quella in cui effettivamente risiedono i dati), e in base al valore
del campo Content-Type, ogni browser visualizza il contenuto sullo schermo in maniera diversa (Chrome lo
fa diversamente da Internet Explorer, diversamente da Opera, ecc.ecc.).
Una funzione importante dei browser è quella di proteggere dai dati che derivano dai siti conosciuti come
“dannevoli”. Nel caso in cui un browser si accorgesse di questo, mostra un messaggio di allerta all’utente
utilizzatore, che potrà dunque decidere o meno di visualizzare il contenuto. Chrome prevede inoltre un
software chimato CORB (Cross Origin Read Blocking) che riconosce quelle che sono risorse maligne e le
blocca prima che esse vengano renderizzate dal motore di rendering. Queste risorse quindi non verranno
visualizzate nella pagina del browser.

Una volta che il sito è stato etichettato come sicuro ed è stata instaurata una connessione tramite TLS, l’UI
cerca un processo di rendering libero e inizia ad inviargli i dati provenienti dalla rete che dovranno essere
visualizzati. Una problematica potrebbe sorgere nel caso in cui le richieste del browser alla rete impieghino
troppo tempo ad arrivare, con l’utente che quindi si ritrova ad avere un caricamento della pagina molto lento.
Per cercare di risolvere questo problema, il thread della UI cerca di trovare un processo di rendering o ne
avvia uno nuovo in maniera parallela alle richieste della rete, così l’utente avrà l’idea di un caricamento più
veloce. Nel momento in cui si dispone dei dati e del processo di rendering, viene scambiato un IPC (Inter-
Process Communication) nel quale viene indicato che è giunto il momento del processo di rendering, che
rende il controllo e inizia a rappresentare la pagina.

Problemi di sicurezza dei browser

Exploit Zero-Day

Sono degli attacchi che si basano sulle vulnerabilità di sicurezza dei sistemi. Vengono chiamati Zero-Day
perché sono passati 0 giorni da quando l’utente è a conoscenza della vulnerabilità, ovvero questa
vulnerabilità NON VIENE rapportata allo sviluppatore, ma viene invece condivisa tra vari attackers che
cercano così di appropriarsi di dati sensibili prima che lo sviluppatore riesca a divulgare una patch di sicurezza.
Nel momento in cui lo sviluppatore viene a conoscenza della vulnerabilità, inizia una gara per cercare di
tappare l’errore prima che gli attackers riescano ad appropriarsi di dati sensibili.

Clickjacking

È una tecnica che cerca di ingannare l’utente che utilizza il browser cercando di:

- fargli inserire dati sensibili come conti bancari, carte di credito ecc.ecc.
- prendere il controllo del computer da remoto facendolo schiacciare in appositi bottoni

Cliccando su dei bottoni, vengono eseguite parti di codice di cui l’utente utilizzatore non è a conoscenza.
Questo attacco punta proprio sull’invisibilità del codice dietro al click di un bottone, che viene modificato per
ricondurre l’utente in trappole in cui esso inconsciamente fornisce dati sensibili o fornisce una porta ingresso
per l’accesso da remoto al computer.

Cross-Site Scripting (XSS)

ll Cross-site Scripting (XSS) è una vulnerabilità dei siti Web dinamici, i quali non impiegano un sufficiente
controllo dell’input dei form, in cui l’attaccante utilizza del codice malevolo al fine di raccogliere, manipolare
e reindirizzare informazioni riservate di utenti ignari che navigano e utilizzano i servizi pubblici o privati
disponibili su Internet. Le tipologie principali di attacchi XSS sono due:

- XSS riflesso  chiamato anche non persistente. È possibile sfruttarle quando i dati forniti dall'utente
(di solito tramite form HTML) sono usati immediatamente dallo script lato server per costruire le
pagine risultanti senza controllare la correttezza della richiesta. Un attacco non persistente è
tipicamente inviato via mail o da un sito web neutrale. L'esca è un URL dall'aspetto innocente, che
punta a un sito attendibile ma che contiene un vettore XSS. Se il sito affidabile è vulnerabile a quel
vettore, il click sul link può causare l'esecuzione di script iniettato nel browser della vittima.
- XSS salvato  chiamato anche persistente. È una variante più devastante di XSS: si verifica quando i
dati forniti dall'attaccante vengono salvati sul server, e quindi visualizzati in modo permanente sulle
pagine normalmente fornite agli utenti durante la normale navigazione, senza aver eliminato dai
messaggi visualizzati dagli altri utenti la formattazione HTML. I siti ideali di propagazione sono di
questo attacco sono i social network e i siti di incontro. Alcuni utenti infatti inseriscono il codice
dannoso nei propri profili e nel momento in cui un utente dovesse interagire tramite un messaggio
o altro, i dati vengono rubati e memorizzati.

La risoluzione di questo tipo di problemi è disattivare l’accettazione di uno script da input dell’utente,
che non potrà quindi inserire codice in un campo di testo. Tuttavia, non è una soluzione abbastanza forte
in quanto ancora tutt’oggi questi attacchi si verificano.

Cross-Site reference forgery

Abbreviato anche come XSRF o CSRF, dove RF stanno appunto per reference forgery, è una vulnerabilità
a cui sono esposti i siti web dinamici quando sono progettati per ricevere richieste da un client senza
meccanismi per controllare se la richiesta sia stata inviata intenzionalmente oppure no. Diversamente
dal cross-site scripting (XSS), che sfrutta la fiducia di un utente in un particolare sito, il CSRF sfrutta la
fiducia di un sito nel browser di un utente.

Esempio  Un attacker fa in modo che un utente vittima invii involontariamente una richiesta HTTP dal
suo browser al sistema web dove è attualmente autenticato. Il sistema, vulnerabile al CSRF, avendo la
certezza che la richiesta provenga dall'utente già precedentemente autenticato la esegue senza sapere
che in realtà dietro la richiesta si cela un'azione pensata dall'attaccante come ad esempio un
trasferimento di fondi, un acquisto di un oggetto, una richiesta di dati o qualsiasi altra funzione offerta
dall'applicazione vulnerabile.

Cookies

Anche i cookies visti precedentemente possono essere malevoli. Non sono né spyware né virus, però
sono segnalati a volte da alcuni antivirus come dannosi, in quanto possono tracciare i movimenti sul web
di un utente.

Scelta di un browser: è molto importante la sicurezza. Chrome è il migliore mentre Internet Explorer è il
peggiore, in quanto ha vulnerabilità che possono essere tranquillamente utilizzate per scopi malevoli. Ad
una conferenza di hacker, sono stati testati i sistemi di sicurezza dei 4 browser più importanti:

- Chrome  nessun exploit, molto sicuro


- Mozilla  1 exploit
- Safari  3.5 exploit
- Edge  5 exploit

MotionMark: strumento utilizzato per misurare l’abilità del browser di riuscire a visualizzare pagine
complesse con molti contenuti dinamici ad un determinato frame rate.

Speedometer: strumento utilizzato per misurare la reattività del browser.

Compatibilità con device portatili: per utilizzare le stesse impostazioni di Chrome su più dispositivi, basta
essere loggati sul proprio account Gmail in tutti i dispositivi, anche Firefox supporta questa possibilità
registrando un account comune su tutti i dispositivi e attivando la funzione di sincronizzazione. Anche
Edge supporta questa feature, che però risulta non essere completamente eseguibile da tutti visto che
Edge può essere installato solo da dispositivi Windows 10, mentre chi magari ha un Mac non può
usufruirne. Chi invece ha un iPhone e un device con Windows 10 riesce ad utilizzare la sincronizzazione.
03. Livello trasporto:

o 03.01 Descrizione dei servizi di trasporto.


o 03.02 Elementi dei protocolli di trasporto.
o 03.03 Il protocollo di trasporto Internet senza connessione: UDP.
o 03.04 Il protocollo di trasporto Internet orientato alla connessione: TCP.

L’utente che utilizza i servizi che vengono svolti in questo livello è lo strato direttamente superiore, ovvero lo
strato applicazione appena visto. A sua volta, lo strato di trasporto utilizza i servizi messi a disposizione dallo
stato di rete. Il codice dei servizi offerti è interamente contenuto nei device degli utenti host.
Lo strato di trasporto fornisce trasporto dati affidabile ed efficiente dalla fonte alla destinazione,
indipendentemente dalla rete o dalle reti fisiche utilizzate.

Tutto ciò che viene utilizzato per lo scambio di dati, cioè software e hardware che permettono questo
meccanismo, prende il nome di transport entity. I componenti dell’entità di trasporto possono essere
installati su kernel dell’host, su librerie esterne, ecc.ecc.

L’uso del livello di trasporto permette di avere un servizio di trasporto affidabile anche se la comunicazione
avviene in una rete non affidabile. Infatti, la struttura e i meccanismi del livello di trasporto sono molto simili
a quella della struttura di rete, però il codice del livello di trasporto è scritto interamente sugli host dei due
utenti, mentre il codice di livello di rete è scritto sui router. Inoltre, se la comunicazione avviene tramite una
rete in cui i pacchetti sono persi o danneggiati, il livello di trasporto permette di ritrasmettere i pacchetti
mancanti, rendendo così una comunicazione affidabile.

Primitive del servizio di trasporto

Permettono ad un utente di interagire con il livello di trasporto tramite delle interfacce apposite  l’utente
utilizza i servizi dello strato applicazione, i quali comunicano tramite le primitive con lo strato di traposrto.

Le primitive principali sono 5:

- LISTEN  il server si mette in ascolto


- CONNECT  il client tenta di connettersi al server
- SEND  l’host invia i dati
- RECEIVE  l’host si mette in attesa di ricezione dei pacchetti
- DISCONNECT  la connessione viene rilasciata

Il nome dei pacchetti scambiati durante l’esecuzione delle primitive è TPDU (Transfer Protocol Data Unit),
chiamati anche più comunemente segmenti. Il server si mette in LISTEN. Bloccandosi. Nel momento in cui un
client si vuol mettere in contatto con il server, esegue una CONNECT, che invia una CONNECTION REQUEST
al server, e si blocca. A questo punto, l’entità di trasporto del server controlla lo stato del server, e se esso è
bloccato su una LISTEN, invia al client una CONNECTION ACCEPTED. A questo punto, la connessione è
stabilita, con il server ed il client che si sono sbloccati dopo che quest’ultimo ha ricevuto una CONNECTION
ACCEPTED. Ora i dati possono essere scambiati utilizzando la SEND e la RECEIVE. Una volta finita la
trasmissione di dati, la connessione può essere rilasciata con una DISCONNECT. La connessione può essere:

- Asimmetrica  uno dei host invia la DISCONNECT, l’altro host appena ricevuta rilascia la connessione
- Simmetrica  i due host devono entrambi invocare da soli la DISCONNECT per poter rilasciare la
connessione
Berkeley sockets

Sono le primitive alla base del protocollo TCP. Esse sono:

- SOCKET  crea un endpoint di comunicazione


- BIND  associa un indirizzo locale con un socket
- LISTEN  l’host si mette in attesa di connessioni
- ACCEPT  l’host 2 accetta di stabilire una connessione
- CONNECT  l’host 1 cerca di instaurare una connessione
- SEND  invia dati sul canale di connessione
- RECEIVE  riceve dati dal canale di connessione
- CLOSE  chiude la connessione

Le prime 4 primitive sono eseguite in quell’ordine dal server. Si crea prima un endpoint con SOCKET e poi
tramite BIND lo si connette ad un indirizzo. Una volta eseguite queste due operazioni, un client si può
connettere al server. Si esegue poi una LISTEN che prepara uno spazio di memoria per gestire la coda delle
richieste. La LISTEN in questo caso non è bloccante. Per bloccarsi in attesa di connessione, il server esegue
una ACCEPT.

Il client invece deve anch’esso creare un endpoint con la primitiva SOCKET, però non deve fare BIND perché
non è importante con quale indirizzo di connette al server. Il client esegue poi la CONNECT che è una primitiva
bloccante, in attesa di una connessione. Una volta stabilita la connessione, si potrà scambiare dati con SEND
e RECEIVE, oppure con READ e WRITE, come standard Unix. Il rilascio della connessione è simmetrico, quindi
tutti e due gli host (client e server) dovranno invocare la CLOSE.

Elementi del livello di trasporto

- Indirizzamento
- Instaurazione della connessione
- Rilascio della connessione
- Controllo di flusso e buffering
- Multiplexing

Indirizzamento

L’indirizzamento è molto importante per permettere ad un processo di rimanere in attesa di richieste di


connessione. Ogni processo rimane in attesa di connessioni su una porta, che vengono generalmente
chiamate TSAP (Transport Service Access Point). Nel caso in cui un processo sull’host 1 voglia comunicare
con un processo server sull’host 2 che è in ascolto sulla TSAP 1522, il problema principale è uno: come fa il
client a capire in che TSAP è in attesa il processo server di host 2 che esso richiede? Le opzioni sono due:

- Il processo server è in ascolto sulla stessa porta da svariato tempo e ormai tutta la rete ne è a
conoscenza
- Si ricorre ad un portmapper, un processo attivo su una porta ben conosciuta, che associa una
richiesta di un client che specifica il servizio del quale vuole usufruire la relativa TSAP dell’host server
nel quale il processo è in ascolto. Inizialmente il client si connette al portmapper, il quale poi
risponderà con la TSAP del processo server richiesto, il client poi si disconnetterà dal portmapper e
poi instaurerà una nuova connessione col processo server, visto che ora ne conosce la TSAP in cui
esso è in ascolto.
Alcuni processi sono utilizzati raramente in un server, quindi è inutile che essi rimangano sempre attivi su
una TSAP, occupandola. Si ricorre quindi a quello che viene chiamato protocollo di inizio connessione. In
questo tipo di protocollo, tutti i processi che non sono attivi sulle porte ben conosciute, sono gestiti da un
processo server che funge da proxy. Questo processo server proxy gestisce un insieme di porte. Nel momento
in cui un client cerca di eseguire una connessione su una porta controllata dal processo proxy, esso elabora
la richiesta e genera il processo che esegue il servizio richiesto. Il client quindi si connette prima con il
processo proxy, e poi sempre utilizzando la stessa connessione, con il processo server che aveva richiesto,
con il processo proxy che a questo punto si disinteressa della connessione e torna in ascolto sulle altre porte.

Instaurazione della connessione

Instaurare una connessione è un’operazione apparentemente facile, ma che in realtà è molto difficile da
attuare in maniera ottimale. Infatti i pacchetti duplicati o con un ritardo possono portare a diversi problemi.
Una possibile soluzione è quella di utilizzare degli indirizzi di trasporto usa e getta, in modo tale he una volta
rilasciata la connessione, l’indirizzo è scartato e nel caso in cui arrivassero pacchetti con ritardo, essi
verrebbero scartati senza creare nessun danno, tuttavia sarebbe difficile instaurare la prima connessione tra
client e server. Un’altra possibilità sarebbe quella di associare ad ogni connessione un identificatore univoco,
e una volta rilasciata la connessione, le due entità di trasporto aggiornano una tabella dove sono memorizzati
gli identificatori delle vecchie connessioni, aggiungendoci la connessione corrente. Ogni volta che arriva una
nuova richiesta con nuovi pacchetti, essi contengono l’identificatore della connessione, l’entità di trasporto
analizzerà la sua tabella e una volta stabilito se l’identificativo appartiene ad una vecchia connessione o
meno, il pacchetto verrà scartato o meno. Purtroppo questa struttura impone che le due entità di trasporto
memorizzino grandi quantità di dati, e nel caso in cui una entità di trasporto perda dei dati o subisca guasti,
sarebbe nuovamente vulnerabile.

Una soluzione buona invece è quella di limitare la durata della validità di un pacchetto, tramite:

- il numero di router per cui essi sono passati: si inizializza il numero di hop ad un determinato numero,
che decresce ogni volta che un pacchetto passa per un router. Quando il numero è esaurito il
pacchetto “muore”.
- creando una rete con delle restrizioni: permette di prevenire loop dei pacchetti e la congestione di
un percorso, ma è di difficile implementazione vista la vastità della rete Internet.
- tenendo conto dei tempi di creazione di ciascun pacchetto: un pacchetto con una data di creazione
molto datata viene scartato.

Una buona soluzione è stata fornita da Tomlinson nel 1975. Il cuore del metodo è di etichettare i segmenti
con numeri di sequenza che non verranno riutilizzati all'interno di T sec. Il periodo, T, e la frequenza dei
pacchetti al secondo determinano la dimensione dei numeri di sequenza. In questo modo, solo un pacchetto
con un determinato numero di sequenza può essere in sospeso in un dato momento. I duplicati di questo
pacchetto possono comunque verificarsi e devono essere scartati dalla destinazione. Tuttavia, è possibile che
un duplicato ritardato di un vecchio pacchetto possa battere un nuovo pacchetto con lo stesso numero di
sequenza ed essere accettato dalla destinazione al suo posto. Per aggirare il problema di una macchina che
perde tutta la memoria in seguito ad un guasto, una possibilità è quella di richiedere all’entità di trasporto di
essere inattivo per T secondi dopo un ripristino. Il periodo di inattività lascerà che tutti i vecchi segmenti
muoiano, in modo che il mittente possa ricominciare con qualsiasi numero di sequenza. Tuttavia, in
un’internetwork complesso, T può essere grande, quindi questa strategia è poco efficiente.

Tomlinson propose di dotare ogni host con un orologio. Gli orologi dei diversi host non devono essere
sincronizzati. Si presuppone che ogni orologio assuma la forma di contatore binario che si incrementa a
intervalli uniformi. Inoltre, il numero di bit nel contatore deve essere uguale o superiore al numero di bit nei
numeri di sequenza. Infine, si presuppone che l'orologio continui l'esecuzione anche se l'host si arresta.

Quando viene impostata una connessione, i k bit di ordine minore dell'orologio vengono utilizzati come
numero di sequenza iniziale. Pertanto, ogni connessione inizia a numerare i propri segmenti con un numero
di sequenza iniziale diverso. Lo spazio di sequenza deve essere così grande che, in base ai numeri di sequenza
temporale, i vecchi segmenti con lo stesso numero di sequenza sono ormai lontani. Se un segmento viene
inviato con un numero di sequenza in un’area proibita, potrebbe essere ritardato e rappresentare un
pacchetto diverso con lo stesso numero di sequenza che verrà emesso in un secondo momento. Ad esempio,
se l'host si arresta in modo anomalo e si riavvia al 70esimo secondo, utilizzerà i numeri di sequenza iniziali in
base all'orologio per riprendere dopo il guasto: l’host non inizia con un numero di sequenza inferiore nell'area
non consentita. Una volta che le due entità si sono messe d’accordo sui numeri della sequenza dei pacchetti,
inizia lo scambio di dati, che non deve avvenire con troppi pacchetti inviati velocemente o troppo lentamente,
che potrebbe portare ad entrare nella zona proibita facendo così scartare pacchetti. Ogni pacchetto deve
essere inviato ad ogni colpo di clock degli orologi degli host, con l’intervallo di clock che deve assumere un
valore ragionevole, ne troppo piccolo ne troppo grande (rallenterebbe la trasmissione dei dati).

Three Way Handshake

È stata introdotta proprio da Tomlinson nel 1975. Funzionamento  Host 1 sceglie un numero di sequenza
x, e invia un segmento CONNECTION REQUEST contenente x all'host 2. Host 2 risponde con un segmento ACK
che riconosce x e annuncia il proprio numero di sequenza iniziale y. Infine, l'host 1 riconosce la scelta dell'host
2 di un numero di sequenza iniziale nel primo segmento di dati che invia.

Rilascio della connessione

Può essere:

- simmetrico  entrambi gli host comunicanti devono mettersi d’accordo sulla release della
connessione
- asimmetrico  appena uno dei due host rilascia la connessione, la comunicazione termina  causa
perdita di dati

Il rilascio della connessione simmetrico è più affidabile, ma non sempre funziona e porta a dei problemi come
il problema dei due generali, ovvero il problema che indica che le due parti potrebbero non essere entrambe
d’accordo di chiudere la connessione. Una soluzione a questo problema potrebbe essere un three way
handshake, con un timeout, che porta a 4 possibili scenari:

- la connessione si chiude senza problemi e senza perdita di pacchetti


- si perde l’ultimo ACK, ma la connessione viene comunque chiusa per via della scadenza del timer che
viene impostato al momento dell’invio di una DISCONNECTION REQUEST
- viene persa la richiesta di disconnessione del secondo host, quindi il primo host andrà in timeout, e
ricomincerà la procedura reinviando una nuova richiesta di disconnessione
- viene persa la richiesta di disconnessione del secondo host e la successiva nuova richiesta di
disconnessione del primo host. Entrambi gli host vanno in timeout e la connessione viene rilasciata.

Questa struttura non funziona nel caso in cui fallisca N volte l’invio della richiesta di disconnessione del primo
host. Il primo host rilascia la connessione senza che il secondo host ne sia a conoscenza, lasciando così un
processo attivo mentre l’altro è stato chiuso. Un processo che è rimasto attivo senza averne un altro con cui
comunicare, chiamato processo a metà, può essere terminato inserendo una regola in base alla quale se non
si ricevono pacchetti per un determinato periodo di tempo, rilascia la connessione.
Controllo del flusso e buffering

I due problemi principali da prevenire sono l’invio dei pacchetti e il controllo di flusso all’interno del canale
di comunicazione. Ciascun host infatti, potrebbe avere più comunicazioni aperte su più TSAP
contemporaneamente, ciascuna della quale assegnata ad un thread diverso. Nel caso in cui l’entità di
trasporto di un host abbia diverse comunicazioni aperte contemporaneamente, il suo buffer potrebbe
esaurirsi, con i pacchetti che arrivano in ingresso che vengono scartati vista l’impossibilità di essere
memorizzati. Questo non crea danni, poiché l’host client continuerà ad inviare pacchetti finchè essi non
vengano accettati. Questo comporta però che anche l’host client deve avere un buffer, dove memorizzare
tutti i pacchetti inviati nella finestra che non hanno ancora ricevuto un ACK, nel caso in cui essi debbano
essere ritrasmessi. Mentre il mittente deve sempre avere un buffer, il destinatario può implementare il
buffering in due modi diversi, in base alla velocità e all’efficienza della rete:

- se la rete non è veloce ed inefficiente, è meglio non allocare nessun buffer. Nel momento in cui un
pacchetto arriva, viene allocato un piccolo buffer dinamicamente. Tuttavia, dalla parte del mittente
è comunque buona norma allocare un buffer per i pacchetti, nel caso in cui un pacchetto da lui inviato
venga scartato.
- se la rete è veloce ed efficiente, è meglio allocare un buffer della dimensione della finestra, in modo
tale che il mittente possa inviare pacchetti alla massima velocità, con tali pacchetti che verranno
memorizzati nel buffer.

Il problema riguarda la dimensione del buffer. Nel caso in cui i pacchetti siano tutti della stessa misura, la
dimensione del buffer sarebbe quella di un pacchetto, con un pacchetto ogni buffer. Nel caso in cui la
dimensione dei pacchetti sia molto variabile invece, è difficile stabilire una dimensione, in quanto se essa sia
pari al pacchetto di dimensioni maggiori, si avrebbe un notevole spreco di memoria, nel caso invece fosse
pari alla dimensione del pacchetto minore, per ogni pacchetto di dimensioni maggiori si dovrebbero allocare
più buffer, rendendo questo meccanismo però alquanto complicato. Un buon approccio sarebbe quello di
utilizzare una variabile che va ad impostare la dimensione del buffer, che permetterebbe di ottimizzare
l’utilizzo della memoria, a patto di avere però una gestione della memoria di buffer più complicata. Un’altra
soluzione sarebbe quella di affidare un unico grande buffer per connessione, con i nuovi pacchetti che si
andranno a memorizzare nel buffer, riempendolo mano a mano. In questo caso l’uso della memoria e la
gestione sarebbe molto semplice ed efficiente, a patto che le connessioni utilizzino una buona quantità di
dati, infatti nel caso in cui utilizzassero pochi dati, si perderebbe parecchio spazio.

Il buffer deve comunque essere aggiustato dinamicamente durante la connessione. Inizialmente, il mittente
A richiede una connessione in cui saranno necessari 8 buffer al destinatario B, che però ne garantisce
solamente 4. A inizia a mandare pacchetti fino a quando non arriverà a 0, che vorrà dire che i dati sono stato
inviati tutti e la connessione può essere rilasciata. Questo meccanismo è chiamato a finestra, ovvero il
numero di messaggi che possono essere inviati è modificato dinamicamente in base alla finestra. Questo
meccanismo è tuttavia vulnerabile ad una situazione di deadlock, alla quale si arriva nel momento in cui il
pacchetto del destinatario B in cui si indica al mittente A che gli è stato assegnato ulteriore buffer, viene
perso. In questo caso A rimane bloccato in attesa di una finestra disponibile da parte di B, mentre B questa
finestra in realtà l’ha mandata, ma il pacchetto è stato perso. Per prevenire questa situazione, ogni host
periodicamente manda dei pacchetti di controllo contenenti un ACK e lo stato del buffer all’altro, in modo
tale che la situazione di deadlock prima o poi termini.

Con il passare degli anni, la memoria di buffer non è più un problema, visto l’esigui costo di memoria, quindi
non è più necessario gestire l’allocazione dinamica del buffer. Tuttavia, un ulteriore problema è la velocità
massima della rete, ovvero il numero di pacchetti che possono essere inviati senza che il canale di
connessione sia congestionato. Infatti, non avendo limiti di buffer, la finestra può assumere grandi porzioni.
Tuttavia è importante tenere conto della quantità di pacchetti che può trasmettere effettivamente la rete.
Una soluzione a questo problema è modificare la dimensione della finestra in base alle condizioni della rete,
soluzione utilizzata da Belnes nel 1975 e tutt’ora utilizzata in maniera leggermente modificata da TCP.

Multiplexing

È una tecnica utilizzata in due diverse situazioni:

- un host ha un solo indirizzo di rete tramite il quale devono passare più connessioni, quindi nel
momento in cui arriva un pacchetto, il pacchetto deve essere instradato al giusto processo nello
strato di trasporto  multiplexing
- un host ha più indirizzi di rete, e un servizio di trasporto vuole connettersi ad un altro host. Quale
indirizzo di rete dovrebbe usare?  inverse multiplexing

Un esempio di inverse multiplexing è il protocollo SCTP (Stream Control Transmission Protocol), che
permette di effettuare una connessione tramite più indirizzi di rete (TCP ne utilizza solo uno).

Crash Recovery

Nel caso in cui, ad esempio, un host stia inviando ad un altro host un file di testo utilizzando il protocollo
stop-and-wait (un pacchetto alla volta senza buffering) e il destinatario subisca un guasto, come fa il
destinatario, dopo il riavvio, a sapere a quale punto del file era arrivato visto che le sue tabelle dell’entità di
trasporto sono nuovamente azzerate? Il destinatario manda un messaggio in broadcast a tutti gli host che
erano connessi avvertendoli del guasto e chiedendo di essere aggiornato sullo stato precedente al crash della
connessione. Ora gli host potranno avere due diverse situazioni:

- Il mittente aveva inviato un pacchetto che non è mai arrivato all’host che ha crashato. Stato chiamato
S1.
- Il mittente stava per inviare un pacchetto ma il destinatario è crashato, quindi non ci sono pacchetti
sparsi per la rete. Stato chiamato S0.

Si decide quindi di ritrasmettere il pacchetto più recente solo nel caso in cui ci si trovi nello stato S1. Questa
tecnica però potrebbe portare ad un problema: se infatti il server riceve il pacchetto, invia subito un ACK al
mittente e poi elabora il pacchetto, ma se il crash accade prima di aver elaborato il pacchetto, l’ACK è stato
inviato, quindi il mittente crede di essere in S0 (in quanto non ci sono pacchetti in giro per la rete), ma in
realtà il pacchetto non è stato elaborato, e dovrebbe essere ritrasmesso, cosa che non succederà in quanto
il mittente si trova in S0. Nel caso in cui si invertissero le due operazioni, ovvero prima si elabora il pacchetto
e poi si manda l’ACK, si duplicherebbero pacchetti nel caso in cui il crash arrivasse dopo l’elaborazione del
pacchetto ma prima dell’invio dell’ACK.

Qualsiasi strada si scelga, ci saranno comunque problemi di protocollo. Un server può essere configurato
come:

- Prima scrittura sul buffer del pacchetto e poi invio dell’ACK


- Prima invio dell’ACK e poi scrittura sul buffer

Un client invece può:

- Ripetere l’invio dell’ultimo pacchetto in qualsiasi caso


- Non ripetere l’invio di nessun pacchetto
- Ripetere l’invio dell’ultimo pacchetto solo se si trova in S0
- Ripetere l’invio dell’ultimo pacchetto solo se si trova in S1

Nessuna combinazione di configurazione è abbastanza forte da prevenire dalla perdita o dalla duplicazione
di pacchetti.
Protocolli UDP e TCP

UDP (User Datagram Protocol)

È il protocollo più semplice in quanto non è orientato alla connessione. Permette di inviare pacchetti tramite
l’indirizzo IP dell’host ricevente senza instaurare la connessione. L’header di un datagramma UDP è di soli 8
byte (quello di TCP è di 20 byte), il resto del pacchetto è payload. Nell’header vengono specificate le due
porte TSAP dei due host mittente e destinatario, la lunghezza del datagramma (che include anche l’header,
quindi andrà da un minimo di 8 byte ad un massimo di 65k bytes) e un controllo degli errori tramite checksum.
Utilizzare il protocollo UDP serve per donare alle connessioni, oltre al normale indirizzo IP, anche le due porte
TSAP del mittente e del destinatario, che tramite multiplexing e inverse multiplexing condurranno ad uno
specifico servizio.

UDP utilizza una tabella di controllo chiamata UDP Control-Block Table, nella quale si tiene traccia dei
processi attivi e della relativa porta. I dati che sono memorizzati in questa tabella sono:

- ID del processo
- Stato del processo (FREE o IN-USE)
- Porta del processo
- Numero della coda dove bufferizzare i pacchetti

Questa tabella è molto utile nel processo di inverted-multiplexing.

UDP è diffusamente utilizzato in applicazioni real time o in servizi di streaming multimediale. Questi ultimi
servizi di streaming, utilizzano il protocollo RTP (Real-time Transfer Protocol). Un flusso di dati RTP viene
convertito in un pacchetto RTP tramite opportune librerie, e mandato al socket creato da UDP, viene poi
incapsulato in un pacchetto UDP, che a sua volta verrà incapsulato con un pacchetto IP, così fino ad arrivare
al primo livello, dove il pacchetto viene spedito fisicamente tramite mezzi fisici (o wireless). RTP è un
protocollo di trasporto che opera nel livello applicazione.

Ogni pacchetto RTP è numerato, cioè n, n+1, …. Se un pacchetto quindi viene perso (cosa possibile e probabile
dato che non vi è una connessione), si chiede al livello applicazione. Si potrebbe oppure procedere simulando
il pacchetto mancante in base agli altri pacchetti arrivati in precedenza. E’ importante notare che un
pacchetto RTP è dotato di timestamp, in modo tale che se arrivano molti pacchetti dal server ed essi sono
memorizzati in un buffer, potranno essere rappresentati nel giusto ordine cronologico. L’header del
pacchetto RTP è di 32 bit ed è composto da:

- Versione  attualmente la versione raggiunta è la 2


- Padding
- X  indica se è stata aggiunta un’estensione all’header
- CC  indica il numero di fonti contribuenti
- M  campo specifico che viene compilato in base all’applicazione utilizzata, e può indicaare il
numero del frame di inizio del video o dell’audio
- Payload type  tipo di informazione trasportata (audio, video)
- Sequence number  utilizzato per identificare il pacchetto ed eventuali perdite di pacchetti
- Timestamp  utilizzato per riordinare i pacchetti e riprodurli in ordine o sincronizzarli con altri
processi
- Synchronization source ientifier  quale processo ha codificato i pacchetti, viene utilizzato per il
multiplexing e l’inverse multiplexing
- Contributing system identifier  correlato al campo CC, indica le fonti contribuenti
RTCP (Real-Time Transfer Control Protocol) è un’estensione del protocollo RTP che viene utilizzato in quanto
permette di controllare i pacchetti, per effettuare diciamo delle statistiche. Non trasporta nessun dato, ma
viene solo utilizzato puramente per verificare problemi di sincronizzazione, jitter, ecc.ecc. RTP e RTCP sono
utilizzati insieme e agiscono su due porte diverse. RTCP non è efficace quando un servizio video per esempio,
è diviso in due canali, uno video e uno audio.

Ritardi e jitter

Nel caso in cui un pacchetto venga inviato dal mittente nel giusto momento, ma tardi ad arrivare al ricevitore,
viene creato un piccolo ritardo chiamato jitter. La soluzione a questo problema è bufferizzare i pacchetti,
prima che essi vengano riprodotti. Non verranno quindi riprodotti in diretta i pacchetti RTP, ma con un
leggerissimo ritardo poco visibile all’utente. Questa soluzione potrebbe però non bastare. Infatti, una volta
riprodotti gli elementi nel buffer, il pacchetto subito successivo potrebbe tardare, con il ricevitore che sarebe
bloccato. Le soluzioni sono due:

- Il pacchetto viene ignorato.


- Il ricevitore si blocca in attesa di avere il nuovo pacchetto.

Questo problema può essere risolto aumentando il ritardo di inizio video (playback point), soluzione che
però non è ottimale per le videoconferenze online ad esempio. Perciò si tende ad utilizzare come tempo di
ritardo di inizio stream il valore medio dei jitter dei pacchetti. Le applicazioni devono essere in grado di poter
verificare il playback point in maniera dinamica, visti i possibili cambiamenti di velocità o di congestione a cui
può essere sottoposta la rete. Questo cambiamento però, se non fatto correttamente, potrebbe essere
visibile e disturbante per l’utente. Per evitare questo problema, negli stream audio, come playbak point si
utilizza uno tra i valori degli talkspurts, ovvero un segmento dove lo stream riproduce audio tra due intervalli
silenziosi.

Naturalmente, l’unica soluzione veramente valida sarebbe quella di eliminare il jitter utilizzando una qualità
di rete migliore.

TCP

A differenza di UDP è un protocollo orientato alla connessione, che viene instaurata tramite il three way
handshake. Un protocollo orientato alla connessione è più affidabile, visto che tutti i segmenti corretti
vengono seguiti dal relativo ACK. È utilizzato per fornire una connessione affidabile in una internetwork, che
di solito invece risulta inaffidabile viste le varie differenze di velocità tra le varie subnetwork collegate,
gestendo in modo efficiente la velocità di invio dei pacchetti senza congestionare la rete, controllo di errori,
ecc.ecc.

Un servizio TCP è implementato tramite due endpoint, chiamati come visto prima socket. Un socket è
l’unione di un indirizzo IP dell’host e una porta, che in TCP viene chiamata appunto porta al posto di TSAP.
Lo stesso socket può essere utilizzato per più connessioni. Solitamente, per i socket, la porta utilizzata è una
porta > 1024, in quanto le prime 1024 sono porte ben conosciute, ovvero porte su cui è in ascolto un servizio
riconosciuto dallo IANA. Alcuni esempi di porte ben conosciute sono:

- FTP  20,21
- SSH  22
- SMTP  Protocollo mail, 25
- HTTP  80
- 110  POP3
- 143  IMAP
- 443  HTTPS
- 543  RTSP (Controller media player)
- 631  IPP (Stampanti condivise)

Queste porte solitamente sono attive fin dall’avvio del pc, le restanti porte (> 1024), solitamente sono gestite
da un processo (che su Unix è chiamato inetd), che rimane in ascolto su insieme di porte (specificate in un
file), e nel caso in cui avvenga un tentativo di connessione su una porta gestita dal processo, il processo crea
un deamon che gestirà la particolare richiesta.

Le connessioni TCP sono full-duplex, cioè il traffico all’interno della stessa connessione può andare sia
dall’host A all’host B e viceversa. Una connessione TCP inoltre è uno stream di byte, non di messaggi a
differenza di UDP: ovvero, se il mittente vuole inviare 100 byte di informazioni, il destinatario riceve i 100
byte, ma quest’ultimo non potrà identificare in che modo le informazioni sono state inviate, se in 5 pacchetti
da 20 byte, in 2 da 50 byte, in 4 da 35 byte e così via. Ovvero, saranno semplicemente byte, non dovranno
essere elaborati in quanto sono catalogati solamente come bytes.

Quando un processo applicazione invia a servizio TCP dei dati da inviare, il servizio TCP può inviare
immediatamente i dati o bufferizzarli ed inviarli in un secondo momento. L’invio immediato di messaggi
avviene tramite la primitiva PUSH, che invia subito i dati senza farli bufferizzare. È inoltre possibile etichettare
dei dati come URGENT, tramite un apposito flag. Se un servizio riceve un dato con il flag URGENT settato,
interrompe qualsiasi cosa stia facendo e si concentra sul dato ricevuto.

Segmento TCP

Ogni segmento TCP è formato da 20 byte di header più la parte di payload. La dimensione di un segmento,
sempre quindi maggiore di 20 byte, è decisa dall’entità di trasporto TCP, che potrebbe inviare più dati nello
stesso pacchetto, oppure dividere un unico insieme di dati in più pacchetti, senza mai però superare la MTU
(Maximum Transfer Unit). La MTU non è una misura standard, ma potrebbe cambiare da rete a rete. Per la
trasmissione viene utilizzata una finestra a dimensione variabile. Il mittente invia un segmento ed avvia un
timer, nel caso in cui allo scadere di tale timer, l’ACK relativo al segmento non è stato ancora ricevuto,
ritrasmette il pacchetto.

Header di un segmento TCP

Un segmento TCP inizia sempre con l’header di 20 byte. L’header può essere seguito o meno dalla prte di
payload, infatti un segmento senza payload può essere utilizzato in una connessione per scambiare
informazioni sulla connessione. L’header è composto da:

- Porta mittente
- Porta destinatario
- Sequence number  insieme al campo successivo permettono di etichettare il pacchetto in modo
univoco. Nel caso in cui la dimensione massima del segmento sia 1000 byte, e il mittente abbia
500000 vyte da inviare, verranno creato 500 segmenti e numerati: il primo da 0 a 999, il secondo da
1000 a 1999, e così via…
- Acknowledgement  permette di identificare a quale pacchetto il ricevente è arrivato ad elaborare.
Questo campo è un numero che cresce ogni segmento inviato.
- Header length  indica quante parole di 32 bit sono contenuti nell’header del segmento
- URG  flag che se a 1 indica un segmento urgente
- ACK  settato a 1 indica che il numero di ACK è valido
- PSH  push
- RST  indica che la connessione è stata rifiutata o il segmento non è valido
- SYN  utilizzato durante il set up della connessione
- FIN  utilizzato per concludere la connessione
- Window size  utilizzato per il controllo del flusso di dati, ovvero quanto un host è disposto ad
accettare
- Checksum  utilizzato per il controllo degli errori
- Options  utilizzato per specificare l’MSS (Maximum Segment Size) (solitamente è 556 byte) o il
fattore di ridimensionamento della window size in base alla velocità della connessione della rete. E’
importante che la window size sia adeguata, altrimenti in reti con un alto ritardo o con una larghezza
di banda molto grande, potrebbe portare ad inconvenienti spiacevoli, come ad esempio un host che
rimane per molto tempo inattivo.

Set up di una connessione TCP

Si utilizza la three way handshake. Il server attende passivamente una connessione in entrata, eseguendo le
primitive LISTEN e ACCEPT. Il client invece, prova ad eseguire una connessione eseguendo un CONNECT,
inviando un segmento TCP specificando l’indirizzo IP e la porta al quale vuole connettersi, il flag SYN=1,
l’ACK=0 e il numero iniziale di SEQ=x, e si mette in attesa di una risposta del server. Quando il pacchetto
arriva all’host con il determinato indirizzo IP, l’entità di trasporto TCP controlla se vi è nessun servizio attivo
sulla porta specificata. Se non c’è nessun servizio, invia al mittente un segmento TCP non RST=1, altrimenti il
servizio attivo nella porta è presente, e la connessione può essere comunque accettava o rifiutata. Nel caso
in cui sia accettata, viene inviato un segmento TCP al mittente dove viene inviato il numero di sequenza del
server SEQ=y e l’ACK successivo a quello del numero di sequenza del client inviato nella richiesta di
connessione, ovvero ACK = x+1, e il flag SYN sempre a 1. A questo punto il client invia un nuovo messaggio al
server con il suo nuovo numero di sequenza, cioè SEQ=x+1, e ACK=y+1 ed inizia effettivamente la
connessione. Nel caso in cui tra due host A e B si cerchi di instaurare una connessione in maniera simultanea
tra di essi, la connessione stabilita è comunque una sola. Il fatto che un servizio attivo in una porta debba
ricordarsi il numero di sequenza dei segmenti TCP, potrebbe portare un utente malintenzionato a
bombardare di richieste l’host sulla determinata porta con segmenti TCP con SYN=1, senza mai poi
effettivamente completare la connessione. Questo tipo di attacco è chiamato SYN flood, e può essere risolto
con l’utilizzo di alcuni SYN cookie. Al posto di ricordare il proprio sequence number, il servizio attivo genera
un numero di sequenza criptato e lo spedisce insieme al pacchetto all’host mittente, il quale lo rispedirà
nuovamente aumentato di 1 all’host server, che in questo modo non deve ricordarsi nulla.

Rilascio di una connessione TCP

Entrambi gli host della comunicazione inviano un segmento TCP con FIN=1. Una volta che da entrambi le parti
il segmento con FIN=1 è stato elaborato ed è stato trasmesso il relativo ACK, la connessione viene rilasciata
e resa nuovamente disponibile per altre connessioni. Servono quindi normalmente 4 pacchetti: 2 per ogni
direzione, uno contenente FIN=1 e uno con ACK=1. Il numero potrebbe scendere a 3 nel caso in cui il primo
ACK e il secondo FIN vengano spediti nello stesso segmento. Per evitare il problema dei due generali visto
precedentemente, si utilizzano i timer.

Primitive utilizzate nel protocollo TCP

STATO DESCRIZIONE
CLOSED Nessuna connessione attiva
LISTEN Il server è in attesa di una connessione
SYN RCVD Una richiesta di connessione è arrivata, si aspetta
l’ACK
SYN SENT L’applicazione prova ad aprire una connessione
ESTABLISHED Connessioe stabilita, si può procedere con l’invio
normale del flusso di dati
FIN WAIT 1 L’host mittente avvisa che ha finito di inviare dati e
vuole chiudere la connessione
FIN WAIT 2 L’altro host è d’accordo sul rilascio della
connessione
TIME WAIT Attesa che tutti i pacchetti esauriscano il loro TTL e
muoiano
CLOSING Entrambi gli host hanno tentato di chiudere la
connessione nello stesso momento
CLOSE WAIT L’altro host ha iniziato la chiusura della connessione
LAST ACK Attesa che tutti i pacchetti esauriscano il loro TTL e
muoiano

Tutti questi stati danno origine ad una macchina a stati finiti che in base alla primitiva chiamata (LISTEN,
SEND, CLOSE, CONNECT) cambia di stato.

Gestione della window size

Quando il buffer ell’host server è esaurito, l’host server deve comunicarlo all’host client tramite un pacchetto
TCP. In questo pacchetto TCP, la window size sarà 0, e ciò indica al client che non potrà inviare pacchetti dato
che il server non è disposto ad accettarli. Ci sono però due eccezioni:

- I segmenti con URG=1 possono essere inviati


- I segmenti di 1 byte possono essere inviati, tali segmenti sono utilizzati per evitare la condizione di
deadlock e vengono chiamati window probe.

È importante inoltre sfruttare al massimo la dimensione della finestra. Nel caso pessimo infatti, potrebbero
essere inviati un solo byte alla volta, ma per questo byte, tra i vari segmenti utilizzati per l’invio e l’ACK,
sarebbero usati qualcosa come 160 byte. Nel caso in cui la larghezza di banda sia scarsa, non è una buona
soluzione, infatti si utilizzerebbe molto spesso la rete, che verrebbe poi quasi sicuramente congestionata. Per
risolvere questa situazione, viene implementata la tecnica del delayed acknowledgement, che consiste nel
ritardare i messaggi di ACK e della modifica della window size di 500ms, in modo tale che in questo tempo
vengano ricevuti ulteriori segmenti, e serva così un unico aggiornamento per tutti i pacchetti che vengono
ricevuti in quei 500 ms.

Questo però risolve solamente il problema lato server, mentre invece il client continua a lavorare in maniera
poco efficiente. Viene quindi implementato l’algoritmo di Nagle, secondo il quale una volta che arriva il primo
dato nel TCP stream, viene inviato solo un segmento contenente tale dato, e nel tempo che intercorre tra
l’invio di tale dato e la ricezione dell’ACK relativa al segmento, tutti gli altri dati che arrivano al TCP stream
vengono bufferizzati. Una volta arrivato l’ACK, i dati bufferizzati vengono inviati, e si riparte col meccanismo,
fino a quando il nuovo ACK non viene ricevuto, i dati vengono bufferizzati e così via. Nel caso in cui si riempa
il buffer raggiungendo una quantità di dati maggiore am MSS, viene inviato nuovamente un solo segmento.

Silly Window Syndrom

È un problema di gestione della window size che si verifica quando il mittente riceve dall’applicazione grandi
blocchi di dati da inviare, mentre il destinatario (server) riesce ad elaborare un solo byte alla volta. Una
possibile soluzione è quella di Clarke, secondo la quale il destinatario fa figurare di non avere il buffer libero
fino a quando non ha effettivamente ha disposizione quel buffer (solitamente almeno la metà del MSS o
l’intero MSS). La soluzione ideale a questo problema è l’algoritmo di Nagle e la soluzione di Clarke.
Gestione della congestione

Se il livello di rete gestisce la congestione tramite la gestione delle code che si formano sui router
semplicemente scartando dei pacchetti, TCP svolge un ruolo fondamentale. Infatti, ciascun endpoint della
comunicazione, cerca di avere un feedback dalla rete, in base al quale calcolerà la velocità con cui inviare
segmenti nel canale di comunicazione, per prevenire così un ulteriore aumento di congestione nella rete. Per
fare questo, TCP mantiene aperta una congestion window con dimensione pari al numero di byte che il
mittente potrebbe inviare in qualsiasi momento nella rete. La frequenza con cui i pacchetti verranno inviati
sarà la dimensione della finestra diviso l’RTT (Round Trip Time) della connessione. Questa congestion window
è una finestra aggiuntiva alla classica finestra di controllo della comunicazione, nella quale viene
effettivamente specificata la quantità di dati che il destinatario può accettare. La quantità di dati che il
mittente può inviare è uguale alla quantità minore specificata nelle due finestre (congestione e flusso dei
dati). In questo modo, se il destinatario comunica al mittente che può accettare 64Kb, ma la congestion
window indica che il massimo carico di byte che può essere inviato è 32Kb, il mittente invierà 32Kb. Questa
metodologia è molto utile quando si lavora su reti separate collegate da un router. L’host A ha a disposizione
una velocità di 1Gbit/s, mentre l’host B di 1Mbit/s. Se l’host A invia i pacchetti alla massima velocità (1Gbit/s),
si formerà una coda molto corposa sul router, facendo quindi tardare anche l’ACK. Nel caso in cui l’host A
invece invii i segmenti alla massima velocità consentita dalla rete più lenta (1Mbit/s), l’ACK arriverà più
velocemente, in quanto non si formeranno code sul router e non c’è il rischio che i pacchetti vengano scartati.
Questo rate di trasmissione dei pacchetti è chiamato ACK clock.

Per regolare il rate con il quale i segmenti vengono inviati nel canale di connessione, si usa un algoritmo
chiamato slow start. Questo algoritmo consiste nell’inizializzare la congestion window con un valore molto
piccolo. Si inizia inviando un solo byte. Nel caso in cui questo segmento di un solo byte venga riconosciuto e
ritorni al mittente (inviato dal destinatario) un ACK prima che scada il retrasmission-timer, la dimensione
della congestion window viene duplicata, cioè al successivo invio verranno trasmessi 2 byte, poi 4 e così via.
Nell’inviare i segmenti si utilizza l’ACK clock. L’algoritmo slow start fa crescere esponenzialmente il numero
di segmenti inviati, il che potrebbe portare a creare code nei router con il relativo scarto di alcuni pacchetti.
Per risolvere questo problema viene implementato l’algoritmo slow start threshold, che funge da soglia in
controllo dello slow start. Il threshold è inizializzato ad un valore arbitrariamente alto (solitamente al MSS),
così da non limitare la connessione rispetto alla finestra del flusso di dati. La congestion windows utilizza
l’algoritmo slow start. Nel momento in cui un pacchetto viene perso, oppure la congestion window supera il
threshold, il valore del threshold viene settato a metà della dimensione della congestion window, e l’intero
processo ricomincia (cioè la dimensione della congestion window è settata nuovamente ad 1).

Un ulteriore approccio oltre a quello di slow start è quello AIMD (Addictive Increase Multiplicative
Decrease), in base alla quale la dimensione della windows size (cioè del segmento) viene aumentata di 1 MSS
alla volta, e nel momento in cui arriva un timeout, la dimensione della congestion windows viene dimezzata,
e si riparte dal valore della nuova congestion window.

Un ulteriore passo in avanti è stato fatto con l’avvento di TCP Tahoe. In questo caso, si utilizza sempre slow
start, ma nel momento in cui la dimensione della congestion windows risulta essere pari a quella della soglia
(threshold) e vengono ricevuti correttamente i vari ACK dei segmenti inviati, la dimensione della congestion
window inizia ad aumentare di un MSS alla volta (AIMD), fino a quando si otterranno condizioni di timeout
ed il processo ricomincerà di nuovo, con la dimensione della congestion window che ripartirà da 1 byte, e
con la threshold che verrà sempre settata a metà della dimensione della congestion window, ma questa volta
risulterà essere più alta rispetto all’implementazione precedente (in cui una volta superata la threshold, essa
assumeva semplicemente il valore della metà della dimensione della congestion window).

TCP Reno invece, si comporta come TCP Tahoe, ma nel momento in cui arriva un ACK triplicato, invece di
ripartire da segmenti di dimensione di un byte e utilizzare slow start, ricomincia con una dimensione del
segmento pari al valore della nuova threshold, che come al solito prende il valore di metà dimensione della
congestion window, ma al posto di utilizzare slow start questa volta si ha un incremento additivo, ovvero di
un MSS alla volta (AIMD).

Ricapitolando:

- Quando la dimensione della congestion window è al di sotto della threshold, la sua dimensione cresce
esponenzialmente (slow start)
- Quando la dimensione della congestion window è al di sopra della threshold, la sua dimensione
cresce linearmente (AIMD)
- Quando si ottiene un timeout, la threshold viene settata a metà della dimensione della finestra e la
dimensione della congestion window viene portata ad 1 byte
- Quando si ottiene un ACK triplicato, la threshold viene settata a metà della dimensione della
congestion window e la dimensione della congestion window viene portata al valore della threshold.

Solitamente, il throughput (velocità con il quale vengono spediti i pacchetti) è pari alla dimensione ella
finestra diviso il RTT (W / RTT). Nel momento in cui viene perso il primo pacchetto, la dimensione della
finestra viene dimezzata, e il throughput diventa pari alla dimensione della finestra diviso 2 volte il RTT (WSize
/ 2RTT). Solitamente, il throughput medio è di 75 WSize/RTT.

TCP Fairness

L’obiettivo di TCP è quello di riuscire a garantire la stessa efficienza di servizio a tutte le connessioni. Nel caso
in cui in uno stesso canale di comunicazione siano presenti N sessioni, TCP deve far in modo che ciascuna
sessione riesca ad avere la stessa larghezza di banda, ovvero 1/N. Per far si che ciò avvenga sono utilizzate
quelle che vengono chiamate control law, ovvero leggi di controllo, in base alle quali si modifica il throughput
cercando di arrivare al punto ottimale, ovvero quello in cui tutta la banda disponibile è utilizzata ed è divisa
equamente tra le varie sessioni. Per far si che ciò avvenga, si usano leggi come AIMD, o AIAD, o MIMD, le
quali convergono al punto ottimale. L’unica combinazione che non converge al punto ottimale è l MIAD,
ovvero dove il throughput viene aumentato proporzionalmente e viene invece diminuito (dopo aver ricevuto
un segnale di congestione dalla rete) in maniera additiva.

TCP Timer Management

TCP per il suo funzionamento utilizza diversi timer, tra cui il più importante è l’RTO (Retransmission
TimeOut). Nel momento in cui un segmento viene inviato, viene settato un timer, il quale viene stoppato nel
momento in cui arriva l’ACK relativo al segmento. Se invece l’ACK non arriva, il segmento viene ritrasmesso
e il timer viene riazzerato. Quanto deve durare però il timer? Nel caso in cui il timer venga settato ad un
piccolo intervallo, potrebbe essere necessario ritrasmettere il pacchetto inutilmente, in quanto il pacchetto
potrebbe essere effettivamente arrivato al destinatario, il quale ha mandato il relativo ACK he è stato perso
o ha rallentato durante il percorso di ritorno, intasando così inutilmente la rete. Se si dovesse invece scegliere
un intervallo molto lungo, raramente dovrebbero essere rinviati dei pacchetti, però questo porterebbe ad un
grosso calo di velocità del servizio. La soluzione è quella di utilizzare un algoritmo dinamico, che si basa sulle
performance della rete. TCP utilizza l’algoritmo di Jacobson, che funziona nel seguente modo: per ogni
connessione, TCP mantiene una variabile SRTT (Smoothed Round Trip Time), che mantiene una stima del
tempo di viaggio di un segmento; quando il segmento viene inviato, un timer viene fatto partire, che misura
il tempo che impiega il mittente a ricevere l’ACK. Nel caso in cui l’ACK non arrivi, l’RTO ritrasmette il pacchetto
normalmente. Se invece l’ACK arriva prima che scada il timer RTO, il secondo timer, che ha misurato il RTT
effettivo, verrà utilizzato per modificare il valore di SRTT, con la formula: SRTT =αSRTT + (1 −α)R, dove α è
una costante di smoothing solitamente pari a 7/8. Inoltre, viene introdotta un’altra variabile, chiamata
RTTVAR (Round Trip Time Variation), la cui misura è pari a RTTVAR =βRTTVAR + (1 −β)|SRTT − R|, dove β è
un’altra costante solitamente pari a ¾ . A questo punto, conoscendo le due variabili SRTT e RTTVAR, l’RTO
può essere calcolato come RTO = SRTT + 4 × RTTVAR. La moltiplicazione per 4 è una costante che è stata
scelta perché può essere effettuata con un singolo shift.

Un problema con questa implementazione potrebbe essere l’ACK che torna dopo il timeout. Infatti, una volta
inviato il segmento, se l’ACK non arriva prima che scada l’RTO, esso viene rinviato. Nel momento in cui però
arriva un ACK, si pone un problema: a quale pacchetto è riferito? Al primo inviato o al secondo inviato? Per
risolvere questo problema viene utilizzato, viene utilizzato l’algoritmo di Karn, in base al quale l’RTO di ogni
nuovo segmento ritrasmesso viene duplicato, e le stime delle due variabili SRTT e RTTVAR non saranno
modificate sulla base dei segmenti ritrasmessi.

Un altro timer utilizzato da TCP è il timer persistente, che viene utilizzato per prevenire la deadlock. Infatti,
nel caso l’host B voglia ridimensionare la finestra, permettendo all’host A di inviare segmenti, se il pacchetto
dell’host B viene perso, l’host A rimane in attesa generando deadlock. Quando il timer persistente scade,
viene inviato un segmento probe per interrogare l’host B, che risponderà. Questo meccanismo permette di
far rimanere sempre attiva la connessione.

Un altro timer utilizzato è il keepalive timer. Quando una connessione è idle per molto tempo, questo timer
scade e vengono inviati pacchetti di controllo per cercare di capire se l’altro host è ancora connesso al canale
di comunicazione. Se il segmento di controllo non viene corrisposto da un ACK, la connessione termina.

L’ultimo timer usato è il TIME WAIT, che viene utilizzato per far si che alla fine di una connessione, tutti i
pacchetti relativi alla connessione muoiano e non rimangano inutilmente in giro per la rete.

Problemi di performance

Supponiamo di avere a disposizione un canale di 1 Gbit/s, e il ricevente che dichiara una finestra di 64 Kb. Il
mittente invia i 64 Kb, e si mette in attesa dei relativi ACK. Nel caso in cui il RTT sia 20 msec, gli ACK tornano
al mittente dopo 40 msec, in cui il mittente non sa cosa fare, ma rimane in attesa dell’update della window
size. Questa è la classica situazione quando il canale di comunicazione permette di inviare grandi quantità di
dati, ma il protocollo in uso è obsoleto. Una soluzione è quella della bandwidth-delay product, secondo la
quale la bandwidth sarà uguale al prodotto del RTT per l capacità del canale di comunicazione in bit per
secondi. Ad esempio, avendo come RTT 40msec, e come capacità 1 GBit/s, la bandwidth-delay product sarà
di 40 milioni di bit al secondo, con il quale si sfrutterà a pieno la capacità del canale di comunicazione. La
dimensione della finestra del ricevente dovrebbe essere uguale almeno alla bandwidth delay product.

Il problema è il rapporto tra la crescita esponenziale delle capacità delle reti e delle CPU. Infatti, con l’avvento
delle reti Gigabit, è possibile trasferire 1 miliardo di bit al secondo in un canale di comunicazione, tuttavia
questa banda non potrà essere sfruttata, poiché le CPU dei computer non sono in grado di elaborare ed
inviare quella quantità di dati e quindi di sfruttare a pieno le potenzialità delle reti. Infatti le CPU devono
elaborare i segmenti di ogni servizio di protocollo e generare una risposta. Per aumentare la velocità si
dovrebbero rendere più leggeri i protocolli, così da elaborarli più velocemente e poter sfruttare al meglio le
velocità messe a disposizione della rete.

Problemi di sicurezza di TCP

- Syn Flooding  permette di bloccare il server. Si inviano numerosi pacchetti con SUìYN=1 senza mai
inviare poi un successivo ACK. Così facendo si riempie il buffer del server che quindi non accetta più
nessuna connessione.
- Session Hijack  serve per dirottare una sessione. Infatti, intercettando un segmento TCP, si riescono
ad ottenere informazioni come indirizzo IP e porta del servizio, e si iniettano nella comunicazione dei
segmenti TCP con un numero di sequenza diverso, così facendo il server accetta i pacchetti e
incrementa il numero di sequenza che si aspetta dal client. Il client continua ad inviare dei nuovi
pacchetti che però sono etichettati come “vecchi” dal server (il numero di sequenza è stato alterato
dal pacchetto malevolo iniettato nella connessione) e quindi vengono scartati, facendo così perdere
la connessione.

- Session reset  il malintenzionato invia nella connessione un segmento TCP nella comunicazione con
RST = 1, cioè un segmento che richiede il reset della connessione. I due host non sono a conoscenza
che il pacchetto sia stati iniettato dall’esterno e lo trattano normalmente, e così facendo la
connessione non viene mai portata a termine poiché viene continuamente resettata.
04. Livello rete:

o 04.01 Problemi architetturali dello strato rete.


o 04.02 Lo strato rete in Internet.
o 04.03 Collegamento tra reti.
o 04.04 Algoritmi di routing.
o 04.05 Algoritmi per il controllo della congestione.

Il livello di rete si occupa di:

- Trasferire i pacchetti dal mittente al destinatario tramite i router


- Sceglie il percorso migliore per l’invio dei pacchetti
- Gestisce i problemi che sorgono quando il mittente ed il destinatario appartengono a reti diverse
- Deve conoscere la topologia dei router che creano la rete

Il livello di rete ha inoltre dei problemi strutturali:

- Store-and-Forward Packet Switching


- Servizi forniti al livello di trasporto
- Implementazione dei servizi non orientati alla connessione
- Implementazione dei servizi orientati alla connessione
- Comparazione dei circuiti virtuali con le sottoreti di datagrammi

Store-and-Forward Packet Switching

È la tecnica utilizzata per propagare un pacchetto all’interno della rete tra i vari router che la compongono.
Un pacchetto di un host arriva in un router (passando per una LAN o tramite una connessione punto-punto
diretta), il quale lo memorizza e lo inoltra al router più vicino. Il pacchetto rimane comunque salvato sul primo
router fin quando il secondo router non ne esegue la checksum e lo inoltra completamente al terzo router e
così via fino ad arrivare al destinatario.

Implementazione dei servizi non orientati alla connessione

I pacchetti di un servizio non orientati alla connessione sono chiamati datagrammi, e la rete è chiamata rete
datagramma. Ogni datagramma viene trasmesso nel livello di rete indipendentemente, uno alla volta, e ogni
datagramma viene trattato singolarmente ed instradato. (Nel caso in cui il servizio sia orientato alla
connessione, la rete viene chiamata rete a circuito virtuale, in quanto il path composto da tutti i router viene
stabilito prima che venga spedito il primo pacchetto).

Se un host A deve inviare un messaggio all’host B, ma la dimensione del messaggio è troppo grande, il
messaggio viene diviso in più pacchetti, i datagrammi, che verranno poi iniettati nella rete. Ogni pacchetto
per giungere a destinazione può percorrere un path diverso. Ogni router ha memorizzata al suo interno una
tabella. Ogni entry di questa tabella contiene una coppia di valori A | B dove A è il router di destinazione,
mentre B è il router più vicino collegato al router corrente che permette di raggiungere la destinazione A.
Tuttavia, non necessariamente tutti i datagrammi vengono inviati nello stesso path, questo porta al fatto che
le tabelle di routing all’interno di ogni router possano cambiare. L’algoritmo che gestisce le tabelle e che
decide il path tramite cui far transitare il pacchetto è chiamato algoritmo di routing.
Implementazione dei servizi non orientati alla connessione

In questo caso la rete viene chiamata rete a circuito virtuale, in quanto il path composto da tutti i router
viene stabilito prima che venga spedito il primo pacchetto. Questo comporta che la scelta di quale router
scegliere per instradare il pacchetto venga effettuata una sola volta, a differenza dei servizi non orientati alla
connessione in cui la scelta deve essere effettuata ad ogni router. Una volta stabilito il path, vengono anche
inizializzate le tabelle di routing. Ciascun pacchetto porterà con se un identificatore tramite il quale il router
capirà a quale circuito virtuale appartiene, in modo tale che il router farà velocemente ad instradarlo. Una
volta che la comunicazione è finita, anche il circuito virtuale viene cancellato. Ogni router avrà due tabelle,
una in cui identifica da quale host proviene il pacchetto, e l’altra contiene il prossimo router del circuito
virtuale al quale instradare il pacchetto. Nel caso in cui nella tabella degli ingressi di un router vi siano più
entry che hanno come router mittente lo stesso router, occorre svolgere quella che viene chiamata tecnica
del label switching, ovvero se il router A fa parte di due circuiti virtuali, e entrambi i circuiti virtuali
comprendono C come prossimo router, A andrà ad etichettare in maniera diversa le due connessione,
etichettandole ad esempio con 1 e 2, in modo tale che i pacchetti che arrivano al router C, benchè arrivino
tutti dal router A possano essere distinti e instradati nel giusto circuito virtuale anche da C.

Nel caso in cui un router di un circuito virtuale vada in failure, tutti i circuiti virtuali che passano per quel
router saranno terminati, mentre per quanto riguarda le reti datagramma, se cade un router si potranno
utilizzare altri percorsi per arrivare al destinatario. Le reti di circuito virtuali offrono una qualità di servizio
migliore e il controllo della congestione, a patto di poter allocare abbastanza risorse sui router.

Algoritmi di routing

Si dividono in:

- Algoritmi statici  non cambiano mai, le regole di routing vengono scaricate e installate sui vari
router.
- Algoritmi dinamici  si adattano in base alle caratteristiche della rete. Si differenziano l’uno dall’altro
in base al modo in cui ottengono informazioni sulla rete (ex. in base ai propri dati, alle informazioni
dei router vicini, ecc.ecc.).

Per fase di routing si intende la decisione di quale strada far prendere al pacchetto, mentre l’azione di
forwarding è quella di instradare effettivamente il pacchetto nel path scelto.

1. The optimality Principle

È un principio che afferma che se un router J si trova nella rotta ottimale che collega il router A e il router B
(il path AJ è chiamato r1), la rotta ottimale che collega il router J al router B è la restante tratta JB (chiamata
r2). Se esiste una rotta migliore che collega J a B, allora tale rotta (chiamata r3) viene concatenata ad r1, così
da creare la rotta r1r3 che risulterà essere migliore della vecchia r1r2. Questo principio porta a creare una
struttura ad albero contenente tutti i router appartenenti alle rotte ottimali per raggiungere una
destinazione. Questo albero è chiamato sync tree, e il fattore della distanza è calcolato in base al numero di
archi in cui si passa per arrivare alla destinazione. Per raggiungere una destinazione, non esiste solo un
percorso ottimale di un sync tree, con lo stesso numero di passi infatti potrebbe esistere un altro sync tree.
Quando più path possono essere scelti per arrivare alla destinazione con lo stesso numero di passi, l’albero
diventa un grafo aciclico, chiamato DAG (Directed Acyclic Graph).
2. Shortest Path Alghoritm

In maniera molto intuitiva, viene creato un grafo contenente tutti i router (che saranno i router) in cui gli
archi rappresentano invece i collegamenti tra appunto due router. La strada scelta per instradare i pacchetti
è quella shortest, con questa parola che può assumere vari significati:

- Minor numero di archi visitati


- Minor distanza geografica
- Minor ritardo accumulato nella percorrenza degli archi
- Larghezza di banda degli archi
- Ecc.ecc.

Ogni arco viene etichettato con la distanza dal nodo di destinazione. Una volta etichettati gli archi, viene
utilizzato l’algoritmo di Dijkstra, che calcola il percorso più corto per arrivare al nodo richiesto.

3. Flooding

E’ un algoritmo utilizzato per il routing statico. Consiste nell’inviare il pacchetto arrivato in entrata al router
a tutti i router collegati in modo diretto al router stesso, eccetto per la via tramite la quale il pacchetto è
arrivato. Vengono generati numerosissimi pacchetti, molti dei quali non arriveranno mai al nodo destinatario.
Per evitare che questi pacchetti rimangano in circolo, in ogni pacchetto viene settato un hop-count ad un
numero arbitrariamente alto, e ogni router che essi visitano, l’hop-count diminuisce di 1, e quando si arriva
a 0 il pacchetto muore. Una maniera migliore di gestire il flooding (rispetto all’hop-count), è quella di
mantenere traccia nei router quali pacchetti sono stati inviati. In questo modo i pacchetti non vengono inviati
più volte.

Una variante potrebbe essere un flooding geografico ad esempio. Flooding è molto utile per le trasmissioni
brodcast, per gestire database distribuiti, diminuisce al massimo il tempo di trasmissione di un pacchetto dal
nodo sorgente al nodo destinatario, a patto di gestire l’elevato numero di duplicati che circolano in rete. E’
molto robusto e viene utilizzato anche per scopi militari.

4. Distance Vector Routing

È uno dei due (insieme al link state routing) algoritmi adattivi più utilizzati ed efficienti. In questo algoritmo,
ogni router nella sua memoria contiene una tabella (un vettore), nel quale sono memorizzate le distanze
conosciute per arrivare ad una determinata destinazione e tramite quale path arrivarci. È noto anche come
algoritmo di Bellman-Ford. Ogni vettore memorizzato nei router contiene una entry per ogni router della
rete, ed ogni entry è composta da due campi:

- Il path predefinito su cui instradare il pacchetto per raggiungere tale host


- Una stima della distanza dal router di destinazione (può essere misurata in base al numero di hops o
in base ad altre metriche)

Se per la stima della distanza non viene utilizzato il numero di hop, ma altre metriche come la distanza
geografica, vengono utilizzati dei particolari pacchetti ECHO. Ogni T millisecondi, ogni router invia ai propri
router vicini (direttamente collegati) la sua lista (il suo vettore), in base alla quale ricalcorerà la distanza dal
destinatario. Se ad esempio il router X viene prima del router Y, e il router X e Y fanno parte dello stesso path
che porta al router Z, se X aggiorna Y che il suo nuovo ritardo è di n millisecondi, Y aggiornerà il suo vettore,
ovvero Z sarà raggiungibile in n millisecondi in più, ovvero il ritardo si propaga. Il routing Distance Vector
utilizza protocolli come Routing Information Protocol (RIP), Enhanced Interior Gateway Routing Protocol
(EIGRP).
Problemi dell’algoritmo distance vector

Distance Vector, malgrado sia sempre funzionante, potrebbe portare i pacchetti al destinatario in maniera
molto lenta. Infatti, distance vector reagisce molto velocemente all’aggiunta di un router alla rete, ma invece
reagisce molto lentamente quando un router va in failure. Se ad esempio in una rete ci sono N router, e un
nuovo router A viene collegato al primo degli N router, in N aggiornamenti dei vettori, tutti gli N router
aggiornerebbero in modo corretto i loro vettori aggiungendo un’entry per il nuovo router A. Nel caso in cui
un router, al posto di essere aggiunto alla rete, vada in failure, gli alti N router dovranno aggiornare i loro
vettori. Si pone però un problema. Se a cadere è il router A, che è direttamente collegato al router B il quale
a sua volta è collegato al router C, B non riceve più aggiornamenti da A, ma ne riceve da C, che gli dice “ehi
guarda, se passi tramite me, per arrivare ad A, ci vogliono 2 hop”. Questa però è un’informazione non del
tutto corretta, infatti C potrebbe intendere il percorso CBA, quando A in realtà non fa più parte della rete. Al
successivo scambio di vettori, C riceve i vettori dei suoi router vicini, che gli indicano di avere un path di 3
hop per arrivare ad A (ad esempio, B-C più i due hop memorizzati su C), per cui C aumenta la sua distanza da
A di 1, diventando così di 4 hop. Questo problema si propaga all’infinito, e viene infatti chiamato conteggio
all’infinito. Il problema principale è che se X comunica a Y di poter arrivare a Z in n passi, X non riesce a capire
se i questi n passi è anch’esso compreso. Alcune possibili soluzioni sono il poisoned reverse (il numero di hop
che collegano il router A al router B che non è più raggiungibile viene impostato ad infinito) e lo split horizon
(le informazioni della nuova tabella non vengono inviate dal router da cui sono state apprese).

5. Link state routing

Viene anche chiamato SPF, ovvero Shortest Path First. Ogni router esegue 5 passaggi fondamentali:

- Scoprire i router vicini e i relativi indirizzi di rete


- Calcolare la distanza o il costo per raggiungere un router vicino
- Costruire un pacchetto dove indica cosa ha appena imparato dalla rete
- Inviare e ricevere questi pacchetti di informazioni
- Calcolare il percorso più corto per raggiungere ogni altro router della rete

Il pacchetto viene chiamato link state packet (LSP), e contiene al suo interno informazioni del router (ex.
nome, indirizzo IP) e la lista dei router a lui direttamente collegati, e viene inviato ad ogni router (flooding)
che potrà quindi crearsi la topologia della rete. Ogni LSP ha un numero di sequenza, in modo tale che ogni
volta che viene inviato un nuovo pacchetto, la configurazione basata sul vecchio pacchetto con un numero
di sequenza precedente verrà cambiata. È molto importante infatti che tutti i router utilizzino per creare la
topologia della rete gli ultimi LSP, in caso contrario potrebbero esserci problemi come cicli o rotte
inconsistenti. Una volta creata la topologia della rete, ciascun router potrà calcolarsi il percorso migliore per
arrivare ad una certa destinazione, utilizzando l’algoritmo di Dijkstra. Rispetto al distance vector, link state
necessita di molta più memoria e più sforzo computazionale per i calcoli, tuttavia non soffre di problemi come
il count-to-infinity e quindi porta ad una convergenza in tempi molto minori.

Smistamento dei pacchetti LSP

Ogni pacchetto ha un sequence number progressivo. Quando arriva un nuovo pacchetto, questo viene
confrontato con l'elenco dei pacchetti già visti. Se è nuovo, viene inoltrato su tutte le linee tranne quella da
cui è arrivato. Se è duplicato, viene scartato. Se arriva un pacchetto con un numero di sequenza inferiore a
quello più alto mai visto fin’ora, viene respinto perché obsoleto poiché il router ha dati più recenti. Un possibil
problema potrebbe essere il crash di un router, che perderebbe tutti i dati: quando riparte, il sequence
number dei suoi pacchetti ripartirebbe da 0, e quindi verrebbero scartati poiché obsoleti. Inoltre alcuni
pacchetti potrebbero essere corrotti durante il cammino. La soluzione a questi problemi è aggiungere alle
tabelle di routing un campo age, di solito inizializzato a 60 secondi, che indica la validità del pacchetto LSP. Si
presuppone infatti che entro 60 secondi arrivi un nuovo pacchetto, in caso contrario il timer scade e la entry
viene cancellata.

Aggiornamento tabelle di routing link state

Nel link state, è necessario rinviare tutti i pacchetti di controllo LSP quando avviene un cambio significativo
nella rete, come ad esempio l’inserimento di un nuovo router o di un nuovo collegamento tra due router,
oppure il costo di un collegamento che aumenta o diminuisce. In questo caso, l’intero processo
dell’applicazione dell’algoritmo per il calcolo del percorso migliore dovrà essere interamente rieseguito da
capo. Infatti, cambia totalmente la topologia della rete, e il percorso migliore potrebbe non essere più lo
stesso. Questo comporta un grande sforzo computazionale da parte dei router, ma a differenza di distance
vector, non ci saranno moltissimi pacchetti in giro per la rete, ma solamente quelli LSP di controllo necessari.

Scoperta della rete

All’inizio, i router non conoscono a chi sono collegati, pertanto è importante che essi inizino a scoprire la rete.
Questo avviene con dei piccoli messaggi particolari di HELLO, che ogni router invia ai router direttamente
connessi dai quali si aspetta di ricevere un pacchetto di risposta in cui ciascun router si identifica. Una volta
ricevuti i pacchetti, in ogni router verrà popolata la tabella di routing con i relativi router ai quali si ha accesso
tramite un collegamento diretto indicando tramite quale della sua interfaccia. Nel caso in cui il messaggio di
HELLO sia inviato da un solo router che è stato appena inserito nella rete, allora con uno successivo scambio
di pacchetti tutti i router aggiorneranno le loro informazioni e le loro metriche. Una rete raggiunge la
convergenza nel momento in cui tutti i router della rete contengono le stesse informazioni. I pacchetti di
controllo vengono inviati di continuo all’interno della rete, se nessuna nuova informazione viene rilevata,
allora la rete ha raggiunto la convergenza. Se una rete non ha raggiunto la convergenza, non è considerata
completamente operabile. La raggiungibilità della convergenza dipende dalla velocità con cui i pacchetti
vengono inoltrati e dalla velocità con cui un router riesce ad aggiornare le proprie rotte.

Aggiornamento delle tabelle di routing e delle rotte

Per mantenere sempre aggiornate le tabelle di routing e le relative rotte, possono essere utilizzati più
protocolli:

- RIP (Routing Information Protocol)  è un protocollo distance-vector e prevede l’invio dell’intera


tabella di routing ogni 30 secondi (solo tra i router vicini). La sua distanza amministrativa è 120 e la
metrica utilizzata per identificare il costo dei cammini viene calcolata in base al numero di hop,
ovvero il numero di salti che un pacchetto compie prima di raggiungere la destinazione. Il numero
massimo di hop supportato dal protocollo in questione è pari a 15. Una rotta avente metrica
superiore a 15, di conseguenza, viene marcata come irraggiungibile. RIP utilizza 4 timer:

o Update timer  definisce ogni quanto vengono inviati i pacchetti di aggiornamento. Per
impostazione predefinita, il valore è di 30 secondi. Il messaggio di risposta viene trasmesso
a tutta la sua interfaccia abilitata RIP.

o Invalid timer  Definisce il tempo per cui una entry può rimanere valida nella tabella di
instradamento senza che venga rinfrescata. Quando scade il route invalid timer, il numero di
hop della entry viene impostato al costo infinito (16), contrassegnando la destinazione come
irraggiungibile.
o Flush timer  definisce il tempo per cui una entry può rimanere nella tabella di
instradamento senza che venga rinfrescata. Quando scade il flush timer, la entry viene
cancellata dalla tabella di instradamento.

o Hold down Timer  definisce il tempo per cui una entry non può subire modifiche in seguito
a un sospetto inizio di count to infinity. L'hold down timer è una funzionalità proprietaria di
Cisco.

Di RIP ci sono 2 versioni, la v1 che si comporta come appena detto e la v2, che ha introdotto un
meccanismo di autenticazione tramite password in chiaro, e la possibilità di dividere una rete in
sottoreti.

- EIGRP (Enhanced Interior Gateway Routing Protocol)  è un protocollo più complicato rispetto a
RIP. È un miglioramento dell’IRGP, al quale introduce diverse migliorie. La metrica utilizzata non è
più il numero di hop, ma tiene conto di diversi fattori come la larghezza di banda, il ritardo,
l’affidabilità e il carico delle linee di comunicazione tra i vari router. Supporta inoltre l’indirizzamento
alle reti con una netmask. La differenza principale tra questo protocollo e il RIP è che lo scambio delle
tabelle di routing non avviene in maniera periodica, ma avviene solamente nel momento in cui il
costo di una linea che collega di due router cambia di almeno il 10% o cambia la topologia di una rete
(aggiornamenti tramite TRIGGER). Inoltre, non invia tutta la tabella (full update) a tutti i router vicini,
ma solamente la entry che è stata modificata (partial update). La convergenza quindi viene raggiunta
in maniera più veloce, in quanto l’informazione non viene propagata a tutta la rete, ma solo ai router
che ne hanno bisogno. Per avere uno stato dei router vicini, EIGRP non invia nessuna tabella o
nessuna entry, ma dei semplici messaggi di HELLO, che non riportano alcuna modifica della rete.
Questi messaggi, a differenza di quelli di update, sono inviati periodicamente. Per scambiarsi
messaggi, questo protocollo utilizza RTP.

Confronto RIP – EIGRP


o RIP  supporta lo split horizon e il poison reverse, è facile da configurare, bilancia in maniera
equa il carico, non è un protocollo proprietario.
o EIGRP  gli update vengono effettuati solo quando necessario, utilizza messaggi di HELLO
per conoscere i vicini, fa raggiunge la convergenza della rete in minor tempo, è un protocollo
proprietario di CISCO.

- OSPF (Open Shortest Path First)  è un protocollo basato su link state. È un protocollo libero, ovvero
ognuno può implementare una specifica OSPF senza nessun costo. OSPF opera trasformando la
topologia di una rete in un grafo in cui sono presente collegamenti tra router (indicati con due archi,
uno diretto dal nodo B verso il nodo A e uno diretto dal nodo A verso il nodo B), tra router e LAN in
cui sono presenti solo computer (indicati con un unico arco) e tra router collegati da una rete
broadcast (la rete viene indicata con un nodo e questo nodo è collegato agli altri router con un arco
dal peso 0, mentre i router solo collegati al nodo della rete con un altro arco con il loro determinato
peso). Un’intera rete è divisa in AS (Autonomous System), ovvero un insieme di router appartenenti
ad un solo dominio. All’interno di ciascun AS viene svolto l’algoritmo di routing link state utilizzando
OSPF, in questo modo il numero di router sempre crescente non sarà un problema in quanto basterà
creare un AS contenente i nuovi router. In ogni AS esistono più tipologie di router: backbone router,
che fanno parte dell’area backbone alla quale sono collegate tutte le altre aree dell’AS, area border
router, ovvero ogni router connesso a più aree diverse dell’AS, boundary router, tramite i quali è
possibile comunicare con altri AS. I pacchetti OSPF sono di 5 tipi:
o Messaggi di HELLO  servono ai router per conoscere i vicini e verificare se siano ancora
raggiungibili o meno
o LSA  Link State Advertisement, servono per scambiarsi informazioni tra i router
o LSR  Link State Request, serve per richiedere ad un altro router informazioni riguardanti
qualche suo collegamento
o LSU  Link State Update, pacchetto di risposta ad un LSR
o LSACK  utilizzato per verificare che un LSU sia stato consegnato

OSPF lavora tramite uno scambio di informazioni tra router adiacenti. Tutti i router di una LAN sono
vicini, quindi non è efficiente dover far comunicare tutti i router fra di loro, ma ogni router
comunicherà con un router designato. Quando un router si accende o vuole capire se un suo router
vicino è ancora raggiungibile, invia un messaggio di HELLO. Se il nodo è raggiungibile, risponde con
un altro messaggio di HELLO. Ogni pacchetto LSA contiene invece la lista dei collegamenti nelle
relative interfacce da parte del router che ha inviato il pacchetto stesso. Un LSU può contenere uno
o più LSA, e solitamente viene utilizzato in risposta ad un LSR, in quando magari un dato è obsoleto
o incongruente. LSACK viene utilizzato come conferma alla ricezione di un LSU.

Problematiche dell’aggiornamento delle tabelle di routing

Il problema che si può verificare è quello in cui tutti i router trasmettono i loro aggiornamenti nello stesso
istante. In questo caso, la banda potrebbe essere limitata, e potrebbero esserci collisioni di pacchetti. La
soluzione a questa problematica è l’uso della variabile RIP_JITTER, la quale ritarda di poco l’invio dei messaggi
di update tra i router, ma permette che essi non inizino a scambiarsi messaggi nello stesso momento, cosa
che potrebbe causare problemi.

Routing gerarchico

Con l’aumentare delle dimensioni delle reti, è richiesto un conseguente aumento anche della quantità di
calcolo da parte dei router per creare una topologia della rete o per elaborare grandi quantità di informazioni.
Arriva un certo punto in cui questo processo non è più fattibile, pertanto si dividono i router di una rete in
regioni. Ogni router di una regione conosce la topologia e i best path della sua regione, conosce come
comunicare con altre regioni, ma non conosce la struttura delle altre regioni. Per reti di grandi dimensioni,
un routing a due livelli potrebbe non essere abbastanza, e quindi le regioni vengono raggruppate in cluster, i
cluster in zone, le zone in gruppi e così via. Utilizzare il routing gerarchico permette di risparmiare moltissimo
spazio di memoria quando nei router si va a memorizzare la tabella di routing. Infatti, quando si esce da una
regione, tutte le destinazioni di un’area diversa da quella corrente utilizzeranno tutte lo stesso collegamento,
permettendo di raggrupparle in un’unica entry. Tuttavia, un routing gerarchico potrebbe portare a delle
limitazioni: supponiamo per esempio di dover passare da un router A dalla regione 1 ad un router B della
regione 5, ed il percorso migliore sia passare tramite la regione 2; potrebbe verificarsi che siccome per la
maggior parte dei router della regione 5 sia meglio passare per la regione 3 e 4, il percorso impostato per
raggiungere la regione 5 è 1-3-4, quindi B verrà raggiunto con un percorso non ottimale (1-3-4-5 piuttosto
che 1-2-5). Un punto fondamentale è: di quante regioni abbiamo bisogno per riorganizzare al meglio la rete?
Kamoun e Kleinrock (1979) hanno scoperto che il numero ottimale di livelli per una rete di N router è ln(N),
che richiede un totale di N voci per router. E’ stato inoltre dimostrato sempre da loro che l’aumento della
lunghezza media di un percorso causato dall’instradamento gerarchico è sufficientemente piccolo da
risultare accettabile.
Broadcast routing

Si utilizza quando una generica informazione deve essere inviata a tutti i nodi della rete. Si può implementare
in vari modi:

- Flooding  ogni pacchetto viene inviato a tutti i nodi della rete. Questo porta però a dover gestire
grandi quantità di pacchetti, oltre che l’occupazione di una grande quantità di banda. Inoltre, ogni
router deve conoscere gli indirizzi di tutti i router della rete.
- Multidestination routing  Ogni pacchetto contiene un elenco di tutte le destinazioni. Quando un
router inoltra un pacchetto lungo 2 o più collegamenti, nel pacchetto vengono mantenute solo le
destinazioni dei collegamenti corrispondenti. In questo modo, ad ogni hop, diminuiscono il numero
di pacchetti inviati. Di contro c’è però che ogni router deve conoscere gli indirizzi di tutti i router della
rete.
- Reverse path forwarding  Se un pacchetto arriva attraverso il collegamento normalmente utilizzato
per inoltrare i pacchetti verso la fonte del messaggio broadcast, è probabilmente la prima copia
(probabilmente perché ha seguito un percorso ottimale). In questo caso, il router elabora il pacchetto
e lo spedisce in tutti gli altri suoi collegamenti, eccetto quello da cui il pacchetto è arrivato. Altrimenti,
il pacchetto viene rifiutato (poiché, probabilmente, è un duplicato). È una soluzione ottimale poiché
i router non devono conoscere l’intera topologia della rete, ma solamente l’interfaccia sulla quale
inoltrare il pacchetto per raggiungere una determinata destinazione.
- Spanning tree  migliora l’efficienza del reverse path forwarding. Uno spanning tree è un
sottoinsieme della rete contenente tutti i router ma in modo tale che essi non formino cicli. Se ogni
router conosce quale dei suoi collegamenti appartiene ad uno spanning tree, inoltra il pacchetto in
tutte i suddetti collegamenti, eccetto quello in cui è arrivato il pacchetto. È il metodo che genera
meno pacchetti e utilizza al meglio la banda disponibile, ma non tutti i router conoscono quali dei
loro collegamenti appartengono allo spanning tree (link state li conosce, distance vector no).

Multicast routing

Alcune applicazioni potrebbero dover inviare messaggi ai membri di gruppi che sono numericamente
significativi, anche se piccoli se confrontati con l'intera rete (broadcast). Le soluzioni point-to-point o
broadcast possono essere dispendiose e/o insicure. I gruppi devono essere gestiti: gli host comunicano ai
router (o i router controllano periodicamente gli host a loro collegati) il loro gruppo e quindi i flussi di
informazioni lungo la rete attraverso collegamenti router-router. L’algoritmo per multicast si basa sulla
riduzione dello spanning tree visto precedentemente per il broadcast:

- Se viene utilizzato un routing link state, ogni router conosce l'intera topologia di rete, quindi lo
spanning tree può essere ridotto a partire dalla fine di ogni percorso e tornare indietro alla radice,
rimuovendo tutti i router al di fuori di un determinato gruppo
- Se viene utilizzato il routing distance vector, viene adottata una procedura ricorsiva basata su reverse
path forwarding. Si basa sui messaggi PRUNE inviati dai router che ricevono un messaggio multicast:
se quel router non ha alcun collegamento con host o altri router interessati a quel gruppo, esso
risponde con un messaggio PRUNE. (svantaggio: se n gruppi di m membri ciascuno, mn spanning tree
devono essere tenuti in memoria. In alterativa, si fa riferimento ad un nodo radice del gruppo e si
crea uno spanning tree unico per tutto il gruppo).

Anycast routing

Ogni pacchetto viene inviato al nodo più vicino al mittende di ogni gruppo. Si utilizzano distance vector e link
state.
Routing per dispositivi mobili

L’obiettivo è quello di riuscire ad identificare un dispositivo e riuscire a inviargli pacchetti in qualsiasi


posizione esso si trovi. Per risolvere il problema di individuare un dispositivo in movimento, si possono
utilizzano home agent e foreign agent. Un utente con home agent a Miami, se si trova a New York con il suo
laptop, ottiene un indirizzo di rete diverso rispetto a quello del suo solito home agent. L’utente allora contatta
il foreign agent, al quale si registra specificando l’indirizzo del suo home agent, il suo indirizzo attuale ed
alcune informazioni di sicurezza. A questo punto, il foreign agent si mette in comunicazione con l’home agent
a Miami, a cui comunica il nuovo indirizzo del laptop che si trova a New York. A questo punto, se dovesse
arrivare un messaggio all’home agent di Miami, esso verrà inoltrato effettivamente a New York, dove
effettivamente si trova l’utente con il suo laptop. Da qui in poi, fino a quando il laptop non cambia
nuovamente indirizzo, la comunicazione avverrà direttamente con il laptop a New York, senza dover passare
dall’home agent a Miami. La tecnica con il quale il messaggio viene inoltrato al foreign agent (e poi di
conseguenza al laptop) si chiama tunneling. Il primo messaggio del mittente viene inviato all’home agent.
L’home agent incapsula il pacchetto ricevuto e tramite il tunneling lo invia al foreign agent che lo consegnerà
poi al destinatario che si trova fuori casa. Poi l’home agent consegna al mittente del pacchetto l’indirizzo del
foreign agent, in modo tale che le successive comunicazioni avverranno direttamente tramite tunneling con
il foreign agent.

Routing per reti ad hoc

È necessario implementare un routing di questo tipo quando anche i router sono in movimento (ex. router
su navi, router militari, infrastruttura creata per fronteggiare un’emergenza di un terremoto, ecc.ecc.). In
questo caso, un router è collegato in wireless agli altri nodi, e funge da router ma anche da host. Le reti di
nodi che si trovano vicine l’una con l’altra vengono chiamate reti ad hoc o anche MANET (Mobile Ad hoc
NETwork). Ciò che rende le reti ad hoc diverse dalle reti cablate è che la topologia viene improvvisamente
cambiata. I nodi possono andare e venire o apparire in nuovi posti in un attimo. Con una rete cablata, se il
router ha un percorso valido verso una destinazione, quel percorso continua ad essere valido, salvo errori,
che si spera siano rari. Con una rete ad hoc, la topologia può cambiare continuamente, quindi la desiderabilità
e persino la validità dei percorsi possono cambiare spontaneamente senza preavviso. Inutile dire che queste
circostanze rendono il routing nelle reti ad hoc più impegnativo del routing nelle loro controparti fisse.
L’algoritmo di routing più utilizzato per le reti ad hoc è AODV (Ad hoc On-demand Distance Vector).

AODV

La dicitura on-demand è dovuta al fatto che le rotte vengono scoperte solo nel momento in cui un host voglia
comunicare con un altro host. In ogni momento, la rete può essere rappresentata come un grande grafo. Due
nodi sono considerati collegati se riescono a comunicare utilizzando il loro segnale wireless. L’algoritmo
funziona esattamente come distance vector: nel caso in cui un nodo A voglia comunicare con un nodo I, ma
il segnale non è abbastanza forte da poterlo fare, A controlla la sua tabella di routing. Nel caso in cui non vi
fosse una rotta impostata per I, A manda un messaggio route request tramite flooding ai nodi ricadono
nell’area del suo segnale. A loro volta, i nodi che ricadono nell’area del segnale di A, ritrasmetteranno la
richiesta fino a raggiungere I. Una volta che il messaggio di route request è arrivato ad I, I costruisce un
pacchetto di route reply unicast che tramite il percorso inverso utilizzato per arrivare da A ad I torna ad A (è
necessario quindi che ogni router ricordi da chi ha ricevuto il pacchetto). Ogni volta che il pacchetto viene
inviato nuovamente in broadcast, un contatore viene aumentato, permettendo ad un router di capire quanto
è distante dalla destinazione. In reti molto grandi, si generano parecchi messaggi di broadcast, e per limitare
che rimangano in giro pacchetti, si utilizza il campo time to live per distruggerli. Il mittente inizierà con un
pacchetto con time to live pari a 1 (1 hop), se non ottiene nessuna risposta in tempi ragionevoli, invierà un
nuovo pacchetto con TTL pari a 2 e così via.
È importante inoltre che l’algoritmo riesca ad adattarsi ad una situazione in cui un nodo smetta di funzionare,
invalidando di conseguenza magari una rotta. Per poter gestire questo, ogni router invia periodicamente dei
messaggi di hello aspettandosi una risposta in tempi ragionevoli. Nel caso in cui questa risposta non arrivi, il
router potrebbe essere in failure oppure uscito dal range del segnale, e quindi viene etichettato come non
attivo. Ogni router infatti mantiene nella sua memoria una lista dei router vicini attivi. Nel momento in cui
un router G passa dallo stato attivo a non attivo, il router A (collegato al router G) controlla se G fosse
presente in qualche rotta salvata, e in caso ci fosse una rotta con G, A avvisa tutti gli altri router della rotta
che G non è più disponibile, permettendo così anche agli altri router di poter eliminare le rotte contenenti G.
Per risolvere il problema count-to-infinity tipico di distance vector, ogni rotta contiene un numero di
sequenza che viene controllata dal nodo di destinazione.

Interdomain router

Internet è diviso in AS, cioè Autonomous System. Un sistema autonomo potrebbe ad esempio essere un
determinata regione geografica, o alcuni router che vengono gestiti da un’unica istituzione, o una rete
universitaria, ecc.ecc. Una rete può essere composta da più AS, ciascuno dei quali ha una dimensione, che
può essere large (quando comprende molti router collegati addirittura da collegamenti inter-continentali),
medium (ad esempio un provider regionale con una piccola dorsale), o small (ad esempio un’università).
Ciascun AS deve essere in grado di comunicare con gli altri AS, senza però dover conoscere la topologia degli
altri AS. Ogni AS è identificato da un numero univoco, calcolato tramite un numero a 16 bit. Questo vuol dire
che possono essere create fino a circa 65000 AS, ai quali bisogna togliere alcuni identificativi univoci utilizzati
in AS privati. La gestione degli identificativi è a carico del IANA. Alcune questioni importanti riguardanti il
routing tra AS sono:

- Scalabilità  riuscire ad adattarsi ad un numero sempre più grande di dispositivi


- Privacy  gli AS devono essere in grado di comunicare tra loro senza però divulgare informazioni
sensibili come la loro topologia interna.
- Policy  è importante poter riuscire a controllare il flusso di traffico, controllando le destinazioni, i
canali di collegamento (che potrebbero trasferire informazioni sensibili quando ad esempio si tratta
di una comunicazione tra due ISP) e chi può comunicare attraverso essi.

È importante che tutti gli AS comunichino tramite canali non esageratamente lunghi, tenendo conto del fatto
che alcune connessioni devono essere evitate visti gli scopi commerciali di alcuni AS (ex. un regional provider
non deve comunicare con un regional provider di un’altra regione). Come tecnica di routing potrebbe essere
utilizzato il link state packet, ma non è una scelta ottimale, visto che la convergenza della rete composta da
tutti gli AS è raggiunta quando tutti gli AS hanno la stessa topologia della rete, inoltre richiede un grande
sforzo computazionale ad ogni AS. Questo tipo di routing è solitamente utilizzata all’interno dell’AS, cioè per
una sottorete dell’intera rete composta da AS. Un’altra possibilità per effettuare il routing in una rete
composta da più AS è quella di implementare distance vector. In questo caso, sarebbe garantita la privacy,
visto che ogni AS conoscerebbe solamente il next hop e invece la topologia della rete sarebbe sconosciuta.
Tuttavia, rimane il solito problema di ditance vector, ovvero il count-to-infinity, oltre al fatto che in reti di
grandi dimensioni, non si può conoscere con esattezza una probabile misura della distanza dal nodo di
destinazione. L’idea è quindi quella di utilizzare un’estensione di distance vector. Si utilizza quindi il path
vector routing. La caratteristica principale di path vector routing è che quando lo specker node (il router di
riferimento dell’AS) invia gli aggiornamenti della sua tabella di routing agli altri speaker node degli altri AS,
non invia più il costo del collegamento, ma bensì l’intero path che viene aggiornato hop per hop. In questo
caso, un AS può facilmente rilevare dei loop: infatti, se lo speaker router dell’AS 1 trova se stesso in un
pacchetto il cui path creerebbe un loop, il pacchetto viene rigettato e non memorizzato nella tabella di
routing. Inoltre path vector è molto flessibile. Infatti in questo modo, a differenza di link state, lo speaker
router di AS 1 può scegliere quale path utilizzare per arrivare a una destinazione, senza un percorso ottimale
prefissato come appunto in link state.

BGP Border Gateway Protocol

È il protocollo utilizzato per il routing tra più AS. Link state e distance vector non possono essere utilizzati per
un routing internetwork, infatti gli scopi dei due routing sono diversi:

- Internetwork  attenzione alle policy tralasciando il percorso migliore


- Intranetwork  l’importante è riuscire a consegnare un pacchetto dal mittente al destinatario nel
minor tempo possibile

Una routing policy è l’insieme delle regole che determina quale traffico può essere scambiato tramite quali
determinati canali (ex. il traffico delle compagnie telefoniche non deve passare per un AS di un’università).
Un AS può avere a disposizione più rotte per arrivare all’altra destinazione, le quali sono tutte memorizzate
nella loro tabella di routing, e sceglierà la più consona, ovvero quella che rispetta maggiormente le politiche
che devono essere seguite. Il BGP può essere utilizzato sia per il peering (due speaker router di du AS diversi
comunicano direttamente tra loro) sia per transit service (quando un AS ha lo scopo, sotto compenso, di far
comunicare atri AS tramite i suoi router). BGP è l’unico protocollo di routing che utilizza TCP, sula porta 179.
Viene quindi prima stabilita una connessione TCP sulla porta 179, sulla quale poi verrà inviato il flusso di dati.
È importante inoltre differenziare il numero di hop tra AS che compie il pacchetto, dal numero di router che
attraversa il pacchetto. Infatti, attraversare un numero minore di AS non significa passare per un numero di
router interni minore. Nel caso in cui infatti il pacchetto passi per un solo AS, ma tale AS risulta essere molto
grande, potrebbe verificarsi che il pacchetto debba passare per un grande numero di router. Viceversa, se un
pacchetto passa per 5 AS, ma di piccole dimensioni, potrebbe verificarsi che attraversi un numero molto
minore di router all’interno degli AS rispetto al caso precedente.

Convergenza di BGP

Benchè sia un distance vector modificato, BGP soffre comunque di una convergenza lenta, nonostante non
soffra del problema count-to-infinity. La lentezza della convergenza è dettata dal fatto che comunque un AS,
in base alle policy, deve comunque utilizzare del tempo per decidere quale sia il cammino migliore tra quelli
memorizzati nella tabella di routing per arrivare a destinazione. Nella pratica, fortunatamente, gli AS sono
dotati di rotte BGP molto stabili. L’aggiornamento delle tabelle di routing avviene quando avvengono nella
rete di AS dei cambi topologici, dovuti a danni fisici delle apparecchiature o all’aggiunta di router. È inoltre
possibile che una comunicazione BGP cada, con il danno dovuto al crash di un router o alla congestione del
canale utilizzato. Inoltre potrebbero esserci numerosi problemi per quello che riguarda il cambio o la
collisione delle policy di routing, che potrebbero in alcuni casi essere in conflitto tra più AS (ex. AS1 ha una
policy che indica di dirigere il traffico tramite AS2 ma AS2 non vuol ricevere traffico da AS1). Nel caso in cui
vi sia una caduta del canale di connessione (instaurato tramite TCP), un AS potrebbe reagire in vari modi.
Innanzi tutto, visti i problemi della chiusura di connessione simmetrica, un router potrebbe rimanere
attaccato alla connessione mentre l’altro potrebbe averla rilasciata. Per prevenire questi problemi si
utilizzano i messaggi di Keep Alive (inviati ogni 60 secondi) per capire quali router vicini sono attivi, e si utilizza
un hold timer (solitamente settata a 180 secondi), che viene decrementato e nel momento in cui raggiunge
0, la connessione viene rilasciata.

Quindi, in conclusione, path vector e distance vector sono simili, ma:

- • Routing distance vector


o Calcola il costo del percorso in base ai costi del percorso dei vicini
o Utilizza l’algoritmo di Bellman-Ford e il RIP
- • Routing path-vector
o Convergenza più rapida rispetto ai protocolli distance-vector
o Le politiche di routing sono più flessibili
o Utilizzato per routing tra domini (AS) basandosi sulle policy (BGP).

Principi di progettazione di Internet

I principi che hanno dettato lo sviluppo di Internet sono la semplicità, la chiarezza nelle scelte
implementative, lo sfruttare la modularità aspettandosi un’eterogeneità di protocolli e, soprattutto, il fatto
che tutto funzioni. Inoltre, il tenere in considerazione le performance e i costi, pensando anche alla scalabilità
(il web è sempre in crescita), porta ad una progettazione che deve evitare parametri statici, rigorosi nell’ invio
e tolleranti nella ricezione (a causa dei diversi errori che si possono verificare durante il tragitto). Internet
può essere vista come un insieme di reti tra loro congiunte attraverso interconnessioni (router). I datagrammi
che viaggiano nella rete sono limitati da MTU (Max Transfer Unit) che di default in Ethernet è settato a 1500
Bytes. Per questo motivo segmenti più grandi, spesso devono essere frammentati in più datagrammi
(compito svolto dal livello di trasporto): in questo caso il destinatario dovrà ricostruire il flusso rimettendo in
ordine tutti i datagrammi ricevuti.

Protocollo IP

Internet Protocol (IP) è un (il) protocollo di livello rete del modello OSI ma, soprattutto, quello che dà il nome
al modello TCP/IP. Ai segmenti di livello trasporto viene aggiunto un header che contiene le informazioni per
fornire i servizi tipici del livello di rete. In particolare, l’header di un pacchetto IP è composto da:

- • Version  la versione IP (IPv4 ha il blocco a 32 bits, IPv6 a 128 bit)


- • IHL  Internet Header Length, ossia la lunghezza dell’ header
- • TOS/DSCP  in questo campo viene marcata la tipologia di traffico che il pacchetto trasporta
- • Total Length  lunghezza totale del pacchetto (header + payload)
- • Identification  il numero di identità del pacchetto (se un segmento viene frammentato durante
la trasmissione, tutti i pacchetti appartenenti allo stesso segmento avranno la stessa identità.
- • DF/MF  Don’t Fragment e More Fragment, ossia indicano se un pacchetto può o meno essere
frammentato durante il percorso o se vi sono ulteriori frammenti che seguiranno.
- • Fragment Offset  la posizione di questo pacchetto rispetto al pacchetto originale
- • TTL Time to Live  il numero di nodi da attraversare prima che il pacchetto venga scartato (serve
ad esempio anche ad evitare fenomeni di loop nella rete)
- • Protocol  Che tipo di protocollo viene portato dal pacchetto (TCP=6, UDP=17 ecc.ecc.)
- • Header Checksum  Controllo errori sull’header.
- • Source/Dest Addresses – Indirizzi di sorgente e destinazione del pacchetto.
- • Option  campo che può essere presente o meno all’interno del pacchetto, se presente può
indicare:
o • Security  informazioni riguardo alla sicurezza del pacchetto
o • Strict Source Routing  il percorso che il pacchetto devo seguire obbligatoriamente
o • Loose Source Routing  una list di router che il pacchetto dovrebbe seguire
o • Record Route  Ogni router attraversato deve aggiungere il proprio IP al pacchetto
o • Timestamp  Ogni router attraversato aggiunge il proprio IP e il tempo in cui il pacchetto
è transitato.
Classi degli indirizzi IP

Il formato originale dell’indirizzamento IP è di tipo gerarchico e basato sulle classi, in modo da gestire
differenti situazioni per numero di host nella rete. Il sistema di indirizzamento divide gli indirizzi in cinque
classi, ognuna delle quali è identificata da un determinato valore dei primi 4 bit del primo ottetto (esso è
identificato come il primo a sinistra). Il numero di reti è dato da 2networkbits. Il numero di host per network è
dato da 2hostsbits.

 Alla classe A appartengono gli indirizzi che hanno il primo bit a 0


 Alla classe B quelli che iniziano per 10
 Alla classe C quelli che iniziano per 110
 Alla classe D quelli che iniziano per 1110
 Alla classe E quelli che iniziano per 1111

Il problema principale con questo tipo di indirizzamento gerarchico è lo sbilanciamento tra il numero host
rispetto a quello delle sotto reti a cui essi apparterrebbero: il classico esempio è quello della classe B che
prevede 64000 host indirizzabili per sottorete (problema dei tre orsi), anche se le cose stanno cambiando
con l’avvento e il proliferare dell’IoT. Tra gli indirizzi IP, vi sono indirizzi che svolgono funzioni “importanti”:

- 0.0.0.0  indica l’host corrente al momento della sessione


- 255.255.255.255 o 1.1.1.1  indirizzo di broadcast, il pacchetto verrà inoltrato a tutti i componenti
della rete LAN
- 127.x.y.z  indirizzo di loopback, ovvero i pacchetti IP vengono inviati all’host stesso e passeranno
quindi al livello superiore
- 169.254.x.y  spesso chiamato anche «APIPA» (Automatic Private IP Assignment) oltre che IP di
autoconfigurazione. Esso infatti è l’indirizzo preso dalla scheda di rete (in macchine di tipo Windows)
quando questa è settata su DHCP e la richiesta a tale server fallisce.

Tre blocchi di indirizzi (10.0.0.0 per la classe A, 172.16.0.0 per la classe B, 192.128.0.0 per la classe C) sono
stati riservati per l’indirizzamento privato. Un indirizzo privato è un indirizzo speciale riservato dalla IANA per
l’uso all’ interno di una rete e che non è visibile all’ esterno di essa. Questi indirizzi IP non possono essere
usati su Internet. Ogni persona può usare indirizzi IP privati senza consultare organizzazioni o chiedere il
permesso per farlo.

Subnet e Mask

Invece di avere una rete con 65536 host (classe B), potrebbe essere più utile avere un numero limitato di
host in diverse sottoreti. Possiamo raggiungere questo risultato inserendo una maschera (chiamata subnet
mask) che indica il numero di bit riservati agli host e quelli riservati alla sottorete. Ogni classe IP ha la sua
propria sottorete di default che denota quanti host può avere e quante sottoreti. Il sistema classfull non
presenta una flessibilità per gestire un numero differente di sottoreti o host per ciascuna classe. Quello che
si fa e prendere «in prestito» alcuni bit dello spazio riservato agli host e creare così delle sottoreti. Ciò avviene
prendendo la maschera di sottorete e facendo l’AND logico bit a bit con l’indirizzo IP. Ogni interfaccia di rete
ha un proprio indirizzo IP sulla rete (un indirizzo IP Pubblico se questa interfaccia è posta su Internet, ed in
questo caso è univoco). La subnet mask può essere indicata anche con il metodo CIDR, cioè indicando dopo
la barra che segue l’indirizzo IP quanti sono i bit settati ad uno per la sottorete. In ogni sottorete è presente
un host speciale, detto gateway, il quale permette alla sottorete di interfacciarsi ad internet.

CIDR (Classless IterDomain Routing)

Il CIDR è stato introdotto nel 1993 per sostituire il sistema di indirizzamento basato sulle classi: invece di
allocare gli indirizzi usando le diverse classi (A, B, C, ecc.ecc.), esso utilizza un mascheramento di rete di
lunghezza variabile. Con esso è anche stato introdotto un nuovo metodo per indicare le maschere di
sottorete: /net_bits. Questo implica anche la possibilità di fare «supernetting», ossia riservare un numero
arbitrario al mascheramento di sottorete, cosa che con il sistema a classi era deprecato. In questo modo i
router lavorano in una sorta di gerarchia:

- • Quelli esterni alla rete conservano un record di tipo CIDR


- • Quelli interni usano la parte Host per instradare i pacchetti
- • I rimanenti bit vengono usati per distinguere le sottoreti dell’organizzazione.

IPv6

IPv6 è la nuova generazione del Protocollo Internet ed ha iniziato ad essere adottato già dalla metà degli anni
2000. L’adozione del nuovo protocollo non è uniforme nei vari paesi e tra i vari ISP; la tendenza di crescita
dello standard procede in maniera differente, con una particolare «quiete» dei paesi europei; l’Italia compare
ad oggi al 70mo posto con il 4,5%.

Cosa cambia effettivamente dallo standard IPv4? Sicuramente lo spazio d’ indirizzamento, che è
quadruplicato rispetto alla versione 4, il vero motivo che ha spinto a sviluppare IPv6. Si è cercato anche di
semplificare la struttura del pacchetto, mantenendo fisso il formato dell’header (che però passa da 20 bytes
a 40), non prevedendo alcun meccanismo di controllo degli errori (viene abolito il checksum) che è
demandato ai livelli superiori, così come la frammentazione (infatti essa viene effettuata in modalità end-to-
end dopo aver sondato il percorso). Prevede inoltre un allineamento a 64 bit per meglio sfruttate le
potenzialità dei moderni microprocessori. L’header può contenere informazioni per l’autenticazione e la
sicurezza. IPv6 non prevede il broadcast inteso così come in IPv4, ma piuttosto come un multicast esteso a
tutti gli indirizzi.

Confronto header IPv4 e IPv6

Dal confronto dei due header IP (v4 e v6) si notano i campi mantenuti da quest’ultimo rispetto alla versione
precedente e quelli che si è preferito eliminare. In particolare, non c’è il campo di controllo (campo
checksum), della frammentazione e dei frammenti. Traffic class ripropone il Type of Service, così come Hop
Limit il Time to Live, mentre il Flow Label identifica la sequenza di pacchetti appartenenti allo stesso flusso.

Vista la scarsa crescita nell’adozione del protocollo IPv6 e la lunga convivenza con entrambi i protocolli, è
stato necessario aggiungere una estensione all’header IPv6 per garantire la compatibilità dei pacchetti
durante il periodo di coesistenza: così sono rientrati in gioco campi come la frammentazione, il routing
ecc.ecc.

La scelta della grandezza dell’indirizzo IPv6 è stata al centro di un dibattito per diverso tempo: alcuni
avrebbero voluto una lunghezza fissa a 64 bit (efficiente dal punto di vista dei calcoli delle nuove CPU e nel
minimizzare la crescita di sovraccarico per la gestione dell’header nei router), altri una lunghezza variabile
fino a 160 bit (compatibile con le tendenze OSI e IEEE per l’indirizzamento anche per il wireless). Si è deciso
dopo questo dibattito di adottare una lunghezza fissa di 128 bit, allineata a 64.

Benefici della lunghezza a 128 bit

I vantaggi di un indirizzamento a 128 bit sono diversi, a partire da un più ampio spettro di indirizzi possibili
organizzabili in una gerarchia più profonda, ad una gestione più semplice, anche attraverso l’uso
dell’autoconfigurazione. Vi è poi la possibilità di instaurare connessioni di tipo end-to-end sicure con IPSec.
IPsec è un protocollo di sicurezza di livello rete. Questo protocollo permette di scartare pacchetti modificati
lungo il tragitto (questo però è un problema col NAT, che comunque non è più necessario).

Connessione end-to-end

Le nuove applicazioni, necessitano di una connettività di tipo end-to-end, così come era l’idea originaria di
internet. Ad oggi, vista la carenza di indirizzi IPv4 e la crescita di dispositivi collegati, si usa il NAT (Network
Address Translation), tecnica che non è friendly per questa nuova tipologia di programmi (telefonia IP, p2p
gaming, domotica etc). Dispositivi sempre collegati richiedono IP pubblici, raggiungibili in maniera semplice.

Oltre ad allargare lo spazio degli indirizzi, IPv6 offre altre caratteristiche:

- • Configurazione automatica (simile a IPX): quando si gestiscono grandi reti non è fattibile la
configurazione manuale e DHCP potrebbe non essere il modo giusto di farlo.
- • IPsec obbligatorio: protocollo che garantisce sicurezza attraverso funzionalità di autenticazione,
cifratura e integrità.
• IPv6 Mobility: implementa il Direct Routing, una maniera semplice di comunicare quando ci si
muove tra reti differenti.
- • QoS: in IPv6 è molto simile a quella in IPv4, anche se l’implementazione di tecniche di gestione del
traffico vengono sfruttate meglio nei campi dell’header della nuova versione.

Indirizzamento con IPv6

Il sistema di indirizzamento introdotto da IPv6 distingue gli indirizzi in tre categorie fondamentali: unicast,
anycast e multicast. Quello che IPv4 considerava come indirizzo broadcast non esiste più. Ad una singola
interfaccia possono essere assegnati più indirizzi IP di ciascun tipo. Un indirizzo unicast serve per raggiungere
un’interfaccia di rete in modo univoco. Un indirizzo anycast viene attribuito a più interfacce di rete differenti,
con lo scopo di poter raggiungere semplicemente quello che risponde prima (quello più vicino in base al
protocollo di instradamento). Un indirizzo multicast va attribuito a più interfacce di rete differenti: i pacchetti
inviati a un indirizzo multicast dovrebbero raggiungere tutte le interfacce di rete a cui questo indirizzo è stato
attribuito.
Unicast

L’indirizzo unicast riguarda un’interfaccia di rete singola; in altri termini, un indirizzo unicast serve per
raggiungere un’interfaccia di rete in modo univoco.

Anycast

L’indirizzo anycast serve per essere attribuito a più interfacce di rete differenti (in linea di principio, queste
dovrebbero appartenere ad altrettanti componenti di rete distinti). Si tratta di un indirizzo che ha le stesse
caratteristiche esteriori di quello unicast, che però viene attribuito a diverse interfacce di altrettanti nodi,
con lo scopo di poter raggiungere semplicemente quello che risponde prima (quello più vicino in base al
protocollo di instradamento). Per la precisione, i pacchetti inviati a un indirizzo anycast dovrebbero
raggiungere un’unica interfaccia di rete.

Multicast

L’indirizzo multicast serve per essere attribuito a più interfacce di rete differenti (in linea di principio, queste
dovrebbero appartenere ad altrettanti componenti di rete distinti). I pacchetti inviati a un indirizzo multicast
dovrebbero raggiungere tutte le interfacce di rete a cui questo indirizzo è stato attribuito.

NAT (Network Address Translation)

Il NAT è un protocollo che permette di gestire il problema della scarsità degli indirizzi IP. Se ad esempio un’ISP
ha a disposizione 65000 indirizzi IP, ma essi non sono abbastanza per mappare tutti gli host che fanno
riferimento al determinato ISP (infatti una casa, cioè una linea potrebbe avere molti dispositivi), viene
utilizzato il NAT per assegnare un indirizzo IP ad una linea di casa solo quando necessario, permettendo così
di avere 65000 host non mappati, ma 65000 host attivi contemporaneamente (tutti gli host che
appartengono alla stessa linea di casa si collegheranno ad un router, con il router che avrà effettivamente
l’indirizzo IP dal NAT). Quindi, in una casa o in una piccola azienda si avrà una LAN che uscirà sulla rete internet
con un unico indirizzo IP per tutti i dispositivi. Il NAT esegue proprio la traduzione dell’indirizzo privato della
LAN interna di casa o dell’azienda all’indirizzo IP pubblico assegnato dall’ISP.

Composizione indirizzo IPv6

L’ indirizzo IPv6 è rappresentato con 8 gruppi da 16 bit (4 cifre esadecimali) separati da due punti. Se uno dei
gruppi è composto da una sequenza di tutti 0, può essere identificato con uno 0 singolo, se invece i gruppi di
0 sono più di uno è possibile riassumere tale occorrenza con una sequenza del tipo ‘::’ (ma solo per una volta).
Per quanto riguarda invece la compatibilità con l’indirizzamento IPv4, gli ultimi 32 bit (ultimi due gruppi)
possono essere scritti nella consueta maniera decimale divisa dal punto (ex. ::192.31.20.46).

Composizione indirizzo IPv6 unicast

Tutti gli indirizzi, tranne quelli che iniziano per FF16, sono di tipo unicast (e poi eventualmente tra questi si
possono definire degli indirizzi anycast). La caratteristica più importante degli indirizzi unicast è quella di
poter essere aggregati a una maschera di bit continua, simile a quella di IPv4, senza il vincolo delle classi di
indirizzi (come avveniva invece con IPv4). Due indirizzi unicast sono particolari, e sono:

- 0:0:0:0:0:0:0:0  utilizzato allo stesso modo come 0.0.0.0 nell’iIPv4, cioè all’avvio del device quando
nessun indirizzo di rete è disponibile.
- 0:0:0:0:0:0:0:0  indirizzo di loopback, allo stesso modo di 127.0.0.1 in IPv4.
Indirizzamento in IPv6

Mentre in IPv4 si utilizza la subnet mask per identificare la parte di rete e quella di host, in IPv6 si utilizza il
prefisso. Tutto quello che segue il prefisso può essere usato per l’indirizzamento degli host della sottorete. I
prefissi occupano la parte più a sinistra dell’indirizzo e possono avere al massimo 48 bit. Alcuni prefissi danno
informazioni sulla tipologia dell’indirizzo:

- 0000:0000  riservato
- 001  Aggregatable Global Unicast Address
- 1111:1110:10  Link Local Use Address
- 1111:1110:11  Site Local Use Address
- 1111:1111  Indirizzi multicast

Inoltre, essi vengono indicati nella classica notazione CIDR, ossia con la barra e un numero che indica la parte
identificata dal prefisso.

Aggregatable Global Unicast Address

Un indirizzo globale aggregabile, contrassegnato col tipico prefisso visto sopra, è un indirizzo utilizzato su link
gerarchici, ad esempio verso organizzazioni o verso ISP. La loro definizione avviene attraverso il prefisso
globale (001), un ID di sottorete (SLA – Site Level Aggregator) e un ID di interfaccia.

Allocazione degli indirizzi IPv6

Il processo di allocazione degli indirizzi è il seguente:

- IANA alloca 2001::/16 indirizzi ai vari enti di registrazione, poi inizia il processo di allocazione di
ciascuno di questi enti:
o ognuno di essi riceve uno spazio di prefisso /23 dalla IANA, all’ interno del più ampio
2001::/16
o Il Registro alloca inizialmente un prefisso /35 ad un ISP che vuole cimentarsi con IPv6
o l’ISP alloca un prefisso /48 ai propri clienti

La seconda parte del processo di allocazione serve a minimizzare lo spazio iniziale dato a ciascun ISP. Questo
impone la conservazione degli indirizzi. Gli indirizzi che saranno poi utilizzati per gli host possono essere
assegnati in varie modalità:

- • In modalità autoconfigurazione secondo la RFC 2373 che prevede, tra l’altro, anche l’espansione
del MAC Address
- • Attraverso la generazione di un indirizzo pseudocasuale (per motivi di privacy)
- • Assegnato da DHCP
- • In maniera manuale

Privacy di IPv6

Per motivi di privacy, è possibile assegnare indirizzi temporanei (RFC 3041) per particolari applicazioni:

- • In questo modo è difficile tracciare il dispositivo (ma questa peculiarità può trasformarsi in
problema a sua volta)
- • Risulta più difficile fare lo scan degli IP all’interno della rete, ma, una volta individuata la macchina,
un port scan funziona allo stesso modo di IPv4
- • Nell’utilizzo degli indirizzi random è sempre meglio attivare la modalità (Duplicate Address
Discovery – DAD, controlla che un indirizzo IPv6 generato sia univoco prima di assegnarlo
effettivamente alla VLAN)
- • Variare periodicamente gli IP in base alla policy
Sicurezza di IPv6

La sicurezza di IPv6 passa attraverso il protocollo IPSec. È possibile tenere separati i processi di autenticazione
e di crittografia per problematiche relative alla connessione o alla capacità di calcolo. I protocolli di scambio
delle chiavi sono indipendenti da IPv6 e sono in continuo progredire.

Qualità del servizio IPv6

IETF ha sviluppato negli anni due approcci alla Quality of Service (QoS):

- • Servizi Integrati (IntServ)  è pensato come un approccio per-flow, quantitativo, usando un


protocollo esterno chiamato RSVP. Richiede la memorizzazione di informazioni di stato in ogni router
partecipante e, se questa informazione non è mantenuta in ogni nodo lungo il cammino, non può
assicurare garanzie di QoS. Normalmente IntServ è usato insieme alla segnalazione con Resource
ReSerVation Protocol (RSVP).
- • Servizi Differenziati (DiffServ)  non prevede un protocollo di prenotazione esplicito, approccio
qualitativo e per categoria di traffico. La rete non mantiene uno stato per ogni flusso di traffico
(stateless) a differenza dei servizi integrati. Ottiene la scalabilità attraverso l’aggregazione dello stato
di classificazione, che è trasportato in un marchio (mark o tag) a livello del singolo pacchetto IP,
chiamato campo Diffserv Code Point (DSCP) che rimpiazza il campo (1 byte) di Tipo di Servizio (ToS)
nell’header IP (non sono aggiunti bit).

IPv6 prevede supporto ai Servizi Differenziati (DiffServ), sfruttando lo stesso campo ToS. La qualità del servizio
può essere inizializzata dalla sorgente così come dai router presenti lungo il percorso. Il valore 0 individua
una classe con nessun QoS.

Il campo Flow Label può essere usato per identificare un flusso associato ad una comunicazione che usa
INtServ. Chi sceglie la Flow Label è la sorgente, mentre i router usano l’accoppiata Flow Label + Sorgente per
identificare i vari flussi. Anche qui con il valore 0 si identifica nessuna qualità del servizio. La Flow Label usata
con IntServ non è standardizzata quindi potrebbe assumere significati differenti in futuro

Un compromesso tra le due alternative è la tecnologia Diff-Serv segnalato, ossia un DiffServ che usa il
protocollo RSVP mixando le due scelte progettuali viste prima. In questo modo si può pensare ad una politica
di controllo senza pesare sulle CPU dei router.

Mobilità IPv6

La mobilità IPv6 fornisce un meccanismo che consente all'host di spostarsi su diversi collegamenti senza
perdere alcuna comunicazione/connessione e il suo indirizzo IP. Questo meccanismo è abbastanza stabile.
La funzionalità di mobilità di IPv6 entra in gioco quando un nodo mobile lascia il suo collegamento principale
e viene collegato ad un link esterno: il nodo mobile acquisisce un indirizzo IPv6 da quest’ ultimo (questo
indirizzo si chiama Care of Address). Successivamente il nodo invia una richiesta di collegamento al proprio
Home Agent segnalando il proprio Care of Address e a quel punto si instaura un tunneling, che verrà rimosso
al momento dell’abbandono da parte del nodo del link esterno.
05. Internetworking:

o 05.01 Address Resolution e ARP.


o 05.02 ICMP e controllo della rete.
o 05.03 DHCP.
o 05.04 Network Address Translation (NAT).

MTU (Maximum Transmission Unit)

L’MTU è la dimensione massima che un pacchetto può assumere quando esso viene inviato nello strato di
rete. Una informazione infatti dovrà essere frammentata in più pacchetti indipendenti, i quali saranno poi
inviati autonomamente utilizzando un determinato protocollo. Ciascun pacchetto non potrà superare la
dimensione indicata dall’MTU. L’MTU naturalmente dipende da vari fattori, quali la tipologia di connessione
(cablata, wireless, …) e anche dallo stato della rete, che può essere congestionata o meno, ecc.ecc. quindi
non avrà una dimensione fissa, ma cambierà nel corso del tempo in maniera consona a problemi che
potrebbero verificarsi.

Una soluzione alternativa all’utilizzo dell’MTU è quella di far frammentare i pacchetti direttamente ai router,
cosa però non comoda in quanto si andrebbe ad appesantire la quantità di calcoli richiesta ai router: infatti,
se il router riceve l’intera quantità di dati che deve essere frammentata, dovrà esso stesso generare un
header IP univoco e tenere traccia in modo autonomo dei numeri di sequenza, dell’offset, ecc.ecc. Questa
problematica ha portato all’implementazione di una frammentazione prima che i pacchetti arrivino al router.

Naturalmente, la MTU deve essere calcolata in modo consono: questa tecnica è chiamata Path MTU
discovery. Consiste nel calcolare l’MTU minima di ciascun collegamento del path che verrà utilizzato per la
connessione. In questo modo, un pacchetto con una dimensione minore della MTU non dovrà essere
frammentato dai router. Per scoprire l’MTU minima, un host invia solamente l’header IP al router, il quale
esaminerà la lunghezza del pacchetto, e nel caso in cui la dimensione indicata nell’header sia troppo grande,
il router invierà un messaggio di errore all’host, il quale provvederà a frammentare il pacchetto così da poter
essere inviato lungo la linea di comunicazione senza superare la dimensione dell’MTU. In questo modo, la
frammentazione del pacchetto è stata rimossa quasi totalmente (in alcuni casi i router devono comunque
frammentare il pacchetto in quanto i livelli in cui si svolge la frammentazione potrebbero non essere a
conoscenza del valore della MTU) dal livello di rete, e viene implementata invece sulle macchine del mittente
e del destinatario. Lo svantaggio principale dell’uso dell’MTU path discovery è che il pacchetto potrebbe
subire dei ritardi in quanto prima dell’invio del primo pacchetto con payload deve essere calcolato il valore
dell’MTU.

Flag DF del pacchetto IP e ICMP

Per far si che il processo della path MTU discovery possa essere eseguito, è importante il campo DF
dell’header IP, ovvero il campo Don’t Fragment. Questo campo, indica che il pacchetto non potrà essere
frammentato dal router, il quale, constatando che il pacchetto sia di dimensioni troppo grandi, invia un
messaggio di errore all’host mittente, che dovrà frammentare diversamente i dati per ottenere pacchetti di
dimensione minore. Il messaggio di errore che il router invia al mittente è relativo al protocollo ICMP
(Internet Control Message Protocol), che indica che il pacchetto, per essere inviato nel path di
comunicazione, dovrà essere frammentato, ma il campo DF settato ad 1 non lo permette, generando un
errore. Nel messaggio di errore ICMP viene anche indicata la dimensione dell’MTU in base alla quale l’host
mittente dovrà frammentare diversamente i suoi dati, permettendogli così di poter essere inviati nel path.
Una volta che la dimensione dell’MTU è stata calcolata, l’host potrà memorizzarla nella sua cache, in modo
tale da non dover ripeter il procedimento per i prossimi dati da inviare. L’host continuerà anche nei prossimi
pacchetti ad impostare il flag DF ad 1, permettendo così di modificare l’effettivo valore dell’MTU in seguito
ad un cambio del path utilizzato o della congestione della rete.

MTU in IPv6

Quando si utilizzano indirizzi IPv6, la frammentazione viene totalmente eliminata nei router, eliminando
quindi ogni possibilità che un pacchetto sia ulteriormente frammentato nei router di passaggio. Un router
quindi, nel caso in cui ricevesse un pacchetto con una dimensione maggiore dell’MTU del collegamento,
scarta il pacchetto, e invia un messaggio ICMPv6 dove informa il mittente che il pacchetto è troppo grande
(inizialmente il pacchetto veniva solo scartato, in seguito è stata aggiunto il messaggio di errore). Per
dimostrare la perdita di importanza della frammentazione in IPv6 rispetto ad IPv4, il campo dedicato alla
frammentazione nell’header IPv4 è stato spostato nel campo Fragmentation dell’header IPv6, che fa parte
dell’estensione e non dell’header IPv6 in se per se.

Per scegliere la dimensione dell’MTU, il mittente ha due possibilità:

- Utilizzare l’MTU di default per il mezzo di trasmissione (1280, che è il requisito minimo che tutte le
reti devono supportare)
- Usare la Path MTU discovery, molto similmente ad IPv4

MTU Path Discovery in IPv6

A differenza di IPv4, come visto, IPv6 non supporta la frammentazione, per cui il processo di path MTU
discovery non si svolgerà nella stessa maniera. L’host mittente invia un pacchetto IPv6 al primo router senza
però specificare il campo Don’t Fragmentation, in quanto in IPv6 tale campo non è previsto nell’header. Il
router quindi si comporta allo stesso modo di IPv4, ovvero una volta appreso che l’MTU del pacchetto è
troppo grande, scarta il pacchetto ed invia all’host mittente un messaggio ICMP Packet Too Big specificando
anche l’MTU che deve essere utilizzata dall’host per poter inviare il messaggio. Il procedimento continua fino
a quando l’host non ha calcolato la MTU che utilizzerà per l’invio del pacchetto.

Tipi di indirizzamento

- MAC (Media Access Protocol)  Livello di accesso alla rete


- IP  livello rete
- IP + Porta  livello di trasporto
- DNS (nomi di dominio)  livello applicazione

Sottostrato MAC (Media Access Protocol)

È il sottostrato compreso tra il livello di rete e il livello datalink. Infatti, quando si ha a disposizione un unico
canale di comunicazione, e tale canale vuol essere utilizzato da più processi che vogliono tutti
contemporaneamente inviare i loro dati tramite la rete, inizia una gara a chi riesce ad accaparrarsi il canale.
Questa gara viene gestita tramite nel sottostrato MAC. Ogni processo etichetterà i pacchetti dei suoi dati con
un header IP tramite il livello di rete, e ogni pacchetto con un header IP dovrà essere mappato con un indirizzo
MAC dell’interfaccia tramite la quale il pacchetto sarà effettivamente inviato. L’indirizzo IP è deciso dal
sistema (impostato automaticamente o manualmente dall’amministratore della rete), mentre l’indirizzo
MAC, un indirizzo a 48 bit suddivisi in 6 byte, è deciso dal costruttore della scheda, ovvero dell’interfaccia.
Per associare l’indirizzo IP all’indirizzo MAC si utilizza il protocollo ARP (Address Resolution Protocol) in IPv4,
mentre si utilizza NDP (Neighbor Discovery Protocol) per IPv6.
Tra l’indirizzo IP e il MAC address di una interfaccia non c’è alcuna correlazione, sono indipendenti, ma
lavorano insieme, cioè uno viene mappato con l’altro. ARP viene utilizzato per tradurre l’indirizzo IP in MAC
address, cioè l’indirizzo della scheda di rete. L’indirizzo logico IP, tramite ARP viene trasformato in indirizzo
fisico MAC.

Supponiamo di voler inviare tramite Ethernet un pacchetto ad un host, conoscendo solamente l’indirizzo
logico, cioè l’IP di destinazione. Il pacchetto viaggia tramite un canale di comunicazione Ethernet, che non
lavora con indirizzi logici, ma tramite indirizzi fisici MAC. Pertanto, il nodo mittente invia una richiesta ARP in
broadcast (cioè con indirizzo FF:FF:FF:FF:FF:FF) a tutti gli host della rete, dove chiede “Chi di voi ha come
indirizzo IP w.x.y.z?”. A questo punto, ogni host della rete riceverà la richiesta ARP, e nel caso in cui il suo
indirizzo IP coincida con w.x.y.z, invia una risposta ARP al nodo mittente. La ARP request è broadcast, mentre
la ARP reply è unicast. Una volta che il mittente conosce il MAC address del destinatario, riesce
effettivamente ad inviare il pacchetto.

I casi possibili di richieste e risposte ARP sono 4:

- Un host deve inviare un pacchetto ad un altro host che è collegato nella stessa rete
- Un host deve inviare un pacchetto ad un altro host che NON è collegato alla stessa rete
- Un router deve inviare un pacchetto ad un host in una rete diversa
- Un router deve inviare un pacchetto ad un host nella sua stessa rete

Per migliorare le performance di ARP, si utilizza la cache. Infatti, dover inviare sempre una ARP request in
broadcast per ogni comunicazione sarebbe molto esoso dal punto di vista delle risorse, oltre al fatto che
limiterebbe la banda del canale di comunicazione. Quindi, quando un host risolve un indirizzo IP, lo mantiene
in cache, in modo tale che se nel caso in cui qualcuno richiedesse di risolvere lo stesso indirizzo IP in un
secondo momento, esso verrà risolto senza dover inviare pacchetti. I dati memorizzati in cache non sono
permanenti. Infatti, un host potrebbe cambiare indirizzo IP, e quindi la entry nella tabella di cache sarebbe
invalida, un altro problema è lo spazio di memoria, con la cache che non può avere memoria infinita. Si utilizza
quindi la tecnica di cancellare una entry dopo un determinato tempo (20 minuti normalmente). Un modo
intelligente per aiutare a mantenere aggiornate le informazioni memorizzate nella cache e per ottimizzare le
prestazioni è far sì che ogni macchina trasmetta la propria mappatura quando è configurata. Questa
trasmissione viene generalmente eseguita sotto forma di un ARP looking che cerca il proprio indirizzo IP. Non
ci dovrebbe essere una risposta, ma un effetto collaterale della trasmissione è di effettuare o aggiornare una
voce nella cache ARP di tutti. Questa implementazione è nota come gratuitous ARP. Se arriva una risposta
(inaspettatamente), a due macchine è stato assegnato lo stesso indirizzo IP. L'errore deve essere risolto dal
gestore della rete prima che entrambe le macchine possano utilizzare la rete.

Nel caso in cui l’host da raggiungere non si trovi nella rete, la richiesta ARP viene inviata al router della rete
(che di solito ha come indirizzo x.y.z.1). Il router elaborerà la richiesta ARP e la inoltrerà tramite gli opportuni
algoritmi di routing alla rete di destinazione, che a sua volta elaborerà il pacchetto utilizzando ARP per
scoprire il MAC address del destinatario, per poi infine inviare effettivamente il messaggio tramite Ethernet
(o wireless o altri metodi di comunicazione) all’host destinatario. Questo tipo di ARP è detto proxy ARP.

ARP bridge

Un bridge è un host con due interfacce, una per ogni rete. Quando una richiesta ARP cerca di risolvere un
indirizzo IP di un’altra rete, e le due reti sono collegate da un bridge, il bridge riceve la richiesta ARP in
broadcast e risponde al mittente direttamente con il suo indirizzo MAC. A questo punto, l’host mittente pensa
di interagire direttamente con l’host destinatario, quando invece sta interagendo con il bridge, che ricevuto
il pacchetto, lo elaborerà, e lo inoltrerà a sua volta al vero host destinatario in un secondo momento. Questo
permette di semplificare la comunicazione, in quanto l’host mittente e l’host destinatario credono di essere
nella stessa rete. L’ARP bridging è molto utile per unire più piccole reti, ma nel caso in cui le reti da collegare
siano di grandi dimensioni, non sarebbe più efficiente.

ARP Spoofing

È la tecnica di attacco che consiste nel mandare richieste ARP fasulle o rubate in una rete per ottenere il MAC
di una macchina, che sarà poi utilizzato visto che a quel punto la comunicazione può effettivamente avvenire.
Per prevenire questo tipo di attacco, le possibili soluzioni sono:

- Tabelle di ARP statiche (ma è impensabile di aggiornare manualmente tutte le tabelle se si lavora in
una rete di moltissimi host)
- DHCP snooping (viene controllato che un host utilizzi solamente l’host che gli è stato assegnato dal
DHCP e analizza la sicurezza dei server DHCP)
- Software come ARPWatch (inviano mail quando occorre eseguire un aggiornamento).

Un utilizzo legittimo di questo tipo di attacco è la reindirizzazione verso un’altra pagina, come ad esempio al
sito Paypal prima di poter effettivamente pagare l’acquisto.

ICMP (Internet Control Protocol Message)

ICMP è un protocollo utilizzato per la notifica di errori che si possono verificare in determinate situazioni
durante una comunicazione. Il suo scopo è proprio quello di fornire un feedback sulle comunicazioni. ICMP
può essere utilizzato da un router o da un host.

Un pacchetto ICMP è formato da:

- Tipo  il tipo di servizio fornito. C'è un numero specifico per ogni servizio
- Code  codice dell’errore che specifica il problema che si è verificato
- Checksum  campo di controllo utilizzato quando il pacchetto ICMP è un ONLY
- Parameters  utilizzato in particolari pacchetti ICMP per lo scambio di informazioni
- Additional Info  include informazioni aggiuntive riguardo l’errore o l’azione che il pacchetto
descrive

Esempi di messaggi ICMP

- Destination Unreachable Message  la rete non è raggiungibile, il servizio richiesto non è attivo in
nessuna porta, il pacchetto ha MTU troppo grande
- Source Quench Message  il gateway non ha buffer a disposizione per gestire la richiesta
- Redirect Message  un router, consultando la sua tabella, scopre che esiste un path più efficiente
rispetto a quello che vuole effettivamente seguire il pacchetto
- Echo Request/Echo Reply Message  quando un host vuole testare se una comunicazione con un
determinato host può essere svolta  un host A invia una ECHO REQUEST all’host B con
identificatore 5030 e sequence number 40. L’host B, se è davvero raggiungibile e quindi è possibile
iniziare una comunicazione, invierà una ECHO REPLY dove invertirà la stringa contenuta nel pacchetto
payload, e manterrà gli stessi identificatori e sequence number.
- Time Exceeded Message  un router riceve un messaggio con TTL = 0 o Hop = 0, oppure quando un
host, mentre riassembla i frammenti, non riesce a completare l’operazione a causa di pacchetti
mancanti che non sono arrivati facendo scadere il timer.
- Parameter Problem Message  l’header di un pacchetto contiene errori (nel messaggio di errore
viene indicato un puntatore per identificare l’errore).
- Timestamp /Timestamp Reply Message  quando un host vuole calcolare il ritardo della
comunicazione.
- Information Request  quando un host richiede informazioni sulla rete sul quale esso si trova (l’host
fa una richiesta con indirizzo IP 0.0.0.0 che indica la rete stessa, l’host gestore della rete risponde con
le informazioni della rete).

ICMP versione 6

L’implementazione di ICMP nella versione 6 è molto simile alla versione IPv4, con alcune differenze:

- Include uno pseudo-header nel calcolo della sua checksum, in quanto il campo checksum non è
inserito negli indirizzi IPv6
- ICMPv6 è una parte integrante di IPv6, e ogni nodo che utilizza un indirizzo IPv6 deve per forza
implementare anche ICMPv6.

Viene utilizzato molto spesso come strumento di diagnostica della rete, come per esempio per testare la
raggiungibilità (ping).

Messaggi di ICMPv6

I messaggi di ICMPv6 sono suddivisi in due categorie:

- Messaggi di errore  sono identificati dal fatto di avere uno 0 come bit più significativo nel campo
Type (quindi da 0 a 127)
- Messaggi di informazione (da 128 a 255)

Quando un host intende mandare un messaggio IPv6, deve specificare nell’header del pacchetto ICMP sia
l’indirizzo IPv6 del mittente che del destinatario prima di calcolare il campo checksum. Se un host ha più di
un indirizzo IPv6 unicast allora:

- Se il messaggio è una risposta ad una richiesta effettuata su uno dei suoi indirizzi unicast, allora il
Source Address della risposta deve essere lo stesso di quello in cui ha ricevuto la richiesta.
- Se il messaggio è una risposta ad una richiesta inviata a più host (multicast o anycast), allora il Source
Address della risposta dovrà essere unicast e deve essere lo stesso dell’interfaccia in cui il pacchetto
è stato ricevuto.
- Se il messaggio è una risposta ad una richiesta inviata ad un indirizzo che non appartiene all’host, il
Source Address della risposta dovrà essere quello che permetterà di effettuare una diagnostica
migliore dell’errore.
- Altrimenti, in un altro caso generale, dovrà essere visitata la tabella di routing dell’host per capire
tramite quale interfaccia dovrà essere inviato il pacchetto.

Quando viene implementato un servizio di messagistica IPv6, si devono rispettare le seguenti regole:

1. Se viene ricevuto un messaggio di errore ICMPv6 di tipo sconosciuto, DEVE essere passato allo
strato superiore.

2. Se viene ricevuto un messaggio informativo ICMPv6 di tipo sconosciuto, DEVE essere scartato
silenziosamente.

3. Ogni messaggio di errore ICMPv6 include la maggior parte del pacchetto offensivo IPv6 (il
pacchetto che ha causato l'errore) come si adatta senza rendere il messaggio di errore il pacchetto
supera la MTU IPv6 minima. (?)
4. Nei casi in cui è richiesto il protocollo di livello Internet per passare un messaggio di errore ICMPv6
al processo di livello superiore, il protocollo di livello superiore viene estratto dal pacchetto originale
(contenuto nel corpo del messaggio di errore ICMPv) e utilizzato per selezionare il processo di livello
superiore appropriato per gestire l'errore.

5. Un messaggio di errore ICMPv6 NON DEVE essere inviato a seguito della ricezione di:

(1) un Messaggio di errore ICMPv6;

(2) un pacchetto destinato a un indirizzo multicast IPv6;

(3) un pacchetto inviato come multicast a livello di collegamento;

(4) un pacchetto inviato come broadcast a livello di collegamento;

(5) un pacchetto il cui Source Address non identifica in modo univoco a nodo singolo.

6. Infine, al fine di limitare la larghezza di banda e i costi sostenuti per l'invio messaggi di errore
ICMPv6, un nodo IPv6 DEVE limitare la frequenza con la quale invia messaggi di errore ICMPv6.

I classici messaggi ICMPv6 sono gli stessi di ICMPv4.

DHCP (Dynamic Host Configuration Protocol)

DHCP è un protocollo di comunicazione che permette ad una macchina, appena essa è avviata, di richiedere
ed ottenere tramite il DHCP server, un indirizzo IP per la rete LAN in cui la macchina si trova. In questo modo,
un eventuale amministratore di rete, non dovrà manualmente configurare tutte le macchine della LAN, ma
dovrà solamente configurare il DHCP server che assegnerà gli indirizzi IP automaticamente. DHCP è
un’estensione del protocollo di Bootstrap BOOTP, ovvero il protocollo che viene utilizzato all’avvio di una
macchina per le configurazioni iniziali.

DHCP è un protocollo di livello applicazione, ma viene utilizzato per assegnare indirizzi IP, cioè indirizzi di
livello di rete. DHCP supporta 3 possibili modi con cui assegnare indirizzi IP:

- Configurazione Automatica  assegnazione di un indirizzo IP che rimarrà associato alla macchina per
sempre.
- Configurazione Dinamica  assegnazione di un indirizzo IP temporaneo con tempo di lease.
- Configurazione Manuale  configurazione manuale degli indirizzi IP

Meccanismo DHCP

Nel momento in cui una macchina viene avviata, essa ha di default l’indirizzo IP 0.0.0.0, che sta ad indicare
“questa rete”. Collaborando con il protocollo BOOTP, inizia il meccanismo di richiesta dell’indirizzo IP.
All’avvio, la macchina invia una richiesta con un pacchetto DHCP DISCOVER, che viene inoltrato in broadcast
e che viene raccolto dal DHCP server. A questo punto, il DHCP server confronta i suoi file di configurazione,
e sceglie un indirizzo IP libero da assegnare alla macchina. L’indirizzo IP offerto viene incapsulato in un
pacchetto DHCP OFFER, che viene inviato non in broadcast, ma in unicast alla macchina richiedente,
utilizzando il MAC address della macchina stessa.

I tipi di pacchetti DHCP sono:

- DHCP DISCOVER
- DHCP OFFER
- DHCP REQUEST  messaggio inviato da una macchina al server per (1) accettare la configurazione
offerta nel pacchetto DHCP OFFER (2) richiedere la vecchia riconfigurazione in seguito ad esempio ad
un riavvio (3) aumentare il tempo di lease (tempo in cui un indirizzo IP viene assegnato ad una
macchina. Infatti, allocare in maniera definitiva un IP ad una macchina che poi non verrà più utilizzata
nella rete non è una scelta ottimale. Pertanto si utilizza il tempo di lease, che una volta scaduto porta
ad una nuova configurazione DHCP)
- DHCP ACK  messaggio con cui il server DHCP conferma la configurazione ad una macchina
- DHCP NAK  messaggio con cui il server DHCP comunica ad una macchina che la sua configurazione
di rete è incorretta oppure che il suo tempo di lease sta per scadere
- DHCP DECLINE  messaggio con cui una macchina comunica al DHCP server che ha un indirizzo IP
già configurato
- DHCP RELEASE  messaggio con cui la macchina comunica al DHCP server che rilascia l’indirizzo IP
che potrà quindi essere riutilizzato
- DHCP INFORM  richiesta della macchina al DHCP server di alcune configurazioni locali, non di un
indirizzo IP che invece è già settato

Meccanismo completo per ottenere un indirizzo IP NUOVO

1. Il client invia in broadcast una DHCP DISCOVER


2. Uno o più server inviano al client una DHCP OFFER con un indirizzo IP offerto
3. Il client invia in broadcast una DHCP REQUEST specificando l’indirizzo IP scelto tra quelli che gli sono
stati offerti
4. Il server che ha offerto l’indirizzo IP che è stato scelto invia un DHCP ACK al client specificando altre
configurazioni
5. Una volta ottenuta tutta la configurazione, il client può decidere se accettare la configurazione
oppure eventualmente rifiutarla con un DHCP DECLINE
6. Una volta che la configurazione è stata completata, ed il tempo di lease è scaduto o il client non
utilizza più l’indirizzo IP, il client comunica al server che il suo indirizzo potrà essere riutilizzato con
una DHCP RELEASE.

Se invece il client richiede un indirizzo IP dopo che è stato riavviato, ed il tempo di lease non è ancora scaduto,
ad esso viene riassegnato lo stesso vecchio0 indirizzo, con il DHCP server che non dovrà andare a modificare
la sua tabella aggiungendo una nuova entry, ma andrà semplicemente a consultarla.

Ulteriori miglioramenti di DHCP sono avvenuti permettendo l’integrazione con DNS, permettendo
l’assegnazione di indirizzi multicast, includendo un’analisi della rete per eliminare dei DHCP server non
ufficiali, e permettendo di organizzare più DHCP server per una maggiore stabilità.

NAT (Network Address Translation)

Viene utilizzato per tradurre un indirizzo IP privato di un host all’interno di una LAN in un IP pubblico che
verrà poi utilizzato per navigare effettivamente in una internetwork. Il servizio NAT viene eseguito nei router
che collegano una rete privata ad una rete pubblica (Internet). Un servizio NAT utilizza una tabella, nella quale
ciascuna entry ha una correlazione tra l’indirizzo IP privato e l’indirizzo IP pubblico utilizzato poi
effettivamente per permettere comunicazioni con un host di un’altra rete. Un NAT potrebbe gestire un solo
IP pubblico o potrebbe gestirne un pool, ovvero più indirizzi da associare ad un indirizzo IP privato che vuole
eseguire una comunicazione. Nel caso in cui il servizio NAT abbia a disposizione più indirizzi IP pubblici, dovrà
sceglierne uno da assegnare all’host per poter comunicare in Internet. Nel momento in cui una risposta arriva
al NAT, il NAT dovrà scegliere a quale IP privato della rete instradare la risposta. Per far questo si utilizza la
porta del servizio richiesto, che è incapsulata nel pacchetto ricevuto dal box NAT.

Gli indirizzi pubblici che il NAT può utilizzare sono indicati dall’ISP di riferimento. Nel caso in cui si cambi ISP,
deve esserci una conseguente migrazione e modifica della tabella di NAT, che non risulta però essere visibile
agli host. Esiste il NAT statico (assegnazione di un indirizzo IP pubblico ad uno privato in maniera
permanente), e il NAT dinamico (quando un host con indirizzo IP privato vuole comunicare con Internet, gli
viene assegnato il primo IP pubblico disponibile nel pool di indirizzi pubblici).

NAPT e PAT (Network Address and Port Translation e Port Address Translation)

È la tecnica che permette il funzionamento di NAT. Se una rete infatti avesse a disposizione un solo indirizzo
IP pubblico con il quale uscire sulla rete Internet, deve gestire il caso in cui più processi diversi vogliano
comunicare nello stesso tempo con host in reti diverse dalla loro, cioè vogliono utilizzare nello stesso tempo
il solo indirizzo IP pubblico. Per le richieste in uscita dalla rete il problema non sorge, infatti il NAT cambia
l’indirizzo IP privato con quello pubblico donato dall’ISP, ma nel momento in cui arriva la risposta dall’host
della rete diversa, il NAT dovrà instradare i pacchetti solamente al processo che li ha effettivamente richiesti.
In questo caso quindi il NAT associa l’indirizzo IP privato ad una porta, in modo tale che quando la risposta
tornerà al NAT, essa conterrà anche la porta dalla quale è partita la richiesta, permettendo di risalire al
processo che ha effettivamente richiesto i dati.

Bilanciamento del carico dei server

Un dispositivo NAT può essere utilizzato anche per bilanciare il carico dei server. Se infatti una rete ha a
disposizione più server, sarebbe buona cosa bilanciare il carico di richieste che uno dei server dovrà gestire.
Si utilizza quindi un NAT che effettua la traduzione degli indirizzi per reindirizzare le richieste ai diversi server:
a ciascun server verrà dato un indirizzo IP privato, che verrà poi tradotto in pubblico con il classico
funzionamento di NAT. In questo modo, un servizio con 3 server permetterà di gestire in maniera più
efficiente un grande carico di richieste, che verranno divise tra i 3 server al posto di farle gestire tutte ad un
unico server. Un buon metodo utilizzato è il round-robin.

Conclusioni su NAT

L’ostacolo più grande che NAT deve sostenere è il calcolo della traduzione dell’indirizzo IP. Infatti, per
cambiare un indirizzo IP è necessario ricalcolare completamente l’header del pacchetto. Inoltre, dovrà
modificare anche l’header TCP, in quanto viene cambiata anche la porta del pacchetto per permettere di
gestire più richieste con un unico indirizzo IP pubblico a disposizione. NAT deve inoltre porre attenzione alla
frammentazione del pacchetto. Infatti, se una richiesta è stata frammentata in più pacchetti, a tutti i
pacchetti dovrà essere assegnata lo stesso indirizzo IP la stessa porta NAT; nel caso in cui venissero
erroneamente assegnati un indirizzo e una porta diversa, la richiesta non avrà esito positivo vista la mancanza
di pacchetti. Un ulteriore problema dell’utilizzo di NAT è l’implementazione del tunneling, che rimane più
difficile visto che tutte le richieste avvengono tramite un solo indirizzo IP pubblico. La tecnica di NAT distrugge
in maniera brutale quella che inizialmente era l’obiettivo della rete Internet, ovvero la comunicazione end-
to-end. Infatti, non vi è più un collegamento diretto tra due host, ma al contrario essi sono filtrati dal NAT.
Un host nella rete pubblica NON potrà mai iniziare una comunicazione con un host nella rete privata: infatti
l’host nella rete pubblica conosce solo l’indirizzo pubblico utilizzato dal NAT, non quello privato dell’host con
cui vuole comunicare, né tantomeno la porta a cui esso è associato, non avendo quindi le informazioni
necessarie che gli permettono di comunicare. NAT individua tutti i pacchetti che girano all’interno della rete.
Nel momento in cui NAT analizza un pacchetto e trova un header IP in un pacchetto di livello applicazione,
procede alla traduzione secondo le regole impostate.
06. Tecnologie di accesso:
o 06.01 Internet trending.
o 06.02 Local loop e vecchie tecnologie.
o 06.03 xDSL.
o 06.04 Tecnologia d'accesso in fibra ottica.
o 06.05 Fixed Wireless Access.

Struttura del sistema telefonico

Ci sono 3 principali possibili implementazioni del sistema telefonico:

- Tutti i telefoni in una città sono tutti interconnessi tra di loro tramite cavo, implementazione buona
all’inizio quando c’erano pochi telefoni ma poi diventata ingestibile con l’aumento esponenziale dei
dispositivi telefonici
- Switch centralizzato  tutti i telefoni inviano la chiamata ad uno switch centrale che la instrada nella
linea corretta del destinatario (ogni telefono è connesso allo switch centrale)
- Gerarchia multi-livello  avere più switch organizzati in livelli principali, secondari, ecc.ecc.

Naturalmente, la struttura utilizzata al giorno d’oggi è la terza, con 4 livelli di gerarchia. Ogni telefono
possiede due cavi, che si connettono alla centrale del provider più vicina a loro (local central office). Questi
due cavi sono chiamati local loop. Quando un utente vuole effettuare una chiamata ad un altro utente, il suo
telefono si connette al local central office: nel caso in cui l’utente a cui è rivolta la chiamata sia collegato allo
stesso local central office, viene instaurata una connessione diretta tra i due interlocutori, che dura per tutta
la durata della chiamata, mentre nel caso in cui il destinatario della chiamata non sia collegato allo stesso
local central office, sarà necessario passare la chiamata al local central office a cui è collegato il destinatario.
I collegamenti tra più local central office sono chiamati trunk. Una rete telefonica è quindi composta da:

- Local loops  coppia di cavi analogici collegati ad un telefono


- Trunks  cavi in fibra ottica che trasportano segnali digitali tra più switching office
- Switching office  uffici in cui una chiamata viene smistata

I local loops trasportano segnali analogici (voce sottoforma di voltaggio elettrico), mentre i trunks
trasportano segnali digitali tramite canali in fibra ottica. I segnali digitali sono preferiti ai segnali analogici per
trasportare informazioni, poiché non è necessario riprodurre accuratamente un’onda analogica al momento
della ricostruzione del segnale, ma basterà ricostruire una sequenza di campioni (0 o 1). Tutto questo rende
il trasferimento in digitale più affidabile e più economico.

Architettura delle reti

- Backbone Network  reti che interconnettono e permettono lo scambio di informazioni tra più reti
LAN.
- MAN Metropolitan Area Network rete che connette utenti con i loro device a risorse in un’area
geografica come una provincia o una regione, più grande di una LAN ma più piccola di una WAN.
- Access Network  è la rete che collega effettivamente un utente da casa sua alla centrale telefonica
a cui esso è abbonato, la quale permetterà poi di ottenere una connessione ed un servizio internet.
È la classica connessione in fibra ottica (chiamata PON Passive Optical Network) che permette di
collegarci all’ISP per ottenere una connessione ad Internet.

Il problema principale risiede nell’access network e nella sua scarsa capacità di trasmissione. Infatti, i
contenuti nelle MAN e nelle backbone network sono cresciuti esponenzialmente, mentre le capacità
trasmissive delle access network non sono cresciute di pari passo, creando il collo di bottiglia chiamato
l’ultimo miglio. Infatti, sempre più utenti richiedono sempre più contenuti, e tutti devono passare per la
stessa access network, che però ha una velocità di trasmissione che non riesce a crescere di pari passo con
la richiesta dei servizi.

Local loops e trasmissione dei segnali

I local loops, come detto prima, sono i due classici cavi (doppino telefonico) che escono dal modem e sono
collegati al local central office del gestore più vicino. In questo tratto, i segnali sono trasmessi in maniera
analogica, ovvero con voltaggi elettrici ed onde. Una volta arrivati al local central office (chiamato anche end
office), avviene la conversione in digitale tramite un codec. Una volta convertito, il segnale passa tramite i
trunks in fibra ottica a media velocità per arrivare ad uno dei toll office (il livello gerarchico superiore che
gestisce gli end office). Una volta qua, il segnale potrà usufruire dei trunks in fibra ottica ad alta velocità per
arrivare eventualmente ad altri toll office, fino ad arrivare agli ISP. Alcuni problemi che potrebbero incorrere
durante la trasmissione del segnale sono l’attenuazione, la distorsione (dovuta al cambio di frequenza e di
velocità di trasmissione) e il rumore.

Modem

Il modem è il dispositivo che permette di codificare e decodificare un segnale da analogico a digitale o


viceversa. La sua funzione è molto importante, in quanto come visto precedentemente, trasmettere segnali
digitali porta notevoli benefici. La modulazione viene effettuata tramite un filtro passabanda, che va a
modificare una delle 3 componenti che caratterizzano un segnale analogico:

- Ampiezza  ASK (Amplitude Shift Keying)


- Frequenza  FSK (Frequency Shift Keying)
- Fase  PSK (Phase Shift Keying)

In base ai livelli utilizzati per rappresentare un segnale (ex. due frequenze per rappresentare gli 0 e gli 1 di un
segnale digitale, due ampiezze per rappresentare gli 0 e gli 1 di un segnale digitale, ecc.ecc.), ad un modem
viene assegnata una costellazione, ovvero un diagramma in cui tramite il numero dei puntini presenti, ogni
modem indica le combinazioni ammesse di fase e ampiezza. Alcuni esempi di possibili combinazioni sono
QPSK, cioè 4 valide combinazioni ammesse e 2 bit per simbolo possono essere trasportati, QAM-16, cioè 16
possibili combinazioni e 4 bit per simbolo, o QAM-64, che supporta 64 combinazioni e 6 bit per simbolo.

ADSL Asymmetric Digital Subscriber Line

È una tecnologia di accesso che prevede uno spettro di frequenza di 1.1 Mhz. La banda è a sua volta suddivisa
in 256 canali, ciascuno con una grandezza di circa 4000 Hz. Il canale 0 è riservato e chiamato POTS, cioè Plain
Old Telephone Service, e viene utilizzato per permettere il funzionamento delle telefonate, ovvero del
trasporto del segnale vocale. Subito dopo il canale 0, ci sono i canali dall’ 1 al 5 che sono riservati e non sono
utilizzati (servono per avere una frequenza nulla in modo tale da non creare interferenze tra segnali voce e
segnali data), per poi arrivare agli altri 250 canali che sono divisi in canali per upstrem e downstream (quelli
per downstream sono molto di più di quelli upstrem, infatti la velocità in download è sempre maggiore di
quella in upload). Il fatto che i 250 canali siano divisi in maniera non equa, dà il nome Asymmetric alla
connessione DSL. In ogni canale è utilizzata la modulazione v.34. Teoricamente, con 224 canali per il
download è possibile ottenere una velocità di 13.44 Mbps, ma in pratica si raggiungono sempre intorno agli
8 Mbps.

VDSL Very-High-Bit-Rate Digital Subscriber Line

È una tecnologia di accesso più rapida di ADSL, che permette velocità come 52 Mbps in download e 16 Mbps
in upload. La banda utilizzata da VDSL è da 25 KHz a 12 MHz. VDSL, utilizzano questo spettro di frequenze,
permette lo stream di contenuti in alta definizione, servizio di chiamate VoIP.

Attenuazione del segnale

L’attenuazione del segnale trasmesso è data dal rapporto tra segnale e rumore, abbreviato con SNR (Signal
to Noise Ratio). Un SNR alto significherà che la potenza del segnale rispetto alla potenza del rumore è molto
maggiore, ovvero più è alto l’SNR migliore sarà la connessione. Avendo un SNR maggiore, sarà possibile
trasportare più bit per tono. Da tenere conto anche l’attenuazione del segnale dovuta alla lunghezza del
collegamento: infatti, se un segnale deve essere trasportato per una lunga tratta, avverrà anche
un’attenuazione minore rispetto a quella che avverrebbe nel caso in cui si trasportasse il segnale in una tratta
molto più corta.

Reti ottiche

È una rete di telecomunicazione i cui collegamenti sono fatti in fibra ottica. Permettono di raggiungere alte
performance. Sono composte da:

- Nodi ottici  uniscono tra loro i vari collegamenti in fibra


- Stazioni di accesso  collegano i dispositivi alla rete

Riducono i costi di comunicazione e aumentano la competizione tra gli ISP, infatti, permettendo di
implementare i servizi più recenti e più efficienti, aumenterà anche la richiesta da parte degli utenti.
Risolvono problemi come la maggior larghezza di banda richiesta dagli utenti, ma anche delle aziende stesse.
Inoltre permette la liberizzazione dell’industria telefonica, con la telefonia che ormai utilizza VoIP e non più i
servizi analogici del passato.

Di reti ottiche ne esistono 2 generazioni:

- Prima generazione  le prime reti ottiche, erano composti da dispositivi ottici che sono utilizzati per
ottenere una capacità di banda maggiore. Le funzioni di commutazione sono gestite da dispositivi
elettronici. Esempi: SONET (Nord America), SDH (Europa e Asia)
- Seconda generazione  nascono per risolvere il collo di bottiglia dei dispositivi elettronici che non
riescono più ad elaborare in maniera efficiente tutte le richieste che arrivano ai nodi. Sono stati
inseriti elementi intelligenti come switching routing e multiplexing che permettono di non dover far
eseguire solamente ai dispositivi elettronici tutte le elaborazioni richieste nelle reti di prima
generazione.

Nelle reti ottiche usate al giorno d’oggi (seconda generazione), esiste una divisione a strati:

- Strato fisico  componenti hardware (fili che lasciano passare il segnale senza nessuna operazione)
che offrono servizi ai componenti del livello data link chiamati logical network (LN)
- Data link  contengono dispositivi elettronici che eseguono operazioni particolari ai segnali, come
smistamento o routing, cioè contengono le LN.

Lo strato ottico (data link) ha il compito di:

- Multiplexare i segnali in entrata con diverse lunghezze d’onda per farli passare tutti nello stesso cavo
ottico
- Ottenere dal cavo ottico solo le informazioni a cui un utente finale è interessato
- Utilizzare tecniche complesse per il recupero dei dati
- Gestire il percorso che deve seguire il segnale, svolgendo una sorta di routing

Vantaggi della divisione in livelli per reti ottiche

1. Permette di dividere l’organizzazione della rete composta da cavi fisici veri e propri dalla gestione
delle reti ottiche che ne fanno uso
2. Permette di condividere risorse tra più reti ottiche logiche diverse
3. Permette di creare reti logiche per usi specifici senza dover andare a modificare anche le reti ottiche
fisiche
4. In caso di modifiche, solo le reti logiche dovranno essere modificate, in quanto sono esse che
gestiscono come i dati vengono inviati all’intero delle reti ottiche fisiche
5. Permette una migliore scalabilità dei servizi

Reti PON Passive Optical Network

Vengono usate nelle reti di accesso e operano in una struttura punto-multipunto. Viene utilizzato uno
splitter, ovvero un dispositivo a cui sono collegate direttamente gli end user (case, aziende), il quale si
connetterà poi con un unico collegamento alla centrale. Ogni utente quindi avrà un collegamento univoco
verso lo splitter, il quale tramite una unica infrastruttura ottica si connetterà alla centrale. L’utilizzo di uno
splitter risulta molto comodo in quanto posso decidere quanta banda farò utilizzare ad un determinato
utente (in base all’abbonamento, ecc.ecc.). Questo tipo di infrastruttura permette di utilizzare un numero
minore di comunicazioni in fibra ottica (N utenti avranno bisogno di N+1 connessioni in fibra), inoltre si potrà
aumentare la distanza dei collegamenti, visto che la fibra ottica è più performante dell’ADSL o della VDSL.

Struttura di una rete PON

Una rete PON è composta da una centrale principale dell’ISP, chiamata OLT (Optical Line Terminal), una unità
di dimensioni minore a cui sono collegate più abitazioni, chiamata ONU (Optical Network Unit), e un
dispositivo utilizzato nella connessione in fibra direttamente da casa chiamato ONT (Optical Network
Terminal).

FTTC Fiber To The Cabinet

La connessione in fibra ottica che parte dalla centrale arriva fino alla cabina del quartiere, alla quale gli utenti
finali sono connessi tramite una normale linea in rame. L’MDU (Multi Dwelling Unit), che si occupa di dividere
la connessione in fibra tra i vari edifici, è installato nella cabina. Le velocità offerte sono 2.5 Gbps in download
e 1.25 Gbps in upload
FTTB Fiber To The Building

In questo caso il collegamento in fibra ottica arriva direttamente all’edificio, al condominio o ad una schiera
di condomini. Non sarà presente l’MDU, ma l’ONU, che è installata direttamente negli edifici, e non è gestita
dagli ISP, ma ai costruttori degli edifici che al posto di cablare la casa con i fili in rame, la cablano direttamente
con collegamenti in fibra ottica. Le velocità sono le stesse di FTTC.

FTTH Fiber To The Home

Il collegamento in fibra arriva direttamente nella singola unità abitativa, nella quale è presente una scatola a
muro dove è installato l’ONT (Optical Network Terminal).

Con il tempo, PON è stato migliorato con altre reti come GPON, xGPON che permette download fino a 10
Gbps, nGPON che permette 10Gbps in upload e fino a 40Gbps in download, ecc.ecc.

Tipologie di multiplexing

1. TDM (Time Division Multiplexing)  a ciascun utente viene assegnato un time slot per ricevere e uno
per trasmettere. Sono più facili delle WDM. Il problema risiede nel fatto che hanno una scalabilità
peggiore.
2. WDM (Wavelength Dvision Multiplexing)  ad ogni segnale viene assegnata una lunghezza d’onda
chiamata colore, in modo tale da poter ricavare le informazioni che mi servono in qualsiasi nodo della
rete andando a selezionare solo le frequenze che mi interessano. Ad ogni cliente assegno due colori,
uno per upload e uno per download.

ONU, ONT e OLT

ONT  è un apparato attivo (deve essere alimentato) che converte il segnale ottico in segnale elettrico. Ci
sono due tipi di ONT, esterni o interni (cioè già implementati) nel router di casa. Ogni ONT ha un 3 canali, uno
per la trasmissione di voce e dati, uno per la ricezione di voce e dati, e uno per la ricezione di video.

ONU  svolge lo stesso lavoro di un ONT, ma è un dispositivo a cui sono collegati più router di più abitazioni.
Tra le abitazioni e l’ONU c’è un’altra rete, che può essere in fibra o in rame, in coassiale, ecc.ecc.

OLT  è un apparato implementato nella centrale dell’ISP, ed è collegato ai vari ONU o agli ONT. Riceve molti
segnali di più utenti diversi, e li multiplexa per trasmetterli in un solo canale. Ogni OLT ha due canali, uno per
la voce e uno per i dati.

Splitter e Splitter Combined

- Splitter  riceve dall’OLT una sola linea in fibra ottica, e la divide per raggiungere più ONT o ONU.
- Splitter Combined  riceve dagli ONU o dagli ONT più flussi di fibra e gli multiplexa un una sola
comunicazione in fibra.
07. Reti senza fili:
o 07.01 Wireless LAN (standard IEEE 802.11).
o 07.02 Bluetooth.
o 07.03 Wireless Personal Area Network.
o 07.04 Il sistema telefonico mobile.
o 07.05 Evoluzione del sistema cellulare - 5G

Comunicazioni wireless

Comunicazioni che avvengono tramite onde e non tramite connessioni cablate. Ogni tipologia di onda ha una
determinata frequenza e lunghezza d’onda. Una grande distinzione che può essere fatta tra le onde utilizzate
per la trasmissione di dati è:

- Onde ionizzanti  modificano il DNA, comprendono raggi X e raggi Gamma


- Onde non ionizzanti  non modificano il DNA, inducono corrente e riscaldamento, comprendono
onde radio e microonde.

Le comunicazioni che saranno analizzate funzionano tramite le onde radio, che comprende comunicazioni
tra 10 Km e 10 cm.

Lo spettro delle onde radio è suddiviso in bande di frequenza, che si contraddistinguono per capacità
trasmissiva e copertura. Le frequenze radio più basse assicurano una copertura più ampia, ma una capacità
trasmissiva minore; discorso inverso per le frequenze radio più alte, con bassa copertura e alta capacità
trasmissiva. Lo spettro radio è regolato dal Piano Nazionale di Ripartizione delle Frequenze (PNFR), che
stabilisce come partizionare le frequenze, visto che si tratta di una risorsa limitata. La banda non assegnata a
scopi particolari e libera per dispositivi creati ad utenti è quella 2.4 GHz e 5Ghz, chiamata banda ISM.

Standard 802.11  Wireless Connection

La prima versione viene rilasciata nel 1997. Inizialmente, la connessione prevedeva una velocità di
comunicazione di 1 o 2 Mbps, sfruttando la frequenza 2,4 GHz. Successivamente, la prima versione è stata
aggiornata, e si è divisa in due sottogruppi:

- 802.11 a  ha rilasciato uno standard di comunicazione che utilizza la banda di 5GHz e trasmette su
canali non sovrapposti, con una velocità di connessione fino a 54 Mbps (reali circa 20 Mbps)
- 802.11 b  ha modificato e rilasciato lo standard che continua a lavorare sulle frequenze 2.4 GHz
trasmettendo su un unico canale il cui accesso è regolato tramite CSMA/CA (Carrier Sense Multiple
Access with Collision Avoidance). Tramite CSMA/CA il controllo di accesso al canale satura la banda,
che quindi come velocità massima teorica indicava 11 Mbps, ma che in pratica arriva fino a 6 Mbps.

Poi a sua volta in altri 2 standard che sono arrivati nel 2002:

- 802.11 g  tenta di combinare gli standard 802.11 a e b. Supporta come larghezza di banda fino a
54 Mbps ed è retrocompatibile con 802.11 b.
- 802.11 n  è stato concepito per migliorare 802.11 g, aumentando la larghezza di banda disponibile
tramite l’uso di più antenne wireless (tecnologia MIMO). Supporta una larghezza di banda fino a 300
Mbps.
Architettura di una rete 802.11

Ci sono più strutture possibili:

- Ad infrastruttura  esiste un access point AP, che solitamente è collegato poi ad una rete cablata, e
che funge da intermediario a tutte le richieste dei dispositivi collegati. Se due dispositivi nella rete
vogliono comunicare fra di loro, dovranno comunque passare per l’AP. L’insieme di più dispositivi
che si connettono ad un unico AP è chiamato BSS, cioè Basic Service Set, l’insieme di più BSS è
chiamato ESS Extended Service Set.
- Ad hoc  non esistono i BSS ma i due dispositivi si connettono direttamente l’uno all’altro formando
un canale di comunicazione.

Tecniche di trasmissione

La tecnica utilizzata all'origine per le trasmissioni radio è detta trasmissione a banda stretta e consiste nel
trasmettere diverse comunicazioni su canali differenti. Questo comporta però problematiche come:

- Non uso in maniera efficiente la banda  ex. se suddivido la banda in più canali, ma molti dei canali
non sono utilizzati, spreco della banda.
- Se utilizzo tutta la banda, non ho banda necessaria per gestire l’accesso al canale di comunicazione,
e avrò rumore e distorsioni.

Per risolvere questi problemi, si utilizzano diverse tecniche, una delle quali è chiamata trasmissione a spettro
espanso, che consiste nell’inviare dati sulla banda di frequenza più ampia di quanto effettivamente serva per
trasportare le mie informazioni, senza andarla a suddividere in canali. Ci sono due tecniche che utilizzano la
trasmissione a spettro espanso (detto anche a banda larga):

- FHSS (Frequency Hopping Spread Spectrum)  scompone la banda in 75 canali larghi 1 Mhz chiamati
hops, e poi trasmette il segnale con una combinazione dei canali, ovvero facendo saltare da un canale
all’altro le informazioni, per ridurre le interferenze.
- DSSS (Direct Sequence Spread Spectrum)  trasmette per ogni bit una sequenza chiamata Barker.
La stazione che riceve il segnale andrà a prendere dal canale solo le informazioni con la sequenza di
barker che a lei interessa.

Pacchetto 802.11

Si lavora sul livello data link, e si tratta di frame, e non più pacchetti. Nell’header del frame di 802.11 si
trovano 4 campi di indirizzo, anziché due come in Ethernet:

- Il quarto si utilizza nelle reti ad hoc


- Il secondo indica l’indirizzo di sorgente, cioè l’indirizzo del mittente
- Il primo indica l’indirizzo del destinatario
- Il terzo indica il MAC address dell’AP

Gli altri campi presenti nell’header sono:

- Seq control  ndica il frame in maniera univoca per poter poi ricevere il relativo ACK
- Duration  indica la lunghezza di validità del pacchetto all’interno del canale
- Frame control  comprende il tipo di pacchetto, gli indirizzi mittente e destinatario.
CSMA/CA

Il mittente, per trasmettere un pacchetto, dovrà:

1. Assemblare il frame
2. Controllare se il canale è libero, nel caso in cui non fosse libero si mette in attesa
3. Una volta ottenuto il canale aspetta un tempo chiamato tempo di interframe
4. Imposta, se già non lo fosse, il proprio tempo di trasmissione (backoff time)
5. Aspetto lo scadere del backoff time e spedisco il pacchetto nella banda
6. Mi metto in attesa dell’ACK del frame. Qua ho due possibilità:
a. Ricevo l’ACK, concludo la trasmissione
b. Non ricevo l’ACK, ritento l’invio del frame. Se eseguo troppi tentativi, la trasmissione fallisce.

Il destinatario:

1. Controllo il canale, se è attivo vuol dire che sto ricevendo


2. Se ricevo un frame troppo piccolo (potrebbe essere corrotto), lo scarto e mi rimetto in ascolto del
canale
3. Se ricevo un frame abbastanza grande, controllo l’indirizzo di destinazione, e se coincide con il mio
lo analizzo altrimenti lo scarto e torno ad ascoltare il canale
4. Se il pacchetto è destinato a me, faccio un controllo di errore tramite FCS
5. Se il controllo FCS è andato a buon fine, trasmetto l’ACK, altrimenti trasmetto un segnale di errore

MAC layer per trasmissioni senza fili

Le funzioni che svolge il sottolivello (di datalink) MAC per le trasmissioni senza fili sono:

- Gestire le richieste di trasmissione delle BSS


- Provvedere alle richieste di multiplexing della BSS
- Dare supporto di roaming ai dispositivi delle BSS (permettere ai dispositivi di spostarsi nella rete)
- Dare supporto di autenticazione nelle station
- Gestire il consumo di energia

Controllo di Accesso nel livello MAC

- Distributed Coordination Function (DCF)  riguarda il metodo di accesso in maniera primaria, si basa
sul meccanismo di pacchetti RTS e CTS. Lavora sia in architettura ad infrastruttura che ad hoc
- Point Coordination Function (PCF)  gestisce anche servizi real time, ma non lavora in architettura
ad hoc, ma solo ad infrastruttura.

Tempi di interframe

- Short InterFrame Spacing (SIFS)  utilizzato per l’inizio della comunicazione (frame RTS e CTS)
- PCF InterFrame Spacing (PIFS)  utilizzato quando si gestiscono operazioni non di accesso al canale,
utilizzato per pacchetti di controllo
- DCF InterFrame Space (DIFS)  tempo minimo di attesa per la ritrasmissione di un frame
- Extended InterFrame Space (EIFS)  tempo di interframe più lungo che deve essere rispettato prima
di trasmettere nuovamente dopo che si è verificato un errore.
CSMA/CD vs CSMA/CA

- CSMA/CD  utilizzato nelle reti cablate, è molto più valido del CSMA/CA, ma non può essere usato
nelle reti wireless perché è difficile capire se c’è stata una collisione, in quanto una collisione, nelle
reti cablate, è identificata da un aumento di potenza sul canale. Nelle reti non cablate, un aumento
di potenza potrebbe anche non essere causato da una collisione, ma dal rumore, motivo per cui
CSMA/CD non è utilizzato nelle reti wireless.
- CSMA/CA  è utilizzato nelle reti wireless. Si tenta di evitare le collisioni utilizzando i tempi di
interframe e di backoff.

Ascolto del canale

Una station attaccata ad un canale di comunicazione può ricevere dati, per cui deve rimanere in ascolto del
canale. L’ascolto del canale può avvenire in maniera:

- fisica  più il canale è complesso, più la gestione è complessa e costosa


- virtuale  si utilizza il NAV, cioè un vettore che memorizza per quanto tempo prenoto il canale per
una trasmissione.

Problemi dei dispositivi wireless

1. Problema del terminale nascosto  3 dispositivi, A, B e C. A vede B e C vede B, ma A e B non si


vedono. Se A e C iniziano una comunicazione con B, si crea una collisione, in quanto B riceverà dati
sia da A che da C. Soluzione: A (o C) invia un pacchetto RTS (Request To Send) a B. B invia un
pacchetto CTS (Clear To Send), che indica che B è disposto ad accettare una comunicazione, tutte le
altre station della rete saranno informate che ora B è occupata e non accetterà altre comunicazioni.
Nel pacchetto CTS spesso è anche associato il NAV, che indicherà per quanto tempo il canale sarà a
disposizione. Una volta finita la comunicazione, A (o C) riceve l’ACK da B, e il canale si libera,
diventando disponibile per le altre station della rete.
2. Problema del terminale esposto  4 station che condividono delle aree sovrapposte. Quindi, se A
vuole comunicare con B ma nel frattempo C e D stanno già comunicando, A troverà il canale occupato
quando in realtà potrebbe comunicare poiché B è libero. Risolto sempre con il sistema di RTS/CTS:
quando un nodo invia una RTS ma non riceve la CTS, è considerato libero e quindi potrà comunicare
con un altro nodo.
3. Sincronizzazione  viene introdotto un Global Clock, a cui tutti i nodi della rete wireless devono fare
riferimento. Inoltre, c’è uno Global Schedule.

HiperLAN

Sono reti wireless più evolute rispetto alle 802.11, create in Europa. Introducono due caratteristiche:

- TCP (Transmitter Power Control)  apparato che permette di modificare la potenza di trasmissione
immediatamente per non superare il Watt (limite standardizzato)
- DFS (Dynamic Frequency Selection)  apparato che modifica (in maniera software) in modo
istantaneo la frequenza di trasmissione per evitare interferenze.
Funzionamento del WiFi

I moderni Wi-Fi operano su una frequenza di 2.4 o di 5 Ghz. La frequenza viene a sua volta suddivisa in canali,
sui quali viene trasmesso il segnale, cioè un insieme di pacchetti sottoforma di onde elettromagnetiche. Nel
2.4 GHz, i canali hanno una frequenza più ampia (da 22 Mhz), ma sono tra di loro sovrapposti. Gli unici 3
canali che non sono sovrapposti sono i canali 1 6 e 11. La banda di frequenza di 5 GHz invece ha canali ad
ampiezza minore, che non si sovrappongono. Alcuni dei canali si possono utilizzare all’interno della casa, altri
invece solamente all’esterno della casa.

Interferenze del WiFi

- Interferenza di co-canale  data da tutti i dispositivi che utilizzano il canale nello stesso momento.
- Interferenza di canale adiacente  data quando diverse reti WiFi si sovrappongono tra loro ma
usano canali diversi. Per risolvere questo problema, ogni rete WiFi trasmette su un canale diverso (1,
6 e 11).
- Non WiFi  dovute ad apparecchiature come microonde, telefoni cordless, telecamere e bluetooth.

Banda di guardia: banda che intercorre tra due diverse frequenze (ex. banda tra i canali 1, 6 e 13 nella
frequenza 2.4 Ghz).

Interferenze da canale adiacente

È il peggior problema che si può verificare quando più reti WiFi hanno delle parti di copertura in comune tra
loro. Quando un AP infatti vuole comunicare con i propri client, troverà difficoltà, disturbo, in quanto anche
altri AP interferiscono nella loro comunicazione, in quanto usano canali tra loro adiacenti. Infatti, un AP1
potrebbe rilevare una comunicazione sul proprio canale quando in realtà la comunicazione avviene tra un
altro AP2 di un’altra rete WiFi, e come risultato si ha che AP1 non comunica poiché pensa di avere il canale
occupato. Questo porta ad un grande deterioramento delle reti, e all’invio continuo di pacchetti duplicati.

Interferenze di co-canale

In questo caso, ogni dispositivo avrà accesso alla rete, ma la problematica risulta essere il tempo di attesa
per ottenere le risorse. Bisogna porre attenzione infatti al distanziamento tra i canali utilizzati per la
comunicazione tra AP e client, con un distanziamento base che di solito è di 20 dBm (Decibel).

RSSI Received Signal Strength Indicator

È la misura che indica quanto un client riceve bene il segnale da un AP o da un router. Dipende dalla qualità
della scheda di rete del dispositivo client. (Sarebbero le 3 stanghette che vediamo della connessione del WiFi).
Insieme ai dBm è la metrica utilizzata per verificare la potenza di un segnale ricevuto. La differenza sta nel
fatto che l’RSSI è un indice relativo, cioè dipendono dalla scheda di rete del dispositivo (qualche dispositivo
ha 3 stanghette, altri 5), mentre i dBm sono un valore assoluto. Più siamo vicini a 0 dBm, più il segnale è
migliore, più ci allontaniamo, più rumore avremo nella connessione.

MIMO Multiple Input Multiple Output

La tecnologia MIMO fornisce un array di più antenne, in modo tale da poter ricevere ed inviare più flussi di
dati contemporaneamente. Ci sono due tipologie si MIMO:
- Single User MIMO  riserva un’unica frequenza per un utente all’interno di una BSS  tutte le
antenne servono un unico utente. È più resistente alle interferenze rispetto al Multi User MIMO.
- Multi User Mimo  più utenti sono serviti nella stessa frequenza  un’antenna per ogni utente
dedicato.

Per aumentare la frequenza di trasmissione si utilizza il channel bonding, ovvero assegnare due canali
wireless di due antenne ad una unica comunicazione così da raggiugere una frequenza totale del doppio della
frequenza usuale.

È importante posizionare un AP in maniera baricentrica, evitando di creare zone lente (cioè con poco segnale)
e zone morte (segnale assente). In base al materiale, i muri abbassano la potenza del segnale.

WPAN

Sono reti wireless a corto raggio, cioè piccole aree personali. WPAN è l’acronimo di
WirellessPersonalAreaNetwork. Il raggio solitamente di una WPAN è di 10 metri. Le caratteristiche principali
sono:

- Architettura ad hoc
- Prevedono un’architettura plug and play
- Basso consumo
- Supporto all’interazione con dispositivi di tipo dati e voce (telefoni)

Lo standard delle WPAN è l’802.15, e comprende tecnologie come Bluetooth e dispositivi a raggi infrarossi.

Bluetooth

È stata la prima tecnologia a corto raggio per la connessione tra dispositivi di tipo voce e dati. È stato
inventato dalla Nokia per collegare i propri telefoni con gli auricolari. Utilizza la banda di frequenza di 2.4 Ghz
(la stessa del WiFi 802.11b).

Lo scopo del Bluetooth era quello di rimpiazzare il cavo, creando una rete ad hoc che includeva un accesso
point integrato. La topologia finale del Bluetooth che si utilizza al giorno d’oggi è chiamata scattered, che è
una topologia ad hoc formata da tante piccole reti, ognuna delle quali permette di inglobare al suo interno
solo un numero minimo di terminali, che interagiscono tra di loro. La cella base del Bluetooth, che si chiama
piconet, è identificata da un master, da alcuni slave, i quali si possono trovare in uno stato attivo (standby),
o in uno stato idle chiamato parked.

La tecnologia Bluetooth è identificata sul livello fisico e nel sottolivello MAC del livello datalink. Nel
sottolivello MAC, il Bluetooth è diviso in:

- LMP (Link Management Protocol)  si occupa del set up e del controllo della parte di comunicazione
fisica (link radio tra i dispositivi della comunicazione)
- L2CAP (Logic Link Control and Adaption Protocol)  multipla le connessioni logiche tra i dispositivi e
le trasmette ai livelli superiori
- SDP (Service Discovery Protocol)  si occupa di scoprire i servizi che ogni dispositivo può offrire
all’interno della rete e, una volta scoperti, li associa a determinati parametri.
Il bluetooth potrebbe creare problemi con il WiFi. Infatti, utilizzando la stessa frequenza, potrebbero esserci
dei problemi e delle interferenze. Ad averne la peggio è il WiFi, perché il bluetooth invia molti pacchetti, a
differenza dell’802.11b.

ZigBee

È uno standard utilizzato nelle reti industriali e domotiche. Trasmette a bassa potenza e a basso costo, e
permette di avere una topologia mesh tra i vari nodi. Opera sulla banda ISM radio. Viene utilizzato per gestire
nodi sensori, e ha velocità come 900 bps. All’interno della rete, è presente un nodo che coordina gli altri, in
quanto molto spesso la topologia della rete è a stella. ZigBee viene utilizzato per la domotica, per la collezione
dei dati medici e per il controllo di sensori. Le reti ZigBee sono composte da:

- ZigBee Coordinator  si occupa di fare da gateway verso altre reti e si prende carico dei dati raccolti
dai nodi sensori
- ZigBee Router  sono gli intermediari tra gli End Device e il Coordinator
- ZigBee End Device  sono i nodi sensori veri e propri che raccolgono dati e gli inviano al Coordinator.
Quando non svolgono misurazioni, si mettono in uno stato dormiente in cui non consumano energia.

ZigBee ha due modalità:

- Beacon  il nodo ZigBee Router (o direttamente gli End Device) trasmettono periodicamente i dati
al Coordinator, per segnalare a quest’ultimo che sono ancora attivi e non hanno esaurito la batteria,
formando una sorta di polling. Tra un invio e l’altro, i nodi possono entrare in modalità parked.
- Non Beacon  il nodo Router o End Device, prima di trasmettere, come nel WiFi, ascolta il canale e
verifica se è libero o meno. Il nodo è sempre in ascolto del canale, quindi consumerà sempre energia.

Come per Bluetooth, ZigBee è costruito sugli strati fisici e sullo strato MAC (con modalità di accesso al canale
Beacon o non beacon), e la loro standardizzazione è gestita da 802.15.1, ma anche sullo strato applicazione.
L’implementazione a livello applicazione è tipica del produttore ZigBee.

WiMAX

Standardizzato dal gruppo 802.16, è una trasmissione wireless trasmessa a tutti che in base alle dimensioni
spessa è caratterizzata come MAN o LAN (molto spesso è una MAN). La trasmissione di WiMAX doveva
avvenire o nella banda libera 5GHz o in alcune frequenze licenziate tra i 2 e gli 11 GHz. La tecnica di
trasmissione è OFDM (Orthogonal Frequency Division Multiplexing). 802.16 prevede delle classi di servizio,
ciascuna delle quali dedicata ad un particolare servizio:

- Un canale dedicato alla telefonia VoIP a bit rate costante


- Un canale real-time per contenuti multimediali compressi a bit rate costante
- Un canale non real-time a bit rate variabile per traffico pesante
- Un canale per tutti gli altri tipi di traffico

Telefonia mobile

Reti 1G

1G indica di 1° generazione. Vengono chiamate reti cellulari poiché il loro funzionamento si basa sulle così
dette celle, cioè la porzione di territorio coperta da una torre base che trasmette il segnale. La qualità dei
servizi delle reti 1G era non buona, c’era infatti molto spesso una pessima qualità audio e molto spesso
cadeva la linea, dovuto in molti casi al cambio di cella dal quale si prendeva il segnale. Il cambio di cella alla
quale il dispositivo si agganciava è chiamato handoff, e ne esistono due tipi:

- Soft handoff  il passaggio da una cella ad un’altra è più leggero, sfruttando le zone di
sovrapposizione della copertura delle celle. Nel momento in cui passo da una cella A ad una cella B,
nella zona di copertura di entrambe le celle, avrò due connessioni, una della cella A e una della cella
B, evitando così, a parte alcuni casi, di perdere la linea. Utilizzato dalle reti 2G in poi.
- Hard handoff  il passaggio da una cella ad un’altra è molto drastico, cioè passando da una cella A
ad un’altra B, nel momento in cui mi trovo sotto la copertura della cella B, A lascia la connessione.
Nel caso in cui B non faccia in tempo a recuperare la comunicazione, cade la linea. Utilizzate nelle
reti 1G.

La banda di comunicazione era divisa in 832 canali full-duplex, utilizzando come criterio di divisione la
frequenza o il tempo. Questi canali venivano usati per:

- Controllo della chiamata (controllo delle celle)


- Paging (segnalazione di una chiamata in arrivo)
- Trasmissione dei dati (ancora erano minimi, erano dati riguardanti il controllo della rete)
- Trasmissione della voce

I primi due canali sono a senso unico, mentre gli ultimi due sono bidirezionali full-duplex. In realtà, i canali
utilizzati erano molto di meno di 832, poiché c’era il riuso delle frequenze: celle adiacenti infatti non
potevano lavorare sulla stessa frequenza, altrimenti si sarebbero verificate interferenze, quindi nel momento
in cui le frequenze erano esaurite, si andavano ad utilizzare gli altri canali che erano stati messi in standby.

Reti 2G

Nascono negli anni ’90. Si usava la tecnologia D-AMPS, acronimo di Digital Advanced Mobile Phone System,
che utilizzava frequenze più alte di quelle della prima generazione, cioè dai 1850 ai 1990 MHz (la prima
generazione era intorno ai 900 MHz), ma soprattutto la voce veniva convertita (tramite una tecnica chiamata
vocoder) e trasmessa in digitale, riuscendo a sfruttare meglio la banda e in uno stesso canale fornire una
comunicazione fino a 3 clienti. Ciascun canale era diviso in slot temporali, uno assegnato ad ogni utente.
Questo era ottimo per utilizzare al meglio la banda, ma causava ritardi in quanto la voce doveva essere prima
compressa e poi la voce, se troppo complessa, risultava metallica e di difficile compressione.

Mentre in America si utilizzava la D-AMPS, in Europa si utilizzava GSM, acronimo di Global System Mobile
Communications. I canali erano più ampi di quelli di D-AMPS, e in ogni canale potevano comunicare fino ad
8 utenti senza compressione (cioè una minima compressione era presente, ma meno spinta). I canali erano
124 simplex. Anche qua i canali erano divisi in slot temporali, uno per ogni utente. Grazie a GSM, l’Italia nel
1996 ha creato le carte prepagate. GSM era molto più veloce di D-AMPS, riusciva in un secondo a trasmettere
il doppio dei bit.

CDMA Code Division Multiple Access

È la soluzione ai problemi di FDMA (Frequency Division Multiple Access), che alloca bande di frequenza che
potrebbero non essere utilizzate, e di TDMA (Time Division Multiple Access), che divide il canale in base a
degli slot temporali creando quindi problemi di ritardi. Permette di allocare l’intera banda tra più utenti in
maniera completa, senza alcuno spreco di frequenze riservate. È necessario dividere i segnali che arrivano
nel canale in base ad ogni utente. Ad ogni utente viene assegnato un codice binario, chiamato sequenza di
spreading, che identificherà in maniera univoca i segnali di ogni utente, permettendo al ricevente di
identificare a sua volta in maniera univoca da chi provengono i messaggi. In questo modo tutti gli utenti
potranno inviare nello stesso canale contemporaneamente. Le loro sequenze di spreading verranno
moltiplicate e sommate per i dati che devono trasmettere, mentre all’altro capo della comunicazione il
ricevente farà l’operazione inversa e ricaverà solo le informazioni di suo interesse.

Reti 3G

Le migliorie del servizio 3G avvengono sotto il punto di vista della modalità e della qualità del segnale. Nasce
intorno ai primi anni 2000, come obiettivo del progetto 3GPP (Third Generation Partnership Project), che
era un progetto che comprendeva i maggiori provider di servizi di telecomunicazioni che lavoravano insieme
per definire uno standard che permetteva appunto maggiore mobilità e maggiore qualità del servizio. Da
questo progetto nasce anche il roaming, ovvero la possibilità di spostarsi con il proprio telefono attaccandosi
a reti internazionali. Nello stesso progetto inoltre venne introdotto il GPRS (General Packet Radio Service),
che permette di ricevere pacchetti tramite connessioni 2G, che aggiunge funzionalità al normale GSM. Viene
infatti chiamato 2.5G.

Rete LTE (4G)

Acronimo di Long Term Evolution, è anch’esso stato sviluppato al 3GPP. Inizialmente, l’idea del 3GPP era
quella di arrivare fino al 2020 con LTE, e di sviluppare nel 2020 la tecnologia 5G. Gli obiettivi di LTE erano
quelli di:

- Aumentare la velocità di trasferimento dei pacchetti


- Migliorare l’efficienza spettrale
- Abbassare i costi
- Migliorare la QoS
- Migliorare ilo switching dei pacchetti

LTE deve soddisfare dei vincoli:

- Data rate  deve supportare velocità come 100 Mbps in download e 50 Mbps in upload su canali di
banda standard di ampiezza 20 MHz
- Dimensione delle celle  devono avere un diametro di 5km, permettendo il segnale fino a 30 km
con performance accettabili
- Numero di clienti attivi per cella  devono permettere un servizio efficiente con almeno 200 utenti
attivi per cella
- Mobilità  la copertura delle zone deve essere completa e avere una buona velocità
- Latenza  massimo 5ms
- Implementare un miglior servizio di broadcasting  inviare messaggi più velocemente a più utenti
- Deve essere ottimizzata per quello che riguarda IP
- Deve essere scalabile

LTE prevede l’utilizzo della tecnologia MIMO, di tecniche di controllo di errori e della latenza trasmissiva.

LTE introduce l’aspetto riguardante la sicurezza. Infatti, tutti i dati che passano tra le celle sono criptati.

La struttura di LTE viene chiamata SAE (System Architecture Evolution), e deriva dalla struttura delle reti
GPRS (2.5G). Un’importante novità di questa nuova tecnologia di accesso è la possibilità delle interfacce di
lavorare direttamente su protocollo IP, in maniera simile al packet switching di livello 3. Un’altra importante
novità dell’architettura SAE è la possibilità di rimanere sempre in linea, ovvero always on, in quanto la rete
associa un indirizzo IP ad ogni terminale in modo che la connettività sia sempre garantita. Questo
assegnamento di un indirizzo IP temporaneo a seconda della cella è gestita dall’MME (Mobility Management
Unit).
OFDM

È una tecnologia di trasmissione di segnale che utilizza un grande numero di portanti a distanza ravvicinata
tra loro, ciascuna modulata con un flusso di dati trasmessi a bassa velocità. Anche se i canali sono ravvicinati,
non c’è il rischio come le reti wireless di interferenze, infatti anche se non sono presenti frequenze di guardia,
la trasmissione avviene in maniera ortogonale (Ortogonal Frequency Division Multiplexing). Viene utilizzato
nelle reti 4G LTE, per il download, mentre per l’upload viene utilizzato l’SC-FDMA.
08. Livello data link:
o 08.01 Principi di progettazione del livello data link.
o 08.02 Controllo d'errore: codici a rilevazione e correzione di errore.
o 08.03 Protocolli data link elementari: simplex senza restrizioni, stop and wait, simplex per canali
rumorosi.
o 08.04 Protocolli sliding window: 1 bit, go back n, ripetizione selettiva.
o 08.05 Esempi di protocolli data link.

Funzioni del livello datalink

- Fornisce un’interfaccia al livello superiore di rete


- Controlla gli errori
- Controllare il flusso (problema trasmettitore veloce-ricevitore lento)

Il compito principale è quello di fornire una comunicazione efficiente (controllo del flusso) ed affidabile
(controllo degli errori).

Servizi offerti dal livello datalink

- Framing  come vengono incapsulati i pacchetti che arrivano dal livello superiore e trasmessi nel
mezzo fisico e viceversa. Un frame è composto da payload, un’intestazione, ed eventualmente una
coda.
- Assicurarsi che il mezzo condiviso venga utilizzato in maniera efficace.
- Assicurarsi che i dati vengano inviati nel mezzo correttamente e che arrivino al destinatario senza
nessun tipo di corruzione.
- Gestione degli errori (il controllo degli errori è stabilito in base al canale in uso, se un canale è molto
affidabile, il controllo degli errori non viene effettuato, viceversa, per un canale etichettato come
poco affidabile, avviene un massiccio controllo di errori).

Framing

Lo strato datalink deve organizzare i dati che arrivano dal livello fisico in frame. Essi devono essere
distinguibili singolarmente. Il servizio di framing si occupa di delimitare ciascun frame da inviare sul canale:
un frame di dimensioni troppo grandi infatti renderebbe non ottimale il controllo degli errori. Nel caso in cui
infatti il frame fosse corrotto, sarebbe necessario il re-invio dello stesso frame, che contiene una grande
quantità di bit. Ogni frame ha quindi una dimensione fissa o variabile. Se la dimensione è fissa, il frame non
dovrà essere delimitato dal servizio di framing: questa tecnica è utilizzata nelle reti ATM, in cui il frame prende
il nome di cella. Nelle reti LAN invece il frame è di dimensione variabile, con la divisione di un frame dal
successivo che avviene tramite:

- Inizialmente era utilizzato il metodo character counting, dove all’inizio di ogni frame veniva indicato
la lunghezza del frame. Il problema era che, nel caso in cui l’errore occorresse proprio nell’indicazione
della lunghezza del frame, il ricevente avrebbe interpretato male il flusso dei dati, pertanto questa
metodologia non è più utilizzata.
- Bit di flag  ogni frame aveva il suo inizio e la sua fine etichettati con un particolare bit di flag. Il
problema di questa modalità era dato dal fatto che un bit di flag poteva apparire anche all’interno di
un frame, causando così la perdita di alcune informazioni del frame che vengono scartate.
- Bit stuffing  è l’evoluzione dell’implementazione del bit di flag. In questa modalità, se un bit di flag
dovesse apparire all’interno del frame, è preceduto da un carattere specifico chiamato ESCAPE (ESC),
così da permettere al destinatario di non interpretare quel bit di flag come il delimitatore del frame.
Nel caso in cui un carattere di ESCAPE appaia all’interno dei caratteri del frame, deve essere
anch’esso preceduto da un altro carattere di ESCAPE.
- codifica a caratteri  ogni frame è delimitato da una sequenza di bit, e non da un unico bit come
visto sopra. La sequenza di bit che funge da delimitatore è 01111110. Nel caso in cui fossero presenti
più di 5 1 consecutivi, viene inserito uno 0 in mezzo. In questo modo, il delimitatore non potrà mai
apparire all’interno dei dati.

La codifica a bit è utilizzata nei protocolli PPP (Point to Point Protocol), mentre la codifica a caratteri (1
carattere è 8 bit) è utilizzata nel protocollo HDLC.

Gestione degli errori

Gli errori devono essere prima rilevati, e poi, se possibile, corretti. Gli errori sono causati dalle interferenze,
che di solito vengono chiamate rumore. Le cause del rumore possono essere:

- la potenza media del segnale ricevuto, che viene alterato dall’attenuazione.


- Velocità di trasmissione
- Spettro di densità del canale
- Dalla tipologia di canale

È possibile ridurre in maniera arbitraria la probabilità di errore utilizzando delle tecniche di codifica del canale
appropriate in base al canale utilizzato. Codificare un canale significa aggiungere dei bit di ridondanza al
messaggio originale. La presenza di questi bit di ridondanza permette al destinatario di identificare eventuali
errori. Lo svantaggio di aggiungere dei bit di ridondanza è che dopo devono essere anch’essi nel canale,
occupando banda e aumentando il tempo di trasmissione in quanto aumenta la quantità di informazioni da
trasmettere.

Gli errori possono essere divisi in due categorie:

- Errori su bit singolo  bit che passa da 0 ad 1 o viceversa.


- Errore di tipo burst  perdita di frame o cambiamento di più bit.

I codici utilizzati contro gli errori sono:

- Codici a rilevamento di errore  segnalano la presenza di errori e lo comunicano alla sorgente


- Codici a correzione di errore  una volta individuato l’errore, riescono a correggerlo nonostante
abbiano ricevuto un frame corrotto.

FEC Forward Error Correction

È un processo in cui una sorgente di dati aggiunge dei bit di controllo ai dati da inviare, e il ricevitore analizza
i bit di controllo e gli corregge nel caso in cui ci fossero errori, poi toglie i bit di controllo e ricostruisce il
messaggio originale. Tutto questo avviene in tempo reale. È una tecnica molto utile per quei canali in cui non
è possibile la ritrasmissione del frame, e funziona solo con segnali digitali, non funziona con segnali analogici,
poiché il degrado di un segnale analogico non può essere ricostruito in maniera efficiente. Anche se devono
trasmettere più bit (sono aggiunti i bit di controllo), la trasmissione è più veloce poiché non ci sono le
ritrasmissioni dei frame corrotti. Maggiore è il numero di bit di controllo aggiunti, maggiore è la qualità di
correzione degli errori.
Definizione di codice

È l’unione dei bit di informazione coni bit di controllo di ridondanza aggiunti. Un codice è in pratica l’insieme
delle parole che possono essere trasmesse tra due nodi in comunicazione tra di loro. Ogni codice ha una
capacità, cioè dal numero massimo di errori che riesce a scoprire in una parola codice. Inoltre ogni codice ha
una sua efficienza, cioè il rapporto fra il numero di bit nel messaggio e la lunghezza della parola codice (cioè
dei bit di controllo).

Controllo degli errori

I codici a correzione di errori possono essere classificati in due categorie:

- Codici a blocchi  il flusso dati viene diviso in blocchi di dimensioni fisse a cui vengono aggiunti i bit
di controllo
- Codici convoluzionali  il flusso dati è unico, non viene diviso, e trasporta sia i dati informazione che
i bit di controllo, che sono generati in maniera continua da una funzione booleana. Ù

Distanza di Hamming

È un codice a rilevazione e correzione di errore a blocchi. La sorgente genera bit ridondanti e li inserisce in
posizioni specifiche del messaggio. È molto importante che le parole codice che siano abbastanza differenti
tra loro. Infatti, non deve accadere che la corruzione di un singolo bit mi trasformi una parola codice valida
in un’altra parola codice ammessa, quando invece la parola codice trasmessa dovrebbe essere analizzata e
corretta. Per rilevare un errore occorre fare un confronto tra le due parole codice e vedere la distanza tra di
esse (ovvero il numero di bit in cui essere differiscono), ottenuta tramite lo XOR tra le due parole codice.

- Per rilevare l’errore occorre: d >= s + 1, ovvero la distanza tra due parole codice ammesse deve essere
maggiore uguale al numero di bit di errore s + 1.
- Per correggere l’errore occorre: d >= 2s + 1, ovvero la distanza tra due parole codice ammesse deve
essere maggiore uguale al doppio del numero di bit di errore s + 1.

Controllo di parità

Aggiunge un singolo bit che fa diventare il numero di 1 nei bit codice pari o dispari (si aggiunge un 1 se
necessario per far tornare pari il numero degli 1 nei dati informazione). Se un bit viene cambiato durante la
trasmissione, il messaggio cambia di parità e quindi viene rilevato l’errore. Non è una tecnica solida, perché
se il numero di bit modificati è pari, la parità o disparità del messaggio rimane la stessa e l’errore non è
rilevato. Non comprende la correzione dell’errore.

Parità bidimensionale

È l’evoluzione del controllo di parità. È in grado di rilevare e correggere anche gli errori. Ogni parola viene
inviata nel canale con il suo bit di parità. Con tutte le parole viene creata una matrice, alla quale come ultima
colonna e come ultima riga verranno aggiunte appunto una colonna e una riga contenente il bit di parità. A
questo punto, se il messaggio contiene errori, il destinatario vedrà che la matrice non è corretta e, facendo
l’incrocio tra i due bit di parità che non sono corretti, riuscirà anche a visualizzare quale bit è stato alterato.
Per un numero dispari di errori, è possibile rilevarli e correggerli, mentre per un numero pari è possibile
solamente rilevarli. Quando si ha un numero pari di errori in colonna e un numero pari di errori in riga, gli
errori non sono nemmeno rilevati.
Checksum

Si basa sul concetto di ridondanza. I dati vengono divisi in frame di uguali dimensioni, di cui il mittente creerà
un checksum. Creare un checksum significa eseguire il complemento a 1 (invertire gli 1 con gli 0) e poi
sommare 1 al risultato. Il ricevente farà la stessa cosa ed eventualmente rileverà l’errore. Non presenta la
possibilità di correggerlo.

CRC Cyclic Redundancy Check

Sono una sottoclasse dei codici a blocchi, e sono stati studiati agli inizi degli anni ’60. Sono molto utilizzati
perché:

- Sono molto efficaci per il rilevamento e la correzione degli errori


- Possiedono proprietà algebriche che semplifica la codifica e la decodifica del segnale (basta
effettuare operazioni di XOR o di SHIFT)

Anche il codice di Hamming è un codice ciclico. Un codice ciclico può essere rappresentato come un
polinomio. Ogni parola codice è riscritta come un polinomio i cui coefficienti sono il numero di bit di un
determinato carattere. Mittente e destinatario si accordano su quello che è chiamato polinomio generatore.
Il mittente ed il destinatario si mettono d’accordo sul polinomio generatore. A questo punto, nel caso in cui
il polinomio generatore sia di grado 4, aggiungo n-1 (quindi 3) 0 in cosa ai miei dati da trasmettere, ed eseguo
la divisione per il polinomio generatore. A questo punto, prendo il resto della divisione, chiamato sindrome,
e lo aggiungo ai miei dati da inviare, ed invio tutto al destinatario. Il destinatario, effettuerà la divisione per
il polinomio generatore, e se otterrà 0 come risultato vorrà dire che i dati non contengono errori, altrimenti
se il resto è diverso da 0, ci sono errori che verranno corretti. È molto importante scegliere bene il polinomio
generatore: infatti, in base al polinomio generatore scelto, avrò determinate caratteristiche, cioè la
possibilità di correggere uno o più errori, ecc.ecc.

Controllo di flusso

Il controllo di flusso è un altro importante compito del livello datalink. I servizi offerti dal livello data link si
possono dividere in 3 categorie principali:

- Non orientato alla connessione senza conferma  non esiste nessuna connessione stabilita prima
dell’invio dei dati, e di conseguenza non vi è nessun rilascio di connessione alla fine della
trasmissione. Il mittente invia frame indipendenti al destinatario, senza che quest’ultimo invii una
notifica di ricezione (ovvero l’ACK). Se un frame viene perso o danneggiato dal rumore, non viene
fatto nessun tentativo di recupero di tale frame. Viene usata quando ho una linea affidabile con un
tasso di errore molto basso, con il recupero di eventuali frame persi che avviene tramite i servizi di
livello superiore dello stack, e nei servizi real-time come il servizio vocale della telefonia. Anche
Ethernet utilizza questo servizio.
- Non orientato alla connessione con conferma  anche qua non ci sono connessioni logiche tra i nodi,
e ogni frame viene inviato e confermato indipendentemente. Il mittente in questo modo sa se il
frame è arrivato correttamente o è stato perso durante il tragitto. Questo servizio è utile su canali
non affidabili, come il wireless.
- Orientato alla connessione con conferma  ha una connessione tra i nodi di origine e di destinazione.
Il servizio si basa su 3 fasi distinte:
o Stabilire la connessione
o Comunicazione e trasmissione dei frame
o Rilascio della connessione
Ogni frame inviato è numerato in maniera univoca, in maniera tale da poter gestire la ritrasmissione,
i frame duplicati ecc.ecc. Questo tipo di servizio è utilizzato per collegamenti lunghi e poco affidabili
come canali satellitari.

Tecniche di trasmissione nel canale

Le tecnologie si dividono principalmente in due categorie: ARQ e FEC. Le ARQ prevedono il re-invio
automatico del pacchetto allo scadere di un timeout. Ogni nodo deve avere un buffer, chiamato finestra, sul
quale memorizzare i dati anche una volta inviati in quanto potrebbe essere necessario dover re-inviare un
pacchetto che è stato perso o è in ritardo rispetto al timer. Il canale di comunicazione è full-duplex, infatti il
destinatario deve essere in grado di inviare i messaggi di ACK o di NAK (NO ACK). Le FEC invece introducono
dei bit di controllo (ridondanza) all’interno dell’informazione, quindi non prevedono la ritrasmissione del
pacchetto ma rendono più pesante la comunicazione in quanto vengono aggiunti dei bit che serviranno ad
una eventuale correzione di errore.

Protocolli per la gestione del flusso del canale

Protocollo SIMPLEX

È un protocollo che viene utilizzato per gestire il flusso e l’invio di frame. È un protocollo teorico, applicabile
ad un canale ideale e non applicabile nella realtà. È unidirezionale, cioè solo il mittente può inviare frame al
destinatario. Non è applicabile alla realtà poichè si lavora su un canale in cui sia il mittente che il destinatario
sono sempre pronti ad elaborare i frame, ed entrambi hanno un buffer infinito. Il mittente appena li ha
disponibili, invia tutti i dati sottoforma di frame nel canale, con il destinatario che li elabora in tempo zero,
cioè immediatamente.

Protocollo stop and wait

Rispetto al simplex, viene eliminata l’assunzione che il elabori in tempo zero i frame. Il ricevitore ha quindi
un buffer, in cui sono memorizzati i frame in entrata prima di essere elaborati. Entra in gioco il fattore tempo,
ovvero il mittente potrebbe inviare i frame con una velocità maggiore rispetto a quella con cui il destinatario
riesce ad elaborarli. È necessario quindi che il destinatario comunichi al mittente la velocità con il quale il
mittente può inviare pacchetti così da non creare problemi di perdita di essi visto che il buffer i riempirebbe.
Stop and wait risolve questo problema permettendo al mittente di inviare un frame solo nel momento in cui
il destinatario invia un ACK: il mittente invia un frame, il destinatario lo elabora e invia il relativo ACK, solo
dopo aver ricevuto l’ACK, il mittente potrà inviare il frame successivo. Lo svantaggio è che si può inviare solo
un frame alla volta, avendo magari banda e buffer a disposizione, soprattutto se la tratta è molto lunga.

Protocollo stop and wait con rumore sul canale (stop and wait ARQ)

Il funzionamento è lo stesso di stop and wait, ma viene aggiunto un timer, ed ogni frame di dati e ACK ha un
numero di sequenza. Viene chiamato ARQ perché la A sta per Automatically, cioè il re-invio del pacchetto
avviene in maniera automatica senza che il destinatario lo richieda con un pacchetto apposito al mittente.
Quando il mittente invia un pacchetto, avvia il timer. Se il timer scade prima che il mittente abbia ricevuto
l’ACK, allora il mittente re-invia il pacchetto. Ogni frame ha un numero di sequenza, così da poter tenere
traccia dei frame inviati e degli ACK ricevuti per evitare duplicati. Se il pacchetto ricevuto dal destinatario è
corrotto, esso invia un NO-ACK. Il protocollo stop-and-wait prevede una finestra di 1 bit.
Protocollo a sliding window

Il nodo trasmettitore può inviare più frame alla volta senza dover attendere un ACK del frame per trasmettere
il successivo. Questa tecnica permette un maggior uso della banda. Infatti, il destinatario comunica al
mittente quanti dati esso è pronto ad elaborare, in modo tale che il mittente invia quella quantità di dati, e
non più un solo frame come nel caso dello stop-and-wait, al destinatario. Anche in questo protocollo, i frame
sono numerati con dei numeri di sequenza, in modo tale da permettere di tenere traccia dei pacchetti inviati.
Una volta ricevuti i frame, il destinatario invia un messaggio di ACK al mittente in cui indica la dimensione
della finestra, ovvero la quantità di frame che il mittente può inviare, e indica anche il numero di sequenza +
1 dell’ultimo pacchetto elaborato, indicando cioè al mittente, quale frame dovrà inviare.

Go back N

È una tecnica ARQ che implementa il protocollo sliding window. Se ad esempio il mittente invia i frame in
pipeline (cioè più frame insieme) n, n+1, n+2, …., n+10, ed il ricevitore trova un errore al frame n+5, lo
comunica al mittente. A quel punto, il mittente, ricevuto l’ACK relativo al frame n+6, con invece l’ACK del
frame n+5 mancante, re-invia tutti i pacchetti dall’n+5 in poi. La finestra del mittente è n, cioè può inviare più
frame insieme, mentre la finestra del ricevitore è 1, cioè invia un ACK per ogni frame. L’efficienza è data da
n / (1 + 2a), dove a indica il rapporto tra tempo di propagazione e il tempo di trasmissione. Ogni protocollo
ha due tipologie di feedback:

- ACK indipendente  ogni frame ha un ACK. L’affidabilità è maggiore, ma comporta più traffico.
- ACK cumulativo  viene utilizzato un unico ACK per più frame. Facciamo meno traffico sulla rete,
ma se viene perso l’ACK bisogna re-inviare tutto il pacco di frame.

Go back N utilizza l’ACK cumulativo.

Selective repeat

Rispetto a Go Back N, selective repeat utilizza una finestra di dimensione n anche lato destinatario. Ad
esempio, se il mittente invia 10 frame in pipeline, il destinatario invia l’ACK relativo a tutti i primi 9 frame e
non invia l’ACK relativo all’ultimo frame, il mittente dovrà solamente re-inviare solamente l’ultimo frame. La
dimensione della finestra del mittente e del destinatario deve essere la stessa, e dovrà essere minore o
uguale alla metà della dimensione della finestra totale. È una tecnica utilizzata nelle reti non affidabili, dove
la ritrasmissione viene richiesta di pochi frame, cioè solo quelli mancanti o corrotti.

Protocolli di livello datalink

1. HDLC

I nodi in HDLC vengono chiamate stazioni, le quali sono divise in:

- Primaria  gestiscono la connessione e sono quelle che comandano le stazioni secondarie, aprono
e chiudono le connessioni ed interrogano le stazioni secondarie per ricavare dati. Sono utilizzate nelle
reti multipunto. Utilizza per comunicare con le stazioni secondarie una comunicazione non
bilanciata.
- Secondaria  rispondono ai comandi arrivati dalle stazioni primarie, sono generalmente dei
terminali collegati in remoto. Una stazione secondaria può comunicare solo con una stazione
primaria, e solo nel momento in cui una stazione primaria richiede il suo utilizzo e i suoi dati.
- Miste/combinate  possono stabilire le connessioni in maniera propria e ne comandano la gestione,
ed ha le stesse caratteristiche di una stazione primaria e di una stazione secondaria. Vengono
generalmente utilizzate in comunicazioni punto-punto. La comunicazione tra due stazioni combinate
è detta comunicazione bilanciata.

Comunicazione bilanciata o non bilanciata

- Non bilanciata  c’è una stazione primaria che controlla una o più stazioni secondarie. I canali
possono essere usati in full-duplex o half-duplex, e il collegamento può essere punto-multipunto o
punto-punto se la stazione secondaria è una sola.
- Bilanciata  due o più stazioni miste, ognuna delle stazioni ha la stessa importanza delle altre. Il
collegamento può essere solo punto-punto, ed il canale può essere utilizzato full-duplex o half-
duplex.

Funzionamento HDLC

HDLC offre 3 diverse modalità di funzionamento:

- Modalità di risposta normale (NRM)  una stazione primaria avvia i collegamenti con una stazione
secondaria. A questo punto una stazione secondaria può inviare una risposta alla stazione primaria
solo quando è la stazione primaria a chiedergliela. Una volta che la stazione primaria ha instaurato
la connessione con la secondaria e ha dato il permesso alla secondaria di trasmettere, la stazione
secondaria inizia la trasmissione, e una volta finita, torna nel suo stato iniziale, ed invierà nuovi dati
solo quando sarà la stazione primaria a chiederglielo. La comunicazione naturalmente è di tipo non
bilanciato in un’architettura di tipo punto-multipunto.
- Modalità di risposta asincrona (ARM)  la stazione primaria ha il compito di inizializzare la
comunicazione, rilasciarla e gestire gli errori, ma in questo caso la stazione secondaria non deve
attendere il permesso della stazione primaria per trasmettere dati. Riduce il traffico sulla linea in
quanto la stazione primaria non deve inviare pacchetti di invito alla trasmissione alla stazione
secondaria. La limitazione di questa architettura risiede nel fatto che la stazione secondaria deve
verificare lo stato del canale prima di iniziare a trasmettere, in quanto non deve comunicare nel caso
in cui esso sia occupato.
- Modalità bilanciata asincrona (ABM)  è un tipo di collegamento utilizzato dalle stazioni combinate.
Non è necessario di alcun permesso di una stazione, ma entrambe possono iniziare un collegamento
in qualsiasi momento. L’architettura in cui viene utilizzato questo tipo di funzionamento è quella
punto-punto. Non è molto utilizzata. Il termine asincrona si riferisce al fatto che un nodo può iniziare
una comunicazione senza dover ricevere il permesso da parte di un’altra stazione.

Composizione del frame

Un frame HDLC è diviso come i consueti pacchetti, cioè header, tail e body, dove si trova la parte di payload.
Il frame ha come delimitatori la sequenza 01111110. Poi nel pacchetto si trovano:

- Indirizzo (8 bit)  in alcune estensioni di HDLC può essere di più byte. Quando la comunicazione è di
tipo punto-punto, il campo viene impostato a 11111111 (broadcast). Indica l’indirizzo della stazione
secondaria con la quale si sta parlando.
- Controllo (8 bit)  contiene i codici che identificano dei comandi, cioè identificano il tipo di frame
che sto trasferendo sul canale. Ci sono 3 tipi di formati: trasferimento di informazioni, supervisione
(trasporta l’ACK), non numerato, che viene utilizzato per l’inizializzazione della connessione. Nel
campo control è inoltre presente un bit (il quinto) chiamato P/F, cioè Poll/Final, che se impostato su
0 viene ignorato, mentre se impostato su 1, la stazione primaria sollecita la stazione secondaria a
dare una risposta.
- Dati
- Checksum (16 bit)

Nel campo di controllo sono presenti 3 bit utilizzati per il sequence number, quindi non si potranno inviare
più di frame in pipeline (finestra scorrevole) senza aver ricevuto prima il loro relativo ACK.

Tipi di frame HDLC

- i-frame  information frame, trasportano i dati dal livello superiore al livello datalink, inoltre
portano informazioni sul controllo di flusso e degli errori. Il primo bit di un i-frame è settato a 0, il
quale ne definisce la tipologia. Ci sono poi 3 bit per indicare il sequence number.
- s-frame  viene utilizzato per la supervisione del canale. Non contengono informazioni, ma sono
utilizzati per il controllo di flusso e per la gestione degli errori. Un frame di tipo s-frame ha come
codice 10. I possibili tipi di s-frame sono:
o RR  receive ready, il destinatario è pronto a ricevere frame.
o RNR  receive non ready informa alla stazione di non essere pronto a ricevere pacchetti fino
ad un nuovo avviso.
o REJ  richiede la ritrasmissione immediata a partire dal frame con numero di sequenza n.
Viene inviato anche quando mancano dei frame.
o SREJ  selective reject, chiede solo la ritrasmissione del frame di sequenza n. Non è
supportato da tutti i tipi di HDLC.
- u-frame  unnumbered frame, sono utilizzati per l’inizializzazione, il recupero e il rilascio della
connessione. Il codice identificativo è 11. In alcuni specifici casi, possono anche trasportare
informazioni.

Unnumbered frame

Vengono utilizzati per estendere il numero di funzioni che il protocollo HDLC ha sui collegamenti o sulla
gestione dei dati. Si prendono 5 bit del frame, così da poter avere fino a 32 possibili combinazioni in più che
forniscono quindi comandi personalizzati. I comandi aggiunti dai frame unnambered sono 13:

- SNRM  set normal response mode, comunica alla stazione secondaria che si deve mettere in
modalità di risposta normale.
- SARM  set async response mode, comunica alla stazione che si deve mettere in modalità di risposta
asincrona (non deve aspettare il polling dalla stazione primaria per comunicare).
- SABM  set async balanced mode, comunica alla stazione che si deve mettere in modalità bilanciata
asincrona.
- SNRME  set normal response mode extended, aumenta il campo di controllo a due ottetti (16 bit).
- SARME  set async response mode extended
- SABME  set async balanced mode extended
- SIM  set inizialization mode, serve per far avviare alla stazione secondaria una o più procedure
particolari.
- UP  unnambered pool, esegue il polling di una stazione.
- UI  unnambered information, utilizzato per inviare informazioni ad una stazione secondaria.
- XID  exchange identification, utilizzata dalle stazioni secondarie per identificarsi con una stazione
primaria.
- RSET  per re-inizializzare le variabili di stato di una comunicazione.
- TEST  per testare il raggiungimento della stazione secondaria.
- UA  unnambered ack, utilizzato dalla stazione secondaria per notificare alla stazione primaria la
ricezione del suo comando.
- DM  disconncet mode, dalla stazione secondaria alla primaria per notificare che deve mettersi in
disconncet mode.
- RIM  request inizialization mode, inviata dalla stazione secondaria alla primaria per collegarsi
- FRMR  frame reject, utilizzata dalla stazione secondaria per notificare alla primaria che c’è stato
un errore in un frame.

Funzionamento di HDLC

Il funzionamento di HDLC si può riassumere in 3 fasi:

- Inizializzazione  crea la connessione logica tra la stazione primaria e secondaria. Viene stabilita
tramite uno scambio di u-frame.
- Trasferimento dei dati  lo scambio effettivo di dati tramite i-frame. Nello scambio dei dati è
possibile anche inviare s-frame per gestire il re-invio dei pacchetti e per controllare il canale.
- Disconnessione  si utilizzano gli u-frame con codice DISC, cioè si inizia la procedura di
disconnessione.

2. PPP

Acronimo di Point to Point Protocol, è il protocollo utilizzato per la connessione punto-punto in Internet.
Infatti, PPP permette solo collegamenti punto-punto e non punto-multipunto come HDLC. È un protocollo
orientato al byte, e non più al bit, cioè i dati sono trasmessi come flusso di caratteri, con un carattere che è
formato da 8 bit, con un carattere che funge da delimitatore.

PPP può essere diviso in 3 componenti principali:

- Framing
- LCP  link control protocol, che viene utilizzato per configurare, mantenere e testare la connessione
punto-punto.
- NCP  network control protocol, che configura i protocolli di livello rete che PPP trasporta.

PPPoE (overEthernet) o PPPoA (overATM) sono due estensioni di PPP che permettono l’accesso tramite
credenziali in connessioni punto-punto.

Composizione del frame PPP

Il frame PPP è composto da 6 campi:

- Flag  è 1 byte che indica l’inizio e la fine del frame, cioè il delimitatore.
- Address  anch’esso lungo 1 byte, contiene solitamente 11111111. È un indirizzo di default che
viene utilizzato poiché si tratta di una connessione punto-punto.
- Control  1 byte, fornisce un servizio di collegamento non orientato alla connessione che richiede
la creazione di connessioni ad hoc.
- Protocol  1 o 2 byte, specifica (in esadecimale) il protocollo di rete che il frame sta trasportando.
21 indica che il protocollo di livello 3 è IP.
- Info  lunghezza variabile, contiene i dati del protocollo di livello rete vero e proprio.
- Checksum  2 o 4 byte

Connessione PPP

La gestione della connessione è compito del protocollo LCP. Si parte dallo stato link dead, ovvero lo stato che
indica che non sono presenti collegamenti. Poi si passa al secondo stato, link establishment, che indica
l’inizializzazione della connessione. Tutto questo avviene tramite l’invio di pacchetti LCP, in cui sono
scambiate le variabili utilizzate ed eventuali informazioni come MTU o compressione dei pacchetti. Se alcune
informazioni non sono indicate nello scambio dei pacchetti LCP, vengono impostati quelli che sono i valori di
default. Dopo aver configurato la connessione e aver effettuato lo scambio delle varie configurazioni, può
avvenire o meno l’autenticazione. Ci sono 2 tipologie di autenticazione, PAP e CHAP. Una volta terminata la
configurazione e l’eventuale autenticazione, la connessione è stabilita e inizia la trasmissione dei dati. Una
volta finita la trasmissione oppure in presenza di altri fattori (caduta di un nodo, non rispetto della QoS, …)
la connessione viene chiusa e si ritorna allo stato iniziale si link dead.

Funzioni di LCP

- Stabilisce il collegamento, istanzia ed inizializza la connessione negoziando le varie informazioni che


verranno utilizzate nella comunicazione. Per questa fase i pacchetti scambiati sono di richiesta,
risposta, non risposta e rifiuto.
- Gestisce i collegamenti. Per fare ciò utilizza 5 tipi di pacchetti tra cui una richiesta di echo, risposta
all’echo, reject di un protocollo trasportato, ecc.ecc.
- Terminare il collegamento, anche questa fase è gestita tramite 5 pacchetti, che includono la richiesta
di terminazione del collegamento e la conferma della terminazione del collegamentio.

Composizione frame LCP

- Code  1 byte, indica il tipo di frame


- ID  1 byte, gestire le richieste e le risposte
- Lentgh
- Information  campo dati che contiene le informazioni

Fasi di una connessione PPP

1° FASE: creazione, negoziazione e configurazione della connessione. La fase termina quando il destinatario
della richiesta di connessione invia un LCP ACK di conferma al mittente.

2° FASE: si determina la qualità del collegamento, e viene testato il collegamento in continuazione.

Prende ora il controllo l’NCP.

3° FASE: negoziazione del protocollo di livello rete trasportato.

4° FASE: inizio della trasmissione vera e propria dei dati.

Prende ora il controllo l’LCP.

5° FASE: terminazione della connessione.

Protocolli di autenticazione PPP

Nel protocollo PPP l’autenticazione non è obbligatoria, ma deve essere il richiedente che, al momento della
richiesta, richiede l’autenticazione al destinatario. Esistono 2 tipi di autenticazione:

- PAP  password authentication protocol, è il più semplice metodo di autenticazione, e prevede che
il mittente, al momento della richiesta iniziale della richiesta, specifichi di voler usare l’autenticazione
PAP, e inserisce le sue credenziali all’interno del frame. Il destinatario della richiesta esamina le
credenziali e a quel punto può accettare o meno la richiesta di comunicazione, notificandolo al
mittente con un ACK o con un NO ACK. Non è molto efficiente in quanto all’inizio addirittura venivano
passate le password in chiaro. Ormai nessun peer richiede un’autenticazione tramite PAP.
- CHAP  challenge handshake authentication protocol, è più efficiente rispetto a PAP. Il suo
meccanismo è strutturato come una three way handshake, e prevede maggior sicurezza visto che la
password non viene mai spedita in frame che girano per il canale di comunicazione. Il suo
funzionamento si basa sulla scelta di un codice segreto chiamato secret, che viene deciso insieme dal
mittente e dal destinatario. Il mittente esegue una richiesta di connessione con autenticazione con il
suo username, il destinatario genera il secret e lo invia al mittente. A questo punto, il mittente
eseguirà l’hashing del secret con la sua password e la invierà al destinatario che eseguirà il
procedimento inverso e accetterà o meno la richiesta di autenticazione, visto che esso conosce la
password.

Un meccanismo di autenticazione CHAP è stato riscritto da Microsoft ed ha il nome di MS-CHAP, e viene


utilizzato in SO come XP, 2000, Server 2003 e Server 2008. La versione 2 di MS-CHAP include la doppia
autenticazione, cioè il client deve autenticarsi al server e il server deve autenticarsi al client.
09. Sottolivello di controllo dell'accesso al mezzo:
o 09.01 Problematiche di assegnazione del canale.
o 09.02 Protocolli ad accesso multiplo.
o 09.03 Ethernet (standard IEEE 802.3).
o 09.04 Commutazione a livello data link.
o 09.05 Dispositivi di rete.

Il sottolivello MAC (Medium Access Control) è un sottolivello del livello data link. Nello standard OSI, il livello
datalink si divide in due sottolivelli: il livello LLC (Logical Link Control), che si occupa di interfacciarsi con il
livello di rete, e il sottolivello MAC, che si occupa di interfacciarsi con i mezzi fisici. LLC si occupa di gestire le
connessioni e del framing, mentre MAC si occupa di prendere i frame creati da LLC e di spedirli nel canale
fisico vero e proprio.

LLC è implementato a livello software, ed è indipendente dall’architettura (ex. driver della scheda di rete),
mentre il livello MAC si occupa dell’accesso al mezzo fisico, quindi sarà fortemente implementato a livello
hardware.

Problema dell’allocazione del canale

È il problema che si verifica quando si ha un unico accesso al mezzo tra più nodi concorrenti. Le soluzioni a
questo problema possono essere divise in due categorie:

- Statiche  l’accesso al canale viene diviso in tante porzioni fisse, cioè assegno ad ogni nodo una
parte fissa del canale. In questo caso, se un nodo non trasmette nella sua porzione di canale, quella
porzione di canale viene sprecata.
- Dinamiche  l’accesso al canale viene diviso in tante porzioni dinamiche, in base al traffico generato
dai nodi che hanno accesso al canale. Ad esempio, se ho un nodo che trasmette molti dati, gli affiderò
una porzione di canale maggiore rispetto al nodo che trasmette pochi dati.

L’allocazione statica è più facile da gestire e funziona meglio, e si utilizza quando si può prevedere la quantità
di traffico che i vari nodi invieranno al canale. Quando invece il traffico è imprevedibile e si punta a
massimizzare il canale, si utilizza l’allocazione dinamica.

I protocolli che i utilizzano per la per la partizione del canale si dividono in:

- Protocolli a partizione del canale  Reservation Access Method, Polling, Token Passing
- Protocolli ad accesso randomico  ALOHA, CSMA, CSMA/CD, CSMA/CA
- Protocolli a canalizzazione  FDMA, TDMA, CDMA

Un protocollo che gestisce un canale in cui più nodi insieme possono trasmettere deve avere determinate
caratteristiche:

- Fissata con R la capacità massima del canale, se un solo nodo deve trasmettere, esso avrà come
capacità trasmissiva R, mentre se trasmettono insieme N nodi, ciascuno di essi avrà come capacità
trasmissiva R/M (in media).
- Deve essere decentralizzato, cioè deve prevedere il minor numero possibile di nodi master, visto che
in caso di crash di uno di essi il mio protocollo non funzionerebbe più. Al contrario, se il controllo è
suddiviso in maniera equa, avrò una fault tolerance maggiore.
- Deve essere il più semplice possibile da implementare.

Tempo di propagazione: tempo che impiega il frame a partire dalla stazione mittente ad arrivare alla stazione
del destinatario
Tempo di propagazione massimo: tempo che impiega un frame per attraversare lo spazio tra le due stazioni
più lontane tra loro.

Ritardo: doppio del tempo di propagazione (viaggio di andata e ritorno tra le due stazioni).

Protocolli ad accesso randomico

Nessuna stazione ha il controllo del mezzo, ma deve contenderlo con le altre stazioni che vogliono utilizzarlo.
Se si verifica una collisione (più nodi trasmettono contemporaneamente sul canale creando rumore e
corrompendo i frame), i nodi devono re-inviare i frame fino quando quest’ultimo non riesce a passare nel
canale senza collisione. Ogni nodo che appartiene alla collisione, potrà ritrasmettere il frame non
immediatamente, ma anche dopo un intervallo di tempo casuale, così da evitare di ritrasmettere il frame
nello stesso istante e creare una nuova collisione.

ALOHA (ottimo quando sul canale si ha un traffico leggero)

Sono stati sviluppati alle Hawaii e sono stati concepiti per le reti LAN wireless. È molto popolare in quanto è
stato il primo protocollo ad accesso casuale. È una famiglia di protocolli, utilizzata in maniera molto
frequente poiché è facile da implementare.

ALOHA puro

I frame sono tutti della stessa lunghezza L, mentre il canale, per semplicità, viene considerato privo
di errori. Un frame, appena generato, deve essere immediatamente trasmesso sul canale. Se la
trasmissione genera delle collisioni, ogni nodo coinvolto nella collisione, pianifica in maniera
individuale la ritrasmissione del frame aspettando un tempo casuale. Il tempo di attesa è chiamato
tempo di backoff. Il protocollo ALOHA puro ha un meccanismo per evitare la congestione del canale:
esso prevede che se un nodo fallisce per molte volte la trasmissione, deve rinunciare ad inviare il
frame. L’efficienza del protocollo è data dalla percentuale di pacchetti che arrivano al destinatario
senza collisioni al destinatario. Solitamente l’efficienza è intorno al 18% (1/2e).

Funzionamento: invio un frame e setto un timer pari al doppio del tempo di propagazione, cioè al
ritardo. Se prima del timeout mi arriva l’ACK, il frame è stato inviato con successo, se l’ACK non arriva
provo la ritrasmissione dopo aver aspettato per un backoff time che viene scelto in modo randomico.
Se il mio numero di tentativi supera quelli massimo (su ALOHA puro solitamente è 15), rinuncio alla
trasmissione del pacchetto.

Tempo di vulnerabilità: intervallo di tempo in cui potrebbe avvenire una collisione. Su ALOHA puro
il tempo di vulnerabilità è l’intervallo di tempo compreso tra T, cioè l’istante in cui il primo nodo invia
il pacchetto, e T+Tfr, dove Tfr è il tempo necessario per inviare l’intero frame. Se un nodo A inizia ad
inviare il frame all’istante T, si crea una collisione de un nodo B inizia l’invio in un istante di tempo
minore di T+Tfr. Man mano che aumentano le stazioni che vogliono trasmettere e la velocità con cui
esse trasmettono, la probabilità di avere collisioni aumenta. Il tempo di vulnerabilità è pari a 2Tfr.

ALOHA slotted

Ha migliorato ALOHA puro inserendo degli intervalli di tempo che devono essere rispettati, con
l’obiettivo di utilizzare al meglio quello che è l’efficienza dell’uso del canale. Stabilendo che i frame
sono tutti della stessa lunghezza L e che R sia la velocità di trasmissione (bit rate), il tempo necessario
per inviare ogni pacchetto è L/R. Il canale è diviso in base a questo tempo, che crea slot temporali in
cui solo un nodo potrà trasmettere un frame. I nodi pertanto dovranno essere sincronizzati, e nel
momento in cui un nodo ha il frame pronto per essere inviati, aspetta il prossimo slot libero per
inviarlo. Se avviene una collisione, il frame verrà ritrasmesso nel prossimo slot con una probabilità p.
E’ un protocollo fortemente decentralizzato. Il tempo di vulnerabilità è Tfr. L’efficienza quindi
raddoppia e diventa del 36%. Le collisioni sono solo complete, non sono presenti quelle parziali come
nella ALOHA puro.

Vantaggi e svantaggi della famiglia di protocolli ALOHA

Pro:

1. Fortemente decentralizzato
2. Se un nodo è l’unico a voler trasmettere, avrà a disposizione l’intera potenza del canale
3. Semplice da implementare

Contro:

1. Se ho più nodi (N) che vogliono trasmettere, possono verificarsi molte collisioni e la velocità
di trasmissione non è quella ideale di R/N.
2. Basso utilizzo del canale (18% o 36%).

CSMA (Carrier Sense Multiple Access) (ottimo quando si ha traffico pesante)

A differenza di ALOHA, che permette la trasmissione da parte di un nodo indipendentemente da cosa stanno
facendo gli altri nodi, CSMA fa attenzione a questo aspetto. CSMA stabilisce quindi due regole:

- Devo ascoltare il canale per capire se sia libero o meno per iniziare a trasmettere.
- Se qualcuno trasmette, aspetto che finisca prima di iniziare io stesso a trasmettere.

Carrier Sense significa che il nodo deve essere in grado di ascoltare il canale prima di trasmettere. Se il nodo
trova il canale occupato, aspetta un tempo casuale e poi ricontrolla nuovamente lo stato del canale.
CSMA/CD (Collision Detection) introduce una tecnica con cui è possibile rilevare una collisione che avviene
nel momento in cui due nodi iniziano a trasmettere insieme sul canale: in questo caso i nodi interrompono
la trasmissione e la riprovano in seguito. Questa tecnica è utilizzata in Ethernet. In CSMA, più i nodi sono
distanti, maggiore è il calo delle performance, in quanto il tempo di vulnerabilità cresce di pari passo con la
distanza tra i due nodi della comunicazione.

Modalità non persistente

È un possibile comportamento del nodo nel momento in cui non trova il canale libero per poter trasmettere.
A differenza del normale CSMA, dopo aver trovato il canale occupato, non ricontrollerà lo stato del canale
continuamente, ma lo ricontrollerà solamente dopo aver aspettato il suo tempo casuale. Durante l’intervallo
di tempo casuale, non controlla il canale. Riduce la probabilità di collisioni, visto che non controllo il canale
di continuo e la possibilità che inizi a trasmettere insieme ad un altro nodo diminuiscono. Riduce però
l’efficienza della rete visto che il canale potrebbe rimanere in stato idle per molto tempo se l’intervallo di
tempo casuale è molto ampio. I nodi hanno un comportamento altruista, perché ascoltano il canale
solamente ogni tanto.

Modalità persistente

Il nodo ascolta continuamente il canale, fino a quando esso non diventa libero per trasmettere. La probabilità
di collisioni aumenta, in quanto due stazioni potrebbero cominciare a spedire frame contemporaneamente.
I nodi si dice che hanno un comportamento egoista, perché ascoltano sempre il canale. Quando si verifica
una collisione, si aspetta un tempo di backoff e si ricominciano i passi dall’inizio. Il canale è utilizzato in
maniera più efficiente, visto che non rimane in stato di idle.
Modalità p-persistente

È un mix tra le due modalità viste sopra. Il canale viene suddiviso in slot temporali, che hanno come lunghezza
il tempo di propagazione massimo. Quando il nodo trova il canale libero, decide se inviare o meno il frame in
base ad una regola: può trasmettere con probabilità p, o aspettare e ritrasmettere al prossimo slot temporale
con probabilità 1-p. Riduce la probabilità di collisioni come la modalità non persistente, e riduce i tempi di
inattività del canale come la modalità persistente.

CSMA/CD

CSMA/CD diminuisce di molto il numero di collisioni, ma non le elimina del tutto. Infatti, la miglioria
applicata da CSMA/CD è che appena si accorgono della collisione, i due nodi interrompono
immediatamente la trasmissione, occupando così per meno tempo il canale, che così tornerà libero
più velocemente rispetto a quanto farebbe nel normale CSMA. I nodi che trasmettono il frame infatti,
continuano ad ascoltare il canale anche dopo l’invio del frame, così da rilevare collisioni e poter
interrompere la trasmissione. È utilizzato nelle tecnologie LAN ed Ethernet. Per rilevare una
collisione sul canale si guarda l’energia. Esistono 3 livelli di energia: 0, livello normale e livello
anormale. Quando l’energia è 0, il canale è libero, quando il livello è normale significa che sta
viaggiando un frame nel canale, quando il livello è anormale avviene una collisione, e si ha un
aumento di energia sul canale. Se una collisione avviene in un hub, l’hub si accorge che arrivano
pacchetti da 2 porte contemporaneamente, ed invia a tutte l porte in output un messaggio per
segnalare la collisione. Nel momento in cui rileva la collisione, interrompe la trasmissione e invia un
segnale di jam per comunicare l’avvenuta collisione anche alle altre stazioni che quindi scarteranno
il frame, che potrebbe essere corrotto. Per calcolare il tempo di backoff prima di ritentare la
trasmissione, si utilizza l’algoritmo di backoff esponenziale. Il tempo necessario per rilevare una
collisione è al massimo pari al doppio del tempo di propagazione massimo, cioè al ritardo. Affinchè il
CSMA/CD funzioni, è necessario che la stazione mittente si accorga della collisione prima di aver
spedito l’ultimo bit del frame. In base al metodo di persistenza utilizzato, l’efficienza di CSMA/CD è
di:

o 50% se si usa la modalità persistente


o 90% se si usa la modalità non persistente o p persistente.

Algoritmo di backoff esponenziale

Nel momento in cui viene rilevata una collisione, quando avviene l’invio del segnale di jam, viene settato uno
slot temporale pari al doppio del tempo di propagazione massimo + il tempo di trasmissione del segnale di
jam. Viene quindi incrementato il contatore K che tiene traccia dei tentativi di trasmissione eseguiti, e viene
scelto un numero casuale tra 0 e 2k-1, e il nodo attende un tempo pari al prodotto dello slot temporale per il
numero casuale ottenuto. Le stazioni con minor numero di collisioni avranno più probabilità di trasmettere
e dovranno aspettare un tempo minore.

Protocolli a partizione del canale

Al contrario dei protocolli ad accesso randomico, in questo tipo di protocolli l’accesso al canale è gestito da
dei nodi “master”. I principali protocolli sono due:

- Polling  c’è un nodo gestore che interroga gli altri nodi della rete a cui darà accesso al canale.
- Token passing  un token viene passato ad alcuni nodi della rete, e chi è in possesso di questo token
potrà comunicare nel canale.
Ci sono meno collisioni, ma essendoci dei nodi gestori, la struttura è molto sensibile ai guasti dei nodi gestori
che comporterebbero problemi all’intera rete.

Reservation Access Method

Permettono al nodo che vuole trasmettere sul canale di prenotarsi. Il tempo viene diviso in slot e in ogni slot
un frame di prenotazione precede i bit del frame di dati veri e propri. Questo frame di prenotazione sarà
suddiviso in N parti, dove N indica il numero di nodi presenti nella rete. Quando il nodo A vuole trasmettere,
cerca di prenotarsi andando a modificare la sua parte dedicata sul frame di prenotazione. In questo modo, si
prenoterà, e così via tutti gli altri nodi che tentano di prenotarsi che saranno gestiti in ordine temporale (chi
si prenota prima, invierà il proprio frame prima).

Polling

Elimina le collisioni e i momenti in cui il canale è in stato di idle. Un nodo primario gestisce la connessione al
canale. Nel momento in cui il canale è libero, manda un poll agli altri nodi che, se hanno dati da trasmettere,
risponderanno al poll ed inizieranno a trasmettere. Solitamente, il polling viene svolto tramite round robin,
o in determinati casi potrebbe essere svolto in base ad un determinato ordine prefissato. Questo tipo di
polling viene chiamato centralizzato. Se non è presente un nodo primario gestore, ed i nodi hanno un ordine
di importanza prestabilito, il polling è detto distribuito. Il punto debole del polling è il grande traffico dovuto
allo scambio di messaggi di polling.

Token Passing

In questa tipologia di accesso, chi deve trasmettere ha il possesso di un token. Una stazione in questa
architettura si può trovare in due stati:

- Stato di ascolto  la stazione ascolta i bit in ingresso nella sua scheda di rete, e nel caso in cui
trovasse un messaggio che è rivolto a lui, lo copia nella sua memoria, altrimenti lo lascia andare verso
la stazione successiva.
- Stato di trasmissione  la stazione acquisisce un frame speciale, chiamato appunto token, tramite il
quale potrà trasmettere sul canale. Una volta scaduto il token, si rilascia e si torna nello stato di
ascolto.

Protocolli a canalizzazione

FDMA (Frequency Division Multiple Access)

La divisione del canale avviene in base a delle fasce di frequenza, ogni nodo avrà un filtro che permetterà di
isolare la sua frequenza di interesse. Si utilizza anche la banda di guardia. Il problema di questa metodologia
di accesso è che se un nodo utilizza poco il canale, sprecherò della banda.

TDMA (Time Division Multiple Access)

La divisione del canale avviene tramite una divisione nel tempo, cioè ogni nodo avrà a disposizione un canale
per un determinato lasso di tempo in cui potrà usufruire del canale come unico proprietario. Il problema sta
nel sincronizzare le varie stazioni.

CDMA (Code Division Multiple Access)  utilizzato nella telefonia mobile

Lo stesso canale trasporta dati di tutti i nodi contemporaneamente. I dati di ogni stazione sono codificati,
cioè ogni stazione può trasmettere sullo stesso canale senza il pericolo che i suoi dati siano confusi con quelli
di altri.
Gli elementi che costituiscono un sistema CDMA sono:

- Il canale
- La reception  ogni stazione che vuole ricevere dati da un’altra stazione. Prende il segnale, lo
moltiplica per il chip del mittente e lo divide per il numero di nodi che stanno trasmettendo sul
canale.
- Il chip  codice che viene assegnato ad ogni stazione. Viene poi convoluto per ottenere dati specifici.
È un vettore composto da N elementi, dove N indica il numero di nodi che condividono il canale.

Indirizzo MAC

Sono degli indirizzi di tipo hardware, univoci, che sono scritti all’interno delle schede di rete (NIC). Gli indirizzi
di tipo MAC si occupano dell’indirizzamento a livello fisico, cioè nel livello di trasmissione del mezzo. È
rappresentato da 6 numeri esadecimali, ciascuno diviso dall’altro da due punti. I primi tre numeri esadecimali
identificano il produttore e vengono chiamate OUE (Organization Unity Identifier). FF:FF:FF:FF:FF:FF è
l’indirizzo di broadcast. Per differenziare comunicazioni unicast o multicast si utilizza l’ultimo bit meno
significativo del primo ottetto:

- Se è 0, allora è una comunicazione unicast


- Se è 1 è una comunicazione multicast

Il penultimo bit del primo ottetto invece, in base al suo valore, indica:

- Se è 0, indica che l’indirizzo è unico globalmente


- Se è 1, indica che l’indirizzo è gestito localmente dall’amministratore di rete

Ethernet

Il suo standard è IEE 802.3 ed usa per l’accesso al mezzo CSMA/CD. Ethernet nasce negli anni ’70 con una
velocità di trasmissione di 10 Mbps. È stato sostituito dal FastEthernet, che ha una velocità fino a 100 Mbps,
fino ad arrivare ai giorni d’oggi ai GigaEthernet. (StandardEthernet 10, FatEthernet 100, GigaEthernet 1000,
Ten GigaEthernet 10000).

Per riconoscere il tipo di Ethernet usato si utilizza la notazione 10 Base T, dove 10 (o 100 o 1000, …) indica il
tipo di Ethernet e T (o F) indica il tipo di cavo (Twisted Pair o Fibra o X per un canale full-duplex). Alcuni
esempi:

- 10Base5  velocità fino a 10 Mbps, lunghezza massima del cavo di 500 metri e cavo utilizzato
coassiale. I nodi si connettevano tramite i nodi a vampiro, che bucavano il coassiale collegandoci il
coassiale del nodo. Ha una tecnologia a bus.
- 10Base2  velocità fino a 10 Mbps, lunghezza massima del cavo di 200 metri e cavo utilizzato
coassiale. Il cavo è più sottile della 10Base5, e si utilizzano i connettori a T, non più a vampiro. Ha
una tecnologia a bus.
- 10BaseT  Si è evoluta all’inizio degli anni 90. Il cavo è un doppino telefonico e non più un cavo
coassiale, e la topologia a stella, con la presenza degli hub. La distanza massima del cavo è 100 metri
con massimo 4 hub collegati in cascata.
- 10BaseF  Il cavo è di fibra ottica e raggiunge distanze di 4 km. Può avere topologia sia a bus che a
stella. Per comunicazioni singole tra una macchina e un hub, il cavo era più sottile e la distanza
massima di 500 metri, mentre tra più hub in cascata si utilizzano cavi più spessi e la distanza massima
è di appunto 4 km.
FastEthernet

È l’Ethernet che utilizziamo al giorno d’oggi. Ha capacità trasmissiva fino a 100 Mbps. La base è la 100BaseT4,
che lavora su categoria 3, cioè permette 100 metri di lunghezza del cavo e una comunicazione half duplex, e
c’è poi la 100BaseTX, che lavora con la categoria 5, cioè comunicazioni fino a 100 metri ma in full-duplex, e
poi la 100BaseFX che lavora su fibra e permette comunicazioni fino a 2 km di lunghezza del collegamento.

Ethernet half e Full Duplex

Inizialmente, Ethernet era stata modellata come rete half-duplex, ovvero un nodo può ricevere ed inviare
dati, ma non contemporaneamente. In seguito, questa struttura è stata cambiata e da FastEthernet in poi,
per i nodi che lo supportano, si può utilizzare una trasmissione full-duplex, ovvero i nodi possono sia
trasmettere che inviare dati contemporaneamente., permettendo di raddoppiare il throughput. Il tutto
dipende naturalmente dalle NIC dei vari host, che possono o meno supportare una comunicazione full-
duplex. Per una connessione full-duplex si utilizzano due coppie di cavi, una per la trasmissione e una per la
ricezione, evitando quindi anche di dover utilizzare CSMA/CD. Tutto questo è gestito dagli switch, e non più
da un hub. Gli switch sono dispositivi intelligenti che permettono di adattarsi alle modalità half o full duplex.

Frame Ethernet

- Preambolo  campo di 7 byte composto da 0 e 1 alternativi che indica l’imminente inizio di


trasmissione del frame. In questo modo, mittente e destinatario si sincronizzano cercando di
prevenire la perdita o il ritardo di alcune informazioni. Si utilizza la codifica Manchester, in base alla
quale se devo trasmettere uno 0 od un 1 vado ad incrementare a metà del clock la tensione del
segnale sul cavo o viceversa se devo trasmettere un 1 a metà del trasferimento azzero la tensione.
In questo modo sono in gradi di stabilire dove inizia e finisce un bit.
- Indirizzo MAC di destinazione
- Indirizzo MAC del mittente
- Lunghezza del pacchetto
- Payload
- CRC

Gigabit Ethernet

Supporta 4 tipologie di mezzi fisici:

- 1000BaseSX  fibra ottica multimodale, fino a 350 o 500 m in base alla fibra utilizzata (più spessa
più il raggio sarà lungo)
- 1000BaseLX  fibra ottica sia multimodale che unimodale, ha capacità fino a 5 km
- 1000BaseCX  distanza ridotta, cioè 25m su cavi particolari. È così corto perché si utilizza CSMA/CD
ed il tempo di vulnerabilità è pari al tempo di propagazione massimo del frame sul canale, quindi
avendo un mezzo trasmissivo lento, devo diminuire la portata. Viceversa, più ho un mezzo veloce più
posso permettermi di avere una portata maggiore.
- 1000BaseT  utilizza i cavi in rame normali e arriva fino a 100 metri

Come FastEthernet, Gigabit Ethernet supporta sia la modalità full-duplex tramite switch con ampi buffer, che
la modalità half-duplex con hub. Se si usa half-duplex, si utilizzerà CSMA/CD.
Carrier Extension

È il modo tramite il quale è possibile estendere la portata di un collegamento Gigabit Ethernet. Infatti, quando
si parla di half-duplex, deve agire il protocollo CSMA/CD, che ha delle forti restrizioni sul tempo di
vulnerabilità. Aumentando la velocità di trasmissione ma non avendo a disposizione un mezzo fisico tale da
poter trasportare tutte le informazioni inviate ad una velocità sempre maggiore, tramite il carrier extension
si aumenta la lunghezza dei frame da 64 byte a 512 byte. In questo modo, la rete Ethernet passerebbe da
circa 25m a circa 200 m. l’aggiunta di questi bit di estensione mi permette di avere in tempo di propagazione
maggiore. Questi bit di estensione vengono aggiunti tramite dei bit a riempimento. Il frame esteso viene
inviato nella rete e viene tratto come frame corrotto: una volta che il destinatario lo analizzerà, scarterà i bit
di riempimento e manterrà solamente i bit di payload e li passerà al livello superiore tramite LLC.

Frame Bursting

Nel carrier extension, io riesco a gestire l’aumento di velocità di trasmissione, ma spreco banda, poiché
aumento la dimensione del pacchetto con dei bit nulli utilizzati solo per riempimento. In questo modo,
utilizzando carrier extension, mantengo la compatibilità con FastEthernet, ma non ho un grande guadagno
di performance, che sono di pochissimo migliori rispetto a quelle di FastEthernet. Si utilizza allora il frame
bursting. La tecnica consiste nell’inviare solamente il primo frame con una carrier extension, mentre i
successivi frame saranno accorpati fino ad ottenere una lunghezza di 512 byte, ma al posto dei bit di
riempimento avranno tutti bit significativi. In questo modo, un host può inviare più frame senza rilasciare
continuamente il canale.

Buffered Distributor

È utilizzato quando si utilizza Ethernet full-duplex con degli hub. L’hub funziona come un semplice ripetitore
multiporta, cioè quello che riceve in ingresso da una porta lo inoltra su tutte le altre. Quando le porte dell’hub
sono connesse tramite comunicazioni full-duplex, ogni porta ha una coda di tipo FIFO. Quando un frame
arriva su una coda di input, esso viene inviato a tutte le code di output di tutte le porte tranne quella da cui
il frame proviene. In questo caso il CSMA/CD viene eseguito all’interno del distributore, in quanto le porte
sono tutte in modalità full-duplex quindi non ci saranno collisioni.

10Gigabit Ethernet

È stato introdotto nel 2002 ed è già utilizzato in America. Funziona solo in modalità full-duplex e solo con
collegamenti in fibra ottica. Può raggiungere distanze di 40km.
Dispositivi di rete

Repeaters e Hub

Un repeater è un dispositivo che lavora a livello fisico che prende in ingresso un segnale in ingresso da una
porta e lo rigenerano in uscita su un’altra porta. Un hub nasce come un repeater multiporta.

I limiti fisici erano:

- Non potevano rendere uniformi due reti diverse (ex. 10base5 e 10base2)
- Non potevano collegare reti che utilizzano un accesso al mezzo diverso (ex. CSMA o token passing)

Vantaggi:

- Potevano collegare reti che utilizzano mezzi diversi, come fibra e coassiale
- Erano il mezzo più economico per espandere le reti

Bridge

Nella loro versione primaria avevano un solo ingresso ed una sola uscita, ed avevano il compito di unire o
dividere due reti. Ad esempio, dividevano due sottoaree in cui agiva un particolare protocollo di accesso al
mezzo. Il loro compito principale era di dividere un unico dominio di collisione in più segmenti con il proprio
dominio di collisione. Il dominio di broadcast rimane però lo stesso, vale a dire che se un nodo vuole
comunicare con tutti gli altri nodi della rete, il bridge non deve bloccare la comunicazione solamente al
segmento di appartenenza del nodo. In ogni bridge c’è una tabella in cui sono memorizzate le sottoreti
collegate, in modo tale da riuscire ad indirizzare i pacchetti in maniera corretta. Se un host vuole inviare un
messaggio ad un altro host che è sullo stesso segmento, allora il frame che arriva al bridge viene eliminato,
altrimenti il bridge controlla la sua tabella interna e valuta su quale porta inviarla. I bridge lavorano a livello
datalink, e non a livello fisico come hub e repeater, ed inoltre sono in grado di ridurre il traffico di rete al
contrario proprio degli hub e dei repeater.

Switch  comunicazione tra segmenti di rete differenti

Sono l’evoluzione dei bridge. È un bridge multiporta che effettua però le elaborazioni a livello hardware e
non software come svolgeva un bridge. Hanno delle schede dedicate in ogni porta e gestiscono i frame in
arrivo in modalità elettrica. Lavora come un bridge a livello datalink, e divide una rete in più domini di
collisione. Anche uno switch ha una tabella di switching in cui memorizza il MAC address del dispositivo da
cui ha ricevuto il pacchetto, e gli associa la porta dal quale esso è arrivato. Ogni entry della tabella ha una
validità limitata, nel caso in cui un determinato host non invii più pacchetti allo switch, la entry relativa a
quell’host viene cancellata e sarà ripopolata eventualmente in seguito (aging time). Nel momento in cui uno
switch riceve un pacchetto in entrata, controllo l’indirizzo MAC del mittente e se è già presente nella tabella
reimposta l’aging time, mentre se non è presente lo aggiunge alla tabella. Poi cerca di trovare l’indirizzo di
destinazione nella tabella. Se esso è presente inoltra il frame nella relativa porta collegata, altrimenti lo invia
a tutte le porte tranne quella da cui ha ricevuto il frame in attesa di un riscontro (ACK) per poter memorizzare
una nuova entry.

Vantaggi di uno switch:

- Miglioramento delle prestazioni, in quanto il dominio di collisione è diviso in più sottodomini e la


larghezza di banda è maggiore.
- Si possono dedicare delle porte per un determinato traffico in entrata/uscita
- Lo switch permette più connessioni con diverse tipologie di Ethernet, quindi riconosce FastEthernet,
Gigabit Ethernet, ecc.ecc.
- Miglioro la sicurezza, in quanto la rete è divisa in più segmenti ed una eventuale collisione non viene
inoltrata a tutta la rete.

Limitazioni di uno switch:

- Avendo dei buffer, potrebbero creare dei problemi in quanto un buffer potrebbe riempirsi troppo
velocemente creando dei colli di bottiglia e non permettendo di determinare delle collisioni se si
lavora in modalità half-duplex
- Alcuni protocolli di livello superiore come UDP che non hanno un controllo degli errori potrebbero
continuare ad inviare datagrammi creando congestione

Uno switch può inviare pacchetti all’interno della rete in base a varie metodologie:

- Cut through  non appena lo switch inizia a ricevere i dati, legge l’indirizzo di destinazione e nel caso
in cui l’indirizzo appaia nella sua tabella di switching, inizia immediatamente a trasmettere il frame
senza aspettare a ricevere l’intero frame. Il ritardo è minimo ma si incorre nel rischio di trasmettere
frame corrotti. Lo switch quindi fa solamente da indirizzatore, senza effettuare controlli. Il beneficio
della velocità del cut-through diminuisce quando il traffico diventa intenso, in quanto la porta su cui
inoltrare i frame potrebbe essere sempre occupata e quindi i frame devono essere per forza
memorizzati.
- Store and forward  è la tecnica ereditata dai bridge e consiste nel memorizzare in un buffer il frame
per intero e poi in un secondo momento scartarla (se il destinatario è nello stesso segmento del
mittente) o inoltrarla in una sua porta. Questo comporta un certo rallentamento, in quanto il frame
deve essere ricevuto e memorizzato per intero. È molto più affidabile in quanto si controlla se il frame
sia corrotto prima di inoltrarlo. Se però questa tipologia di switching viene utilizzata in una rete con
parecchio traffico, si avrebbe un grande rallentamento.

Router  comunicazione tra due reti differenti

Lavorano a livello rete. Utilizzano per l’indirizzamento l’indirizzo IP, e non il MAC address come i dispositivi
visti in precedenza. Come gli switch anche i router hanno una loro tabella interna dove ci sarà una
associazione indirizzo IP interfaccia sulla quale il pacchetto dovrà essere inoltrato. Le tabelle di routing sono
calcolate in base al protocollo di routing scelto.

Switch di livello 3

È un particolare tipo di switch che permette di fare routing non rinunciando comunque a ciò che fa di base
un normale switch. Ha al suo interno due tabelle, una con gli indirizzi MAC e una con gli indirizzi IP.
Permettono di mettere in comunicazione VLAN di reti diverse.

Il routing che includono gli switch di livello 3 è sia statico che dinamico. Se uno switch implementa solo il
routing statico, viene chiamato switch di livello 2 plus o switch di livello 3 light.

Non riescono però a fare l’ispezione di un pacchetto di livello rete, e non riescono a fare NAT.
Design delle reti LAN

- Reti FLAT  è il design utilizzato per la riduzione dei costi. Si limitano il numero di dispositivi (hub,
bridge, switch) diminuendo i costi, ma si perde la facilità di gestione e le performance sono peggiori.
Si utilizza un solo livello di switching. I problemi principali sono:
o la sicurezza, visto il fatto che lavorando in un unico livello un hacker potrebbe intercettare
un qualsiasi pacchetto e riuscire ad entrare nella rete direttamente
o scarsa affidabilità, in quanto avendo un solo switch se esso si danneggia si verranno a creare
numerosi problemi
o scalabilità e velocità, in quanto tutti i dispositivi si connettono ad un unico switch centrale
aumentando così la possibilità di collisioni

- Reti gerarchiche  forniscono grande scalabilità e facilità di gestione, oltre ad avere più sicurezza.
Ci sono più livelli, ciascuno dei quali ha un determinato compito. Un livello è anche un dominio di
collisione. I livelli principali sono:
o Livello di accesso  fornire l’accesso agli utenti
o Livello di distribuzione  si occupa di fornire la connettività
o Livello core  si occupa di routing e della gestione delle richieste.

In alcuni casi il livello core ed il livello di distribuzione si uniscono arrivando ad una struttura a 2 livelli,
ideale per aziende o campus di più piccola dimensione.

Attacchi di sicurezza di livello data link

MAC/ARP flooding  Nell'ambito della sicurezza informatica, il MAC flooding (detto anche Switch
Flooding e impropriamente ARP flooding, letteralmente inondazione dello switch) designa una tecnica di
attacco in una rete locale (LAN) commutata che consiste nell'inviare ad uno switch pacchetti appositamente
costruiti per riempire la CAM table dello switch, che normalmente associa un indirizzo MAC alla porta cui il
relativo terminale è collegato, con indirizzi MAC fittizi. La CAM table (Content Addressable Memory table) è
una struttura dati efficiente, concettualmente simile a una hash table, che permette di associare
rapidamente un indirizzo di dimensione fissa (nel caso di uno switch, un indirizzo MAC) alla porta a cui è
collegato il terminale. Questo attacco costringe lo switch, una volta saturata la CAM table, ad entrare in una
condizione detta di fail open che lo fa comportare come un hub, inviando così gli stessi dati a tutti gli apparati
ad esso collegati, compreso quello di un eventuale aggressore che può dunque sniffare tutto il traffico in
transito nella rete. Non tutti gli switch optano però per questa configurazione quando sono sottoposti a
questo tipo di attacco. Alcuni infatti entrano in uno stato di blocco, impedendo il passaggio del traffico.

MAC/ARP poisoning  Nell'ambito della sicurezza informatica l’ARP poisoning


(letteralmente avvelenamento dell'ARP) è una tecnica di hacking che consente ad un attacker, in
una switched lan, di concretizzare un attacco di tipo man in the middle verso tutte le macchine che si trovano
nello stesso segmento di rete quando queste operano a livello 3 cioè di internetworking con altre sottoreti
scambiandosi traffico IP grazie al ricorso ad opportune manipolazioni tramite i protocolli di livello 2. L'ARP
poisoning è oggi la principale tecnica di attacco alle lan commutate. Consiste nell'inviare intenzionalmente e
in modo forzato risposte ARP contenenti dati inesatti o, meglio, non corrispondenti a quelli reali. In questo
modo la tabella ARP (ARP entry cache) di un host conterrà dati alterati (da qui i termini poisoning,
letteralmente avvelenamento e spoofing, raggiro). Molto spesso lo scopo di questo tipo di attacco è quello
di ridirezionare, in una rete commutata, i pacchetti destinati ad un host verso un altro al fine di leggere il
contenuto di questi per catturare le password che in alcuni protocolli viaggiano in chiaro.
Port stealing  Quando uno switch riceve un pacchetto su una porta effettua il backward learning cioè
memorizza in una CAM l'associazione tra il MAC sorgente del pacchetto e la porta da cui questo pacchetto
arriva. In questo modo quando riceverà il pacchetto di risposta lo invierà solo sulla porta a cui la sorgente è
collegata. Questo processo è privo di meccanismi di sicurezza, per cui chiunque sia collegato allo stesso switch
può inviare un pacchetto con il MAC di un altro host per ricevere e sniffare il suo traffico di ritorno. Il port
stealing consiste proprio nell'inviare pacchetti con il MAC di un altro host con l'intento di creare una entry
falsa nella CAM (la porta viene "rubata", port-stealing significa proprio furto della porta).

MPLS (MultiProtocol Label Switching)

È un protocollo di livello 2.5, cioè integra il routing con lo switching. MPLS aggiunge un'etichetta davanti a
ciascun pacchetto e l'inoltro si basa sull’etichetta anziché sull'indirizzo di destinazione. Trasformando
l'etichetta in un indice interno memorizzato in una tabella rende la ricerca dell’interfaccia molto più veloce
in quanto si tratta solamente di effettuare una ricerca nella tabella. Usando questa tecnica, l'inoltro può
essere fatto molto rapidamente. I principali vantaggi nel tempo sono diventati il routing flessibile e l'inoltro
di un pacchetto effettuato in maniera veloce ed efficiente. L’etichetta che MPLS aggiunge va incastrata tra
l’etichetta del pacchetto IP e quella del frame di livello datalink. Il label aggiunto da MPLS ha 4 campi, il più
importante è label, in cui risiede l’indice che verrà memorizzato in tabella ed utilizzato per la ricerca. In un
routing di livello rete, in ogni router si analizzerebbe l’indirizzo IP, con MPLS invece una volta che il pacchetto
entra in una determinata rete verrà etichettato con un label che rimarrà tale fino a quando non cambierà
rete, e in ogni router verrà elaborata solo l’etichetta e in base a tale etichetta il pacchetto verrà instradato
sulla giusta porta. L’operazione di controllare il label ed inoltrarlo sulla determinata interfaccia viene
chiamata switching, al contrario del calcolo del percorso da seguire che si svolge quando si parla di routing a
livello rete, che viene chiamato forwarding.
Non tutti i router supportano MPLS. Il label MPLS viene aggiunto solamente nel momento in cui si arriva ad
un router che da accesso ad una rete MPLS, e nel momento in cui la rete MPLS finisce, il label viene rimosso
e si può tornare al normale routing di livello 3. Un router che appartiene ad una rete MPLS è chiamato LSR
router (Label Switched Router). Un router che si trova agli estremi di una rete MPLS viene chiamato LER
(Label Edge Router), ed è l’unico router ad analizzare l’IP del pacchetto per capire che label assegnargli. Tutti
i flussi che utilizzano lo stesso label fanno parte della stessa FEC (Forwarding Equivalence Class).
Per costruire un LSP (Label Switching Path), ciascun router LSR al momento dell’avvio capisce per quali host
lui stesso è l’ultimo router del percorso. A quel punto inizia a popolare la tabella di switching, e tramite dei
messaggi comunica ai suoi LSR vicini i label che essi dovranno utilizzare. Ciascun LSR può utilizzare i label a
piacimento, l’importante è che il label in uscita sia uguale al label richiesto dall’LSR successivo a lui nell’LSP.

Ex. per raggiungere l’host 1.2.3.4 l’ultimo LSR è il router A. Il router A decide che per raggiungere l’host
1.2.3.4, gli LSR precedenti a lui dovranno utilizzare il label 1. Il router B riceve questa informazione dal router
A: il router B si trova prima del router A nell’LSP, ovvero è il penultimo LSR prima di arrivare ad 1.2.3.4. B sa
che per arrivare a 1.2.3.4 dovrà utilizzare il label 1, pertanto in uscita per arrivare a 1.2.3.4 utilizzerà 1. B poi
dovrà comunicare a C che per raggiungere 1.2.3.4 dovrà utilizzare un determinato label. Questo label
potrebbe anche non essere 1, ma potrebbe essere 2. Quindi C utilizzerà 2, B poi cambierà il label da 2 a 1 in
modo tale che A riceva 1 e potrà far arrivare il pacchetto ad 1.2.3.4.
10. Livello fisico:
o 10.01 Basi teoriche della comunicazione e della trasmissione fisica dei dati.
o 10.02 Mezzi di trasmissione guidati.
o 10.03 Mezzi di trasmissione wireless.
o 10.04 Data Center Intro.

Periodo: parte del segnale che si ripete nel tempo. Si misura in secondi.

Frequenza: numero di periodi di un segnale all’interno dell’unità di tempo. F = 1 / t e si misura in Hertz (Hz).

Fase: descrive la posizione dell’onda rispetto all’istante di tempo 0.

Lunghezza d’onda: relazione tra la frequenza ed il mezzo trasmissivo su cui esso si propaga. La sua formula è
lambda = velocità di propagazione / frequenza.

Trasportare un segnale con più armoniche, cioè con più campionamenti, mi permette di trasportare un
segnale più preciso ma con velocità minore, mentre invece trasportare un segnale con meno armoniche mi
aumenta la velocità ma mi diminuisce l’accuratezza del segnale.

Attenuazione: perdita di energia del segnale. Per riportarlo alla stessa energia devo amplificarlo con dei
ripetitori. L’attenuazione è misurata in dB.

Distorsione: il segnale cambia la sua forma durante il trasferimento. Alcune armoniche utilizzate per
scomporre il segnale subiscono un ritardo di fase, questo porta a ricomporre un segnale distorto.

Rumore: è un segnale esterno introdotto dalle condizioni ambientali (wireless) o dal mezzo di trasmissione
che viene introdotto nella comunicazione e viene sommato alle varie armoniche del segnale che pertanto
risulterà essere deteriorato. Esiste anche il rumore termico, che si riferisce in particolar modo al rumore fisico
introdotto dal mezzo guidato su cui si sta trasmettendo.

Rapporto SNR: rapporto segnale-rumore. Più il rapporto è grande più il segnale è migliore perché il rumore
è piccolo e viceversa.

Quanto velocemente possiamo spedire i dati? Questa velocità dipende da:

- Qualità del canale, cioè quando rumore introduce


- Il numero di livelli del segnale
- La larghezza di banda disponibile

Le risposte a queste domande sono due:

- La prima fu fornita da Nyquist  il segnale inviato su un canale di larghezza di banda H può essere
ricostruito inviando dati con una velocità massima di 2Hlog2V con V che indica il numero di livelli del
segnale. Questa formula è nota anche come teorema del campionamento. Vale per i canali ideali,
cioè senza rumore.
- La seconda è stata fornita da Shannon  rielabora la formula di Nyquist introducendo il rumore nella
formula, modificandola e aggiungendo il rapporto segnale/rumore. La formula che indica la velocità
massima di trasmissione diventa quindi Hlog2(1+SNR).

Questa velocità è chiamata throughput.

Latenza: tempo impiegato per raggiungere il destinatario.


Prestazioni di una trasmissione: quando si parla di prestazioni si fa riferimento alla larghezza di banda del
canale. In questo caso, con lo stesso termine larghezza di banda si fa riferimento a due cose differenti. La
prima è la larghezza di banda intesa come differenza di frequenza tra la frequenza massima e minima del
canale (ex. il canale di trasmissione è tra 10 e 25 Hz, la larghezza di banda è di 15 Hz). La seconda si riferisce
invece alla velocità di trasmissione vista sopra.

Jit: variazione del ritardo durante la comunicazione.

Mezzi di trasmissione

Guidati: forniscono un supporto fisico su cui trasmettere

- Doppino
- Cavo coassiale
- Fibra ottica

Non guidati

- Trasmissioni radio
- Trasmissione a microonde
- Trasmissione a infrarossi
- Trasmissione di tipo ottico

Nei mezzi di trasmissione guidati ci sono anche cd e usb, in quanto memorizzando dei dati su queste
periferiche posso trasportarli su un altro dispositivo.

Doppino telefonico (twisted pair)

All’interno del doppino telefonico ci sono 4 doppini, cioè 4 coppie. Queste coppie singole (cioè un singolo
doppino) si dividono in categorie, in base a come essi sono attorcigliati tra loro (più il cavo è attorcigliato
maggiore è la sua qualità poiché annullo il campo magnetico generato dal filo):

- Categoria 3  permette il passaggio di 16 MHz, era quello utilizzato per la telefonia


- Categoria 5  permette il passaggio di 100 MHz
- Categoria 6  permette il passaggio di 250 MHz
- Categoria 6a  permette il passaggio di 500 MHz

Inoltre, si dividono in base a come è formato il cavo, cioè ai livelli di protezione: protetto significa che ciascuna
coppia di doppini ha una schermatura, schermato significa che è presente una schermatura prima della
guaina dell’intero doppino. In base a queste due caratteristiche il doppino telefonico si divide in:

- UTP  non protetto e non schermato


- STP  protetto ma non schermato
- S/UTP  non protetto ma schermato
- S/STP  protetto e schermato

Il doppino telefonico termina con il plug RJ-45. Nel plug vanno inseriti i cavi in un determinato ordine. Gli
ordini possibili sono 2 e sono EIA/TIA568a e EIA/TIA568b. Solitamente si utilizza EIA/TIA568b perché da una
diafonia migliore, cioè una minor interferenza tra gli 8 cavi inseriti nel plug (ordine dei cavi: bianco-arancio,
arancio, bianco-verde, blu, bianco-blu, verde, bianco-marrone, marrone).
Cavo Coassiale

Permette il passaggio di segnali a frequenze più alte rispetto al doppino telefonico. È formato da un
conduttore centrale fatto in rame, protetto da una guaina isolante, protetta anch’essa a sua volta da una
guaina in maglia metallica, il tutto rinchiuso in una guaina di plastica esterna. Anche i cavi coassiali sono divisi
in categorie in base alle caratteristiche fisiche che hanno, cioè in base allo spessore del cavo conduttore in
rame centrale e alle guaine e maglie di rivestimento. Il terminatore di un cavo coassiale è un connettore a
baionetta, chiamati connettori BNC. Sui cavi coassiali il segnale si attenua prima rispetto ai doppini telefonici.
All’inizio si utilizzava il cavo coassiale in quanto per distanze brevi permetteva di far passare segnali a bande
maggiori (fino a 1 GHz). È utilizzato nei cavi delle televisioni.

Fibra ottica

È un cavo fatto di vetro capace di trasmettere il segnale sotto forma di luce, cioè ottica. L’invio dei segnali
avviene tramite l’utilizzo di alcuni led che generano il fascio luminoso che verrà riflesso nei vari pezzi di vetro
fino ad arrivare alla destinazione. La fibra ottica si basa sul principio dell’angolo di riflessione: la sorgente di
luce iniziale che contiene il segnale viene immessa all’interno del cavo con un determinato angolo rispetto
all’asse orizzontale. Esistono due tipi di fibra:

- Multimodale  i raggi luminosi che attraversano il cavo in vetro sono tanti, ciascuno con un indice
di riflessione diverso. Si dice che tramite la fibra multimodale si possono inviare più colori. Il passaggio
del segnale può essere implementato in due maniere: a scatto o ad indice graduale.
- Monomodale  viene trasmesso un unico raggio luminoso che risulta essere quasi orizzontale.

Il cabro in fibra ottica è composto da un’anima in vetro co diametro dagli 8-10 micron (fibra monomodale)
fino a 50 micron (fibra multimodale). L’anima è rivestita dal cladding, anch’esso in vetro, rivestiti a loro volta
da una guaina di plastica misto kevlar.

Il segnale luminoso viene immesso nel canale tramite dei fotodiodi, che sono LED o laser. I laser sono più
efficienti ma durano meno nel tempo e hanno un costo maggiore, i led sono più economici e più duraturi nel
tempo ma sono meno efficienti.

I connettori della fibra ottica sono chiamati SC (Standard Connector, sono quadrati) o ST (sono rotondi).

È il miglior mezzo guidato che si ha a disposizione, infatti ha una attenuazione molto bassa, ha una larghezza
di banda molto grande, riesce ad arrivare grazie alla bassa attenuazione a distanze considerevoli (diversi km),
è più leggera, non ha problemi di interferenze elettromagnetiche, sono più resistenti alla corrosione. La
manutenzione e l’installazione però sono più complicate in quanto non si possono effettuare pieghe con
angoli ristretti.

Data center

Un data center è composto da:

- Spazio fisico
- Pavimento rialzato o flottante
- Stanza elettrica
- Alimentazione di riserva
- Cablaggio
- Impianto di raffreddamento
- Sistema antincendio
Spazio fisico

È importante scegliere adeguatamente la metratura del data-center. Infatti, nel caso in cui si scelga un
ambiente troppo piccolo, sarebbe complicato ampliarsi in caso di bisogno aggiungendo delle attrezzature.
Viceversa, è importante non scegliere una struttura troppo grande in quanto alcuni spazi resteranno
inutilizzati e portando a costi di gestione inutili. La decisione della struttura viene decisa a tavolino,
progettando il ciclo di vita del data-center (tra 10 e 20 anni) e progettando la struttura interna.

Pavimento flottante

Pavimento rialzato rispetto al normale livello della struttura che permette il passaggio del cablaggio e dei vari
sistemi di raffreddamento e delle griglie per la messa a terra, oltre a contenere sensori come quello di umidità
o del fumo per la gestione del data-center e delle sue caratteristiche ambientali interne.

Stanza elettrica

Ospita i generatori, i quadri elettrici, i gruppi di continuità (UPS). La stanza deve essere posizionata in maniera
ottimale, tenendo conto di vari fattori come l’elettromagnetismo. Solitamente si utilizza una soluzione
chiamata corsia calda/corsia fredda, in cui le corsie tra i vari server sono alternate, una con griglie per il
raffreddamento, e una senza. I cluster di server sono messi a coppie con le schiene che si guardano, e la corsia
dove saranno rivolte le parti posteriori dei cluster sarà una corsia fredda. Viceversa, le corsie che danno sulla
parte anteriore di un cluster saranno corsia calde. Le corsie fredde sono più ampie per permettere ai
manutentori di lavorare in condizioni migliori.

Alimentazione di riserva

Include i sistemi di alimentazione che devono entrare in azione nel momento in cui la normale alimentazione
riscontrasse problemi.

Disponibilità di un data center

È la misura che indica la disponibilità di usufruire dei servizi di un data-center, cioè il tempo che esso riesce a
rimanere disponibile ad erogare servizi e non è in stato di down. Sulla disponibilità di un data-center
influiscono l’affidabilità e anche i tempi di ripristino del down. Si misura in noni, cioè:

- Sei noni  disponibilità del 99.9999%, 32 secondi di down in un anno


- Cinque noni  disponibilità del 99.999%, 5 minuti di down in un anno
- Quattro noni  disponibilità del 99.99%, 52 minuti di down in un anno
- Tre noni  disponibilità del 99.9%, circa 9 ore di down in un anno
- Due noni  disponibilità del 99%, circa 3 giorni di down in un anno

Se ho 5 minuti di down in un anno, è meglio averli tutti in un’unica volta, perché il controllo di ripristino mi
costa molto, quindi farlo 1 volta è meglio che farlo 10 volte. L’affidabilità è diversa dalla disponibilità.

Livelli di un data center

Un data-center può essere sviluppato in più livelli.

- Data-center di livello 1  1 sola alimentazione, qualche componente ridondato e qualche servizio di


backup. Di solito hanno un’affidabilità del 99.67% (26 ore di down all’anno)
- Data-center di livello 2  1 sola alimentazione, almeno la metà dei componenti ridondati, e avrà un
servizio di backup. La disponibilità è del 99.75% (22 ore di down all’anno)
- Data-center di livello 3  più linee di alimentazione e raffreddamento, ha sistemi di manutenzione
ed aggiornamento che evitano che il servizio vada down per l’aggiornamento. Ha disponibilità 5/9,
cioè 99.999%.
- Data-center di livello 4  ha alta tolleranza ai guasti e tutti i componenti sono ridondati.

Gestire un data-center sviluppato in un unico ambiente è molto più facile rispetto che gestire un data-center
sviluppato in più stanze. Occorre inoltre scegliere il sito in maniera accurata (eventi sismici, alluvioni, …).
11. Sicurezza nelle reti:
o 11.01 Elementi di crittografia.
o 11.02 Protocolli di autenticazione, protocolli di integrità e distribuzione delle chiavi.
o 11.03 ISO/IEC 2700x, CIS Framework e GDPR.
o 11.04 Firewall.
o 11.05 Sistemi IPS (Intrusion Prevention System) e IDS (Intrusion Detection System).

La sicurezza di un sistema informatico include la sicurezza e la protezione di tutti quelli che sono i suoi
componenti, a partire dall’hardware, passando per il software, il firmware, le telecomunicazioni e le
informazioni e i dati.

Crittografia

È un ramo della sicurezza che si occupa di mandare i dati in maniera segreta, cioè protetti da una chiave. Si
divide in due categorie:

- Crittografia simmetrica  utilizza una unica tipologia di chiave per criptare e decriptare i dati
- Crittografia asimmetrica  utilizza due chiavi distinte per criptare e decriptare i dati

Inoltre, include anche gli algoritmi utilizzati per mantenere l’integrità dei dati e anche per la sicurezza dei
dati.

Crittografia simmetrica (chiave privata)

A partire da un dato in chiaro, si utilizza un algoritmo di crittografia al quale viene passato una chiave. Tramite
questa chiave, il dato viene criptato. La chiave è un’informazione che deve essere mantenuta segreta, poiché
se un attacker ne venisse a conoscenza potrebbe decriptare i dati che invece devono essere mantenuti
segreti. Si chiama simmetrica poiché la chiave per cifrare e decifrare il messaggio è la stessa. L’algoritmo, a
differenza della chiave, può non essere mantenuto segreto, a differenza della chiave che deve essere
mantenuta segreta. I possibili attacchi a questo tipo di crittografia sono attacchi di criptoanalisi, cioè
tentando di capire le proprietà dell’algoritmo di crittografia, o attacchi a forza-bruta, che tentano di rubare
la chiave. Inizialmente, la crittografia si basava sulla trasposizione, cioè ad esempio la lettera A veniva
sostituita con la lettera D, cioè veniva trasposta di 3 posizioni, e la parola CIAO diventava FLDR.
Successivamente, sono state introdotte le macchine a rotori, che introdussero una tecnologia di crittografia
più efficiente.

Crittografia asimmetrica (chiave pubblica)

Si utilizzano due chiavi, una chiave pubblica per criptare un testo in chiaro e una privata per decriptarlo. Ogni
utente genera una coppia di chiavi per cifrare e decifrare i messaggi. Se ad esempio Bob vuole inviare un
messaggio privato ad Alice, Bob prenderà la chiave pubblica di Alice e ci cifrerà il messaggio. Quando il
messaggio arriverà ad Alice, essa utilizzerà la sua chiave privata per decifrare il messaggio. La crittografia
asimmetrica si divide in 3 categorie:

- Cifratura – decifratura
- Firma digitale
- Scambio di chiavi

Crittografia simmetrica vs crittografia asimmetrica

Simmetrica: stesso algoritmo e stessa chiave, la chiave deve essere tenuta segreta.

Asimmetrica: due algoritmi e due chiavi, una pubblica e una privata, solo la privata deve essere segreta.
Algoritmo DES (Data Encryption Standard)  usa crittografia SIMMETRICA

Deriva dalla struttura di Feistel. Nella struttura di Feistel, il messaggio viene suddiviso in blocchi, con una
lunghezza pari ad N. Questa lunghezza viene divisa come N = 2V. Ad ogni iterazione il blocco viene diviso in
due sottoblocchi, quello di sinistra e quello di destra, ciascuno di lunghezza V. Vengono utilizzate delle chiavi
per ogni iterazione, cioè data una chiave di un determinato numero di caratteri, anch’essa sarà suddivisa in
sottochiavi. Ciascun sottoblocco sinistro e destro subirà un determinato numero di iterazioni e verranno
ricombinati alla fine per formare la parola cifrata. L’iterazione i-esima riceve in ingresso i blocchi
dell’iterazione i-1, ai quali verrà aggiunto un pezzo di chiave. Ogni iterazione ha la stessa struttura: si prende
il blocco di destra (a 32 bit), lo si porta a 48 bit, e lo si dà in pasto ad una funzione F in cui gli viene aggiunta
una parte di chiave. A quel punto, viene fatto uno XOR tra la nuova parola ottenuta dal blocco di destra e il
blocco di sinistra. Nell’iterazione successiva, il risultato di tutta questa elaborazione sarà comunque una
parola a 32 bit, che verrà presa come blocco destro, mentre il blocco sinistro sarà il blocco destro
dell’iterazione precedente originale, senza nessuna elaborazione. La funzione F deve essere non invertibile.

DES prende in ingresso un testo in chiaro a 64 bit e una chiave di 56 bit e produce un testo cifrato di 64 bit.
Le iterazioni sono 16. Criptografia e decriptazione sono fatte con la stessa macchina, nella decriptazione le
sottochiavi vengono utilizzate in ordine inverso. DES è molto robusto, ma può essere bucato. Si utilizza per
una robustezza maggiore 3DES, che consiste nell’utilizzare il procedimento di DES per 3 volte con tre chiavi
diverse.

Algoritmo AES (Advanced Encryption Standard)  usa crittografia SIMMETRICA

Non utilizza più il cifrario di Feistel ma piuttosto utilizza il cifrario di Rijndael. Nasce nel 2011 ed ha la
possibilità di utilizzare chiavi a 128, 192 e 256 bit. Il numero di round, cioè di iterazioni, è variabile in base
alla lunghezza della chiave che scelgo, e i numeri sono 10 (128), 12 (192) e 14 (256). AES prende in ingresso
una parola a 128 bit e ne restituisce una cifrata sempre a 128 bit. La lunghezza della chiave che viene utilizzata
ad ogni iterazione è di 128 bit. In ogni iterazione, sulla parola vengono sostituiti i bit con alcuni bit presenti
su una specifica matrice e su un determinato vettore inizialmente scelti (la funzione scelta per la sostituzione
non è lineare quindi mette al sicuro da attacchi di criptoanalisi), poi avviene uno shift nelle righe (la prima
riga non subisce shift, nella seconda tutti gli elementi della matrice si sposteranno di una posizione a sinistra,
nella terza riga di 2 posizioni a sinistra e così via), e poi avviene la moltiplicazione colonna per colonna
dell’intera matrice per un vettore che origina una nuova matrice. Infine, viene aggiunta una chiave, con una
semplice addizione tra la matrice ottenuta e i bit della chiave. Nell’ultimo ciclo non viene utilizzata la
moltiplicazione colonna per colonna della matrice. La decifrazione avviene procedendo al contrario, cioè a
partire dal testo cifrato, si ripercorre l’intero percorso ma dal verso opposto, invertendo anche l’ordine delle
operazioni che sarà quindi prima la moltiplicazione colonna per colonna, per passare poi allo shift delle righe
e alla sostituzione dei bit. Le chiavi utilizzate nei vari round sono gestite dal key scheduler.

Il livello di sicurezza AES è molto elevato, tanto che AES con chiave a 192 bit viene utilizzato da NIST per
criptare i documenti segreti.

Algoritmo RC4  usa crittografia SIMMETRICA

Premesse:

- Cifrario a blocchi  prende un blocco di dati in entrata e lo cifra, elabora un blocco alla volta
- Cifrario a flusso  man mano che i dati entrano vengono cifrati

RC4 è un cifrario a flusso ed è stato introdotto alla fine degli anni 80. È utilizzato in protocolli importanti come
SSL ed il TLS. RC4 si basa sulla generazione di un keystream. Crea due vettori, in cui in uno sono memorizzate
le informazioni da cifrare, e nell’altro è memorizzata la chiave. A quel punto riordina in maniera casuale la
chiave ed effettua uno XOR con le informazioni da criptare generando un keystream di bit casuali. La chiave
può essere lunga al massimo 256 byte, nel caso in cui fosse più corta al momento dell’inizializzazione
dell’array esso viene riempito con valori nulli. Una volta che la i-esima cella del vettore temporaneo
contenente la chiave viene utilizzata, quella cella è come se fosse cancellata e non verrà più utilizzata.

ECB (Electronic Code Book)  usa crittografia SIMMETRICA

È un cifrario a blocchi, che lavora su blocchi di dimensione fissa di 64 bit. Ad ogni blocco di testo in chiaro
corrisponde un blocco cifrato con una determinata chiave, cioè se applico la chiave A ad un blocco, se trovo
un altro blocco uguale e riapplico A ottengo lo stesso blocco cifrato. La sua semplicità lo rende vulnerabile
all’attacco di cripto-analisi. Più è lungo il messaggio da dividere in blocchi più la criptografia del messaggio è
debole.

CBC  usa crittografia SIMMETRICA

È l’evoluzione di ECB, introduce una dipendenza tra i blocchi in un cui il messaggio è stato diviso. Il primo
blocco viene cifrato, e il blocco cifrato, oltre che essere utilizzato come risultato del blocco, viene messo in
XOR con il blocco successivo e così via a cascata. In questo modo, due blocchi uguali non avranno la stessa
cifratura. Il lato critico risulta essere che nel caso in cui ci sia un errore di trasmissione, l’errore viene
propagato.

CFB (Chiper FeedBack)  usa crittografia SIMMETRICA

È un cifrario a ibrido a blocchi e flusso. Il blocco dove vengono memorizzati i dati è un registro a scorrimento,
e vengono cifrati dati ogni qualvolta nel registro siano presenti n bit. Una volta cifrati come un cifrario a
blocco, vengono utilizzati solo gli S bit più significativi che vengono messi in XOR con il “blocco” successivo
come visto con CBC. Se codifico del testo in chiaro con questa modalità non devo eseguire la decodifica, ma
basterà eseguire la normale codifica sulla già eseguita codifica ed otterrò il testo originale.

RSA (Rivest, Shamir, Adleman)  usa crittografia ASIMMETRICA

1. Si elegge una coppia di numeri primi p e q molto grandi che devono rimanere segreti
2. Si calcola il valore n = p*q
3. Si calcola il valore φ(n) = (p-1)(q-1)
4. Si calcolano e e d che saranno due esponenti, e sarà l’esponente della chiave pubblica mentre d
sarà l’esponente della chiave privata.

La cifratura sarà volta tramite c = me, dove m indica il messaggio, mentre la decifratura sarà svolta tramite
m = cdmod n.

Enveloping

È una tecnica dove si crea un ibrido tra una crittografia simmetrica ed asimmetrica. Si utilizza la crittografia
simmetrica per criptare il messaggio, in quanto è più veloce e richiede meno sforzo computazionale, poi si si
cripta la chiave tramite la criptografia asimmetrica. In questo modo la criptografia asimmetrica che richiede
più tempo e più elaborazione computazionale deve lavorare su una quantità minore di dati, cioè solo sulla
chiave.
Autenticazione del messaggio

Si tratta di riconoscere l’integrità del messaggio, cioè che esso non sia stato corrotto, validare la sorgente del
messaggio, cioè controllare che il mittente sia una fonte affidabile e non un mittente pericoloso, e controllare
che il mittente abbia davvero voluto inviare quel messaggio. Per garantire l’autenticazione del messaggio si
possono utilizzare:

- Crittografia del messaggio


- MAC (Message Authentication Code)
- Funzione di HASH

Autenticazione

È il processo con cui una persona deve provare la propria identità. È una cosa diversa rispetto al provare che
un messaggio sia stato inviato proprio da quell’utente. I primi protocolli avevano livello di sicurezza molto
basso. Nel momento in cui Alice voleva parlare con Bob diceva “Ei sono alice”, ma nessuno garantiva
effettivamente che fosse Alice. Per implementare un meccanismo di sicurezza in più, si passò all’utilizzo
dell’indirizzo IP, ma anche questa è una tecnica debole in quanto con l’IP spoofing si può rubare un indirizzo
IP e spacciarsi per un’altra persona. Si passò poi all’utilizzo di password, ma se un terzo utente conoscesse la
password di Alice, potrebbe comunque spacciarsi per lei. Si è poi provato a criptare le password, ma il tutto
non era comunque sicuro perché con un attacco di tipo playback, un attacker potrebbe prelevare e rimandare
sulla rete la password di Alice per quanto essa fosse criptata. Una soluzione che risolve il problema è quella
di richiede l’uso di più password diverse: Alice invia la propria password a Bob, Bob invia ad Alice un nonce
R, Alice cripta il nonce tramite la chiave che Bob le ha fornito con il nonce e lo reinvia a Bob, il quale decripterà
il nonce criptato e se riconosce che è lo stesso che aveva inviato ad Alice, l’autenticazione è completata.
Questa autenticazione è la 4.0. Nell’autenticazione 5.0, Alice manda la password a Bob, Bob invia ad Alice un
nonce, Alice cripta il nonce con una sua chiave privata, e lo invia a Bob, Bob richiederà la chiave pubblica ad
Alice e decripterà il messaggio, e se il nonce è lo stesso di quello che era stato inviato all’inizio,
l’autenticazione è completata. L’autenticazione 5.0 è meno sicura della 4.0, ma il passaggio di chiavi della 4.0
è più complicato in quanto si parla di chiavi che devono essere mantenute segrete, mentre nella 5.0 si
utilizzano chiavi asimmetriche pubbliche.

Funzioni di HASH

Sono delle particolari funzioni che permettono di dare un’impronta digitale ad un messaggio in maniera da
poter identificare in maniera univoca il messaggio. Un messaggio HASH è la rappresentazione univoca non
falsificabile di un determinato messaggio M. La funzione deve essere facile da calcolare e deve comprimere
il messaggio. Le proprietà che una funzione di hash ha sono:

- È oneway, cioè una volta effettuata la codifica con la funzione di hashing, è computazionalmente
difficile tornare al messaggio iniziale.
- Godono della proprietà di sicurezza forte, cioè è difficile trovare due messaggi che abbiano lo stesso
valore di hash.
- Godono della proprietà di sicurezza debole, cioè dato un messaggio è difficile trovarne un altro con
lo stesso valore di hash.

Se due messaggi differiscono anche di un solo bit, il loro valore di hash (a parità di funzione applicata) è
diverso. Una volta ottenuto il valore di hash, deve essere computazionalmente difficile tornare al messaggio
iniziale. Questa condizione si basa sul paradosso del compleanno, in base alla quale c’è un’alta possibilità
che due persone di un gruppo siano nati lo stesso giorno. In un gruppo di 23 persone, a probabilità è del 51%,
mentre in un gruppo di 30 persone la probabilità arriva al 70%. In base a questo principio, la funzione di hash
deve essere ben parametrizzata e sufficientemente lunga, in quanto è molto probabile ottenere due valori
di hash uguali, cioè ottengo una collisione. Più una funzione di hash crea un valore di hash lungo, con più bit,
più sarà difficile risalire al messaggio originale. La lunghezza però impatta sullo sforzo computazionale del
calcolo del valore di hash. Infatti, il messaggio iniziale diviso in blocchi, e ad ogni blocco viene applicata la
funzione di hash. Il risultato del primo blocco andrà ad influenzare il secondo risultato di has, il secondo
influirà sul terzo e così via… questo effetto viene chiamato effetto a valanga di hashing. L’effetto valanga
permette di avere valori di hashing diversi per due messaggi che differiscono anche solo di 1 bit. Per rendere
ancora più robusta la funzione di hash, si inserisce nel primo o nell’ultimo blocco anche la lunghezza del file
che si sta codificando. È importante la differenza tra:

- Funzione di hash  effettua la codifica vera e propria del blocco


- Algoritmo di hash  è la procedura seguita dalla funzione di hash

SHA-1

È stato il più utilizzato anche se nel corso degli anni sono state scoperte collisioni ed è stato sostituito da
SHA2. Il sistema di SHA-1 è inizialmente composto da 5 parola scelte in maniera casuale. Queste 5 parole
sono 5 vettori, ciascuno dei quale contiene 32 bit, che concatenati tra loro danno la lunghezza dell’output di
160 bit. La funzione di hashing lavora su blocchi di 512 bit, da cui estrapola un blocco da 160 bit. Al passo i-
esimo, la funzione di hash prende come parametro h(i-1), cioè il blocco da 160 bit calcolato
precedentemente, e l’i-esimo blocco del messaggio originale da codificare. Le varie elaborazioni intermedie
vengono salvate sui 5 vettori inizialmente scelti a caso, che alla fine verranno concatenati creando il
messaggio codificato.

Approfondimento: prendo i 5 vettori che mi formano 160 bit, aggiungo un 1 e tanti 0 per portare questi 160
bit a 448 bit, ed aggiungo 64 bit in fondo dove indico la lunghezza del messaggio da codificare, ottenendo
quindi un blocco da 512 bit. Il messaggio viene diviso in blocchi da 512 bit, e ciascun blocco viene diviso in 14
parole da 32 bit. A questo punto iniziano 4 cicli da 20 passi ciascuno da cui si ottiene un output da 160 bit.

HMAC (Hash-based MAC)

È una tecnica che viene utilizzata per mantenere l’integrità dei dati e spesso utilizzata anche per
l’autenticazione dei messaggi. Si utilizza la crittografia simmetrica con una chiave K conosciuta da entrambi
gli utenti. Anche questa tecnica è one-way, cioè è facile generare un’uscita da un ingresso ma è difficile se
non impossibile generare l’ingresso a partire dall’uscita. Per generare la codifica, utilizza una funzione di hash
che viene applicata a K XOR opad concatenata con K XOR ipad, dove opad e ipad sono due pattern esadecimali
noti che si ripetono. HMAC è indipendente dalla funzione di hashing utilizzata, cioè la funzione di hashing
può essere cambiata senza problemi non modificando il ragionamento matematico che risiede dietro al
calcolo del messaggio a cui la funzione vien applicata.

Distribuzione delle chiavi

Quando si parla di crittografia simmetrica, si deve trovare una chiave privata che deve essere passata dal
mittente al destinatario in sicurezza, senza che essa venga intercettata da un attacker che potrebbe quindi
leggere i dati criptati. Per scambiare la chiave in modo sicura si utilizza un intermediario, chiamato KDC (Key
Distributor Center), che è un’entità singola con la quale il mittente si mette d’accordo per scegliere una
chiave. Ogni utente ha una chiave che lo mette in contatto con il KDC. Ex. Alice vuole comunicare con Bob.
Alice chiede al KDC una chiave di sessione. Il KDC invia ad Alice la chiave di sessione, e inoltre invia ad alice
un messaggio contenente la chiave di sessione cifrata però con la chiave di Bob, il tutto cifrato con la chiave
di Alice. Alice decifra il messaggio, prende la chiave di sessione ed invia il messaggio criptato con la chiave di
Bob a Bob, che potrò decifrare il messaggio e prenderà la chiave di sessione.

Quando si parla invece di crittografia asimmetrica, durante la distribuzione delle chiavi pubblica ad un’entità,
viene seguita da una certificazione. Infatti, quando si parla di distribuzione di chiavi pubbliche, entra in gioco
l’autorità di certificazione, che controlla tutte le entità rilasciando loro un certificato. Un attacker si potrebbe
spacciare per un’altra entità, e fa codificare dei dati con la sua chiave pubblica. Ovvero, Alice è convinta di
crittografare i dati con la chiave pubblica di Bob ma lo sta facendo con quella di Trudy. Per questo, ogni volta
che viene scaricata una chiave pubblica, viene scaricato subito dopo anche il certificato del mittente di questa
chiave. In questo modo, Alice controllerà il certificato, e vedendo che non appartiene a Bob, non cripterà i
dati con la chiave di Trudy.

I protocolli che si occupano di sicurezza, come SSL, TLS, sono a livello 4, ma sbordano anche nel livello 3 e nel
livello applicazione.

Sistema SCADA

Sono dei sistemi di supervisione e controllo in ambito industriale che fanno da ponte tra i dispositivi di campo,
cioè dei sensori o degli attuatori posti sulle macchine produttrici, e le macchine che li gestiscono,
permettendo anche il passaggio di dati a quelli che sono software gestionali o di contabilità. Grazie ai
software SCADA ed il passaggio di dati ai gestionali, gli impianti e la produttività potranno essere gestiti anche
dall’esterno dell’azienda tramite una connessione.

Sistema critico

Dopo aver fatto l’inventario di tutti i dispositivi, occorre analizzare tutti i dispositivi in maniera indipendente:
il dispositivo svolge azioni critiche importanti per il sistema? Se si, lo etichetto come critico, altrimenti valuto
il suo impatto su altri dispositivi critici. Ci sono più livelli di criticità, con criticità si intende che danno
comporta all’azienda un eventuale malfunzionamento del dispositivo. Una volta etichettati i vari dispositivi
con il loro livello di criticità, sarà opportuno effettuare una segmentazione della struttura in modo tale da
raggruppare quelli che sono i dispositivi più critici. Si effettua quindi una segmentazione sia fisica, cioè
fisicamente nell’azienda, ma anche logica, inserendo in determinate reti i dispositivi che sono critici. In questo
modo, riduco la superficie esposta ad un attacco, cioè i punti vulnerabili ad attacchi di tipo informatico. Un
attacco molto famoso che è riuscito ad eludere un sistema SCADA delle centrali Iraniane è stato Stuxnet.

Misure protettive

Livello umano  addestramento a non essere adescati in truffe e sui comportamenti da seguire per non
mettere a rischio la sicurezza dell’azienda

Livello fisico  protezione a livello fisico dei dispositivi, devono essere segmentati elettricamente, non
facilmente accessibili, …

Livello rete  firewall, IPS, IDS, …

Livello applicazione  proxy, firewall, analisi del software utilizzato, …

Livello dati  preservare l’integrità dei dati è importantissimo, è necessario quindi gestire gli accessi ai dati,
le motivazioni degli accessi ai dati, gestire i permessi dell’accesso ai dati, …

Livello utente  gestire le varie utenze con i relativi permessi (LDAP)

Accesso alla rete  gestione degli accessi, si utilizzano le Access List (Access List), o dei controlli sugli IP,
ecc.ecc.

Accesso fisico  biometria, scansione dell’iride, riconoscimento facciale, …


Protocolli SCADA

I sistemi SCADA gestiscono una vasta parte di tutte le aziende manifatturiere, ma anche centrali
idroelettriche, centrali elettriche e anche la rete dei semafori di una città, i sistemi dello smistamento dei
treni, ecc.ecc. La sicurezza dei sistemi SCADA è quindi importantissima specie con l’avvento dell’industria 4.0.
Inizialmente i sistemi SCADA non implementavano meccanismi per la sicurezza, ma dal 2002-2003, dopo
l’inizio della guerra digitale, tutte le misure di sicurezza necessarie sono state adottate. Rimane però il
problema della sicurezza dei protocolli che utilizza un sistema SCADA, come ad esempio OPC, Modbus, … che
sono protocolli che nella loro versione legacy non prevedono lo scambio di dati in sicurezza.

Vulnerabilità di un sistema SCADA

- Collegamenti al sistema informativo aziendale  alcuni impiegati di un’attività si connettono alla


rete aziendale con i propri dispositivi mobile, come ad esempio smartphone e laptop a scopo
lavorativo, aumentando però così i possibili punti vulnerabili che un attacker potrebbe sfruttare
- Collegamento a stazioni di energia  implementare un software proprietario potrebbe essere una
scelta che porta a dover rinunciare a delle funzioni, ma implementare un software open source
potrebbe portare si ad avere più funzioni, ma tutti possono leggere il sorgente ed eventualmente
studiare attacchi
- Collegamenti ai fornitori esterni  se un’azienda ha collabora con un fornitore esterno o
eventualmente ha più filiali, il collegamento con queste ultime potrebbe portare ulteriori punti
vulnerabili
- Collegamenti tramite accesso remoto  nell’industria 4.0, la manutenzione deve essere svolta
tramite accesso remoto, questo comporta che un attacker possa penetrare nel sistema sfruttando
questa connessione

Famiglia ISO27000

Raccoglie di standard per la gestione della sicurezza delle informazioni.

- ISO 27001  è uno standard di tipo gestionale, non tecnico, cioè non riguarda solamente la parte
informatica, ma include all’interno anche degli aspetti riguardanti la sicurezza informatica. Si
focalizza sulla sicurezza delle informazioni, che comprende:
o Riservatezza  accesso alle informazioni, ACL
o Disponibilità  possibilità di usufruire dei dati in maniera sicura
o Integrità  garanzia che l’informazione sia vera e non subisca modifiche o cancellazioni

La sicurezza dell’informazione dipende da queste tre componenti. La ISO 27001 è una norma non
statica, ma si evolve nel tempo in base ai nuovi rischi che pian piano vengono scoperti nel tempo.

- ISO 27002  più che una norma è considerato un manuale pratico per poter far si che la norma ISO
27001 sia rispettata. Rispettare la norma ISO 27002 significa che l’organizzazione ha adottato una
buona prassi per proteggere le informazioni.

Per il rispetto di queste due norme svolge un importante ruolo il management, che deve dare direttive e
politiche chiare e nominare una o più persone che si dovranno occupare della sicurezza delle informazioni.

Gli inventari e le valutazioni del rischio devono essere svolte ciclicamente, non una volta tantum. Sono due
pratiche molto importanti che influenzano il comportamento dell’azienda e quindi devono sempre essere
aggiornate.
SOA (Statement of Applicability)

Dichiarazione di applicabilità, è il collegamento tra la valutazione del rischio e la gestione del rischio. È un
documento nel quale vengono descritte le contromisure adottate per i rischi individuati durante la
valutazione del rischio, spiegando il perché sono state selezionate tali contromisure, se l’azienda ha
effettivamente messo in pratica tali controlli e nel caso in cui non l’abbia fatto, il perché. Deve essere sempre
aggiornata.

Trattamento dei rischi – RTP (Risk Treatment Plan)

Azioni svolte in base ad una determinata priorità su un dispositivo per affrontare i rischi individuati durante
l’analisi del rischio. È possibile anche trasferire il rischio, cioè convivere con il rischio ma coprendosi con una
assicurazione, oppure anche accettare il rischio, cioè saper di avere un piccolo rischio ma conviverci in quanto
una eventuale perdita di dati risulta essere piccola e non dannosa.

Modello PDCA

È il modello utilizzato per creare un ISMS (Information Security System Management), cioè il modello per la
gestione delle informazioni. Si compone di 4 fasi:

- Pianificazione  ciò che devo fare


- Do  lo applico, in maniera sperimentale
- Check  controllo i risultati tra quello che ho pianificato e quello che ho ottenuto con la fase di Do
- Act  implemento in maniera finale ciò che ha superato la fase di Check, se nessuna
implementazione ha superato la fase di Check, ritorno al Plan o al Do.

Una volta eseguito l’Act, ritornerò comunque al Plan, in quando le analisi sono continue e i modelli da
implementare sono continuamente in evoluzione.

Firewall

Sono un mezzo efficace per proteggere una rete locale da attacchi esterni permettendo allo stesso tempo un
accesso verso Internet in maniera controllata. Sono responsabili del filtraggio del traffico di rete, e sono anche
chiamati punto di transito, cioè il punto in cui tutto il traffico di rete viene convogliato. Ogni sistema
operativo ha un firewall di base installato, ma si possono installare anche firewall esterni e nelle reti si
possono trovare firewall anche sui router o macchine dedicate che svolgono solo la funzione di firewall.
Inizialmente un firewall svolgeva solo il filtraggio di pacchetti, ma poi si sono evoluti ed ora svolgono anche
compiti diversi filtrando il traffico internet anche per tipologia di traffico.

Un firewall svolge 4 funzioni:

- Controllo dei servizi  stabilisce quali tipologie di servizi possono accedere ad internet o quali servizi
possono entrare sulla rete o sull’host dalla rete (si utilizzano anche software esterni che eseguono
una deep packet inspection per capire il tipo di traffico)
- Controllo della direzione  stabilisce come deve essere gestita una particolare richiesta, cioè se
deve passare per il firewall o può essere inoltrata ad un’altra macchina oppure bloccare direttamente
la richiesta
- Controllo degli utenti  regolare l’accesso degli utenti alle risorse della rete
- Controllo del comportamento  controlla come sono gestiti determinati servizi (come viene
utilizzata la mail, ecc.ecc.)
Il firewall divide quella che viene detta rete esterna da quella che viene chiamata rete interna. Tutte le
comunicazioni tra le due reti transitano per il firewall. Il firewall rappresenta il primo punto di una rete in cui
vengono individuati i primi tentativi di qualsiasi tipo di attacco (ex. IP spoofing). Sul firewall possono essere
svolte anche operazioni come la mappatura di un indirizzo IP privato in un indirizzo IP pubblico, servizi di
analisi (capire quali servizi sono più utilizzati e quindi eventualmente potenziarli).

Limitazioni di un firewall

- Non offre una sicurezza assoluta


- Ripara da attacchi all’esterno solamente se tutte le richieste avvengono tramite esso, se si aggira il
firewall si creano grande vulnerabilità al sistema o all’intera rete
- Non fornisce protezione da attacchi che provengono dall’interno
- Non proteggono da virus e Trojan che vengono scaricati tramite servizi come mail

Tipologie di firewall

- Firewall a filtraggio di pacchetti  esamina l‘IP e la porta di ogni pacchetto che passa per la sua
interfaccia, e verifica che il pacchetto sia valido rispetto ad un determinato insieme di regole o meno.
Sono i meno costosi e i più comuni, ma hacker con un po’ di esperienza riescono ad oltrepassarli.
- Firewall statefull inspection  tengono sotto controllo lo stato di transizione dei pacchetti, cioè
controllano il pacchetto fino a quando la specifica connessione per cui transita il pacchetto viene
chiusa, controllando che non esso non devii la propria direzione verso altri servizi. Implica l’utilizzo
di una vasta gamma di variabili.
- Gateway di livello applicazione  sono implementati tramite un server proxy che funge da
intermediario tra un client ed un server. Un’applicazione client della rete interna può richiedere
applicazioni che provengono da reti esterne, la sua richiesta viene elaborata tramite il proxy che può
permettere o meno tale richiesta in base alle politiche stabilite. Molto spesso il server proxy iene
implementato su una macchina specifica, che viene chiamata bastion host. Richiede molto sforzo
computazionale in quanto elabora tutto il pacchetto, compreso la parte di payload.
- Gateway di livello trasporto  implementa il filtro sulla connessione del canale di trasporto, anziché
implementarlo a livello di pacchetto. Verifica la validità della connessione (in genere TCP) rispetto ad
una tabella mantenuta in memoria, in cui sono elencate tutte le connessioni consentite. Il controllo
sulla connessione avviene prima che avvenga lo scambio di dati effettivo: il gateway crea una
connessione TCP con l’utente nella rete esterna e una connessione TCP con l’host della rete interna
e una volta verificato tramite la tabella interna la validità dell’indirizzo e della porta, avvia la
comunicazione nella quale non verranno più eseguiti controlli. Deve svolgere meno lavoro rispetto
ad un gateway di livello applicazione, perché una volta che ha accettato la connessione si disinteressa
del canale ed è pronto ad elaborarne un’altra.

IDS e IPS

- IDS (Intrusion Detection System)  si occupa di scovare all’interno del traffico di rete il traffico
malevolo. Monitora la rete includendo l’analisi di sicurezza dei protocolli. Quando un IDS riscontra
una problematica, cioè rileva un traffico malevolo, fa scattare un ALERT, cioè un evento, con cui
avvisa l’amministratore di rete del problema che si sta verificando. Non per forza prende iniziative,
ma esistono anche IDS che svolgono quale azione preventiva immediatamente quando si accorgono
del traffico malevolo. Alcuni IDS di rete svolgono un’analisi sui pacchetti da e verso la rete, e l’analisi
può essere svolta su tutti i pacchetti o solo su una parte di essi per riscontrare eventuali
problematiche. Un IDS è impostato in modalità promiscua, cioè di norma analizza tutti il traffico che
passa sulla rete, a meno di diversa configurazione. Non ha un impatto diretto sulla rete, non crea
quindi problemi di latenza o di jitter, non ci sono problematiche sulla rete se i sensori dell’IDS vanno
in failure, e non si riscontrano problematiche sulla rete nel caso in cui uno dei sensori sia
sovraccaricato. Tutto questo poiché sniffa semplicemente il traffico, lo analizza, e in caso di
intrusione alza un ALERT. Come lati negativi si ha però che nel momento in cui alzo un ALERT, l’attacco
è già in corso, inoltre bisogna controllare continuamente i sensori, poiché potrebbero etichettare
come malevoli dei pacchetti che invece non lo sono nel caso in cui i sensori siano impostati male,
inoltre, una rete che utilizza un IDS, deve avere una tecnica di evasione, cioè nel momento in cui
l’ALERT viene alzato, l’attacco è già in corso, quindi dovrà prevedere una tecnica con il quale reagisce
in maniera immediata all’attacco. Un altro lato negativo è che all’inizio per regolare i sensori ci vorrà
molto tempo, e quindi si avranno parecchi falsi positivi (tuning dei sensori).

- IPS (Intrusion Prevention System)  si occupa di prevenire il traffico malevolo, cioè bloccarlo prima
che esso entri all’interno della rete. Cercano di prevedere e segnalare l’allarme prima che l’attacco
vero e proprio abbia inizio. A differenza dell’IDP, causa latenza sulla rete, poiché i pacchetti vengono
analizzati prima che essi vengano immessi sulla rete, e solo nel caso in cui essi abbiano passato il
controllo dell’IPS entrano sulla rete.

Considerando che gli attacchi di rete sono ormai velocissimi, è consigliabile utilizzare un IDS solo nel caso in
cui si abbia un analizzatore del traffico molto efficiente ed una valida strategia di evasione che viene messa
in atto in maniera molto veloce.

Un IPS ed un IDS sono posti in posizioni diverse all’interno della rete, per cui si potrebbe pensare di utilizzare
entrambi calibrano naturalmente il carico di uno e dell’altro. Di solito si danno delle policy all’IPS più leggere,
cioè che non rallentino molto la rete, e si utilizza un IDS all’interno della rete che rileva i pacchetti che non
sono stati rilevati dall’IPS esterno.

Esempi di IDS: Snort, Suricata

Potrebbero piacerti anche