Livello Network, commutazione e frammentazione

// obiettivi di apprendimento
Descrivere le funzioni del livello Network e il suo ruolo nello stack TCP/IP e nel modello ISO/OSI
Distinguere la commutazione di circuito da quella di pacchetto, analizzando vantaggi e limiti di ciascun approccio
Confrontare il modello a circuito virtuale (connection-oriented) con il modello datagram (connectionless), identificando le implicazioni architetturali di ciascuno
Spiegare il meccanismo di frammentazione IP, identificare i campi header coinvolti e calcolare offset e dimensioni dei frammenti a partire da un datagramma e un MTU dati
📄
Slides
Livello Network — commutazione e frammentazione

Il livello Network nello stack

Quando un pacchetto di dati deve viaggiare da un dispositivo a un altro attraverso una rete complessa — magari attraversando decine di router e tecnologie di trasporto eterogenee — il compito di decidere come farlo arrivare a destinazione spetta al livello Network. Nel modello ISO/OSI corrisponde al layer 3; nel modello TCP/IP prende il nome di Internet layer.

// definizione formale
Il livello Network è responsabile dell’instradamento (routing) dei pacchetti attraverso una rete di reti interconnesse (internetwork), dell’indirizzamento logico end-to-end e della gestione della frammentazione quando il percorso attraversa link con capacità di trasporto differenti.

Le funzioni principali che il livello Network svolge sono:

  • Indirizzamento logico: assegna a ogni dispositivo un indirizzo univoco e gerarchico (indirizzo IP) che permette di identificare sia la rete di appartenenza sia il singolo host, indipendentemente dall’indirizzo fisico (MAC) del livello Data Link sottostante.
  • Routing: determina il percorso ottimale che un pacchetto deve seguire per raggiungere la destinazione. I router esaminano l’indirizzo IP di destinazione e consultano la propria routing table per decidere verso quale nodo successivo (next hop) inviare il pacchetto.
  • Commutazione (switching): il meccanismo con cui i nodi intermedi gestiscono il transito dei dati. Esistono due paradigmi fondamentali — commutazione di circuito e commutazione di pacchetto — con caratteristiche radicalmente diverse.
  • Frammentazione e riassemblaggio: quando un pacchetto è troppo grande per il link successivo, il livello Network lo divide in frammenti più piccoli; la destinazione finale si occupa del riassemblaggio.
  • Controllo della congestione: meccanismi per evitare che la rete venga sovraccaricata da un eccesso di traffico, pur essendo questa funzione spesso delegata al livello Transport (TCP).
// nota architetturale

Il livello Network opera hop-by-hop: ogni router vede solo il pacchetto corrente e prende una decisione locale di instradamento. La visione end-to-end (connessione completa tra sorgente e destinazione) è invece responsabilità del livello Transport. Questa separazione di responsabilità è uno dei principi architetturali fondanti di Internet.

La commutazione (switching)

La commutazione è il processo mediante il quale una rete trasferisce dati da un nodo sorgente a uno o più nodi destinatari attraverso i nodi intermedi. Il termine inglese switching indica propriamente la funzione di “smistamento”: ogni nodo intermedio deve decidere verso quale uscita instradare il traffico ricevuto in ingresso.

Storicamente si sono affermati due paradigmi opposti, entrambi ancora presenti in reti diverse: la commutazione di circuito e la commutazione di pacchetto. La scelta tra i due ha implicazioni profonde su efficienza, affidabilità, latenza e costo dell’infrastruttura.

Commutazione di circuito (circuit switching)

Nella commutazione di circuito viene stabilito un percorso fisico dedicato tra sorgente e destinazione prima che qualsiasi dato venga trasferito. Lungo questo percorso vengono riservate risorse trasmissive (banda, buffer, circuiti) per tutta la durata della comunicazione.

Il funzionamento si articola in tre fasi distinte e sequenziali:

  1. Setup (instaurazione): la sorgente invia una richiesta di connessione attraverso la rete. Ogni nodo intermedio verifica la disponibilità delle risorse necessarie e, se disponibili, le riserva. Solo al termine di questa fase la comunicazione può iniziare.
  2. Trasferimento dati: il circuito è attivo e le risorse sono dedicate. I dati fluiscono con latenza costante e garantita, senza alcuna elaborazione intermedia oltre la commutazione fisica del segnale.
  3. Teardown (chiusura): al termine della comunicazione, la sorgente (o la destinazione) invia un segnale di chiusura che libera le risorse lungo tutto il percorso.
