# Sottorete

In informatica e telecomunicazioni una sottorete, o subnet, è una parte della suddivisione di una singola rete IP (Internet Protocol). Tale suddivisione è realmente visibile solo dalla parte logica della rete, ciò vuol dire che la differenza tra una rete e una sottorete sta nel tipo di configurazione di rete che si dà al proprio computer.
Il processo di subnetting è la divisione di una singola rete in gruppi di host che hanno in comune in ciascun indirizzo IP un determinato prefisso di routing.

## Descrizione

L'operazione di Subnetting rompe una rete in piccoli intervalli, che possono utilizzare lo spazio di indirizzi esistenti in modo più efficiente, e, quando fisicamente separati, possono impedire eccessivi tassi di collisione dei pacchetti Ethernet in una rete più ampia.
Le sottoreti possono essere organizzate logicamente in un'architettura gerarchica, partizionando l'organizzazione dello spazio di indirizzi di rete (vedi anche Autonomous System) in una struttura ad albero di routing. I router sono utilizzati per lo scambio di traffico tra sottoreti e costituiscono i confini logici o fisici tra le subnet. Gestiscono il traffico tra le sottoreti basandosi sulla sequenza di bit di ordine-superiore (prefisso di routing) degli indirizzi.
Un prefisso di routing è la sequenza di bit più significativi (leader) di un indirizzo IP. Essa precede la parte di indirizzo utilizzato come identificatore di host. I prefissi di routing sono espressi in notazione CIDR, la quale utilizza il primo indirizzo di una rete seguito dal numero di bit utilizzati dal prefisso e tali valori sono separati dalla barra di carattere (/). Per esempio, se 192.168.1.0/24 è il prefisso della rete IPv4 di partenza, all'indirizzo indicato, significa che saranno assegnati 24 bit per il numero di rete, e il resto (8 bit) per l'indirizzamento dei singoli hosts. La specifica di indirizzo in IPv6 2001:db8::/32 è una grande rete per $2^{96}$ ospiti, con un prefisso di routing di 32 bit, per un totale di $2^{128}$ combinazioni differenti.
Nelle reti IPv4, il prefisso di routing è tradizionalmente espresso con una maschera di sottorete, che è la maschera di bit del prefisso. Tale maschera è espressa in una rappresentazione decimale puntata di quattro byte. Per esempio, 255.255.255.0 è la maschera di sottorete per il prefisso 192.168.1.0/24.
Tutti gli host in una sottorete possono essere raggiunti da un unico hop di routing, il che implica che tutti gli host di una sottorete sono collegati allo stesso link.
Di solito una sottorete è intesa come una rete fisica servita da un router e, probabilmente, costituita da uno o più segmenti Ethernet, oppure da più reti locali, collegate tra loro da switch di rete e bridge di rete o da una VLAN (Virtual Local Area Network). Tuttavia, l'operazione di subnetting consente alla rete di essere logicamente divisa indipendentemente dal layout fisico di una rete grazie alla possibilità di configurare i computer host di una sottorete in base al router collegato.
Migliorando le prestazioni della rete, aumenta anche la complessità del subnetting routing, a causa del fatto che ogni sottorete connessa localmente deve essere rappresentata da una voce separata nella tabella di routing per ogni router connesso. Tuttavia, con un'attenta progettazione della rete, i percorsi verso gruppi di più sottoreti distanti possono essere aggregati in singoli percorsi. L'esistenza di questa funzionalità delle sottoreti nei router ha permesso l'introduzione del Classless Inter-Domain Routing (CIDR).

### Indirizzamento di rete

Computer e dispositivi che stanno partecipando a una rete come Internet hanno ciascuno un indirizzo logico. Di solito, questo indirizzo è unico per ogni dispositivo e può essere configurato dinamicamente (da un server DHCP) oppure staticamente (da un amministratore). Un indirizzo svolge le funzioni di identificare l'host e localizzarlo sulla rete. Esso consente a un dispositivo di comunicare con altri dispositivi collegati alla rete. Lo schema di indirizzamento di rete più comune è l'Internet Protocol versione 4 (IPv4), mentre l'IPv6 (il suo successore) è in fase iniziale di distribuzione. Un indirizzo IPv4 è costituito da 32 bit e, per avere una chiara leggibilità, è stato scritto in una forma composta da quattro ottetti separati da punti (dot), chiamata 'notazione decimale-puntata'. Un indirizzo IPv6 è costituito da 128 bit.
Al fine di agevolare l'instradamento di un pacchetto di dati attraverso più reti, l'indirizzo è diviso in due parti:
* Prefisso di Rete (Net_ID): Un gruppo contiguo di bit di ordine superiore che sono comuni tra tutti gli host all'interno di una rete.
* Identificatore Host (Host_ID): I restanti bit di ordine inferiore dell'indirizzo che non sono designati nel prefisso di rete. Questa parte specifica un particolare dispositivo di rete locale.
Il prefisso di rete può essere scritto in una forma identica a quella dell'indirizzo stesso. In IPv4, questa si chiama maschera di sottorete dell'indirizzo. Ad esempio, per specificare i 18 bit più significativi di un indirizzo, cioè in formato binario, 11111111.11111111.11000000.00000000, si scrive questo 255.255.192.0.
Una forma alternativa di specificazione del prefisso di routing è quella di contare semplicemente il numero di bit del prefisso di routing e aggiungere quel numero all'indirizzo con uno slash (/) separatore:
* 192.168.0.0, 255.255.0.0 netmask
* 192.168.0.0/16
Quest'ultima notazione è usata di preferenza in Classless Inter-Domain Routing e si chiama notazione CIDR. In IPv6 questa è l'unica forma accettabile per indicare i prefissi di routing.

