Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
# Livello Internet
Il **livello Internet** dello stack TCP/IP è il cuore della comunicazione globale. È responsabile della trasmissione logica di pacchetti tra due host arbitrari, che in generale non sono direttamente connessi (ovvero non hanno un collegamento fisico diretto tra di loro), cioè in sostanza si occupa di indirizzamento e instradamento verso la giusta destinazione attraverso il percorso di rete più appropriato.
<lf>
Nel modello ISO/OSI, come nel modello TCP-IP, il livello di rete è l'ultimo livello presente nei commutatori (router) della rete ovvero nei nodi interni che si occupano di mettere in comunicazione i dispositivi, mentre i livelli architetturali superiori (trasporto e applicazione) sono presenti solo nei nodi terminali (client - server).
</lf>
<rt>

</rt>
## Ruolo e funzioni principali
Il livello Internet ha due compiti fondamentali: identificare i dispositivi e instradare i dati. Per farlo, utilizza gli **indirizzi IP**, che funzionano come "indirizzi di casa" per ogni dispositivo connesso alla rete. Quando un pacchetto viene inviato, il livello Internet si occupa di analizzarne la destinazione e di instradarlo attraverso una serie di router, ciascuno dei quali lo indirizza sempre più vicino al suo obiettivo.
Un’altra funzione importante è la gestione della **frammentazione**. Se un pacchetto è troppo grande per una rete, viene suddiviso in parti più piccole, che saranno ricostruite dal destinatario. Tuttavia, il livello Internet non garantisce che i pacchetti arrivino nell’ordine corretto o che arrivino tutti: è progettato per fare il possibile ("best effort"), lasciando ai livelli superiori, come il trasporto, il compito di gestire eventuali errori.
In sostanza, il livello Internet è il ponte che collega dispositivi lontani e diverse reti, permettendo una comunicazione globale senza che l’utente debba preoccuparsi della complessità del percorso che separa i due dispositivi.
## Gli indirizzi IP
Quando comunichiamo su Internet, ogni dispositivo coinvolto – che si tratti di un computer, uno smartphone o un server – deve essere identificabile in modo univoco. Questo perché la rete deve sapere dove inviare i dati e da dove provengono. Il problema che si pone è quindi: **come possiamo identificare ciascun dispositivo in una rete globale composta da miliardi di macchine?**
La soluzione a questo problema è rappresentata dagli **indirizzi IP**.
Un indirizzo IP è un identificatore univoco assegnato a ogni dispositivo connesso a una rete. Esso è composto da una serie di numeri che identificano specificamente ed univocamente quel dispositivo all'interno della rete.
Esistono due versioni principali di indirizzi IP: IPv4 e IPv6.
Gli indirizzi IPv4 sono i più utilizzati e sono composti da **32 bit**, rappresentati in 4 blocchi numerici separati da punti (es. `192.168.1.1`). Questa struttura consente di rappresentare circa 4,3 miliardi di indirizzi univoci, un numero che inizialmente sembrava sufficiente, ma che si è rivelato insufficiente con l’espansione di Internet. Con l'esaurimento degli indirizzi disponibili dovuto alla crescente quantità di dispositivi connessi, è nato IPv6. Quest'ultimo, con i suoi 128 bit rispetto ai 32 bit di IPv4, offre un numero quasi infinito di indirizzi unici, rappresentati in notazione esadecimale (es. `2001:0db8:85a3:0000:0000:8a2e:0370:7334`).

