Salta al contenuto
Note per Studenti Subnetting e supernetting

Subnetting e supernetting

In questa pagina 3
In questa pagina 4

Questa nota usa le definizioni di prefisso, maschera, indirizzo di rete e broadcast di Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →. Nello schema senza classi (classless) il confine tra NetID e HostID si può spostare a piacere; spostarlo in due direzioni opposte dà il subnetting e il supernetting.

Subnetting

Definizione (subnetting). Un'organizzazione (o un ISP) a cui è stato assegnato un intervallo di indirizzi può dividerlo in più sottointervalli e assegnare ciascuno a una sottorete (subnet). Ogni sottorete si può dividere a sua volta in sotto-sottoreti. Si crea così un livello di gerarchia in più: NetID (rete), SubnetID (sottorete), HostID (host).

La maschera della sottorete (subnet mask) ha più bit a 1 di quella della rete originaria: i bit presi in prestito dall'HostID per numerare le sottoreti. Le sottoreti vanno progettate con attenzione, perché devono permettere l'instradamento dei pacchetti: ogni sottorete è un blocco CIDR a tutti gli effetti, con il suo indirizzo di rete, il suo broadcast e le sue regole.

Formula (conteggio delle sottoreti). Si parte da una rete con prefisso nn (HostID di 32−n32-n bit). Si prendono ss bit dall'HostID per il SubnetID: il nuovo prefisso è n′=n+sn'=n+s, ci sono 2s2^{s} sottoreti e ogni sottorete ha 232−n′2^{32-n'} indirizzi, cioè 232−n′−22^{32-n'}-2 host utilizzabili.

