Sistemi e Reti Anno 4 Modulo 2 Lezione 01 - Livello Network, commutazione e frammentazione
Sistemi e Reti · Anno 4 · Modulo 2 · Lezione 01
✍ Autore: profgiagnotti · Materia: Sistemi e Reti

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.

// 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
✓Spiegare il meccanismo di frammentazione IP, identificare i campi header coinvolti e calcolare offset e dimensioni dei frammenti a partire da datagramma e MTU
✓Comprendere Path MTU Discovery (RFC 1191), l'eliminazione della frammentazione in IPv6 e le implicazioni su prestazioni e sicurezza

1. Il livello Network nello stack: funzioni e servizi

📌 Definizione da ricordare

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.
L2 → L3

Da locale a globale

Data Link usa MAC piatti. Network introduce IP gerarchici per scalare su Internet.

SERVICE

Best effort

IP non garantisce consegna, ordine, né assenza duplicati. Semplicità = resilienza.

HOP-BY-HOP

Decisione distribuita

Ogni router decide autonomamente. Nessun controllo centrale sul percorso completo.

🎯 Esempio in classe

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.

CIRCUITO - RISORSE RISERVATE A B riservato 64kbps Setup → trasferimento → teardown Latenza costante, no contesa Es: PSTN, ISDN - spreco se A muto PACCHETTO - RISORSE CONDIVISE A B Store & forward, no setup Coda, contesa, resilienza Es: IP - efficiente, latenza variabile
DimensioneCommutazione di circuitoCommutazione di pacchetto
AllocazioneRisorse fisiche (slot, frequenza) riservate primaRisorse logiche condivise à la demande
FasiSetup → Transfer → TeardownNessun setup, invio immediato
EfficienzaBassa se traffico a burst (silenzio spreca banda)Alta: multiplexing statistico
LatenzaCostante, prevedibileVariabile (accodamento)
Guasto nodoConnessione interrottaRerouting automatico
TariffazioneA tempo / distanzaA volume o flat
💬 Tip del docente

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:

CIRCUITO VIRTUALE - Connection-Oriented

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à
DATAGRAM - Connectionless

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
📌 Definizione da ricordare

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).

⚠️ Errore comune

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.

DATAGRAM 4000BHeader 20B + 3980 payload Router MTU 1500 Frag1 OFFSET=0 MF=1 1480B Frag2 OFFSET=185 MF=1 1480B Frag3 OFFSET=370 MF=0 1020B ID uguale per tutti i frag Offset in blocchi da 8 byte Riassemblaggio solo a destinazione
Campo IPv4 (16/13 bit)Ruolo nella frammentazioneValori
Identification (16 bit)Stesso ID per tutti i frammenti dello stesso datagramma originaleCasuale per datagramma
Flags - DF (Don't Fragment)Se =1 vieta frammentazione0 = può frammentare, 1 = no (per PMTUD)
Flags - MF (More Fragments)Indica se seguono altri frammenti1 = non è ultimo, 0 = ultimo frammento
Fragment Offset (13 bit)Posizione del frammento nel payload originale, in unità di 8 byte0 ... 8191 (max offset 65280 byte)
Total LengthLunghezza di questo frammento (header + payload)Header 20 + payload frammento
💬 Tip del docente

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.

TESTO ESERCIZIO · FRAMMENTAZIONE
Dato: datagramma IPv4 da 4000 byte (20 header + 3980 payload) deve attraversare link con MTU = 1500 Calcola numero frammenti, loro Total Length, MF, Offset. MTU 1500 => payload max per frammento = 1500 - 20 = 1480 1480 è multiplo di 8? 1480/8=185 sì OK. Frammento1: payload 1480, Total Length 1500, MF=1, Offset=0 (0/8) byte 0-1479 del payload originale Frammento2: payload 1480, Total Length 1500, MF=1, Offset=185 (1480/8) byte 1480-2959 del payload originale Frammento3: payload rimanente 3980-2960=1020, Total Length 1040, MF=0, Offset=370 (2960/8) byte 2960-3979 Verifica: 1480+1480+1020=3980 OK
PSEUDOCODICE · ALGORITMO FRAMMENTAZIONE
function frammenta(datagramma, MTU): header = 20 max_payload = MTU - header max_payload = floor(max_payload / 8) * 8 # arrotonda a multiplo di 8 payload = datagramma.payload # 3980 offset_byte = 0 fragments = [] while payload_rimanente > 0: if payload_rimanente > max_payload: cur = max_payload MF = 1 else: cur = payload_rimanente MF = 0 frag = IP( ID=same, MF=MF, Offset=offset_byte//8, TotalLength=header+cur, Payload=cur ) fragments.append(frag) offset_byte += cur payload_rimanente -= cur return fragments
🎯 Esempio in laboratorio

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

  1. Mittente imposta DF=1 (Don't Fragment).
  2. 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.
  3. Mittente riduce dimensione e ritenta.
  4. 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.

// IPv6 e frammentazione

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.

AspettoIPv4IPv6
Chi frammenta?Host + router lungo percorsoSolo host sorgente
Campi headerID, DF, MF, Offset nel base headerExtension Header Fragment opzionale
PMTUDOpzionale (ma raccomandato)Obbligatorio, integrato in ICMPv6
Prestazioni routerDeve supportare frammentazione (costoso)Più veloce, no frammentazione
Min MTU68 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.

  1. 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).
  2. Wireshark: ping con ping -l 3000 192.168.1.1 su Windows (MTU Ethernet 1500). Cattura, identifica ID, MF, Offset. Cosa succede con -f (DF=1)?
  3. Confronto: Perché frammentazione è considerata vulnerabilità per DoS? Cerca "tiny fragment attack" e "overlapping fragments". Quale difesa usa il firewall?
  4. IPv6: verifica con ping -6 e cattura: trovi fragmentation header? Quale MTU minima vedi?
✅ Soluzione ragionata esercizio 1

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).

✓Il livello Network gestisce indirizzamento logico, routing, commutazione e frammentazione operando hop-by-hop tra sorgente e destinazione.
✓Commutazione di circuito riserva risorse dedicate: latenza costante e banda garantita, ma spreco nei periodi di silenzio. Esempio: PSTN.
✓Circuito virtuale stabilisce percorso logico (non fisico): pacchetti seguono stesso cammino nell'ordine. Esempi: ATM, MPLS.
✓Datagram connectionless instrada ogni pacchetto indipendentemente: massima resilienza e utilizzo efficiente. Esempio: IP, principio end-to-end.
✓Frammentazione: quando datagramma > MTU. Campi IPv4: Identification uguale, Flags DF/MF, Fragment Offset in blocchi da 8 byte. Payload multiplo di 8 tranne ultimo.
✓Riassemblaggio solo a destinazione finale, con timer di scarto. PMTUD con DF=1 e ICMP evita frammentazione. In IPv6 frammentazione intermedia proibita, PMTUD obbligatorio.

📚 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!