Skip to main content
  1. Concetti/

IP Subnetting - Matematica e Routing

·5 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Spiega la matematica dietro il subnetting (calcolo binario, formula host, conversione CIDR/mask) e il funzionamento della routing table. Complemento pratico a ip-addressing-subnetting.


Formula host per subnet
#

host utilizzabili = 2^(32 - prefisso) - 2

Il -2 esclude sempre l'indirizzo di rete (primo IP) e il broadcast (ultimo IP).

/8   → 2^(32-8)  - 2 = 2^24 - 2 = 16.777.214 host
/16  → 2^(32-16) - 2 = 2^16 - 2 = 65.534 host
/24  → 2^(32-24) - 2 = 2^8  - 2 = 254 host
/30  → 2^(32-30) - 2 = 2^2  - 2 = 2 host  (link point-to-point)

Perche' esattamente -2
#

Con un /24 hai 32 - 24 = 8 bit di host. Quei bit possono valere 0 o 1 in tutte le combinazioni possibili: 2^8 = 256 indirizzi totali, da 192.168.0.0 a 192.168.0.255.

Due di questi sono sempre riservati e non assegnabili:

  • il primo (tutti i bit host a 0): indirizzo di rete → 192.168.0.0
  • l'ultimo (tutti i bit host a 1): broadcast → 192.168.0.255

Quindi: 256 - 2 = 254 host usabili, da 192.168.0.1 a 192.168.0.254.

Il procedimento e' sempre lo stesso: trovi i bit host (32 - prefisso), calcoli 2^n per gli indirizzi totali, sottrai i riservati.

Note

AWS VPC usa la stessa base ma riserva 5 indirizzi per subnet (rete, router, DNS, uso futuro, broadcast). Con un /24 in AWS: 256 - 5 = 251 host usabili.


Calcolo binario degli ottetti
#

Un indirizzo IPv4 e' composto da 4 ottetti. Ogni ottetto e' un numero 0-255 rappresentabile con 8 bit.

Posizione: | 8   | 7  | 6  | 5  | 4  | 3  | 2  | 1  |
Valore:    | 128 | 64 | 32 | 16 |  8 |  4 |  2 |  1 |

Conversione decimale → binario:

192 = 128 + 641 1 0 0 0 0 0 0
168 = 128 + 32 + 81 0 1 0 1 0 0 0
255 = 128+64+32+16+8+4+2+1        → 1 1 1 1 1 1 1 1
  0 =0 0 0 0 0 0 0 0

Da CIDR a subnet mask decimale
#

Il prefisso CIDR indica quanti bit sono a 1 (parte rete). I restanti sono a 0 (parte host).

/8  → 11111111.00000000.00000000.00000000 → 255.0.0.0
/16 → 11111111.11111111.00000000.00000000 → 255.255.0.0
/24 → 11111111.11111111.11111111.00000000 → 255.255.255.0
/32 → 11111111.11111111.11111111.11111111 → 255.255.255.255

Caso non standard — /20:

/20 → 11111111.11111111.11110000.00000000

Terzo ottetto: 1 1 1 1 0 0 0 0
               128+64+32+16 = 240

/20 → 255.255.240.0
Tip

I valori possibili per il terzo/quarto ottetto di una subnet mask sono sempre uno di questi: 0, 128, 192, 224, 240, 248, 252, 254, 255. Sono le uniche combinazioni possibili con bit contigui a sinistra.


/32 — l'indirizzo singolo
#

Il 32 non e' un numero magico — viene direttamente dalla struttura di IPv4:

  • 4 ottetti × 8 bit ciascuno = 32 bit totali

La notazione CIDR x.x.x.x/N dice: "quanti di questi 32 bit sono parte di rete". Quindi /32 significa semplicemente: tutti e 32 i bit usati per la rete, zero rimasti per gli host.

/32 → tutti e 32 i bit sono "rete"
      0 bit rimasti per gli host
      identifica UN SOLO indirizzo specifico

Il router usa /32 nella routing table per indicare il proprio IP:

C 192.168.1.0/24  → conosco TUTTA questa rete su Gig0/0
L 192.168.1.1/32  → questo specifico IP e' MIO (Local)

Routing table — show ip route (Cisco)
#

Il comando show ip route mostra come il router raggiunge ogni rete.

CodiceSignificatoQuando appare
CConnectedRete direttamente connessa a una porta
LLocalIP specifico assegnato a una porta (/32)
SStaticRoute configurata manualmente
OOSPFRoute appresa tramite OSPF
RRIPRoute appresa tramite RIP

Esempio con due reti:

Router# show ip route

C 10.0.0.0/24    is directly connected, GigabitEthernet0/1
L 10.0.0.1/32    is directly connected, GigabitEthernet0/1
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0
L 192.168.1.1/32 is directly connected, GigabitEthernet0/0

Quando arriva un pacchetto per 192.168.1.50:

→ router controlla routing table
→ 192.168.1.50 e' nella rete 192.168.1.0/24
→ manda fuori da Gig0/0 ✓
Tip

Su Linux l'equivalente e' ip route — stessa logica, sintassi diversa.


Flusso completo — PC verso server attraverso router
#

PC (192.168.1.2) vuole raggiungere Server (10.0.0.2)

Step 1 — PC controlla la subnet
  "10.0.0.2 non e' in 192.168.1.x"
  → devo passare dal gateway 192.168.1.1

Step 2 — PC non conosce il MAC del gateway
  ARP Request (broadcast): "Chi ha 192.168.1.1?"
  ARP Reply: "Sono io — MAC del router"

Step 3 — PC manda il pacchetto
  MAC dst:  MAC del router      ← cambia ad ogni hop
  IP dst:   10.0.0.2            ← rimane invariato fino a destinazione

Step 4 — Router consulta routing table
  "10.0.0.2 e' in 10.0.0.0/24 → esce da Gig0/1"

Step 5 — Router manda al server
  MAC dst:  MAC del server      ← nuovo MAC per questo hop
  IP dst:   10.0.0.2            ← invariato

Regola chiave: il MAC cambia ad ogni hop, l'IP rimane sempre uguale.


Tabella riepilogativa subnet mask comuni
#

CIDR  Subnet mask         Host utili    Uso tipico
/8    255.0.0.0           16.777.214    Reti grandi (10.x.x.x)
/16   255.255.0.0         65.534        Reti aziendali medie
/24   255.255.255.0       254           Reti locali standard
/25   255.255.255.128     126           Suddivisione di /24
/26   255.255.255.192     62            Segmento piccolo
/30   255.255.255.252     2             Link point-to-point
/32   255.255.255.255     0             Singolo indirizzo

Risorse
#

  • cidr.xyz — visualizzatore interattivo CIDR: inserisci un blocco e vedi range, broadcast, host utili
  • subnetcalculator.dev — calcolatore subnet con breakdown binario

Collegato a
#

  • ip-addressing-subnetting — concetti core (cosa e' un IP, subnet mask, RFC1918)
  • arp — come viene risolto il MAC nella stessa subnet (Step 2 del flusso)
  • nat-concept — come il gateway traduce tra subnet private e Internet

Related