Esempio. Dalla rete 147.162.0.0/16147.162.0.0/16 (UniPD, classe B) con maschera 255.255.255.0255.255.255.0 (n′=24n'=24): s=24−16=8s=24-16=8 bit di SubnetID, quindi al più 28=2562^8=256 sottoreti, ciascuna con 232−24−2=2542^{32-24}-2=254 host. Senza subnetting si avrebbe un'unica rete con 216−2=65 5342^{16}-2=65\,534 host.

Esempi svolti

1. Un indirizzo di classe A con maschera lunga: 100.0.0.25/28100.0.0.25/28. Il primo byte è 100100: classe A, quindi n=8n=8 bit di NetID e 2424 di HostID. La maschera dice però 2828: solo 32−28=432-28=4 bit sono l'HostID reale, quindi al più 24−2=142^4-2=14 host per sottorete. I bit di SubnetID sono 28−8=2028-8=20: al più 220=1 048 5762^{20}=1\,048\,576 sottoreti. L'ultimo byte è 25=0001100125=00011001; con 4 bit di host, si azzerano gli ultimi 4: 00010000=1600010000=16. La sottorete è 100.0.0.16/28100.0.0.16/28 con broadcast 100.0.0.31100.0.0.31 (16+1516+15). Confronto: senza subnetting (indirizzamento con classi) la classe A ha 27−2=1262^7-2=126 reti da 224−2=16 777 2142^{24}-2=16\,777\,214 host; con la maschera /28 si ottengono invece 220=1 048 5762^{20}=1\,048\,576 sottoreti da 24−2=142^4-2=14 host ciascuna.

2. Sottoreti di almeno 500 host dalla rete 132.78.0.0132.78.0.0 (classe B, NetID 16 bit). 500 non è potenza di 2: serve la più piccola potenza di 2 che contenga gli host più i due indirizzi riservati, cioè 500+2=502≤29=512500+2=502\le 2^9=512 (con 28=2562^8=256 non basta). Servono quindi 512 indirizzi, cioè log⁡2512=9\log_2512=9 bit di HostID (logaritmo in base 2log⁡2N\log_2 N è l'esponente hh tale che 2h=N2^h=N, cioè quanti bit servono per distinguere NN valoriEsponenziale e logaritmo →). Dei 16 bit originari di HostID ne restano 9 per gli host e 16−9=716-9=7 per il SubnetID: al più 27=1282^7=128 sottoreti. La maschera ha 32−9=2332-9=23 bit a 1: 255.255.254.0255.255.254.0 (i primi due byte sono 8+8=168+8=16 uni, il terzo byte deve averne 23−16=723-16=7, cioè 111111102=25411111110_2=254, e l'ultimo è 00). Ogni sottorete ha 29−2=5102^9-2=510 host (≥500\ge500: va bene).

3. Almeno 1000 sottoreti dalla rete 128.234.0.0128.234.0.0 (classe B). 1000 non è potenza di 2: con ss bit di SubnetID si numerano 2s2^s sottoreti, e 29=512<1000≤210=10242^9=512<1000\le2^{10}=1024, quindi servono s=10s=10 bit (cioè ⌈log⁡21000⌉=10\lceil\log_2 1000\rceil=10), presi dai 16 di HostID. Restano 16−10=616-10=6 bit di host: al più 26−2=622^6-2=62 host per sottorete. La maschera ha 16+10=2616+10=26 bit a 1: i primi due byte (1616 uni), il terzo tutto a 1 (88 uni) e 2 uni nell'ultimo (110000002=19211000000_2=192): 255.255.255.192255.255.255.192. Compromesso: più sottoreti si vogliono, meno host entrano in ciascuna, perché i bit sono sempre 16 in tutto.

Le tre regole del progetto

Quando si devono ritagliare sottoreti di dimensioni diverse da un blocco (progetto con maschere di lunghezza variabile, VLSM, variable-length subnet mask) valgono queste regole:

  1. Regola 1. Il numero MM di indirizzi di ciascuna sottorete è una potenza di 2: se servono HH host si prende la più piccola potenza di 2 con M≥H+2M\ge H+2 (due indirizzi vanno persi: rete e broadcast).
  2. Regola 2. La lunghezza del prefisso della sottorete è n=32−log⁡2Mn=32-\log_2M.
  3. Regola 3. L'indirizzo iniziale di una sottorete deve essere divisibile per il numero di indirizzi della sottorete: per rispettarla si assegnano gli indirizzi partendo dalla sottorete più grande e finendo con la più piccola (così ogni blocco comincia a un multiplo della propria dimensione). Perché funziona: se i blocchi sono ordinati dal più grande al più piccolo, ogni dimensione MiM_i è una potenza di 2 che divide le dimensioni precedenti (che sono potenze di 2 maggiori o uguali), quindi la somma delle dimensioni già assegnate, che è l'indirizzo di partenza del blocco successivo, è automaticamente un multiplo di MiM_i. Se invece si parte dal più piccolo si sprecano indirizzi: con un blocco da 16 posto in .0/28.0/28, una sottorete da 128 non può partire da .16.16 (non è multiplo di 128) e deve slittare a .128.128, lasciando inutilizzati i 112 indirizzi da .16.16 a .127.127. L'allineamento è lo stesso richiesto nella regola di assegnazione dei blocchiil primo indirizzo di un blocco di MM indirizzi ha log⁡2M\log_2 M zeri finali, quindi è multiplo di MMLivello di rete e indirizzamento IP →.

Formula (progetto di una sottorete). M=2⌈log⁡2(H+2)⌉,n=32−log⁡2M,broadcast=rete+M−1.M=2^{\lceil\log_2(H+2)\rceil},\quad n=32-\log_2M,\quad \text{broadcast}=\text{rete}+M-1.

Esempio. Servono 100 host: H+2=102H+2=102; 26=64<102≤27=1282^6=64<102\le2^7=128, quindi ⌈log⁡2102⌉=7\lceil\log_2102\rceil=7 e M=128M=128; n=32−7=25n=32-7=25; il broadcast è la rete +127+127 (la rete è il primo indirizzo, quindi l'ultimo dista M−1M-1).

Nota sui testi. Se un testo dice "una sottorete da 10 indirizzi" si prende M=16M=16; se dice "da 60 host" serve M≥62M\ge62, quindi 6464; con 63 host servirebbe 128 (63+2=65>6463+2=65>64). Bisogna sempre leggere se il dato è in host o in indirizzi.

Progetto completo: 14.24.74.0/2414.24.74.0/24 in tre sottoreti

Un'organizzazione ha il blocco 14.24.74.0/2414.24.74.0/24 e vuole tre sottoreti: da 120 host, da 60 host e da 10 host. Il blocco ha 232−24=2562^{32-24}=256 indirizzi, rete 14.24.74.014.24.74.0 e broadcast 14.24.74.25514.24.74.255.

Si parte dalla più grande (regola 3).

  • Sottorete da 120 host. 120+2=122→M=128120+2=122\to M=128, n=32−7=25n=32-7=25. Prima sottorete: 14.24.74.0/2514.24.74.0/25, broadcast 14.24.74.12714.24.74.127 (0+128−10+128-1).
  • Sottorete da 60 host. 60+2=62→M=6460+2=62\to M=64, n=26n=26. Parte subito dopo: 14.24.74.128/2614.24.74.128/26 (128 è multiplo di 64), broadcast 14.24.74.19114.24.74.191.
  • Sottorete da 10 host. 10+2=12→M=1610+2=12\to M=16, n=28n=28. Parte da 14.24.74.192/2814.24.74.192/28 (192 è multiplo di 16), broadcast 14.24.74.20714.24.74.207.

Restano liberi gli indirizzi da 14.24.74.20814.24.74.208 a 14.24.74.25514.24.74.255 (48 indirizzi, riutilizzabili per altre sottoreti, per esempio un /28/28 e un /27/27).

Grafico interattivo: Blocco 14.24.74.0/24: ultimo byte da 0 a 255 e sottoreti assegnate

Dimensioni dei blocchi più usati

prefisso maschera indirizzi NN host N−2N-2
/24 255.255.255.0 256 254
/25 255.255.255.128 128 126
/26 255.255.255.192 64 62
/27 255.255.255.224 32 30
/28 255.255.255.240 16 14
/29 255.255.255.248 8 6
/30 255.255.255.252 4 2
/23 255.255.254.0 512 510
/22 255.255.252.0 1024 1022
/21 255.255.248.0 2048 2046
/20 255.255.240.0 4096 4094

Il /30 è la scelta tipica per un collegamento punto-punto tra due router: 2 host utilizzabili, nessuno spreco. Un /31/31 avrebbe 2−2=02-2=0 host (due soli indirizzi, entrambi riservati).

Supernetting

Definizione (supernetting). È il duale del subnetting: si uniscono più blocchi piccoli e contigui in un unico blocco più grande. Si accorcia il prefisso (più bit di HostID, meno bit di NetID). È il caso della classe C: le reti da 254 host sono piccole, quindi se ne prendono alcune per formare una rete più grande. Nelle tabelle di instradamento si parla di aggregazione (route aggregation).

Proprietà (condizioni per aggregare). 2j2^j blocchi con prefisso nn si possono sostituire con un unico blocco di prefisso n−jn-j se e solo se (a) sono contigui, (b) sono esattamente 2j2^j (una potenza di 2), (c) il primo indirizzo è un multiplo della dimensione del blocco aggregato (232−(n−j)2^{32-(n-j)}).

Esempio. I quattro blocchi 193.23.136.0/24193.23.136.0/24, 193.23.137.0/24193.23.137.0/24, 193.23.138.0/24193.23.138.0/24, 193.23.139.0/24193.23.139.0/24 sono contigui (j=2j=2) e il terzo byte del primo, 136136, è multiplo di 44: si uniscono in 193.23.136.0/22193.23.136.0/22 (maschera 255.255.252.0255.255.252.0, 210=10242^{10}=1024 indirizzi). Quattro blocchi sono 2j2^j con j=log⁡24=2j=\log_24=2, quindi il prefisso scende di 2: 24−2=2224-2=22. In binario il terzo byte è 1000100010001000: i due bit meno significativi (0000) diventano parte dell'HostID (due bit assumono 44 combinazioni: 00,01,10,1100,01,10,11), quindi il terzo byte va da 10001000=13610001000=136 a 10001011=13910001011=139, cioè proprio i quattro blocchi. Si può verificare con la maschera (AND bit a bitl'AND con la maschera /22 azzera gli ultimi 2 bit del terzo byteLivello di rete e indirizzamento IP →): ciascuno dei quattro terzi byte 136,137,138,139136,137,138,139 ha la forma 100010xx100010xx e dopo l'AND diventa 136136, quindi tutti e quattro cadono nella stessa rete 193.23.136.0/22193.23.136.0/22.

Controesempio. 193.23.137.0/24193.23.137.0/24 e 193.23.138.0/24193.23.138.0/24 sono contigui ma non si possono aggregare in un /23/23: il primo (137137) non è multiplo di 22; un /23/23 che li contenga sarebbe 193.23.136.0/23193.23.136.0/23 (136136–137137) più 193.23.138.0/23193.23.138.0/23 (138138–139139), e ognuno contiene uno solo dei due.

Esempio (ritorno). Due sottoreti 195.13.17.128/26195.13.17.128/26 e 195.13.17.192/26195.13.17.192/26 (j=1j=1, 128128 multiplo di 128128): si aggregano in 195.13.17.128/25195.13.17.128/25, che va da .128.128 a .255.255 (126126 host). Il prefisso è sceso da 2626 a 2525: unire 22 reti significa togliere 11 bit al prefisso (meno reti, meno bit di rete): Esercizio - supernetting di due sottoreti.

Con l'aggregazione un ISP annuncia al resto di Internet una sola riga (per esempio 190.100.0.0/16190.100.0.0/16) invece di una per ogni cliente: le tabelle dei router si accorciano e l'instradamento continua a funzionare, grazie alla regola del prefisso più lungo (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).

Dove si applica

Esercizi svolti: Esercizio - progetto di sottoreti con indirizzi di dimensione diversa, Esercizio - sottoreti di una rete di 4000 host e di 15 sottoreti, Esercizio - piano di indirizzamento con cinque router e collegamenti punto-punto, Esercizio - sottoreti classful e sottoreti con rete privata, Esercizio - piano di indirizzamento e inoltro con MTU (tema d'esame), Esercizio - supernetting di due sottoreti, Esercizio - indirizzamento di LAN A e LAN B e tabella di router 1.

Versione ripasso

Prefisso, maschera, rete e broadcast: Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →.

Subnetting

  • Definizione: un intervallo assegnato si divide in sottoreti, aggiungendo un livello: NetID, SubnetID, HostID. La maschera ha più bit a 1 (bit presi in prestito dall'HostID); ogni sottorete è un blocco CIDR con rete e broadcast propri.

Formula. Rete /n/n, si prendono ss bit per il SubnetID: n′=n+sn'=n+s, 2s2^s sottoreti, ciascuna con 232−n′2^{32-n'} indirizzi, cioè 232−n′−22^{32-n'}-2 host.

  • Esempio 147.162.0.0/16147.162.0.0/16 con maschera 255.255.255.0255.255.255.0 (n′=24n'=24): s=8s=8, 28=2562^8=256 sottoreti da 28−2=2542^8-2=254 host.
  • 100.0.0.25/28100.0.0.25/28: classe A (n=8n=8), host reali 32−28=432-28=4 (24−2=142^4-2=14), SubnetID 28−8=2028-8=20 bit (220=1 048 5762^{20}=1\,048\,576 sottoreti). 25=00011001→00010000=1625=00011001\to00010000=16: sottorete 100.0.0.16/28100.0.0.16/28, broadcast 100.0.0.31100.0.0.31.
  • Almeno 500 host da 132.78.0.0132.78.0.0: 512512 indirizzi, 9 bit di host, 16−9=716-9=7 bit di SubnetID (128 sottoreti), maschera /23=255.255.254.0/23=255.255.254.0, 29−2=5102^9-2=510 host.
  • Almeno 1000 sottoreti da 128.234.0.0128.234.0.0: 10241024, 10 bit di SubnetID, restano 16−10=616-10=6 bit di host (6262 host), maschera /26=255.255.255.192/26=255.255.255.192.

Tre regole del progetto (VLSM)

  1. MM (indirizzi della sottorete) potenza di 2, la più piccola con M≥H+2M\ge H+2.
  2. Prefisso n=32−log⁡2Mn=32-\log_2M.
  3. Indirizzo iniziale divisibile per MM: si assegna dalla sottorete più grande alla più piccola.

Formula. M=2⌈log⁡2(H+2)⌉,n=32−log⁡2M,broadcast=rete+M−1.M=2^{\lceil\log_2(H+2)\rceil},\quad n=32-\log_2M,\quad \text{broadcast}=\text{rete}+M-1.

  • 100 host: 102→M=128102\to M=128, n=25n=25, broadcast rete +127+127.
  • "10 indirizzi" →M=16\to M=16; "60 host" →M≥62→64\to M\ge62\to64; 63 host →128\to128 (65>6465>64). Leggere se il dato è in host o in indirizzi.

Progetto di 14.24.74.0/2414.24.74.0/24 (120, 60, 10 host)

Il blocco ha 256256 indirizzi, dal più grande:

  • 120 host: 122→M=128122\to M=128, n=25n=25: 14.24.74.0/2514.24.74.0/25, broadcast 14.24.74.12714.24.74.127.
  • 60 host: 62→M=6462\to M=64, n=26n=26: 14.24.74.128/2614.24.74.128/26 (128128 multiplo di 64), broadcast .191.191.
  • 10 host: 12→M=1612\to M=16, n=28n=28: 14.24.74.192/2814.24.74.192/28 (192192 multiplo di 16), broadcast .207.207.
  • Liberi da .208.208 a .255.255.

Dimensioni (NN/host): /24 256/254, /25 128/126, /26 64/62, /27 32/30, /28 16/14, /29 8/6, /30 4/2 (tipico per un collegamento punto-punto; un /31/31 ha 00 host).

Supernetting

  • Definizione: duale del subnetting, si uniscono blocchi contigui e si accorcia il prefisso (route aggregation).

Proprietà. 2j2^j blocchi di prefisso nn diventano un blocco di prefisso n−jn-j se e solo se sono (a) contigui, (b) esattamente 2j2^j, (c) con il primo indirizzo multiplo della dimensione dell'aggregato 232−(n−j)2^{32-(n-j)}.

Errori tipici: confondere host e indirizzi; dimenticare i 2 indirizzi persi; assegnare prima le sottoreti piccole; aggregare blocchi contigui non allineati.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata