Il modello OSI
In questa pagina, i termini computer, nodo, host, calcolatore saranno usati come sinonimi.
In questa pagina, si da per scontata la conoscenza delle principali topologie di rete (topologia a bus, a stella, a maglia) e il concetto di commutazione di pacchetto, i principali tipi di rete (LAN, WAN)
- Introduzione
- Livello 1: fisico
- Livello 2: collegamento
- Livello 3: rete
- Livello 4: trasporto
- Livello 5: sessione
- Livello 6: presentazione
- Livello 7: applicazione
- Fonti
- Header di protocolli popolari
Introduzione
Il modello OSI (acronimo di Open Systems Interconnection) è uno standard architetturale per reti di calcolatori interoperabili.
La struttura a strati
Tale modello stabilisce una struttura a strati composta da una pila di protocolli di comunicazione di rete suddivisa in 7 livelli.
In sostanza, il modello OSI è uno schema utile a classificare dei protocolli di comunicazione. Se un protocollo appartiene a un certo strato della pila OSI, significa che esso è utile a risolvere un problema generalmente affidato a tale strato. Ad esempio, il protocollo Ethernet si occupa di garantire una connessione affidabile tra nodi della rete connessi a uno stesso canale di comunicazione. Poiché tale funzionalità è affidata al livello 2 (livello di collegamento), si dice che: “Ethernet è un protocollo di livello 2”.
Per ciascun livello del modello OSI, la seguente tabella fornisce:
- il nome del livello
- il nome dell’unità di dato scambiata a tale livello
- esempi di protocolli che lavorano a tale livello. Notare che un protocollo può lavorare su più livelli adiacenti (ad esempio, il protocollo Ethernet si occupa sia del livello fisico, sia del livello di collegamento)
| N° | Livello | Unità di dato | Esempi di protocolli |
|---|---|---|---|
| 1 | Fisico | Bit | USB, Bluetooth, Wi-Fi, Ethernet |
| 2 | Collegamento | Trama | Wi-Fi, Ethernet, MAC |
| 3 | Rete | Pacchetto | IP |
| 4 | Trasporto | Segmento | TCP, UDP |
| 5 | Sessione | Dato | - |
| 6 | Presentazione | Dato | TLS |
| 7 | Applicazione | Dato | HTTP, DNS, DHCP, SMTP |
Comunicazione tra livelli
Ogni livello comunica solo con i livelli adiacenti.
-
nella fase di trasmissione un livello invia informazione a quello sottostante. Ad esempio, in fase di trasmissione, il livello di rete trasmette un pacchetto al livello di collegamento.
-
nella fase di ricezione, un livello invia informazione a quello soprastante. Ad esempio, in fase di ricezione, il livello di rete inoltra un pacchetto al soprastante livello di trasporto.
Perché una struttura a strati?
Questa struttura a strati presenta ha una grande qualità: quando si sta lavorando a un protocollo di un livello X, si può dare per scontato il funzionamento di tutti i livelli soprastanti e sottostanti, rendendo più semplice lo studio e la risoluzione di un determinato problema.
Livello 1: fisico
Il livello fisico si occupa di instaurare una connessione hardware tra due dispositivi di una rete. Tale collegamento fisico prende il generico nome di mezzo trasmissivo.
Le connessioni fisiche si possono distinguere in due categorie:
- connessioni wired, ovvero cablate: utilizzano dei cavi come mezzo trasmissivo. Può trattarsi di cavi metallici in cui scorre corrente elettrica, oppure fibre ottiche attraversate da luce.
- connessioni wireless, ovvero senza fili: utilizzano onde elettromagnetiche come mezzo trasmissivo per la connessione nello spazio “vuoto” tra mittente e destinatario.
Lasciamo ai corsi di laurea di Elettronica e Fisica il compito di indagare ulteriormente i segreti del funzionamento del livello fisico 😇
Livello 2: collegamento
Il livello di collegamento (o datalink) si occupa di fare:
- framing: nella fase di trasmissione, raggruppa l’informazione proveniente dallo strato superiore (livello di rete) in unità chiamate frame, da passare al livello fisico sottostante.
- controllo di errore: controlla e gestisce eventuali errori nella ricezione di frame. Se riceve un frame malformato, può chiedere al mittente di inviarlo nuovamente. Se riceve un frame corretto, può notificare la corretta ricezione.
Talvolta, due nodi di una rete non sono direttamente collegati: tra di essi vi sono dei dispositivi, ad esempio degli hub o degli switch. [da approfondire]
Ethernet
Ethernet è il nome comune di un insieme di protocolli di comunicazione che agisce sia a livello fisico, sia a livello di collegamento.
- a livello fisico, stabilisce come debbano essere costruiti internamente i cavi Ethernet, i connettori Ethernet, le porte di comunicazione Ethernet.
- a livello di collegamento, stabilisce le regole per la trasmissione di informazione lungo i cavi Ethernet.
A livello di collegamento, Ethernet identifica i dispositivi connessi tramite degli indirizzi, detti indirizzi Ethernet o indirizzi MAC: sono sequenze di 48 bit che identificano univocamente un dispositivo in grado di collegarsi ad altri mediante il protocollo Ethernet. Con ogni probabilità, il tuo computer, il tuo smartphone… qualsiasi tuo dispositivo elettronico è dotato del proprio indirizzo MAC.
L’indirizzo MAC distingue un dispositivo da tutti gli altri a livello di collegamento. Come vedremo, ci sono degli indirizzi che servono a distinguere un dispositivo da un altro ad altri livelli: ad esempio, a livello di rete, i dispositivi collegati tramite il protocollo IP saranno distinti tramite un indirizzo IP.
Sempre a livello di collegamento, il protocollo Ethernet si occupa dell’attività di framing, tipica di questo livello OSI. Il seguente è un esempio di frame Ethernet:
Un frame Ethernet contiene:
- lo header, lungo 14 byte, costituito da:
- l’indirizzo MAC del destinatario (6 byte, ovvero 48 bit)
- l’indirizzo MAC del mittente (6 byte)
- il campo EtherType (2 byte): si tratta di un codice che indica il tipo di dato di livello di rete custodito all’interno del payload. Ad esempio:
- se EtherType vale 0800, significa che il payload contiene un pacchetto IPv4;
- se EtherType vale 86DD, significa che il payload contiene un pacchetto IPv6.
- il payload (da 46 a 1500 byte): letteralmente “carico utile”, è la parte del frame Ethernet che custodisce i dati del livello superiore (nel caso di Ethernet: un pacchetto IPv4, un pacchetto IPv6, …). Vedremo che il termine ‘payload’ tornerà anche negli strati successivi, con lo stesso significato.
- il checksum (4 byte): letteralmente “somma di controllo”, è una sequenza di bit che, associata al pacchetto trasmesso, viene utilizzata per verificare l’integrità del frame, il quale può subire alterazioni durante la trasmissione sul canale di comunicazione.
Il funzionamento del checksum è del tutto analogo a quello dell’ultima lettera del codice fiscale. Essa infatti viene generata tramite un certo algoritmo a partire dalle lettere precedenti. Nel comunicare il codice fiscale potrebbe capitare che qualche lettera venga alterata. Il destinatario perciò può ricalcolarsi il checksum (cioè l’ultima lettera). Se il risultato del calcolo è diverso da quanto scritto nel codice fiscale allora c’è stato un errore e il codice è sbagliato.
Livello 3: rete
Il livello di rete si occupa della trasmissione logica di dati tra due host arbitrari, che in generale non sono direttamente connessi (ovvero non hanno un collegamento diretto tra di loro).
Nota bene: il livello di collegamento, al contrario del livello di rete, si occupa di gestire la trasmissione di informazione tra due nodi direttamente connessi allo stesso mezzo di comunicazione.
L’informazione scambiata a livello di rete è suddivisa in pacchetti (in inglese, packets). Il payload di un pacchetto contiene uno o più segmenti del soprastante livello di trasporto.
Il livello di rete si occupa di:
- inoltro (o forwarding): riceve un pacchetto su una porta del livello di collegamento e può trasmetterlo su un’altra. In generale, è possibile che le due porte utilizzino protocolli diversi a livello di collegamento: il livello di rete si occupa di nascondere queste differenze ai livelli soprastanti.
- instradamento (o routing): determina il percorso ideale - ovvero il più veloce e affidabile - per la trasmissione di dati attraverso la rete.
Internet Protocol (IP)
IP è il protocollo di rete per eccellenza: si occupa dell’instradamento di pacchetti nella rete. IP è un protocollo:
- a pacchetti: scambia, appunto, pacchetti
- senza connessione: non garantisce la consegna ordinata dei pacchetti
- best effort: non garantisce cioè alcuna forma di affidabilità della comunicazione in termini di controllo di errore, controllo di flusso e controllo di congestione, che può essere invece realizzata dai protocolli di trasporto di livello superiore (livello 4), come TCP. Lo studieremo! Inoltre, non dimentichiamo che un primo controllo di errore, seppure solo tra nodi direttamente collegati, è effettuato a livello di linea, con il checksum.
Insomma: l’unico - fondamentale! - compito del protocollo IP è quello di consentire la trasmissione di pacchetti tra due nodi non direttamente connessi, a prescindere dal tipo di connessione fisica sottostante.
L’indirizzo IP
All’interno di una rete IP, ad ogni interfaccia connessa alla rete fisica viene assegnato un indirizzo univoco.
Nota bene: un nodo può avere molteplici interfacce di rete e, quindi, essere associato a più indirizzi IP.
I protocolli di collegamento, al livello 2 del modello ISO/OSI, indirizzano i calcolatori utilizzando l’indirizzo MAC.
Quando su una rete locale si utilizza IP, ad ogni calcolatore deve essere assegnato anche un indirizzo IP, per permettergli di comunicare con i calcolatori anche al di fuori della sua rete locale.
IPv4
IPv4 - Internet Protocol version 4 - è la quarta revisione dell’Internet Protocol, pubblicato dalla IETF nel settembre 1981, ed è il più usato a livello di rete.
Indirizzo IPv4
Un indirizzo IPv4 è costituito da 32 bit, ovvero 4 byte. Spessissimo, esso è rappresentato in notazione decimale puntata:
Nota bene: ciascuno dei quattro numeri decimali, rappresenta 8 bit. In binario puro, qual è il più piccolo numero intero rappresentabile con 8 bit? E il più grande?
Saturazione di IPv4
Per utilizzare il protocollo IPv4, ogni dispositivo connesso a una stessa rete IPv4 deve essere associato a un indirizzo IPv4 univoco.
Un indirizzo IPv4 è costituito da 32 bit. Perciò, possono esistere al massimo 232 (~ 4,3 miliardi) indirizzi IPv4 univoci. Inoltre, alcuni di questi 232 indirizzi sono riservati per gli scopi indicati nelle sezioni precedenti: la reale disponibilità di indirizzi è minore di 232.
In sintesi, IPv4 non consente di costruire un’unica rete, completamente pubblica, in cui ciascun nodo possiede un proprio indirizzo univoco, poiché oggi il numero di nodi contemporaneamente connessi tramite il protocollo IPv4 sarebbe maggiore del numero di indirizzi IPv4 disponibili. Questo problema è noto come “saturazione di IPv4”.
Per risolvere questo problema, sono state seguite strade diverse:
- la creazione di una versione aggiornata del protocollo IPv4: IPv6
- la creazione di una tecnica che consenta di utilizzare il protocollo IPv4, assegnando lo stesso indirizzo a nodi distinti: NAT
IPv6
IPv6 - Internet Protocol version 6 - è la versione di IP designata come successore dell’IPv4.
La sua caratteristica più importante è l’ampio spazio di indirizzamento (ovvero, il numero di indirizzi distinti resi disponibili):
- IPv6 riserva 128 bit per gli indirizzi IP e gestisce 2128 (circa 3,4×1038) indirizzi
- IPv4 riserva 32 bit per gli indirizzi IP e gestisce 232 (circa 4,3×109) indirizzi.
Quantificando con un esempio, per ogni metro quadrato di superficie terrestre, ci sono 655.570.793.348.866.943.898.599 indirizzi IPv6 unici (cioè circa 655 triliardi), ma solo 0,000007 IPv4 (cioè solo 7 IPv4 ogni chilometro quadrato).
IPv6 consentirebbe di creare un’unica rete pubblica, in cui ciascun nodo possiede un proprio indirizzo univoco. Tuttavia, IPv6 non è retro-compatibile con IPv4: se esistesse una sola rete IPv6, un vecchio dispositivo, che conosca solo il protocollo IPv4, non sarebbe in grado di connettersi alla rete.
Indirizzi IPv6
Gli indirizzi IPv6 sono composti di 128 bit e sono rappresentati come 8 gruppi, separati da due punti, di 4 cifre esadecimali in cui le lettere vengono scritte in forma minuscola. Ad esempio 2001:0db8:85a3:0000:1319:8a2e:0370:7344 rappresenta un indirizzo IPv6 valido.
Se uno dei gruppi – come nell’esempio – è composto da una sequenza di quattro zeri può essere contratto ad un solo zero: 2001:0db8:85a3:0:1319:8a2e:0370:7344
Inoltre, una sequenza di zeri contigui composta da 2 o più gruppi può essere contratta con la semplice sequenza :: ovvero 2001:0db8:0000:0000:0000:8a2e:0370:7344 corrisponde a 2001:0db8:0:0:0:8a2e:0370:7344 o ancora più sinteticamente a 2001:0db8::8a2e:0370:7344.
Network Address Translation (NAT)
Network Address Translation (NAT) è una tecnica messa a punto per ovviare alla saturazione di IPv4.
Abbandonando l’idea di un’unica rete pubblica globale, NAT organizza i nodi in sottoreti. I nodi presenti in una stessa sottorete hanno un indirizzo IPv4 univoco. Ogni sottorete ha un proprio indirizzo IPv4 univoco a livello globale.
In altri termini, secondo la “filosofia” di NAT, gli indirizzi IPv4 non sono più utilizzati per distinguere globalmente dei dispositivi, bensì per distinguere globalmente delle sottoreti. In ogni sottorete, lo ripetiamo, i dispositivi sono poi associati a un indirizzo IPv4 univoco per quella sottorete.
Questa organizzazione ha delle conseguenze:
- è possibile che nodi appartenenti a sottoreti diverse siano associati allo stesso indirizzo IPv4
- per identificare un nodo a livello globale, bisogna considerare due indirizzi:
- l’indirizzo IPv4 del nodo all’interno della sua sottorete, anche detto indirizzo privato
- l’indirizzo IPv4 della sottorete cui appartiene il nodo, anche detto indirizzo pubblico
In sintesi, NAT non consente di creare un’unica rete pubblica, in cui ciascun nodo possiede un proprio indirizzo univoco. Tuttavia, NAT è compatibile con IPv4: un vecchio dispositivo, che conosca solo il protocollo IPv4, continua a essere in grado di connettersi alla rete.
Fino a oggi (7 marzo 2025), la retrocompatibilità di NAT ha avuto la meglio sulla semplicità di IPv6. Tuttavia, si ritiene che nei prossimi anni il passaggio da IPv4/NAT a IPv6 sarà completato.
Ma come fa a funzionare NAT? Ad esempio: se sono un nodo della sottorete A, come posso conoscere l’indirizzo di un nodo della sottorete B e comunicare con esso? La risposta, potrà essere data solo dopo aver studiato il livello di trasporto. NAT, infatti, risolve il problema della saturazione di IPv4, ma richiede delle modifiche non solo al livello di rete, ma anche a quello di trasporto, come vedremo.
Maschera di sottorete
Concettualmente, l’indirizzo IP può essere diviso in due parti:
- l’identificatore di sottorete o net ID: serve a identificare la rete cui appartiene il nodo
- l’identificatore di host o host ID: serve a identificare il nodo all’interno della sottorete individuata dal net ID.
- è possibile che due nodi abbiano lo stesso host ID e lo stesso net ID?
- è possibile che due nodi abbiano diverso host ID e diverso net ID?
- è possibile che due nodi abbiano diverso host ID e lo stesso net ID?
- è possibile che due nodi abbiano lo stesso host ID e diverso net ID?
Come sapere qual è l’ultimo bit del net ID e qual è il primo bit dell’host ID? Bisogna accompagnare l’indirizzo IP con una maschera di sottorete, o subnet mask.
Per rappresentare la maschera di sottorete, esistono diverse notazioni. Eccone due molto diffuse:
- notazione compatta: dopo l’indirizzo IP, si pone uno
/seguito da un numero X tra 1 e 32. X indica quanti sono i bit utilizzati come net ID. I rimanenti 32 - X bit sono utilizzati come host ID. Ad esempio, in 192.168.1.58/24:- i primi 24 bit sono utilizzati come net ID
- i restanti 8 bit (8 == 32 - 24) sono usati come host ID
- notazione estesa: l’indirizzo IP è accompagnato da una sequenza di bit lunga quanto l’indirizzo (nel caso di IPv4: 32 bit). In questa sequenza, i primi X bit sono posti uguali a 1, i rimanenti bit sono posti uguali a zero. I bit posti uguali a 1, indicano la net ID, i bit posti a 0 indicano l’host ID. Ad esempio, se l’indirizzo 192.168.1.58 è accompagnato dalla maschera di sottorete 11111111.11111111.11111111.00000000, significa che:
- i primi 24 bit sono utilizzati come net ID
- i restanti 8 bit (8 == 32 - 24) sono usati come host ID
Proprio come l’indirizzo IPv4, anche la maschera di sottorete IPv4 può essere rappresentata in notazione decimale puntata. Ad esempio, anziché 11111111.11111111.11111111.00000000, avrei potuto scrivere: 255.255.255.0
Esercizio: dato l’indirizzo IPv4 93.38.127.179 con maschera di sottorete in notazione compatta /30, come si rappresenta la stessa subnet mask in notazione estesa, decimale puntata?
Esercizio: dato l’indirizzo IPv4 93.38.127.179 con maschera di sottorete in notazione estesa 11111111.11111111.11000000.00000000, come si rappresenta la stessa subnet mask in notazione compatta? Come si rappresenta la stessa subnet mask in notazione estesa, decimale puntata?
Il concetto di maschera di sottorete esiste, analogo a IPv4, anche per il protocollo IPv6.
Indirizzi riservati
Sia in IPv4 sia in IPv6 ci sono degli indirizzi riservati per scopi precisi, i quali non possono essere utilizzati come indirizzo IP di un qualsiasi dispositivo. Vediamone alcuni.
Indirizzo di rete
All’interno di ogni rete, esiste l’indirizzo di rete: è l’indirizzo ottenuto ponendo uguali a 0 tutti i bit dell’host ID.
Non è possibile inviare un pacchetto IP che abbia un indirizzo di rete come destinatario.
L’indirizzo di rete non può essere assegnato a un nodo della rete, essendo riservato allo scopo suddetto.
Il concetto di indirizzo di rete esiste, identico a IPv4, anche per il protocollo IPv6.
Indirizzo di broadcast
All’interno di ogni rete IPv4, esiste inoltre l’indirizzo di broadcast: è l’indirizzo ottenuto ponendo uguali a 1 tutti i bit dell’host ID.
Quando un pacchetto IP ha come destinatario l’indirizzo di broadcast, significa che tale pacchetto deve essere inviato a tutti i nodi della sottorete.
L’indirizzo di broadcast non può essere assegnato a un nodo della rete, essendo riservato allo scopo suddetto.
IPv6 non permette comunicazioni broadcast, perciò per IPv6 l’indirizzo di broadcast non esiste.
Indirizzi privati
A partire dal 1996, Tra tutti i possibili indirizzi IPv4, ce ne sono alcuni che possono essere utilizzati solo come indirizzi privati. Non è possibile usare un indirizzo IP privato come destinatario di un pacchetto su una rete pubblica.
Gli indirizzi privati IPv4 sono dati da tre blocchi di indirizzi:
| Blocco di indirizzi | Primo indirizzo | Ultimo indirizzo | Numero di indirizzi |
|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 | 10.255.255.255 | 224 |
| 172.16.0.0/12 | 172.16.0.0 | 172.31.255.255 | 220 |
| 192.168.0.0/16 | 192.168.0.0 | 192.168.255.255 | 216 |
IPv6 non ha indirizzi privati, non avendo alcuna necessità di NAT. In IPv6 esistono i concetti di indirizzi unique local e indirizzi link-local, in qualche modo affini al concetto di “indirizzo privato” in IPv4, ma io per primo non ho mai ben capito a cosa servano, perciò non lo spiegherò certo a voi.
Indirizzo di loopback
L’indirizzo di loopback - o indirizzo localhost - è un indirizzo IP speciale, che gli host utilizzano per dirigere il traffico verso se stessi.
L’indirizzo di loopback crea un modo di comunicazione rapido per applicazioni TCP/IP e servizi che sono eseguiti sullo stesso dispositivo. Utilizzando l’indirizzo di loopback anziché l’indirizzo host IPv4 assegnato, due servizi sullo stesso host possono ignorare gli strati inferiori dello stack TCP/IP.
Il protocollo IPv4 riserva l’intero blocco di indirizzi 127.0.0.0/8 ai fini di loopback. Tuttavia, nella pratica, l’unico indirizzo IPv4 usato per il loopback è 127.0.0.1/32.
Il protocollo IPv6, più ragionevolemnte, riserva un solo indirizzo IPv6 ai fini di loopback: ::1/128.
IPv4: indirizzi unicast, broadcast, multicast
In una rete IPv4, gli host possono comunicare in tre diversi modi:
- unicast: i pacchetti sono inviati da un host a un solo altro specifico host
- broadcast: i pacchetti sono inciati da un host a tutti gli altri host sulla rete
- multicast: i pacchetti sono inviati da un host a un gruppo di host sulla rete
La comunicazione unicast è utilizzata per il normale scambio di dati tra due nodi della rete.
I pacchetti unicast utilizzano l’indirizzo host del dispositivo di destinazione come indirizzo di destinazione e possono essere inoltrati attraverso la rete locale e verso altre reti. Broadcast e multicast, invece, utilizzano indirizzi speciali come indirizzo di destinazione. Utilizzando questi indirizzi speciali, le trasmissioni sono generalmente limitate alla rete locale.
Quando un host ha bisogno di informazioni e non sa quale sia il nodo della rete che detiene la risposta, l’host invia una richiesta sull’indirizzo di broadcast.
Tutti gli host della rete ricevono ed elaborano questa richiesta. Uno o più degli host con le informazioni richieste risponderanno, in genere utilizzando gli indirizzi unicast.
A differenza di unicast, dove i pacchetti possono essere indirizzati verso qualsiasi rete, i pacchetti broadcast sono solitamente limitati alla rete locale.
La trasmissione multicast è progettata per conservare la larghezza di banda della rete IPv4. Riduce il traffico permettendo a un host di inviare un pacchetto unico a un insieme selezionato di host.
Per raggiungere più host di destinazione mediante comunicazione unicast, un host avrebbe bisogno di inviare un pacchetto indirizzato a ciascun host. Con multicast, l’host di origine può inviare un pacchetto unico che può raggiungere migliaia di host di destinazione.
Alcuni esempi di trasmissione multicast sono:
- distribuzioni audio e video
- scambio di informazioni di Routing
- distribuzione del software (ad esempio, se più computer di una stessa rete stanno scaricando lo stesso software, si può usare una connessione multicast per fare in modo che uno stesso pacchetto raggiunga tutti quegli host).
In sintesi:
- per inviare un pacchetto IP con comunicazione unicast, bisogna porre come destinazione l’indirizzo IP del - unico - destinatario.
- per inviare un pacchetto IP con comunicazione broadcast, bisogna porre come destinazione l’indirizzo di broadcast della rete.
- per inviare un pacchetto IP con comunicazione multicast, bisogna porre come destinazione degli indirizzi particolari, appositamente riservati per gli scambi multicast. Non approfondiremo questo punto.
Distribuzione degli indirizzi IP
Ognuno dei nostri dispositivi connessi alla rete internet dispone di un indirizzo IP. Ma: chi lo ha assegnato?
Consideriamo uno smartphone connesso alla rete internet di casa. Esso potrebbe avere assegnato un indirizzo IPv4 privato e un indirizzo IPv6 (pubblico). Da dove arrivano?
Il router
Queste assegnazioni sono effettuate da un dispositivo chiamato router (hai presente la scatoletta ricevuta dal tuo fornitore di servizi internet? Ecco: quello è il router). Il router di casa ha a disposizione:
- un indirizzo IPv4 pubblico
- un intervallo di indirizzi IPv6 (pubblici)
Il router:
- assegna un indirizzo IPv4 privato a ciascun nodo della rete. Può scegliere a piacere da quale intervallo di indirizzi IPv4 privati “pescare” l’indirizzo privato per il nostro smartphone. Ad esempio, il router di casa mia utilizza l’intervallo di indirizzi IPv4 privati 192.168.0.0/16.
- assegna un indirizzo IPv6 pubblico scelto dall’intervallo di indirizzi IPv6 pubblici a sua disposizione.
- si preoccupa di gestire le funzionalità di NAT, che permettono di tradurre un indirizzo IPv4 privato nell’indirizzo IPv4 pubblico, e viceversa. Dobbiamo studiare il livello di trasporto per capire, finalmente, questo passaggio!
Ma chi ha messo a disposizione del router l’indirizzo IPv4 pubblico e l’intervallo di indirizzi IPv6 pubblici?
L’Internet Service Provider (ISP)
Un Internet Service Provider - o “fornitore di servizi internet” - è un’azienda che si occupa di permettere ai propri utenti di connettersi a internet. Ovvero, fornisce ai propri utenti un indirizzo IPv4 pubblico e un intervallo di indirizzi IPv6 pubblici.
Ad esempio, in Italia, sono ISP: Fastweb, Tim, Vodafone, WindTre,…
Attenzione! Non tutti gli ISP supportano IPv6 (…).
Gli ISP hanno a disposizione intervalli di indirizzi IPv6 assegnabili ai propri clienti, così come intervalli di indirizzi IPv4 pubblici assegnabili ai propri clienti.
E chi fornisce questi indirizzi agli ISP?
Il Regional Internet Registry (RIR)
Un Regional Internet Registry è un’organizzazione che si occupa della distribuzione di indirizzi IPv4 e IPv6. Al momento, esistono cinque RIR al mondo, all’incirca uno per ogni continente:
E, infine, chi coordina i RIR?
Internet Assigned Numbers Authority (IANA)
La Internet Assigned Numbers Authority (IANA) è una società statunitense che si occupa della delega e della gestione degli indirizzi IP, v4 e v6. Parte tutto da lei!
In estrema sintesi, gli indirizzi pubblici affidati al notro router domestico seguono questo “viaggio”:
IANA ---> RIR ---> ISP ---> router ---> smartphone
Livello 4: trasporto
Il livello di trasporto, dando per scontata la comunicazione tra due nodi al livello di rete, si occupa di offrire dei servizi aggiuntivi. Nessuno dei seguenti servizi è obbligatoriamente fornito da un protocollo del livello di trasporto: perciò, per ogni applicazione, è possibile scegliere il protocollo più adatto allo scopo.
L’informazione scambiata a livello di trasporto è suddivisa in segmenti (in inglese, segments). Il payload di un segmento contiene dati del soprastante livello di sessione.
- Servizio orientato alla connessione: in genere, il livello rete non stabilisce una connessione persistente verso l’host di destinazione. Il livello di trasporto si può incaricare, quindi, di realizzare una connessione persistente che può essere chiusa quando non è più necessaria, in maniera esplicita.
- Corretto ordine di consegna: poiché i segmenti possono seguire percorsi diversi all’interno della rete, non c’è alcuna garanzia che i dati siano recapitati nello stesso ordine con cui sono stati inviati. Il livello di trasporto può verificare che i segmenti siano riordinati nella giusta sequenza in ricezione prima di passarli al livello superiore.
- Trasferimento affidabile: un protocollo del livello di trasporto può occuparsi di garantire che tutti i dati inviati vengano ricevuti.
- Controllo di flusso: se gli host coinvolti nella comunicazione hanno prestazioni molto differenti, può capitare che un pc più veloce “inondi” di dati uno più lento portando alla perdita di segmenti. Mediante il controllo di flusso, un host in difficoltà può chiedere di abbassare il tasso di trasmissione in modo da poter gestire le informazioni in ingresso.
- Controllo di Congestione: un protocollo del livello di trasporto può riconoscere uno stato di congestione della rete e adatta di conseguenza la velocità di trasmissione.
Nota bene: il controllo di flusso si concentra su eventuali sovraccarichi degli host; il controllo di congestione si concentra su eventuali sovraccarichi dei collegamenti tra gli host.
- Multiplazione un protocollo del livello di trasporto può permettere di stabilire diverse connessioni contemporanee tra gli stessi due host, tipicamente utilizzando l’astrazione delle porte. Nell’uso comune diversi servizi utilizzano porte logiche di comunicazione diverse.
- Controllo di errore: un protocollo di livello di trasporto può controllare che un segmento ricevuto dal destinatario coincida con il segmento inviato dal mittente. In altri termini, il controllo di errore si preoccupa di controllare l’integrità dei dati ricevuti dal destinatario, utilizzando un checksum.
Nella rete internet, i due protocolli del livello 4 più diffusi sono TCP e UDP.
Transmission Control Protocol (TCP)
Il Transmission Control Protocol (TCP) è un protocollo del livello di trasporto, con queste caratteristiche principali:
- è orientato alla connessione: prima di poter trasmettere dati deve stabilire la comunicazione, negoziando una connessione tra mittente e destinatario, che rimane attiva anche in assenza di scambio di dati e viene esplicitamente chiusa quando non più necessaria. Esso quindi possiede le funzionalità per creare, mantenere e chiudere una connessione.
- consente un trasferimento affidabile: garantisce la consegna dei segmenti a destinazione
- garantisce che i dati siano trasmessi in ordine
- garantisce che i dati siano trasmessi una volta sola
- offre funzionalità di controllo di errore sui pacchetti pervenuti grazie al campo checksum
- possiede funzionalità di controllo di flusso tra nodi in comunicazione e controllo della congestione sulla connessione
- fornisce un servizio di multiplazione delle connessioni su un host (ovvero: consente a un singolo nodo di instaurare connessioni molteplici con altri nodi), attraverso il meccanismo delle porte
Porte
Le porte sono numeri utilizzati per identificare una particolare connessione del livello di trasporto tra quelle al momento attive su un nodo.
In TCP e UDP le porte sono rappresentae con 16 bit, per un totale di 216 = 65 536 porte possibili, che vanno da 0 a 65 535.
I segmenti appartenenti ad una connessione saranno quindi identificati dalla quadrupla <indirizzo IP sorgente>, <indirizzo IP destinazione>, <porta sorgente>, <porta destinazione>. I segmenti nella direzione opposta avranno ovviamente sorgente e destinazione scambiati.
In Internet, c’è una convenzione per cui ad alcuni numeri di porta sono associati determinati protocolli di livello applicativo. Ad esempio, se voglio contattare il server HTTP eventualmente in esecuzione su un certo calcolatore, so che devo tentare di stabilire una connessione verso la porta 80 (lista di porte standard).
Facciamo un esempio. Un host A, con indirizzo IP 192.168.1.1, vuole instaurare due connessioni TCP:
- una connessione con un host B, con indirizzo IP 192.168.1.2, alla porta 80 (la quale è la porta standard utilizzata per il protocollo HTTP, un protocollo di livello 7)
- una connessione con un host C, con indirizzo IP 192.168.1.3, alla porta 443 (la quale è la porta standard utilizzata per il protocollo HTTPS, un altro protocollo di livello 7)
Per la prima connessione, il sistema operativo sceglie, in maniera casuale, una porta tra quelle non attualmente utilizzate: ipotizziamo 51830.
Per la seconda connessione, il sistema operativo sceglie, in maniera casuale, un’altra porta tra quelle non attualmente utilizzate: ipotizziamo 2188.
Le due connessioni, contemporaneamente attive, saranno identificate dalle seguenti quadruple:
- connessione da A a B:
192.168.1.1, 192.168.1.2, 51830, 80 - connessione da A a C:
192.168.1.1, 192.168.1.3, 2188, 443
Una coppia <indirizzo IP>, <porta> è comunemente chiamata socket.
Nota bene: l’indirizzo IP del mittente e l’indirizzo IP del destinatario sono indicati nell’header del pacchetto IP. La porta del mittente e la porta del destinatario, invece, sono indicate nell’header del segmento TCP/UDP.
Apertura di una connessione TCP
La procedura utilizzata per instaurare in modo affidabile una connessione TCP tra due host è chiamata three-way handshake (stretta di mano in 3 passaggi), indicando la necessità di scambiare 3 messaggi tra host mittente e host ricevente affinché la connessione sia instaurata correttamente. Consideriamo ad esempio che l’host A intenda aprire una connessione TCP con l’host B; i passi da seguire quindi sono:
- A invia un segmento SYN a B - il flag SYN è impostato a 1 e il campo Sequence number contiene il valore x che specifica l’Initial Sequence Number di A;
- B invia un segmento SYN/ACK ad A - i flag SYN e ACK sono impostati a 1, il campo Sequence number contiene il valore y che specifica l’Initial Sequence Number di B e il campo Acknowledgment number contiene il valore x+1 confermando la ricezione del ISN di A;
- A invia un segmento ACK a B - il flag ACK è impostato a 1 e il campo Acknowledgment number contiene il valore y+1 confermando la ricezione del ISN di B.
Da questo momento in poi, i due host A e B possono scambiarsi segmenti tramite la connessione TCP appena instaurata.
User Datagram Protocol (UDP)
Lo User Datagram Protocol (UDP) è un protocollo del livello di trasporto. Esso non fornisce molti dei servizi garantiti invece da TCP, poiché il primo obiettivo di UDP è la velocità della comunicazione. Ecco una comparativa tra i due protocolli:
| Servizio | TCP | UDP |
|---|---|---|
| Connessione | ✅ | ❌ |
| Affidabilità | ✅ | ❌ |
| Ordine dei pacchetti | ✅ | ❌ |
| Controllo di errore | ✅ | ✅ |
| Multiplazione | ✅ | ✅ |
| Controllo di flusso | ✅ | ❌ |
| Controllo di congestione | ✅ | ❌ |
In genere, UDP è utilizzato per le applicazioni per le quali un pacchetto in ritardo ha validità nulla, per esempio la trasmissione audio-video in tempo reale (streaming o VoIP sono gli usi più comuni), oppure la trasmissione di altre informazioni sullo stato di un sistema, per esempio i giochi multiplayer online.
Livello 5: sessione
Livello 6: presentazione
Livello 7: applicazione
HTTP: Hyper Text Transfer Protocol
Fate riferimento alla pagina Wikipedia dedicata a HTTP, alla pagina Wikipedia dedicata a HTTPS.
Assicurati di saper rispondere in maniera corretta e completa alle seguenti domande:
- Per cosa sta la sigla HTTP?
- A cosa serve il protocollo HTTP?
- Chi fu il primo sviluppatore di HTTP, nonché primo sviluppatore del World Wide Web (WWW)?
- Quali sono le principali versioni del protocollo HTTP? Per ciascuna versione, indica l’anno di pubblicazione.
- Cos’è un’architettura di tipo client/server?
- Cosa significa la frase: “HTTP è un protocollo stateless”?
- Quale protocollo del livello di trasporto è solitamente utilizzato per le comunicazioni HTTP?
- Qual è la porta del livello di trasporto associata al protocollo HTTP?
- Quali sono le parti fondamentali di un messaggio di richiesta HTTP? Assicurati di conoscere il significato e l’utilità di ciascuna.
- Quali sono i principali metodi di richiesta HTTP? Indicane almeno quattro.
- Cos’è lo Uniform Recource Locator (URI)?
- A cosa serve il metodo di richiesta GET?
- A cosa serve il metodo di richiesta HEAD?
- Qual è la differenza tra i metodi GET e HEAD?
- A cosa serve il metodo di richiesta POST?
- A cosa serve il metodo di richiesta PUT?
- Qual è la differenza tra i metodi POST e PUT?
- A cosa serve il metodo di richiesta DELETE?
- Cos’è un cookie? In che modo “rende” stateful HTTP?
- Cos’è un codice di stato HTTP?
- Quali sono i principali codici di stato HTTP? Indicane almeno quattro. Per ciascuno, indicane il nome e il significato.
- Qual è il significato del codice HTTP 200?
- Qual è il significato del codice HTTP 404?
- Qual è il significato del codice HTTP 500?
- Qual è la differenza tra “connessione persistente” e “connessione non persistente”, in HTTP?
- Quale versione di HTTP ha introdotto la possibilità di stabilire connessioni persistenti?
- Per cosa sta la sigla HTTPS?
- A cosa serve il protocollo HTTPS?
- Qual è la porta del livello di trasporto associata al protocollo HTTPS?
- Qual è la versione più recente del protocollo HTTP?
- La principale novità di HTTP3 rispetto al predecessore HTTP2 è il passaggio dal protocollo del livello di trasporto da TCP a QUIC. Quali sono le principali caratteristiche del protocollo QUIC? Grazie al suo impiego, quale vantaggio è tratto dal protocollo HTTP?
Un video (in inglese) che, in circa quattro minuti, riassume lo sviluppo del protocollo HTTP dalla versione 1 alla versione 3, passando per le versioni 1.1 e 2.
Un sito di Google con alcune statistiche sulla diffusione del protocollo HTTPS.
DNS: Domain Name System
Fate riferimento alla pagina Wikipedia dedicata a DNS.
Assicurati di saper rispondere in maniera corretta e completa alle seguenti domande:
- Per cosa sta la sigla DNS?
- A cosa serve il protocollo DNS?
- Cos’è un nome di dominio?
- Cos’è un Top Level Domain (TLD) o dominio di primo livello?
- Cos’è un Second Level Domain (SLD o 2LD) o dominio di secondo livello? Fai degli esempi di SLD.
- Cos’è un Fully Qualified Domain Name (FQDN)? Fai degli esempi di FQDN.
- Cos’è un DNS resolver?
- Cos’è un root name server?
- Quanti sono gli indirizzi IP distinti dei root name server?
- Cos’è un TLD name server?
- Cos’è un authoritative name server?
- Cos’è una DNS zone?
- Cos’è un record DNS?
- Quale tipo di record DNS è utilizzato per richiedere l’indirizzo IPv4 associato a un nome di dominio?
- Quale tipo di record DNS è utilizzato per richiedere l’indirizzo IPv6 associato a un nome di dominio?
- Se un client, ad esempio un web browser, ha bisogno di conoscere un indirizzo IPv4 associato al nome di dominio
wikipedia.org, qual è il percorso completo che porta a ottenere la risposta, tramite il protocollo DNS? - Cos’è un domain name registrar?
- Quali sono le principali implementazioni di un DNS resolver? Indicane almeno due.
- Quali sono le principali implementazioni di un name server? Indicane almeno due.
- Qual è la porta del livello di trasporto associata al protocollo DNS?
- Quale protocollo del livello di trasporto è solitamente utilizzato per le comunicazioni DNS tra client e DNS resolver?
- Quale protocollo del livello di trasporto è solitamente utilizzato per le comunicazioni DNS tra DNS resolver e name server?
- Solitamente, quale DNS resolver è contattato dal web browser di un nostro dispostivo?
- Quali pericoli o inconvenienti si possono incontrare, mantenendo il DNS resolver predefinito?
- Cos’è il DNS caching? A cosa serve?
- Il protocollo DNS, nella sua definizione iniziale, è sicuro (ovvero: confidenziale, autenticato e ‘integro’)? Se la risposta è no, indica il nome delle specifiche pensate per garantire la sicurezza del protocollo.
Tor
- Per cosa sta la sigla Tor?
- A cosa serve Tor?
- Quale problema cerca di risolvere?
- Cos’è la rete Onion e perché si chiama così?
- Come funzionano i nodi di Tor (entry, relay, exit)?
- Che cos’è un circuito Tor e come viene costruito?
- Come Tor garantisce l’anonimato dell’utente durante la navigazione?
- Quali sono i limiti di Tor in termini di velocità e anonimato?
- È possibile tracciare un utente Tor? In quali condizioni?
- Che differenza c’è tra Tor e una VPN?
- Chi sviluppa Tor?
- Chi finanzia Tor?
- Quali sono le principali sfide legali o etiche legate all’uso di Tor?
Fonti
Header di protocolli popolari



