Notazione CIDR e sub-networks

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

If you have found this post useful, please visit the Contribute page

6 Replies to “Notazione CIDR e sub-networks”

  1. domanda: nel caso da lei indicato

    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)

    dice che sono 3 sotto reti.

    ma in realtà non è una rete unica con indirizzo di rete 192.168.0.0/22 ?

    con:
    HostMin 192.168.0.1 11000000.10101000.000000 00.00000001
    HostMax 192.168.3.254 11000000.10101000.000000 11.11111110

    Network 192.168.0.0 11000000.10101000.000000 00.00000000
    Broadcast 192.168.3.255 11000000.10101000.000000 11.11111111

    ?

    Se fossero 3 sottoreti credo che ognuna dovrebbe avere un indirizzo di rete a parte e ogni rete dovrebbe avere anche un indirizzo di broadcast.

    sbaglio?
    se si, le chiedo gentilmente di darmi delucidazioni in merito.

    Grazie.

  2. No, non c’è scritto da nessuna parte che sono 3 sotto-reti. Si parlava di sotto-reti nell’esempio /23, ma nel caso /22 diventa una unica.

  3. Ok perfetto. La ringrazio. Effettivamente mi sono fatto sviare visto che ha sempre “parlato” di aggiungere un’altra sotto rete. Alla fine rimodula il tutto “aggregandole” se si può dire in una unica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.