Subnetting: piano di indirizzamento e VLSM

// obiettivi di apprendimento
Comprendere il problema del subnetting e saper dividere uno spazio di indirizzamento in sottoreti di dimensione fissa
Applicare la procedura di calcolo per ottenere network address, broadcast e range host di ogni subnet
Progettare un piano di indirizzamento con VLSM allocando le subnet a partire dalla più grande verso la più piccola
Riconoscere il vantaggio del VLSM rispetto al subnetting a lunghezza fissa in termini di efficienza dello spazio
🎬
Video
Subnetting FLSM
Guarda →
🎬
Video
Subnetting VLSM
Guarda →
📄
Slides
Schema metodo, tabella VLSM, esercizi con soluzione
⚗️
Lab
Esercizio subnetting FLSM
PKT →
⚗️
Lab
Esercizio subnetting VLSM
PKT →
🔗
Risorse
Esercizi subnetting
Github →
🔗
Risorse
Esercizi subnetting FLSM
Github →
🔗
Risorse
Esercizi subnetting VLSM
Github →

Il problema: una rete piatta non scala

Immagina un’azienda a cui viene assegnata la rete 192.168.0.0/24: 254 host disponibili, tutti nella stessa subnet. All’inizio funziona. Ma poi arrivano i problemi:

  • Un broadcast inviato da un host raggiunge tutti i 254 nodi — overhead crescente
  • Separare reparti diversi (amministrazione, produzione, server) è impossibile senza firewall fisico
  • Il traffico di un reparto disturba gli altri
  • Impossibile applicare policy di sicurezza differenziate per gruppo

La soluzione è il subnetting: dividere lo spazio di indirizzamento originale in sottoreti più piccole, logicamente isolate. Ogni subnet ha il proprio dominio di broadcast, il proprio range di indirizzi, e può essere protetta separatamente.

// definizione formale
Subnetting è il processo di suddivisione di uno spazio di indirizzamento IP in blocchi più piccoli (subnet) tramite l’estensione del prefisso di rete. Si prende il blocco originale con prefisso /n e lo si divide in 2k blocchi di prefisso /(n+k), dove k è il numero di bit “rubati” alla host portion.

Meccanismo del subnetting — come funziona

Il subnetting opera a livello binario: si prendono bit dalla host portion e li si “promuovono” a network portion. Ogni bit aggiunto al prefisso raddoppia il numero di subnet e dimezza il numero di host per subnet.

// esempio: dividere 192.168.0.0/24 in 4 subnet uguali (/26)
Originale /24: 192.168.0.00000000 (256 indirizzi)
+2 bit subnet → /26
Subnet 0: 192.168.0.00000000 → 192.168.0.0/26
Subnet 1: 192.168.0.01000000 → 192.168.0.64/26
Subnet 2: 192.168.0.10000000 → 192.168.0.128/26
Subnet 3: 192.168.0.11000000 → 192.168.0.192/26

Ogni subnet /26 ha 64 indirizzi: 1 network address, 62 host utilizzabili, 1 broadcast. Il blocco si “muove” a passi di 64 (= 2^6, dove 6 sono i bit host rimasti).

La formula del “salto” (block size)

L’indirizzo di rete della subnet successiva si calcola sommando al network address precedente il valore 2^(32−prefisso), chiamato block size o subnet size.

Block size = 2^(32 − prefisso)
/26 → 2^(32-26) = 2^6 = 64  |  /27 → 2^5 = 32  |  /28 → 2^4 = 16  |  /29 → 2^3 = 8

Procedura di calcolo passo-passo

Dato un indirizzo con prefisso, il calcolo segue sempre questa sequenza:

  1. Identifica il network address: esegui AND bitwise tra IP e subnet mask. Tutti i bit host diventano 0.
  2. Identifica il broadcast: parti dal network address, metti tutti i bit host a 1.
  3. Range host: da network+1 a broadcast−1.
  4. Subnet successiva: network address + block size.
