Notazione CIDR e sub-networks

Notazione CIDR e sub-networks – prendo spunto da una richiesta che mi è stata fatta da un amico per spiegare il metodo della NOTAZIONE CIDR

Il Classless Inter-Domain Routing (CIDR) è un metodo per allocare gli indirizzi IP introdotto nel 1993 al fine di sostituire lo schema classful dove gli indirizzi dovevano appartenere ad una specifica classe (A, B e C). Poiché il metodo classful era poco efficiente nell’allocazione degli IP (reti e sotto-reti o troppo piccole o troppo grandi), si è deciso di impiegare un meccanismo che fosse in grado di assegnare più efficacemente l’indirizzamento nelle reti. Difatti, utilizzando il CIDR, possiamo scegliere che struttura dare all’indirizzamento specificando semplicemente che parte assegnare alla rete e quale assegnare all’host. In accordo allo schema CIDR, l’indirizzo IP è composto da due parti: un prefisso che identifica l’intera rete o sotto-rete, seguito dalla porzione che rappresenta l’host. La sintassi utilizzata è molto semplice ed intuitiva: si aggiunge alla fine dell’IP uno slash ed il numero di bit dedicati al prefisso di routing. Ad esempio 192.168.1.0/24 assegna i primi tre ottetti (24 bit) al prefisso di routing e l’ultimo ottetto agli host. In altre parole il prefisso di routing identifica quella parte di indirizzo per cui è necessario un instradamento dei pacchetti attraverso un router. Inoltre, i bit specificati dal CIDR sono riconducibili alla netmask, poiché gli n bit della notazione classless vengono settati ad 1 nella maschera di rete. Per comprendere meglio il concetto facciamo un ulteriore esempio. Prendiamo due reti e assumiamo che gli host appartengano allo stesso dominio di collisione (uno switch o un hub):

  • 192.168.0.0/24 – netmask: 11111111.11111111.11111111.00000000 (255.255.255.0)
  • 192.168.1.0/24 – netmask: 11111111.11111111.11111111.00000000 (255.255.255.0)

Alle due reti sono assegnati 256 IP (28 bit) ciascuna, tra cui 254 usabili per gli host (difatti il .0 è riservato per la rete ed il .255 per il broadcast). Tuttavia, gli host di una rete non saranno in grado di raggiungere gli host dell’altra rete, pur essendo connessi allo stesso dominio di collisione. Ciò è dovuto al fatto che, avendo scelto come prefisso di routing i primi tre ottetti, le due reti risultano totalmente indipendenti e disconnesse l’un l’altra. Dunque, affinché gli host delle due reti possano vedersi, è necessario collegarle ad un router in grado di instradare i pacchetti. Una seconda soluzione consiste nel diminuire di un bit il prefisso di routing, assegnando così a tale porzione 23 bit anziché 24, al fine di formare due sotto-reti:

  • 192.168.0.0/23 – netmask: 11111111.11111111.11111110.00000000 (255.255.254.0)
  • 192.168.1.0/23 – netmask: 11111111.11111111.11111110.00000000 (255.255.254.0)

In questo caso abbiamo i primi 23 bit assegnati al prefisso di routing, mentre i successivi 9 bit per gli host (512 IP). Poiché per ogni ottetto è possibile utilizzare fino a 256 bit, avremo due sotto-reti (192.168.0.0 e 192.168.1.0) in grado di comunicare senza necessità di instradare pacchetti tramite un router.

Cosa accade se si volesse aggiungere un’altra sotto-rete? Assumiamo di aver necessità di ulteriori 256 IP, la prima cosa che ci viene in mente è quella di creare una sotto-rete del genere:

  • 192.168.2.0/23 – netmask: 11111111.11111111.11111110.00000000 (255.255.254.0)

Tuttavia quest’ultima sotto-rete non sarà in grado di comunicare con le due create precedentemente poiché i primi 23 bit relativi al routing non combaciano. Vediamolo in dettaglio trasformando gli indirizzi in binario:

192.168.0.0 = 11000000.10101000.00000000.00000000
192.168.1.0 = 11000000.10101000.00000001.00000000
192.168.2.0 = 11000000.10101000.00000010.00000000

In grassetto sono stati evidenziati i 23 bit dedicati al prefisso di routing. Come è facile notare, i primi 23 bit delle reti 192.168.0.0 e 192.168.1.0 sono identici, viceversa, in 192.168.2.0, l’ultimo bit è 1 anziché 0. Ciò porta ad un differente prefisso di routing, di conseguenza 192.168.2.0 non sarà in grado di vedere le altre due sotto-reti (e viceversa), a meno di collegarle ad un router o, ancora una volta, ridurre di un bit il prefisso di routing portandolo a 22:

  • 192.168.0.0/22 – netmask: 11111111.11111111.11111100.00000000 (255.255.252.0)
  • 192.168.1.0/22 – netmask: 11111111.11111111.11111100.00000000 (255.255.252.0)
  • 192.168.2.0/22 – netmask: 11111111.11111111.11111100.00000000 (255.255.252.0)

Di seguito ulteriori esempi:
100.0.0.8/30 –> 2 bit per host = 4 IP
binario: 01100100.00000000.00000000.00001000/30
netmask: 11111111.11111111.11111111.11111100 (255.255.255.252)
primi 30 bit: 01100100.00000000.00000000.000010

100.0.0.10 appartiene alla sotto-rete 100.0.0.8/30? SI
binario: 01100100.00000000.00000000.00001010
primi 30 bit: 01100100.00000000.00000000.000010 uguali ai primi 30 bit di 100.0.0.8

100.0.0.7 appartiene alla sotto-rete 100.0.0.8/30? NO
binario: 01100100.00000000.00000000.00000111
primi 30 bit: 01100100.00000000.00000000.000001 diversi dai primi 30 bit di 100.0.0.8

100.0.0.7 appartiene difatti alla sotto-rete 01100100.00000000.00000000.000001xx
L’IP iniziale per questa sotto-rete è (xx = 00):
01100100.00000000.00000000.00000100 –> 100.0.0.4
mentre l’IP finale (xx = 11):
01100100.00000000.00000000.00000111 –> 100.0.0.7

Suddivisione in sotto-gruppi
/23 –> 11111111.11111111.11111110.00000000 (255.255.254.0)
primi 23 bit per routing, ultimi 9 bit per host (2 subnet da 256 IP ognuna)

Esempio:
192.168.0.0/23 –> 11000000.10101000.00000000.00000000/23
192.168.1.0/23 –> 11000000.10101000.00000001.00000000/23
primi 23 bit: 11000000.10101000.0000000x.xxxxxxxx

Suddivisione di 192.168.1.0 in due sotto-gruppi indipendenti:
/25 –> 11111111.11111111.11111111.10000000 (255.255.255.128)
primi 25 bit per routing, ultimi 7 bit per host (128 IP)

192.168.1.0/25 –> 11000000.10101000.00000001.00000000/25
netmask 11111111.11111111.11111111.10000000 (255.255.255.128)
primi 25 bit per routing: 11000000.10101000.00000001.0xxxxxxx

192.168.1.128/25 –> 11000000.10101000.00000001.10000000/25
netmask 11111111.11111111.11111111.10000000 (255.255.255.128)
primi 25 bit per routing: 11000000.10101000.00000001.1xxxxxxx

 

subnet calculator online

calcolatrice scientifica online