<marco />
← Tutti gli articoli
7 min di lettura

IP, subnet e classi

networkguida

192.168.1.0/24 è la convenzione per indicare una generica sottorete IPv4 in una riga. È fondamentale comprenderla e saperla convertire in binario.

Indirizzo IP

Un indirizzo IPv4 come 192.168.1.10 sembra fatto di quattro numeri, ma per la macchina è un unico numero da 32 bit, diviso in quattro ottetti da 8 bit ciascuno (0–255):

text
192      168      1        10
11000000.10101000.00000001.00001010

Ogni ottetto è un byte: 192 in binario è 11000000, 168 è 10101000, e così via.

La maschera

Un indirizzo IP contiene in realtà due informazioni: quale rete e quale host dentro quella rete. A separarli è la netmask: una sequenza di 1 (parte rete) seguita da 0 (parte host).

text
IP        11000000.10101000.00000001.00001010   192.168.1.10
Netmask   11111111.11111111.11111111.00000000   255.255.255.0
          └────────── rete ────────┘└─ host ─┘

In questo esempio i primi 24 bit (i tre ottetti a 1) identificano la rete; gli ultimi 8 (a 0) identificano l'host. Tutti gli indirizzi che condividono gli stessi bit di rete stanno nella stessa sottorete.

Notazione CIDR: /n

Scrivere 255.255.255.0 ogni volta è scomodo. La notazione CIDR (Classless Inter-Domain Routing) la comprime nel numero di bit di rete: /24 significa "i primi 24 bit sono rete". Quindi:

text
192.168.1.10/24  →  netmask 255.255.255.0
10.0.0.0/8       →  netmask 255.0.0.0
172.16.0.0/12    →  netmask 255.240.0.0

Più alto è il prefisso, più piccola è la rete: /24 lascia 8 bit agli host (256 indirizzi), /16 ne lascia 16 (65.536). Ogni bit tolto agli host raddoppia la dimensione della rete.

Perché «classless»? Il problema delle classi

La "C" di CIDR sta per Classless, e per capire cosa nega bisogna sapere cosa c'era prima. Fino ai primi anni '90 gli indirizzi si assegnavano in classi di taglia fissa:

Classe Prefisso Host per rete
A /8 ~16 milioni
B /16 ~65.000
C /24 254

Il problema erano proprio le taglie rigide. Un'organizzazione con 300 dispositivi non entrava in una classe C (254 host), quindi le veniva assegnata un'intera classe B: 65.534 indirizzi, di cui oltre 65.000 sprecati. E due reti contigue non si potevano accorpare, perché la maschera era vincolata all'ottetto.

Il CIDR abolisce le classi: il confine rete/host può cadere a qualsiasi bit (è la Variable Length Subnet Mask, VLSM). Così assegni esattamente ciò che serve: un /23 per ~500 host, un /26 per ~60.

Network e broadcast

Due indirizzi in ogni sottorete sono speciali:

  • Network address — tutti i bit host a 0. È il "nome" della rete: 192.168.1.0.
  • Broadcast address — tutti i bit host a 1. Un pacchetto qui va a tutti gli host della rete: 192.168.1.255.

Si ottengono meccanicamente dai bit host:

text
Network    11000000.10101000.00000001.00000000   192.168.1.0
Broadcast  11000000.10101000.00000001.11111111   192.168.1.255

Numero di host per rete

Con h bit host, gli indirizzi totali sono 2^h. Ma network e broadcast non sono assegnabili a una macchina, quindi gli host utilizzabili sono 2^h − 2:

Prefisso Bit host Totali Utilizzabili
/24 8 256 254
/26 6 64 62
/30 2 4 2

Due prefissi fanno eccezione: un /31 (RFC 3021) ha solo 2 indirizzi ed entrambi sono usabili, pensato per i link punto-punto, dove non serve il broadcast. Un /32 è un host singolo: lo usi per indicare un indirizzo preciso.

Subnetting: dividere una rete

La flessibilità del CIDR è che puoi spezzare una rete grande in più piccole spostando il confine rete/host. Prendi 192.168.1.0/24 e "prestane" un bit agli host: diventa /25, cioè due sottoreti da 128 indirizzi ciascuna:

text
192.168.1.0/25    →  192.168.1.0   – 192.168.1.127
192.168.1.128/25  →  192.168.1.128 – 192.168.1.255

Ogni bit in più raddoppia il numero di sottoreti e dimezza gli host per sottorete. È così che si assegnano blocchi di indirizzi a reparti, VLAN o ambienti diversi senza sprechi.

Supernetting: aggregare le reti

Due sottoreti contigue che differiscono in un solo bit di rete si descrivono con un unico prefisso più corto:

text
192.168.0.0/24  ┐
                ├─ 192.168.0.0/23
192.168.1.0/24  ┘

192.168.0.0/24 e 192.168.1.0/24 si distinguono solo per il 24° bit; abbassando il prefisso a /23 ottieni un blocco che le contiene entrambe. Per un router questo significa una sola riga nella tabella di routing invece di due. Questa operazione — route aggregation o supernetting — su scala Internet comprime tabelle di instradamento che altrimenti avrebbero milioni di voci.

IPv6

La stessa identica notazione vale per IPv6, solo su 128 bit invece di 32. Un prefisso come 2001:db8::/32 riserva i primi 32 bit alla rete e lascia gli altri 96 agli host: uno spazio così vasto che il subnetting diventa una questione di organizzazione più che di risparmio. La logica "bit di rete + bit di host" non cambia di una virgola.

Per apprendere meglio ho preparato un calcolatore CIDR interattivo: digiti un indirizzo, trascini il prefisso e vedi in tempo reale network, broadcast, range di host e la maschera bit per bit.

  • Un IPv4 è un numero da 32 bit; la netmask decide quanti sono "rete".
  • /n in CIDR = i primi n bit sono rete, i restanti 32 − n sono host.
  • Network = bit host a zero; broadcast = bit host a uno.
  • Host utilizzabili = 2^(32−n) − 2 (con /31 e /32 come eccezioni).
  • Alzare il prefisso divide una rete in sottoreti; abbassarlo aggrega reti contigue e alleggerisce le tabelle di routing.
  • Il CIDR ha rimpiazzato le vecchie classi A/B/C proprio per evitarne gli sprechi, e vale allo stesso modo per l'IPv6.