Livello Network: commutazione e frammentazione
Dal trasporto locale di frame alla consegna end-to-end: come il livello Network instrada pacchetti tra reti diverse, le tecniche di commutazione e il meccanismo di frammentazione IP con calcolo di offset e MF.
1. Il livello Network nello stack: funzioni e servizi
Il livello Network (L3 OSI, Internet Layer TCP/IP) fornisce connettività end-to-end tra host su reti diverse: indirizzamento logico (IP), instradamento hop-by-hop, gestione della congestione e adattamento alle diverse MTU tramite frammentazione.
Se Data Link consegna frame tra due vicini sullo stesso mezzo, Network deve far viaggiare un pacchetto dal banco di laboratorio fino a un server a Francoforte attraversando decine di router. Ogni router prende una decisione di forwarding indipendente, basata sulla propria tabella di routing.
Funzioni fondamentali:
- Indirizzamento logico: indirizzi IP indipendenti dall'hardware, gerarchici e aggregabili.
- Routing e forwarding: scelta del next-hop migliore; forwarding eseguito in hardware ad alta velocità.
- Commutazione: come vengono trattati i pacchetti nei nodi intermedi (circuito vs pacchetto).
- Frammentazione / riassemblaggio: adattamento alle diverse dimensioni massime di trama (MTU).
- Controllo congestione minimo: TTL per evitare loop, ICMP per segnalazioni.
Da locale a globale
Data Link usa MAC piatti. Network introduce IP gerarchici per scalare su Internet.
Best effort
IP non garantisce consegna, ordine, né assenza duplicati. Semplicità = resilienza.
Decisione distribuita
Ogni router decide autonomamente. Nessun controllo centrale sul percorso completo.
Apri traceroute 8.8.8.8 su Linux. Nota ogni hop: indirizzo IP diverso = rete diversa. Ogni router ha dovuto consultare la sua tabella per scegliere dove rispedire il tuo pacchetto.
2. Commutazione di circuito vs commutazione di pacchetto
Due filosofie opposte per condividere risorse di rete.
| Dimensione | Commutazione di circuito | Commutazione di pacchetto |
|---|---|---|
| Allocazione | Risorse fisiche (slot, frequenza) riservate prima | Risorse logiche condivise à la demande |
| Fasi | Setup → Transfer → Teardown | Nessun setup, invio immediato |
| Efficienza | Bassa se traffico a burst (silenzio spreca banda) | Alta: multiplexing statistico |
| Latenza | Costante, prevedibile | Variabile (accodamento) |
| Guasto nodo | Connessione interrotta | Rerouting automatico |
| Tariffazione | A tempo / distanza | A volume o flat |
Domanda classica all'orale: "Perché Internet usa commutazione di pacchetto?" Risposta: perché traffico dati è a burst, non continuo come voce. Prenotare banda fissa sarebbe uno spreco enorme. La rete telefonica vecchia lo faceva!
3. Circuito virtuale e datagram: due filosofie a confronto
Anche dentro la commutazione di pacchetto esistono due modelli:
ATM, MPLS, Frame Relay
Percorso logico (VC) stabilito con segnalazione. Tutti i pacchetti seguono stesso percorso, nell'ordine. Router mantiene stato per VC (etichette).
- Setup iniziale
- QoS più semplice
- Ordine garantito
- Stato nei router = meno scalabilità
IP (Internet)
Ogni pacchetto instradato indipendentemente con indirizzo destinazione completo. Nessuno stato per flusso nei router core. Massima resilienza.
- Nessun setup
- Robustezza a guasti
- Nessuna garanzia ordine / consegna
- Scalabilità = cuore di Internet
Connection-oriented = stato nei nodi (VC table), ordine garantito. Connectionless = stateless nei core router, ogni datagram vive di vita propria, affidabilità demandata agli estremi (end-to-end principle).
Confondere circuito virtuale con circuito fisico: nel circuito virtuale non si riservano fisicamente cavi o frequenze, ma solo una entry logica (etichetta VC) nelle tabelle. La banda resta condivisa.
4. Frammentazione in IPv4: perché, quando e con quali campi
Ogni tecnologia Data Link ha una Maximum Transmission Unit (MTU) diversa: Ethernet 1500 byte, PPPoE 1492, 802.11 ~2346, loopback 65535. Se un datagramma IP supera la MTU del link in uscita, il router (o l'host) deve frammentarlo.
| Campo IPv4 (16/13 bit) | Ruolo nella frammentazione | Valori |
|---|---|---|
| Identification (16 bit) | Stesso ID per tutti i frammenti dello stesso datagramma originale | Casuale per datagramma |
| Flags - DF (Don't Fragment) | Se =1 vieta frammentazione | 0 = può frammentare, 1 = no (per PMTUD) |
| Flags - MF (More Fragments) | Indica se seguono altri frammenti | 1 = non è ultimo, 0 = ultimo frammento |
| Fragment Offset (13 bit) | Posizione del frammento nel payload originale, in unità di 8 byte | 0 ... 8191 (max offset 65280 byte) |
| Total Length | Lunghezza di questo frammento (header + payload) | Header 20 + payload frammento |
Regola d'oro: payload di ogni frammento (tranne ultimo) DEVE essere multiplo di 8 byte, perché Offset conta a blocchi di 8. In verifica spesso danno MTU 1500 e datagram 4000: ricordati di sottrarre header IP (20) prima di dividere!
Riassemblaggio e timeout
Il riassemblaggio avviene esclusivamente alla destinazione finale, non nei router intermedi. Il destinatario usa ID per raggruppare frammenti della stessa origine, Offset per ordinarli e MF per capire quando ha ricevuto tutto. Un timer (60-120s) scarta frammenti incompleti per evitare attacchi di esaurimento memoria.
5. Calcolo pratico dei frammenti: offset, MF, Identification
Vediamo l'esercizio standard da esame.
Su Linux: ping -s 4000 -M want 8.8.8.8 forza frammentazione. Con Wireshark cattura e osserva Identification identico, Offset 0, 185, 370, MF=1 tranne ultimo. Poi prova -M do (DF=1): vedrai ICMP "Fragmentation needed".
6. Path MTU Discovery ed evoluzione in IPv6
Frammentare costa: ogni frammento ha overhead header, aumenta carico router e rischio perdita (se perdi 1 frammento perdi tutto). Soluzione moderna: evitare frammentazione.
Path MTU Discovery (PMTUD) - RFC 1191
- Mittente imposta DF=1 (Don't Fragment).
- Se router incontra MTU minore, scarta pacchetto e invia ICMP Type 3 Code 4 - Fragmentation Needed and DF set, indicando sua MTU nel campo Next-Hop MTU.
- Mittente riduce dimensione e ritenta.
- Si ripete fino a trovare MTU massima compatibile con intero percorso.
Vantaggi: nessuna frammentazione intermedia, throughput ottimale, meno carico su router. Svantaggio: ICMP spesso filtrato da firewall → rischio black-hole. Variante moderna PMTUD con TCP MSS Clamping o Packetization Layer PMTUD (RFC 8899) che usa feedback di livello trasporto anziché ICMP.
In IPv6 la frammentazione intermedia da parte dei router è stata completamente eliminata. Solo il mittente originale può frammentare, usando un Fragment Extension Header (Next Header 44). Questo rende PMTUD obbligatorio per IPv6 e semplifica il fast path dei router, migliorando prestazioni. Header base fixed 40 byte, nessun campo Identification/Flags/Offset nel base header.
| Aspetto | IPv4 | IPv6 |
|---|---|---|
| Chi frammenta? | Host + router lungo percorso | Solo host sorgente |
| Campi header | ID, DF, MF, Offset nel base header | Extension Header Fragment opzionale |
| PMTUD | Opzionale (ma raccomandato) | Obbligatorio, integrato in ICMPv6 |
| Prestazioni router | Deve supportare frammentazione (costoso) | Più veloce, no frammentazione |
| Min MTU | 68 byte (tutti devono supportare) | 1280 byte minimo garantito |
7. Verifica / Esercitazione pratica
🔬 Attività di laboratorio
Simula frammentazione e PMTUD con strumenti reali e calcolo manuale.
- Calcolo manuale: datagram da 3500 byte (20H+3480PL) attraversa MTU 1500, poi MTU 1000. Calcola frammenti dopo primo router e dopo secondo (attenzione: frammento di 1480 che incontra MTU 1000 verrà riframmentato).
- Wireshark: ping con
ping -l 3000 192.168.1.1su Windows (MTU Ethernet 1500). Cattura, identifica ID, MF, Offset. Cosa succede con-f(DF=1)? - Confronto: Perché frammentazione è considerata vulnerabilità per DoS? Cerca "tiny fragment attack" e "overlapping fragments". Quale difesa usa il firewall?
- IPv6: verifica con
ping -6e cattura: trovi fragmentation header? Quale MTU minima vedi?
Primo hop MTU1500: 3480/1480 => 3 frammenti (1480 MF1 OFF0, 1480 MF1 OFF185, 520 MF0 OFF370). Secondo hop MTU1000: payload max 980 → 976 (multiplo di 8). Ogni frammento da 1480 diventa 976+504. Quindi da Frag1: F1a TOT=996 MF1 OFF0, F1b TOT=524 MF1 OFF122. Da Frag2: F2a TOT=996 MF1 OFF185, F2b TOT=524 MF1 OFF307. Frag3 da 520 resta unico se <1000. Totale finale 5 frammenti. Nota: Offset sempre riferito a datagramma originale, non al frammento intermedio (F2b OFF307 = (1480+977?) attenzione arrotondamento: calcolo esatto 976//8=122, quindi OFF cumulativo).
8. Riepilogo e concetti chiave
📚 Prossimo passo — Il protocollo IPv4: header e indirizzamento
Nella prossima lezione analizziamo in dettaglio l'header IPv4 byte per byte, il formato degli indirizzi, classi, netmask e il passaggio a CIDR. Prepara la calcolatrice binaria!