// esempio completo: 172.16.0.0/24 diviso in 8 subnet /27

Partiamo da 172.16.0.0/24. Vogliamo 8 subnet: 2³ → aggiungiamo 3 bit → /27. Block size = 32.

SubnetNetwork AddressPrimo hostUltimo hostBroadcast
1172.16.0.0/27172.16.0.1172.16.0.30172.16.0.31
2172.16.0.32/27172.16.0.33172.16.0.62172.16.0.63
3172.16.0.64/27172.16.0.65172.16.0.94172.16.0.95
4172.16.0.96/27172.16.0.97172.16.0.126172.16.0.127
5172.16.0.128/27172.16.0.129172.16.0.158172.16.0.159
6172.16.0.160/27172.16.0.161172.16.0.190172.16.0.191
7172.16.0.192/27172.16.0.193172.16.0.222172.16.0.223
8172.16.0.224/27172.16.0.225172.16.0.254172.16.0.255

Il limite del subnetting a lunghezza fissa

Il subnetting classico divide un blocco in subnet tutte della stessa dimensione. Funziona bene quando le reti hanno esigenze simili. Ma nella realtà un’azienda può avere:

  • Reparto produzione: 100 host
  • Uffici: 50 host
  • Server farm: 20 host
  • Gestione: 10 host
  • Link punto-punto router: 2 host

Se assegni subnet /25 (126 host) a tutte, sprechi centinaia di indirizzi. È qui che entra in gioco il VLSM.

// il problema dello spreco

Con subnetting a lunghezza fissa su 192.168.1.0/24 in 4 subnet /26 (62 host ciascuna), se un reparto ha solo 5 host stai sprecando 57 indirizzi per subnet. Con VLSM tagli la subnet esattamente sulla dimensione necessaria, recuperando quello spazio per altre subnet.

VLSM — Variable Length Subnet Masking

Il VLSM permette di applicare maschere di lunghezza diversa a subnet diverse all’interno dello stesso blocco di indirizzi. È una tecnica classless: il router deve supportare CIDR e i protocolli di routing devono trasportare la subnet mask nelle proprie advertisement (OSPF, EIGRP, RIPv2 sì — RIPv1 no).

// definizione formale
VLSM (Variable Length Subnet Masking) è l’applicazione ricorsiva del subnetting: si suddivide un blocco in subnet, poi alcune di queste subnet vengono ulteriormente suddivise con prefissi diversi. Il risultato è un albero gerarchico di blocchi di dimensioni variabili, tutti contenuti nello spazio originale.

Metodo VLSM: ordina e alloca dalla più grande alla più piccola

La regola fondamentale del VLSM è: ordina le subnet per dimensione decrescente e allocale nell’ordine. Questo garantisce che i blocchi più grandi trovino sempre spazio senza sovrapposizioni con i successivi.

  1. Elenca tutti i segmenti di rete con il numero di host richiesti
  2. Ordina da più grande a più piccola
  3. Per ogni segmento trova il prefisso minimo che soddisfa: 2^(32−n) − 2 ≥ host_richiesti
  4. Assegna il blocco partendo dal primo indirizzo disponibile
  5. La subnet successiva parte dal primo indirizzo dopo il broadcast dell’ultima assegnata

Caso studio VLSM completo

Scenario: ti viene assegnato il blocco 10.0.0.0/24. Devi progettare un piano di indirizzamento per:

SegmentoHost richiestiPrefisso minimoHost disponibili
Reparto A60/2662
Reparto B28/2730
Reparto C12/2814
Reparto D5/296
Link WAN 12/302
Link WAN 22/302

Allocazione (dalla più grande alla più piccola):