### L'operazione di subnetting

Il processo di subnetting porta alla separazione dell'indirizzo in una parte che indica la rete e una parte che indica l'host. Questo viene eseguito tramite un AND binario tra l'indirizzo IP e la maschera di sottorete. Il risultato di tale operazione è l'identificatore di rete (Net_ID).
L'esempio che segue si basa sulla creazione di reti IPv4. L'operazione può essere visualizzata in una tabella utilizzando formati indirizzo binari.
| | Notazione decimale puntata | Forma binaria |
| Indirizzo IP | 192.168.5.130 | 11000000.10101000.00000101.10000010 |
| Maschera di sottorete | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
| Porzione di rete | 192.168.5.0 | 11000000.10101000.00000101.00000000 |
| Porzione di host | 0.0.0.130 | 00000000.00000000.00000000.10000010 |
In IPv4, la maschera di sottorete, composta da 32 bit, di solito ha una sequenza di "1" seguita da un blocco di "0". L'ultimo blocco di zeri designa la parte di identificatore di host.
Subnetting è un processo di assegnazione dei bit della porzione host al raggruppamento con la porzione di rete. Questo divide una rete in sottoreti più piccole. Il diagramma seguente modifica l'esempio spostando due bit dalla porzione host per l'indirizzo di sottorete per formare una subnet più piccola:
| | Notazione decimale puntata | Forma binaria |
| Indirizzo IP | 192.168.5.130 | 11000000.10101000.00000101.10000010 |
| Maschera di sottorete | 255.255.255.192 | 11111111.11111111.11111111.11000000 |
| Porzione di rete | 192.168.5.128 | 11000000.10101000.00000101.10000000 |
| Porzione di host | 0.0.0.2 | 00000000.00000000.00000000.00000010 |

## Subnetting nelle reti IPv4

Internet Protocol versione 4 utilizza formati di indirizzo progettati per agevolare il riconoscimento della funzionalità dell'indirizzo. Il primo e l'ultimo indirizzo della sottorete ottenuta dalla subnetting hanno tradizionalmente una denominazione speciale. Inoltre, tutti gli host IPv4 utilizzano l'ultimo indirizzo all'interno di una rete, per la trasmissione in broadcast a tutti gli host sul link.

### Subnet zero e sottorete tutta a uno
#### In precedenza scoraggiato (prima del 1995)

La prima sottorete ottenuta dal subnetting ha tutti i bit nel gruppo di bit subnet impostati su zero (0).
L'ultima sottorete ottenuta dal subnetting ha tutti i bit nel gruppo di sottorete impostati su uno (1). È quindi chiamato subnet-uno.
La confusione creata dall'avere una rete e una sottorete con lo stesso indirizzo portava ad un utilizzo di queste due sottoreti poco soddisfacente. Secondo la RFC 950, "È utile preservare ed estendere l'interpretazione di questi indirizzi speciali (di rete e broadcast) in reti subnetted. Ciò significa che i valori di tutti gli zeri e di tutti gli uno in campo subnet non dovranno essere assegnati alle sottoreti reali".

#### Non più scoraggiata (dopo l'RFC 1878 del 1995)

La prassi di evitare tutti gli zeri e tutti gli uno dalla sottorete divenne obsoleta con RFC 1878, pubblicata nel 1995. Essa afferma esplicitamente: "Questa pratica è obsoleta! Il software moderno sarà in grado di utilizzare tutte le reti definibili".

### Sottorete e il numero di host

Il numero di sottoreti disponibili e il numero di host possibili in rete possono essere calcolati facilmente. Nell'esempio due bit sono stati presi in prestito per creare delle sottoreti, creando così 4 ($2^{2}$) sottoreti possibili.
| Rete | Rete (binario) | Indirizzo broadcast |
| 192.168.5.0/26 | 11000000.10101000.00000101.00000000 | 192.168.5.63 |
| 192.168.5.64/26 | 11000000.10101000.00000101.01000000 | 192.168.5.127 |
| 192.168.5.128/26 | 11000000.10101000.00000101.10000000 | 192.168.5.191 |
| 192.168.5.192/26 | 11000000.10101000.00000101.11000000 | 192.168.5.255 |
La specifica della RFC 950 raccomandava di riservare alla sottorete i valori costituiti da tutti zeri (vedi sopra) e tutti uno (broadcast), riducendo a due il numero di sottoreti disponibili. Tuttavia, causa le inefficienze istituite da questa Convenzione, è stata abbandonata per l'uso su Internet, ed è utilizzata solo quando si tratta di apparecchiature obsolete che non implementano la notazione CIDR. L'unico motivo per non utilizzare la subnet con tutti zeri è che sarebbe ambiguo dal momento in cui la lunghezza del prefisso non è disponibile. Tutti i protocolli di routing CIDR-compliant trasmettono sia la lunghezza che il suffisso. RFC 1878 fornisce una tabella di subnetting con esempi.
I bit che rimangono dopo la subnet sono utilizzati per affrontare gli host all'interno della sottorete. Nell'esempio precedente la maschera di sottorete è costituita da 26 bit, lasciando 6 bit per l'identificatore host. Ciò consente 64 combinazioni ($2^{6}$), tuttavia i valori formati da tutti zeri e quelli composti da tutti 1 sono riservati rispettivamente per l'ID di rete e per l'indirizzo di broadcast, lasciando quindi 62 indirizzi disponibili.
In generale il numero di host disponibili in una subnet è $2^{n}-2$, dove $n$ è il numero di bit usati per la parte host dell'indirizzo.
RFC 3021 specifica una eccezione a questa regola quando si tratta di maschere di sottorete a 31 bit (ovvero identificatori host a 1 bit). In tali reti, i collegamenti di solito punto-punto, solo due host (i punti finali) possono essere collegati, e l'ID di rete e l'indirizzo broadcast non sono necessari.
Sottoreti possibili all'interno di una /24 (la tradizionale Classe C) per categoria sono:
| Notazione CIDR | Maschera di Rete | Sottorete disponibile | Host di rete disponibili | Totale host utilizzabili |
| /24 | 255.255.255.0 | 1 | 256 | 254 |
| /25 | 255.255.255.128 | 2 | 128 | 126 |
| /26 | 255.255.255.192 | 4 | 64 | 62 |
| /27 | 255.255.255.224 | 8 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 16 | 14 |
| /29 | 255.255.255.248 | 32 | 8 | 6 |
| /30 | 255.255.255.252 | 64 | 4 | 2 |
| /31 | 255.255.255.254 | 128 | 2 | 2 |

### Calcolo immediato dell'indirizzo di sottorete

Data una rete (IPv4) di cui si conoscono i bit che compongono la maschera di sottorete ($m$) e si vuole conoscere l'indirizzo della n-esima sottorete, si può utilizzare la formula: $f(n)=(n-1){\frac {h}{256}}$ Dove h è il numero di host calcolati come $2^{(32-m)}$
Esempio: Data la rete 138.81.0.0/28
trovare l'indirizzo della settima sottorete. $f(7)=6\left({\frac {2^{32-25}}{256}}\right)={\frac {6}{2}}=3$ Quindi l'indirizzo della settima sottorete è: 138.81.3.0.
Errore: una /25 non ha una settima sottorete ne ha solo 2
Calcoliamo ora l'indirizzo della sottorete 6. $f(6)=5{\frac {2^{7}}{256}}={\frac {5}{2}}=2.5$ Moltiplichiamo la parte decimale (0,5) per 256: $0,5\times 256=128$ L'indirizzo della sesta sottorete, quindi, è 138.81.2.128.

## Subnetting in reti IPv6

Il disegno dello spazio di indirizzamento IPv6 differisce significativamente da IPv4. Il motivo principale per il subnetting in IPv4 è quello di migliorare l'efficienza nell'utilizzo dello spazio di indirizzi disponibili relativamente piccolo, in particolare per le imprese. Non esistono limitazioni in IPv6, in quanto lo spazio di indirizzamento disponibile anche agli utenti finali è grande.
Una subnet IPv6 è sempre di 64 bit nella sua parte host. Ha quindi un /64 prefisso di routing (i 64 bit più significativi). Anche se è tecnicamente possibile utilizzare sottoreti più piccole, è poco pratico per le reti locali, perché la configurazione automatica stateless address delle interfacce di rete (RFC 4862) richiede un /64 indirizzi. IPv6 non implementa formati indirizzo speciale per il traffico broadcast o numeri di rete, e quindi tutti gli indirizzi in una sottorete sono indirizzi di host validi.
La dotazione consigliata per un sito del cliente IPv6 è uno spazio di indirizzi a 80 bit di indirizzo (prefisso /48), ma può essere piccolo come 72 bit (/56 di allocazione) per una rete di clienti privati. Prevede 65 536 sottoreti per un sito, o un minimo di 256 sottoreti di una rete residenziale. La tecnica del Subnetting in IPv6 viene utilizzata per instradare il traffico tra gli spazi stanziamento globale e all'interno della rete di clienti tra sottoreti e Internet più grande. Subnetting in IPv6 si basa anche sui concetti di Classless Inter-Domain Routing e la notazione CIDR standard è usato con IPv6.