// esempio storico

La rete telefonica pubblica commutata (PSTN — Public Switched Telephone Network) è il caso paradigmatico di circuit switching. Quando chiami un numero, la centrale telefonica stabilisce un circuito fisico dedicato tra i due telefoni prima che la conversazione inizi. Per tutta la durata della chiamata, quella porzione di banda è riservata esclusivamente alla comunicazione — anche nei momenti di silenzio.

Vantaggi della commutazione di circuito:

  • Latenza costante e prevedibile: una volta stabilito il circuito, non vi è elaborazione nei nodi intermedi.
  • Banda garantita: le risorse riservate non possono essere sottratte da altri utenti.
  • Trasparenza al protocollo: il circuito trasporta qualsiasi tipo di segnale senza interpretarlo.

Svantaggi della commutazione di circuito:

  • Spreco di risorse: le risorse riservate rimangono inutilizzate durante i periodi di silenzio o inattività — nei dati questo accade molto frequentemente.
  • Tempo di setup: prima di comunicare occorre attendere l’instaurazione del circuito.
  • Scarsa flessibilità: se un nodo intermedio cade, il circuito si interrompe e deve essere ricostruito da zero.
  • Scalabilità limitata: il numero di circuiti simultanei è limitato dalle risorse fisiche della rete.

Commutazione di pacchetto (packet switching)

Nella commutazione di pacchetto i dati vengono suddivisi in unità discrete chiamate pacchetti. Ogni pacchetto contiene, oltre al payload (i dati utili), un header con le informazioni necessarie per l’instradamento — in primo luogo l’indirizzo IP di destinazione. I nodi intermedi (router o switch) ricevono ciascun pacchetto, lo memorizzano temporaneamente (store), ne elaborano l’header per determinare il prossimo hop e infine lo ritrasmettono (forward).

Questo meccanismo, noto come store-and-forward, è radicalmente diverso dal circuit switching: non esiste alcuna risorsa riservata, e pacchetti diversi della stessa comunicazione possono seguire percorsi completamente diversi attraverso la rete.

// store-and-forward

Il modello store-and-forward introduce una latenza di elaborazione in ogni nodo, ma garantisce che un pacchetto corrotto (rilevato tramite checksum o CRC) venga scartato prima di essere ulteriormente inoltrato — riducendo il traffico sprecato sulla rete.

All’interno della commutazione di pacchetto esistono due varianti architetturali fondamentali, che differiscono nel modo in cui gestiscono il percorso dei pacchetti:

Commutazione con circuito virtuale (connection-oriented)

Nel modello a circuito virtuale (Virtual Circuit, VC), prima della trasmissione viene stabilito un percorso logico attraverso la rete. A differenza del circuit switching, questo percorso non implica la riserva fisica di risorse: la banda rimane condivisa tra tutti gli utenti. Tuttavia, tutti i pacchetti di una stessa sessione seguono lo stesso percorso predeterminato.

A ogni circuito virtuale viene assegnato un identificatore di circuito virtuale (VCI — Virtual Circuit Identifier): un numero presente nell’header del pacchetto che i nodi intermedi utilizzano per instradarlo senza dover riesaminare l’indirizzo di destinazione completo. Questo rende la commutazione nei nodi intermedi estremamente rapida.

Fasi del circuito virtuale:

  1. Setup: viene stabilito il percorso logico e assegnato il VCI a ogni tratto della rete.
  2. Trasferimento dati: i pacchetti vengono instradati seguendo il percorso predefinito, nell’ordine in cui vengono emessi.
  3. Teardown: il circuito virtuale viene rimosso e le tabelle dei nodi aggiornate.
// tecnologie basate su virtual circuit

ATM (Asynchronous Transfer Mode): pacchetti a dimensione fissa di 53 byte (cell), ampiamente usato nelle dorsali degli anni ’90. Frame Relay: standard WAN degli anni ’80-’90. MPLS (Multiprotocol Label Switching): tecnologia moderna ancora usata nelle reti carrier, combina la velocità dei circuiti virtuali con la flessibilità di IP.

Commutazione connectionless (datagram)

Il modello datagram è il paradigma su cui si fonda Internet. In questo modello non viene stabilita alcuna connessione preliminare: ogni pacchetto è un’entità autonoma e indipendente, che contiene nell’header tutte le informazioni necessarie per essere instradato (incluso l’indirizzo IP di destinazione completo).

