Indirizzi IP, classi e Subnetting

L'indirizzamento IP permette di identificare ogni host all'interno di una rete TCP/IP. Grazie all'utilizzo delle classi di indirizzi ed al subnetting è possibile organizzare e gestire in modo più efficiente il proprio network.

Un indirizzo IP, chiamato anche indirizzo logico, rappresenta un identificativo software per le interfacce di rete, esso viene utilizzato in combinazione con l'indirizzo fisico (MAC), il quale consente di determinare in modo univoco ogni interfaccia di un dispositivo di rete. Un IP Address è un numero di 32 bit suddiviso in quattro gruppi da 8 bit ciascuno, la forma con la quale viene solitamente rappresentato è detta decimale puntata (Dotted Decimal).

Essendo ogni numero rappresentato da 8 bit, può assumere un range di valori da 0 a 255. Utilizzando 32 bit per indirizzo è possibile avere 4.294.967.296 combinazioni di indirizzi differenti. In realtà esistono alcuni indirizzi particolari, di conseguenza non tutti i valori sono disponibili al fine di identificare un host nella rete.

Un esempio di Ip Address:
         Rete.         Rete.        Rete.          Host
          192.          168.              5.                2 : Rappresentazione decimale
11000000.10101000.00000101.000000010 : Rappresentazione binaria

Questo è un esempio di indirizzo (Classe C) in cui 192.168.5 identifica la rete di appartenenza dell'host 2.

INDIRIZZI SPECIALI: NETWORK, BROADCAST E LOOPBACK
Esistono alcuni particolari indirizzi di rete che non possono essere assegnati per l'identificazione di un host, tra questi abbiamo:  network e broadcast e loopback:
- Network: quando i bit dell'ottetto che rappresenta l'host hanno tutti valore 0, l'indirizzo è detto di rete o Network Address: 192.168.5.0 oppure in binario 11000000.10101000.00000101.00000000;  
- 0.0.0.0: quando tutti i bit hanno valore zero, identificano "questo host";  
- Broadcast: quando i bit del numero che rappresenta l'host hanno tutti valore 1, l'indirizzo è detto di broadcast o broadcast address, e rappresenta tutti gli host di quella rete. Inviare un pacchetto all'indirizzo 192.168.5.255 o in forma binaria 11000000.10101000.00000101.11111111 equivale a mandare un pacchetto a tutti gli host della rete 192.168.5;  
- Broadcast di rete: abbiamo questo tipo di indirizzo quando tutti i bit, sia della parte relativa all'host sia della parte relativa alla rete hanno valore 1. Inviare un pacchetto a 255.255.255.255 o in binario 11111111.11111111.11111111.11111111 significa inoltrarlo verso tutti gli host della rete corrente;  
- Loopback: è utilizzato per funzioni di test del protocollo TCP/IP, non genera traffico di rete e corrisponde all'indirizzo 127.0.0.1;

CLASSI DI INDIRIZZI
Per permettere una migliore organizzazione della rete, gli indirizzi disponibili sono stati suddivisi in classi in base alle dimensioni del network da gestire. In questo modo si verrando utilizzate le classi più adatte ad alla dimensioni della rete, con conseguente minore spreco di ip address. Sono disponibili cinque classi di indirizzi IP, di cui solo le prime tre possono essere utilizzate per assegnare indirizzi agli host.

Indirizzi di classe A
Il valore del primo ottetto è compreso tra 1 e 126 (I primi otto bit di questo indirizzo saranno: 0*****).  
E' rappresentata da indirizzi di tipo: Rete.Host.Host.Host ovvero 8 bit per la identificare la rete (di cui il primo fisso) e 24 per identificare gli host. Permette di ottenere 126 reti formate da 16.774.214 host ciascuna.

Indirizzi di classe B  
Il valore del primo ottetto è compreso tra 128 e 191 (I primi otto bit di questo indirizzo saranno: 10*****).  
E' rappresentata da indirizzi di tipo: Rete.Rete.Host.Host ovvero 16 bit per la identificare la rete(di cui i primi due fissi) e 16 per identificare gli host. E' possibile ottenere 16.384 reti formate da 65.534 host ciascuna.
  
Indirizzi di classe C  
Il valore del primo ottetto è compreso tra 192 e 223 (I primi otto bit di questo indirizzo saranno: 110*****).  
E' rappresentata da indirizzi di tipo: Rete.Rete.Rete.Host ovvero 24 bit per la identificare la rete (di cui i primi tre fissi) e 8 per identificare gli host. E' possibile ottenere 2.097.152 reti con 254 host ciascuna.

Indirizzi di classe D
Il valore del primo ottetto è compreso tra 224 e 239 (I primi otto bit di questo indirizzo saranno: 1110****).  
Sono indirizzi di rete riservati ai gruppi multicast e non assegnabili ai singoli host.

Indirizzi di classe E  
Il valore del primo ottetto è compreso tra 240 e 255 (I primi otto bit di questo indirizzo saranno: 1111****).  
Sono indirizzi riservati per usi futuri.

LE SUBNET MASK
Per il corretto funzionamento di una rete, ogni host deve poter distiguere quale parte dell'indirizzo identifica l'host e quale la rete. Questo può avvenire grazie all'ausilio delle subnet mask (Maschere di sottorete). Per quanto riguarda le classi A B C standard, cioè non ulteriormente suddivise, esistono delle subnet di default:  
- Classe A: Rete.Host.Host.Host ha come subnet 255.0.0.0;  
- Classe B: Rete.Rete.Host.Host ha come subnet 255.255.0.0;  
- Classe C: Rete.Rete.Rete.Host ha come subnet 255.255.255.0;  

Il processo di messa in AND
Per determinare se il destinatario dei propri pacchetti si trova sulla propria sottorete ogni host utilizza la propria maschera di sottorete durante un processo chiamato di messa in AND (ANDing process). Questo processo consiste nel confrontare il risultato dell'operazione di AND (matematica booleana) bit a bit tra il proprio indirizzo e la propria maschera subnet mask con quello tra l'indirizzo del destinatario e la propria subnet mask.  

Avendo un Host A con IP 192.168.0.5 con subnet 255.255.255.0 che vuole inviare dei pacchetti ad un Host B 192.168.0.25 con subnet 255.255.255.0, esso deve determinare se B è sulla stessa sua sottorete:  

Host A: 192.168.0.5  
11000000.10101000.00000101.000000010 : Ip address Host A  
11111111.11111111.11111111.000000000 : Subnet mask Host A  
  
11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit  

Host B: 192.168.0.25  
11000000.10101000.00000101.000011001 : Ip address Host B  
11111111.11111111.11111111.000000000 : Subnet mask Host B  

11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit  

Il risultato è identico, quindi, i due host possono inviarsi direttamente i pacchetti in quanto sulla stessa sottorete. Qualora il processo di AND avesse evidenziato valori diversi, i due host non avrebbero potuto comunicare direttamente, ma sarebbe stato necessario un router tra di essi.

NOTAZIONI  
Esistono due principali notazioni attraverso le quali è possibile indicare un indirizzo IP:  
- Indicando espressamente la subnet mask:  
  49.22.5.3 255.0.0.0 - Classe A;  
  172.16.20.5 255.255.0.0 - Classe B;  
  192.168.15.4 255.255.255.0 - Classe C;  
- Indicando i bit che compongono la subnet mask:  
  49.22.5.3/8 - Classe A;  
  172.16.20.5/16 - Classe B;  
  192.168.15.4/24 - Classe C;  
  
SUBNETTING
L'utilizzo della classe di rete corrispondente alle dimensioni che più si avvicinano a quella che si vuole gestire a volte non è sufficiente. Può essere necessario, dover suddividere la rete in ulteriori sottoreti. Per fare questo è possibile utilizzare la tecnica del subnetting.
Il subnetting di una rete comporta diversi vantaggi:  
- Minor spreco di indirizzi: in quanto è possibile scegliere il numero di host che faranno parte della sottorete;  
- Riduzione del traffico di rete: in quanto si riduce il dominio di broadcast (broadcast domain);  
- Miglioramento delle performance della rete: in conseguenza della riduzione del traffico;  
  
Il subnetting consiste nell'utilizzare alcuni bit "presi in prestito" (borrowed) dalla parte host dell'indirizzo di rete. E' possibile procedere alla suddivisione della rete in sottoreti più piccole tramite lo scheda seguente:  
- Determinare il numero di sottoreti necessarie.  
E' necessario tenere presente che il numero di subnet che si possono creare è dato da 2^x-2 dove x è rappresentato dai bit presi in prestito dalla parte host dell'indirizzo ai quali naturalmente bisogna levare l'indirizzo di broadcast quello di rete non assegnabili. Esempio: utilizzando prendendo in prestito 4 bit, sarà possibile creare 14 sottoreti;  
- Determinare il numero di host per ogni sottorete.  
Questo valore è dato da 2^y-2 dove y è il numero di bit rimasti per la rappresentazione degli host; Esempio: se i bit rimanenti sono 6 si potranno avere sottoreti formate da 62 host l'una;  
- Determinare le subnet valide.  
Questo valore è dato da 256-z, dove 256 dove z rappresenta il valore della subnetmask. Esempio: con una subnetmask di valore 224 avremmo avuto 256-224=32. Questo valore è il valore della prima subnet valida ed è anche la base per le successive, la cui progressione sarà: 32, 64, 96, 128, 160, 192;  
- Determinare gli host validi.  
Sono rappresentati da tutti i valori compresi tra le subnet create togliendo gli indirizzi di broadcast e network;  
- Determinare degli indirizzi di broadcast e network delle subnet.  
Sono gli indirizzi in cui rispettivamente i bit della parte host sono settati a 1(broadcast) e a 0(network);

ESEMPIO SUBNETTING DI UNA RETE DI CLASSE C  
Esaminiamo il caso di una rete con IP 192.168.5.0 che da suddividere in due sottoreti.  
- Deteriminare il numero di sottoreti necessarie.  
Volendo creare 2 sottoreti è necessario utilizzare 2 bit dalla parte host in quanto 2^2-2 = 2. Avremmo quindi una subnetmask di questo tipo 255.255.255.192. E' possibile notare che in binario 192 equivale a 11000000, i primi due bit vengono utilizzati per le subnet ed i restanti 6 per gli host;  
- Determinare il numero di host per ogni sottorete.  
I bit rimasti per gli host sono 6 quindi, abbiamo 2^6-2=62 indirizzi di host validi per sottorete;  
- Determinare le subnet valide.  
Le subnet che si andranno a creare sono due con base data da 256-192=64. Questo significa che la progressione delle subnet valide sarà 64 e 128 ovvero 192.168.5.64 e 192.168.5.128.  
- Determinare gli host validi.  
Gli host validi sono rappresentati dai valori compresi tra le subnet esclusi gli indirizzi di broadcast e di network. Avremo quindi gli indirizzi da 192.168.5.65 a 192.168.5.126 per la prima subnet e 192.168.5.129 a 192.168.5.190 per la seconda;    
- Determinare gli indirizzi di broadcast e network delle subnet.  
Gli indirizzi di rete (bit della parte host settati a zero) saranno 192.168.5.64 per la prima subnet e 192.168.5.128 per la seconda, mentre gli indirizzi di broadcast (bit parte host settati a 1) saranno rispettivamente 192.168.5.127 e 192.168.5.191.

Tabella di riepilogo  
Rete di partenza: 192.168.5.0 255.255.255.0 suddivisa in due sottoreti tramite la subnet 255.255.255.192:  
Subnet 1: 192.168.5.64 in binario 11000000.10101000.00000101.01000000  
Primo indirizzo valido: 192.168.5.65 in binario 11000000.10101000.00000101.01000001  
Ultimo indirizzo valido: 192.168.5.126 in binario 11000000.10101000.00000101.01111110  
Broadcast: 192.168.5.127 in binario 11000000.10101000.00000101.01111111  
Subnet 2: 192.168.5.128 in binario 11000000.10101000.00000101.10000000  
Primo indirizzo valido: 192.168.5.129  in binario 11000000.10101000.00000101.10000001  
Ultimo indirizzo valido: 192.168.5.190 in binario 11000000.10101000.00000101.10111110  
Broadcast: 192.168.5.191 in binario 11000000.10101000.00000101.10111111  
  
Questo procedimento è lo stesso da applicare anche per il subnetting delle classi A e B, con la differenza di poter creare un maggior numero di subnet.

  
INDIRIZZI IP PRIVATI
Alcune classi di indirizzi, definite nella RFC 1918, vengono chiamati privati e sono utilizzati per le reti locali non connesse ad internet:  
Da 10.0.0.0.0 a 10.255.255.255.255  
Da 172.16.0.0 a 172.31.255.255  
Da 192.168.0.0 a 192.168.255.255  

Questi indirizzi non possono essere utilizzati in Internet, e sono riservati per utilizzi in reti interne. Qualora però un host all'interno di un lan si connetta ad internet il suo indirizzo verrà riscritto tramite NAT (Network Address Traslation) da un router od una macchina che fa da gateway verso Internet.