// piano di indirizzamento VLSM — 10.0.0.0/24
SegmentoNetworkRange hostBroadcastProssimo blocco
Reparto A /2610.0.0.0/2610.0.0.1 – 10.0.0.6210.0.0.63→ 10.0.0.64
Reparto B /2710.0.0.64/2710.0.0.65 – 10.0.0.9410.0.0.95→ 10.0.0.96
Reparto C /2810.0.0.96/2810.0.0.97 – 10.0.0.11010.0.0.111→ 10.0.0.112
Reparto D /2910.0.0.112/2910.0.0.113 – 10.0.0.11810.0.0.119→ 10.0.0.120
Link WAN 1 /3010.0.0.120/3010.0.0.121 – 10.0.0.12210.0.0.123→ 10.0.0.124
Link WAN 2 /3010.0.0.124/3010.0.0.125 – 10.0.0.12610.0.0.127→ 10.0.0.128
Indirizzi usati: 128 su 256 totali disponibili (50%). Rimane 10.0.0.128/25 libero per espansioni future.
// allineamento dei blocchi

Ogni subnet deve essere allineata al proprio block size: il network address deve essere un multiplo del block size. 10.0.0.0/26 è corretto (0 è multiplo di 64). 10.0.0.10/26 sarebbe sbagliato (10 non è multiplo di 64). Se non allinei correttamente i blocchi, host di subnet diverse potrebbero sovrapporsi.

VLSM: visualizzazione ad albero

Il VLSM produce una struttura gerarchica a albero binario: il blocco padre viene diviso in blocchi figli, e alcuni figli vengono a loro volta divisi. Nessun blocco può sovrapporsi a un altro. Lo spazio non allocato (come 10.0.0.128/25 nell’esempio) è disponibile per allocazioni future.

// mappa dello spazio 10.0.0.0/24
Reparto A /26 — 0–63
Rep.B /27 — 64–95
C /28 96–111
/29
/30
/30
10.0.0.128/25 — LIBERO
0
255

Piano di indirizzamento professionale — considerazioni

Un buon piano di indirizzamento non si limita a “far stare i numeri”. Deve rispettare alcuni principi:

  • Lascia spazio di crescita: aggiungi almeno il 20–30% extra per espansioni future. Non allocare tutto subito.
  • Gerarchizza per funzione: raggruppare subnet per reparto, edificio o funzione rende più facile il summarization e il troubleshooting.
  • Link punto-punto con /30: i link tra router hanno esattamente 2 host — usa sempre /30 (o /31 per RFC 3021). Usare /24 per un link p2p è uno spreco enorme.
  • Documenta tutto: registra ogni allocazione in una tabella IPAM (IP Address Management). Strumenti come phpIPAM, NetBox o anche un semplice foglio di calcolo sono essenziali.
  • Pianifica la summarization: scegli blocchi contigui per gruppo/sito in modo da poterli aggregare in una singola route nel routing table (argomento del CIDR nella prossima lezione).
// perché /30 per i link tra router

Un link seriale o Ethernet tra due router ha esattamente 2 interfacce. Un /30 fornisce 2 host utilizzabili (network address + broadcast occupano gli altri 2). In alternativa, RFC 3021 consente /31: elimina il broadcast e usa tutti e 2 i bit per host, riduce ulteriormente lo spreco su link punto-punto. Molti router Cisco, Juniper e Linux lo supportano.

📌 Riepilogo — Punti chiave
  • Il subnetting divide un blocco in 2k subnet aggiungendo k bit al prefisso. Block size = 2^(32−prefisso).
  • Ogni subnet ha: network address (tutti bit host a 0), broadcast (tutti bit host a 1), e range host tra i due.
  • Il subnetting a lunghezza fissa spreca indirizzi quando le reti hanno dimensioni diverse.
  • VLSM applica maschere diverse per subnet diverse. Si alloca sempre dalla subnet più grande alla più piccola.
  • I blocchi devono essere allineati: il network address deve essere multiplo del block size.
  • Link punto-punto tra router: usa /30 (2 host). Un /24 su un link p2p spreca 252 indirizzi.

Lascia un commento