Ogni router, al momento della ricezione di un pacchetto, consulta la propria routing table e prende una decisione di instradamento indipendente per quel singolo pacchetto. Pacchetti successivi della stessa comunicazione possono percorrere strade completamente diverse — e possono arrivere a destinazione in ordine diverso rispetto a quello di trasmissione, o addirittura non arrivare affatto.

// implicazione fondamentale

Il modello datagram trasferisce la responsabilità del riordino, del rilevamento delle perdite e della gestione degli errori al livello Transport (TCP). Il livello Network (IP) è volutamente semplice e inaffidabile: si limita a fare del suo meglio per consegnare i pacchetti (best-effort delivery). Questa scelta architetturale ha reso Internet straordinariamente scalabile e robusto.

Vantaggi del modello datagram:

  • Resilienza ai guasti: se un nodo intermedio cade, i pacchetti successivi vengono automaticamente instradati lungo percorsi alternativi.
  • Nessun overhead di setup: la comunicazione può iniziare immediatamente.
  • Utilizzo efficiente delle risorse: la banda non è mai riservata — viene utilizzata solo quando ci sono dati da trasmettere.
  • Semplicità dei nodi intermedi: i router non mantengono stato di connessione, il che li rende più semplici e scalabili.

Svantaggi del modello datagram:

  • Nessuna garanzia sull’ordine di consegna dei pacchetti.
  • Nessuna garanzia sulla consegna stessa (possibile perdita di pacchetti).
  • Latenza variabile (jitter): ogni pacchetto può subire ritardi diversi nei nodi intermedi.
  • Overhead maggiore per pacchetto: l’header deve contenere sempre l’indirizzo completo.

Confronto tra i paradigmi di commutazione

CaratteristicaCircuit SwitchingPacket SW — Virtual CircuitPacket SW — Datagram
Setup connessioneSì (fisico)Sì (logico)No
Risorse dedicateNoNo
Ordine pacchetti garantitoSì (flusso continuo)No
LatenzaCostante e bassaBassa (dopo setup)Variabile (jitter)
Tolleranza ai guastiBassaMediaAlta
Efficienza risorseBassa (risorse idle)AltaAlta
Header per pacchettoNon applicabileVCI (piccolo, es. 10–24 bit)Indirizzo completo (32 bit IPv4)
Esempi realiPSTN, ISDNATM, Frame Relay, MPLSIP (Internet)

La frammentazione

Internet è una rete di reti: un datagramma IP può attraversare reti Ethernet, link PPP, tecnologie Wi-Fi, connessioni seriali, ognuna con caratteristiche fisiche diverse. Una delle differenze più critiche è la dimensione massima del pacchetto trasportabile, ovvero l’MTU.

// definizione formale
L’MTU (Maximum Transmission Unit) è la dimensione massima, espressa in byte, del payload che un determinato protocollo di livello Data Link è in grado di trasportare in un singolo frame. Ethernet ha un MTU di 1500 byte; alcune tecnologie WAN utilizzano MTU di soli 576 byte; altri link possono supportare Jumbo Frame fino a 9000 byte.

Quando un router deve instradare un datagramma IP su un link il cui MTU è inferiore alla dimensione del datagramma, deve frammentarlo: lo suddivide in frammenti più piccoli, ognuno dei quali viene incapsulato in un frame separato e inoltrato indipendentemente. I frammenti vengono poi riassemblati esclusivamente alla destinazione finale — i router intermedi non effettuano riassemblaggio.

// attenzione — overhead e problemi

La frammentazione introduce overhead significativo: ogni frammento porta il proprio header IP di 20 byte. Se un singolo frammento viene perso, l’intero datagramma originale deve essere ritrasmesso — non esiste meccanismo di recupero del solo frammento mancante a livello IP. Questo rende la frammentazione indesiderabile nelle reti moderne ad alte prestazioni.

I campi header IPv4 coinvolti

La gestione della frammentazione all’interno dell’header IPv4 si basa su tre campi specifici, progettati per consentire al destinatario di riassemblare i frammenti nel corretto ordine:

CampoDimensioneDescrizione
Identification16 bitIdentificatore univoco assegnato dal mittente al datagramma originale. Tutti i frammenti dello stesso datagramma condividono lo stesso valore. Usato dal destinatario per raggruppare i frammenti appartenenti allo stesso datagramma.
Flags3 bit Bit 0: riservato, sempre 0.
Bit 1: DF (Don’t Fragment) — se impostato a 1, il router non deve frammentare il pacchetto. Se non può inoltrarlo a causa dell’MTU, deve scartarlo e inviare un messaggio ICMP “Fragmentation Needed” alla sorgente.
Bit 2: MF (More Fragments) — se impostato a 1, indica che seguono altri frammenti. L’ultimo frammento ha MF=0.
Fragment Offset13 bitPosizione di questo frammento all’interno del datagramma originale, espressa in unità di 8 byte. Il primo frammento ha offset=0. Il valore in byte si ottiene moltiplicando per 8.