<!--
L'indirizzo IP si compone di due parti: indicatore di rete (Net_ID) e indicatore di host (Host_ID).
La prima parte identifica la rete, chiamata network o routing prefix (Net_ID) ed è utilizzata per l'instradamento a livello di sottoreti.
La seconda parte invece identifica, all'interno della rete, l'host (Host_ID) ed è utilizzato per l'instradamento a livello locale dell'host una volta raggiunta la sottorete locale di destinazione. -->
### Indirizzi pubblici e privati
Gli indirizzi IP si dividono ulteriormente in:
- **Indirizzi pubblici:** Assegnati a dispositivi visibili su Internet. Sono **univoci a livello globale**.
- **Indirizzi privati:** Utilizzati all’interno di reti locali private (LAN). Non sono instradabili su Internet e sono riciclati all’interno di diverse reti.
### Reti private
Per le reti private, sono stati riservati **specifici blocchi di indirizzi** IP in IPv4 e IPv6 che possono essere utilizzati senza il rischio di conflitti con indirizzi su Internet. Per esempio, in IPv4, questi intervalli includono:
* 10.0.0.0 - 10.255.255.255
* 172.16.0.0 - 172.31.255.255
* 192.168.0.0 - 192.168.255.255
Questi indirizzi non sono routabili su Internet, il che significa che non possono essere utilizzati per identificare univocamente un dispositivo su Internet. Sono destinati esclusivamente per reti interne. Se un router riceve un pacchetto destinato ad uno di questi indirizzi non lo inoltrerà verso internet.
Nella maggior parte delle reti private, gli indirizzi IP vengono assegnati dinamicamente ai dispositivi dai server **DHCP**. Questi server possono essere integrati nei router o in altri dispositivi di rete. Quando un dispositivo si connette alla rete, il DHCP gli assegna automaticamente:
- Un indirizzo IP disponibile,
- La **maschera di sottorete**,
- Il **gateway predefinito**,
- I **server DNS**.
Questo processo semplifica la configurazione della rete e garantisce che gli indirizzi siano gestiti in modo efficiente.
### Rete Internet
L'assegnazione degli indirizzi IP su Internet è un processo strutturato che coinvolge diverse organizzazioni e tecnologie per garantire che ogni dispositivo connesso abbia un indirizzo univoco. Ecco come funziona:
- **IANA** (Internet Assigned Numbers Authority): Questa è l'organizzazione a livello globale responsabile per l'assegnazione dello spazio degli indirizzi IP. IANA assegna blocchi di indirizzi IP alle cinque RIRs (Regional Internet Registries).
- **RIRs** (Regional Internet Registries): Queste entità gestiscono la distribuzione degli indirizzi IP in specifiche regioni geografiche. Ci sono cinque RIRs: ARIN per l'America del Nord, RIPE NCC per l'Europa, il Medio Oriente e parti dell'Asia Centrale, APNIC per l'Asia-Pacifico, LACNIC per l'America Latina e i Caraibi, e AFRINIC per l'Africa.
- **ISP** (Internet Service Providers): Gli ISP ricevono blocchi di indirizzi IP dalle RIRs e li assegnano ai loro clienti, sia utenti domestici che aziende.