Esempio numerico di frammentazione

Consideriamo un datagramma IP originale di 4000 byte totali (20 byte di header IP + 3980 byte di payload) che deve attraversare un link Ethernet con MTU = 1500 byte.

Calcolo della dimensione massima del payload per frammento: poiché ogni frammento porta il proprio header IP di 20 byte e il Fragment Offset deve essere multiplo di 8 byte, la dimensione massima del payload per frammento è:

payload_max = floor((1500 − 20) / 8) × 8 = floor(1480 / 8) × 8 = 185 × 8 = 1480 byte

FrammentoIdentificationMFFragment Offset (unità da 8B)Payload (byte)Dimensione totale
Frammento 10x4A2C1014801500 byte
Frammento 20x4A2C1185 (= 1480 / 8)14801500 byte
Frammento 30x4A2C0370 (= 2960 / 8)10201040 byte
// verifica del calcolo

Tutti e tre i frammenti condividono lo stesso Identification. Solo il frammento 3 ha MF=0 (nessun altro frammento segue). Il payload totale ricostruito: 1480 + 1480 + 1020 = 3980 byte — corrisponde al payload originale. Il frammento 3 trasporta i byte dalla posizione 2960 (= 370 × 8) alla posizione 3979.

Path MTU Discovery

La frammentazione introduce inefficienze significative. La soluzione preferita nelle reti moderne è evitarla a monte tramite il meccanismo di Path MTU Discovery (PMTUD), standardizzato nell’RFC 1191.

Il processo si articola come segue:

  1. Il mittente imposta il flag DF = 1 in tutti i pacchetti della sessione.
  2. Se un router lungo il percorso non può inoltrare il pacchetto a causa dell’MTU del link successivo, lo scarta e invia un messaggio ICMP di tipo 3, codice 4: “Destination Unreachable — Fragmentation Needed and DF set”, includendo l’MTU del link che ha causato il problema.
  3. Il mittente riceve il messaggio ICMP, riduce la dimensione dei pacchetti (PMTU per quel percorso) e ritrasmette i dati.
  4. Il processo si ripete fino a trovare la dimensione massima compatibile con l’intero percorso.
// IPv6 e frammentazione

In IPv6 la frammentazione intermedia da parte dei router è stata completamente eliminata. Solo il mittente originale può frammentare un datagramma IPv6, utilizzando un apposito Fragment Extension Header. Questo rende PMTUD obbligatorio per IPv6 e semplifica notevolmente il software dei router, migliorando le prestazioni di inoltro.

📌 Riepilogo — Punti chiave
  • Il livello Network (layer 3 OSI / Internet layer TCP/IP) gestisce indirizzamento logico, routing, commutazione e frammentazione operando hop-by-hop tra sorgente e destinazione.
  • La commutazione di circuito riserva fisicamente risorse dedicate prima della comunicazione: latenza costante e banda garantita, ma spreco di risorse nei periodi di inattività. Esempio: PSTN.
  • La commutazione di pacchetto con circuito virtuale stabilisce un percorso logico (non risorse fisiche): i pacchetti seguono lo stesso cammino nell’ordine originale. Esempi: ATM, MPLS.
  • La commutazione datagram (connectionless) instrada ogni pacchetto indipendentemente: massima resilienza e utilizzo efficiente delle risorse, a scapito di latenza variabile e nessuna garanzia di ordine o consegna. Esempio: IP.
  • La frammentazione avviene quando un datagramma supera l’MTU del link successivo. I campi Identification, Flags (DF, MF) e Fragment Offset nell’header IPv4 coordinano il processo di divisione e riassemblaggio.
  • Il Fragment Offset si esprime in unità di 8 byte; il payload di ogni frammento deve essere multiplo di 8 (tranne l’ultimo). Il riassemblaggio avviene esclusivamente alla destinazione finale.
  • Path MTU Discovery (RFC 1191) evita la frammentazione impostando DF=1 e sfruttando i messaggi ICMP per adattare dinamicamente la dimensione dei pacchetti al percorso. In IPv6 la frammentazione intermedia è proibita e PMTUD è obbligatorio.

Lascia un commento