---
## I Router
I router sono dispositivi fondamentali per garantire che i dati inviati su una rete raggiungano la loro destinazione. Quando un dispositivo invia un pacchetto, non conosce direttamente il percorso che i dati dovranno seguire. Qui entrano in gioco i router, che si occupano di **instradare i pacchetti di dati**, decidendo il percorso migliore per raggiungere il destinatario.
### Cosa fa un router?
Un router svolge tre compiti principali:
1. **Ricevere i pacchetti:** Ogni pacchetto in transito arriva al router.
2. **Analizzare l’indirizzo di destinazione:** Il router legge l’indirizzo IP del destinatario presente nel pacchetto.
3. **Instradare il pacchetto:** Utilizzando le informazioni nella sua tabella di routing, decide dove inoltrare il pacchetto.
### Tabelle di routing: la mappa dei router
Le tabelle di routing sono il cuore del funzionamento dei router. Ogni router utilizza una tabella per sapere dove instradare i pacchetti in base all’indirizzo IP di destinazione. In una tabella di routing semplificata, ogni riga potrebbe contenere:
- **Indirizzo IP del dispositivo di destinazione:** L’identificativo unico del dispositivo che deve ricevere i dati.
- **Next hop (prossimo passo):** Il router successivo verso cui inoltrare il pacchetto.
- **Interfaccia:** L’interfaccia fisica o logica del router da cui inviare il pacchetto.
<ex>
#### Esempio di tabella **semplificata:**
<lf>
| **Indirizzo di destinazione (IP)** | **Next hop** | **Interfaccia** |
|-----------------------------------|----------------|-----------------|
| `192.168.1.10` | Diretto | LAN 1 |
| `10.0.0.15` | `172.16.0.1` | WAN |
| `8.8.8.8` | `192.168.0.1` | WAN |
</lf>
**Come funziona:**
1. Il router riceve un pacchetto destinato all’indirizzo IP `192.168.1.10`.
2. Consulta la tabella di routing e individua che `192.168.1.10` è un dispositivo locale (routing diretto), quindi invia il pacchetto tramite l’interfaccia **LAN 1**.
3. Se il pacchetto è destinato a `10.0.0.15`, il router lo inoltra al prossimo router (`172.16.0.1`) attraverso la **WAN**.
</ex>
---
### Un problema crescente: l’aumento degli indirizzi
Se consideriamo che IPv4 può gestire fino a 4,3 miliardi di indirizzi IP, un router teoricamente dovrebbe memorizzare **una riga per ogni indirizzo possibile**. Questo approccio, in una rete globale, comporterebbe:
1. Tabelle di routing enormi e difficili da gestire.
2. Un aumento significativo della memoria necessaria e dei tempi di ricerca.
3. Difficoltà nel mantenere aggiornate le tabelle in tempo reale.
<ex>
Immagina un router che deve inoltrare pacchetti verso dispositivi con miliardi di indirizzi univoci. La tabella sarebbe tanto grande da rendere impossibile la gestione pratica delle comunicazioni.
</ex>
### Conclusione provvisoria
Le tabelle di routing che contengono una riga per ogni indirizzo IP non sono scalabili in un Internet con miliardi di dispositivi. Questo ci porta al problema di **raggruppare gli indirizzi IP** in modo più efficiente, introducendo il concetto di subnetting e ottimizzando così le tabelle di routing. Lo affronteremo nel prossimo capitolo.
---
### Il Subnettnig
Il subnetting risolve questo problema dividendo gli indirizzi IP in **gruppi logici**, detti **sottoreti (subnet)**. Invece di avere una riga per ogni singolo indirizzo, una tabella di routing può contenere una riga per ogni sottorete, riducendo drasticamente la dimensione complessiva.
<ex>
Immaginiamo una rete con 256 indirizzi, da `192.168.1.0` a `192.168.1.255`. Anziché avere 256 righe nella tabella, possiamo rappresentare tutti questi indirizzi con una singola riga utilizzando una **maschera di sottorete** che definisce il blocco.
</ex>
### Come funziona il subnetting?
Un indirizzo IP è composto da due parti principali:
1. **Net_ID (prefisso di rete):** Indica la rete a cui appartiene l’indirizzo.
2. **Host_ID:** Identifica il dispositivo specifico all’interno di quella rete.
La separazione tra queste due parti è determinata dalla **subnet mask**, che specifica quanti bit dell’indirizzo appartengono alla rete e quanti all’host.
### Subnet mask
Una **subnet mask** è una sequenza di bit che determina quali parti di un indirizzo IP identificano la rete e quali l’host. Viene rappresentata in notazione decimale puntata (es. `255.255.255.0`) o in **notazione CIDR** (Classless Inter-Domain Routing), che indica il numero di bit riservati al Net_ID (es. `/24`). Ogni "numero" dell'indirizzo IP è formato da 8 bit, quindi dire `/24` è equivalente a `255.255.255.0`, poiché con la sintassi CIDR stiamo dicendo che utilizziamo i primi 24 bit per la rete.
<ex>
- Indirizzo IP: `192.168.1.10`
- Subnet mask: `255.255.255.0` o `/24`
- Net_ID: `192.168.1.0`
- Host_ID: `10`
In questo caso, i primi 24 bit (Net_ID) identificano la rete `192.168.1.0`, mentre gli ultimi 8 bit (Host_ID) identificano i dispositivi nella rete.
</ex>
### Come i router utilizzano il subnetting
Quando un router riceve un pacchetto, confronta l’indirizzo di destinazione con i **prefissi di rete** nella sua tabella di routing utilizzando la subnet mask. Se l’indirizzo di destinazione appartiene a una sottorete specifica, il pacchetto viene instradato verso quella rete.
<ex>
1. Il router riceve un pacchetto destinato a `192.168.1.10`.
2. Analizza la tabella di routing, che contiene il prefisso `192.168.1.0/24`.
3. Applica la subnet mask per verificare che l’indirizzo di destinazione appartenga alla rete `192.168.1.0`.
4. Inoltra il pacchetto all’interfaccia corretta.
</ex>
### Vantaggi del subnetting
1. **Riduzione delle tabelle di routing:** Raggruppando indirizzi in blocchi, il subnetting riduce il numero di righe necessarie.
2. **Flessibilità nella gestione delle reti:** Le reti possono essere suddivise in sottoreti più piccole, adattandosi a diverse esigenze.
3. **Migliore utilizzo degli indirizzi IP:** Il subnetting evita sprechi, permettendo di allocare solo gli indirizzi necessari.
<ex>
Supponiamo di avere una rete `192.168.0.0/24`, che include 256 indirizzi (da `192.168.0.0` a `192.168.0.255`). Decidiamo di suddividerla in due sottoreti con 128 indirizzi ciascuna. Utilizziamo una nuova subnet mask `/25`, che riserva 25 bit al Net_ID.
1. **Prima sottorete:**
- Net_ID: `192.168.0.0`
- Range: da `192.168.0.1` a `192.168.0.127`
- Subnet mask: `/25`
2. **Seconda sottorete:**
- Net_ID: `192.168.0.128`
- Range: da `192.168.0.129` a `192.168.0.255`
- Subnet mask: `/25`
I router ora possono gestire queste due reti come blocchi separati, con una maggiore granularità nel controllo del traffico.
</ex>
---
## Il NAT
Con l’espansione di Internet e il crescente numero di dispositivi connessi, il numero teorico di indirizzi IPv4 (circa 4,3 miliardi) è diventato insufficiente per soddisfare la domanda globale. Questo problema ha spinto verso l’adozione di IPv6, ma nel frattempo si è reso necessario trovare una soluzione temporanea per continuare a utilizzare IPv4 in modo efficiente. La soluzione più diffusa è stata l’introduzione del **NAT (Network Address Translation)**.
### Il problema: Non ci sono abbastanza indirizzi IPv4 pubblici
Ogni dispositivo connesso a Internet ha bisogno di un indirizzo IP pubblico univoco per comunicare. Tuttavia, con miliardi di dispositivi online – dagli smartphone ai server, dagli elettrodomestici intelligenti ai sensori IoT – non ci sono abbastanza indirizzi IPv4 disponibili per ciascuno di essi.
<ex>
Immagina un’abitazione con cinque dispositivi connessi (PC, smartphone, tablet, smart TV e console di gioco). Se ognuno di essi avesse bisogno di un indirizzo pubblico, il tuo provider Internet dovrebbe assegnare cinque indirizzi IPv4, riducendo rapidamente la quantità disponibile.
</ex>
### La soluzione: Il ruolo del NAT
Il **NAT** consente a più dispositivi con indirizzi IP privati di condividere un unico indirizzo IP pubblico per accedere a Internet. Questo avviene traducendo gli indirizzi privati in un indirizzo pubblico al momento della comunicazione esterna.
#### Come funziona il NAT?
1. **All’interno della rete locale:**
- I dispositivi utilizzano indirizzi IP privati (es. `192.168.x.x`) per comunicare tra loro.
2. **Accesso a Internet:**
- Quando un dispositivo della rete locale invia un pacchetto verso Internet, il router sostituisce l’indirizzo IP privato del mittente con l’indirizzo IP pubblico della rete (unico per tutti i dispositivi all'interno della rete).
3. **Tabella di traduzione:**
- Il router mantiene una tabella temporanea che associa ogni connessione a un dispositivo locale, utilizzando porte per distinguere le comunicazioni.
<ex>
- Un dispositivo con indirizzo privato `192.168.1.10` vuole accedere a `www.google.com`.
- Il router traduce l’indirizzo IP sorgente `192.168.1.10` nel suo indirizzo pubblico, ad esempio `203.0.113.1`, e inoltra il pacchetto.
- Quando Google risponde, il pacchetto ritorna al router, che utilizza la tabella di NAT per reinstradare il pacchetto al dispositivo `192.168.1.10`.
- Se nel frattempo anche il dispositivo `192.168.1.20` vuole accedere a `www.google.com` il router farà la stessa draduzione assegnando l'indirizzo `203.0.113.1` e inoltrando la richiesta a Google. Google si troverà quindi due richieste differenti provvenienti dallo stesso indirizzo (`203.0.113.1`) e risponderà ad entrambe. Il server NAT, ricevute le due risposte, le inoltrerà ai due dispositivi richiedenti utilizzando la sua tabella NAT
</ex>

### Vantaggi del NAT
1. **Conservazione degli indirizzi IPv4 pubblici:**
- Permette a un’intera rete di condividere un unico indirizzo pubblico.
2. **Sicurezza aggiuntiva:**
- I dispositivi con indirizzi IP privati non sono direttamente accessibili da Internet, riducendo il rischio di attacchi.
3. **Flessibilità nella gestione delle reti:**
- Consente di riutilizzare gli stessi indirizzi privati in reti diverse.
### Limitazioni del NAT
1. **Accessibilità limitata dall’esterno:**
- I dispositivi dietro NAT non sono direttamente raggiungibili dall’esterno senza configurazioni aggiuntive, come il *port forwarding*.
2. **Compatibilità con alcuni protocolli:**
- Alcuni protocolli (es. VoIP) richiedono configurazioni avanzate per funzionare correttamente con il NAT.
### NAT e IPv6
Con l’introduzione di IPv6, il NAT non è più necessario, poiché IPv6 fornisce un numero sufficiente di indirizzi per ogni dispositivo. Tuttavia, IPv6 non è ancora completamente adottato, quindi il NAT rimane una soluzione essenziale per la gestione di IPv4.
---
## Algoritmi di Routing
Quando un pacchetto di dati deve viaggiare su Internet, non segue un percorso fisso e predefinito. Ogni pacchetto può attraversare decine di router, che devono sapere come instradarlo verso la destinazione corretta. Il problema è evidente: **i router non possono conoscere a priori tutta l’infrastruttura di Internet, che è enorme, distribuita e in continua evoluzione**. Come possono allora prendere decisioni informate su dove inoltrare i pacchetti?
La soluzione è data dai **Protocolli di Routing**, che permettono ai router di condividere informazioni sulla rete e di aggiornare dinamicamente le loro tabelle di routing in base ai cambiamenti nella topologia.
### Il problema: Conoscere la rete senza conoscerla tutta
Internet è una rete globale in continua crescita e cambiamento:
- Ogni giorno si aggiungono nuovi dispositivi e connessioni.
- Alcuni percorsi possono diventare temporaneamente inaccessibili a causa di guasti o congestioni.
- Le condizioni ottimali della rete variano continuamente.
Per garantire che ogni pacchetto raggiunga la sua destinazione, i router devono collaborare e aggiornarsi costantemente. Ma farlo memorizzando tutte le informazioni possibili sarebbe inefficiente e ingestibile.
**Domanda chiave:** Come possiamo far sì che ogni router sappia dove instradare i pacchetti senza dover avere una mappa completa e aggiornata di tutta la rete?
### La soluzione: I protocolli di routing
I protocolli di routing risolvono il problema permettendo ai router di **collaborare tra loro**. Ogni router non ha bisogno di conoscere tutta la rete globale, ma solo i collegamenti con i router vicini. Grazie ai protocolli di routing, i router si scambiano informazioni sulla topologia della rete e **costruiscono dinamicamente le loro tabelle di routing**, scegliendo i percorsi migliori per inoltrare i pacchetti.
Questi protocolli funzionano seguendo principi fondamentali:
1. **Condivisione delle informazioni:** Ogni router comunica regolarmente ai vicini quali reti sono raggiungibili attraverso di esso.
2. **Calcolo dei percorsi:** Utilizzando queste informazioni, ogni router determina il percorso migliore per raggiungere una destinazione, basandosi su criteri come la distanza o la velocità.
3. **Adattamento ai cambiamenti:** Quando una rete diventa inaccessibile o un percorso migliore diventa disponibile, i router aggiornano automaticamente le loro tabelle per riflettere la nuova situazione.
Grazie a questa collaborazione, i pacchetti possono viaggiare su Internet seguendo percorsi ottimali, anche se la topologia della rete cambia costantemente.