In questo thread vedremo di fare un po' di chiarimento sull'indirizzamento ip. Molti utenti sanno come configurare una rete e sanno quali indirizzi impostare perche` il tutto funzioni, ma come spesso accade si sa cosa fare ma non si sa perche`.
Avrete senz'altro sentito parlare del protocollo TCP/IP. Tralasciando gli aspetti piu` profondi del protocollo, e` bene sottolineare che in realta` si tratta di una suite di protocolli, tra i quali e` incluso l'IP, Internet Protocol, che fra le altre cose si incarica di definire gli indirizzi IP.
Un indirizzo IP e` un identificatore numerico assegnato ad ogni macchina di una rete che supporta il protocollo stesso: a differenza del MAC address di una scheda di rete, ovvero l'indirizzo a 48 bit inserito dal costruttore, l'indirizzo IP e` un indirizzo software, non hardware, e viene assegnato dall'amministratore della rete.
Che bisogno c'e` di usare un indirizzo IP per identificare una macchina? Non e` sufficiente il MAC address? No: tramite il MAC non e` possibile raggiungere una macchina posta fisicamente e/o logicamente su una rete differente. L'indirizzamento IP e` stato ideato per far si` che due macchine possano comunicare indipendentemente dal tipo di rete in cui si trovino.
Prima di poter iniziare a parlare di indirizzamento dobbiamo avere ben chiari i sistemi di numerazione binario ed esadecimale. Internet e` zeppa di guide, una volta assicurati di avere le basi in merito possiamo proseguire nella lettura.
Lo schema gerarchico di indirizzamento
Un indirizzo IP e` formato da 32 bit divisi in 4 sezioni da 1 byte ciascuna chiamate ottetti. Un indirizzo si puo` indicare in uno di questi tre metodi:
decimale puntato: 192.168.10.45
esadecimale: C0.A8.0A.2D
binario: 11000000.10101000.00001010.00101101
Abbiamo visto lo stesso indirizzo rappresentato in tre notazioni differenti. Le notazioni piu` usate sono il decimale e il binario, sebbene sia possibile trovare notazioni in esadecimale memorizzate nei programmi. Ad esempio, Windows memorizza nel registry gli indirizzi di rete in esadecimale.
L'indirizzamento IP sfrutta uno schema gerarchico. Perche`? Si sarebbe potuta utilizzare una notazione sequenziale 1,2,3.. dove a ogni macchina viene assegnato l'indirizzo successivo a quello della macchina che la precede. Il vantaggio di uno schema gerarchico e` semplice: se ogni macchina avesse avuto un indirizzo sequenziale, ogni router al mondo (il dispositivo che si incarica di instradare i dati da una rete all'altra) avrebbe dovuto memorizzare una tabella con tutti gli indirizzi delle macchine del globo per sapere a chi instradare i dati: impensabile. La soluzione stava nel realizzare uno schema a due livelli: rete e nodo, dove per rete si intende la rete logica su cui risiede una macchina, e per nodo la macchina stessa. Per capire meglio pensiamo alla numerazione telefonica: un numero di telefono e` formato da codice dell'area (39 per l'Italia), prefisso (06 per Roma) e numero dell'abbonato. Memorizzare sequenzialmente tutti i numeri del mondo avrebbe richiesto un lavoro spaventoso per le centrali: con la numerazione gerarchica gli apparati di centrale non hanno difficolta` a identificare immediatamente a quale stato e a quale zona corrisponde un abbonato, instradando la comunicazione nella giusta direzione. Ogni indirizzo IP e` formato fondamentalmente da due parti: indirizzo di rete e indirizzo del nodo o indirizzo di host (con quest'ultimo termine spesso si identifica l'intero indirizzo ip).
Indirizzo di rete
Identifica la rete su cui si trova un host: ogni macchina sulla stessa rete condivide l'indirizzo di rete come prima parte del suo indirizzo IP. Ad esempio, nell'indirizzo 192.168.10.45, la rete ha indirizzo 192.168.10.0
Indirizzo del nodo
Identifica il nodo della rete: e` un indirizzo univoco, nel senso che identifica una particolare macchina e non la rete su cui risiede, e all'interno della stessa rete non puo` essere duplicato pena conflitti. Ad esempio, nell'indirizzo 192.168.10.45, il nodo ha indirizzo 45
Le classi di indirizzi
Come abbiamo fatto a stabilire quale parte e` l'indirizzo di rete e quale quello del nodo? Grazie alle classi di indirizzi. Ai tempi venne deciso di creare delle classi a seconda delle dimensioni della rete. Per il protocollo IP versione 4 (IPv4 in breve, quello usato attualmente) esistono 5 classi:
Classe A: da 1.0.0.0 a 126.0.0.0 (primo ottetto per la rete, gli altri per gli host)
Classe B: da 128.1.0.0 a 191.254.0.0 (primo e secondo ottetto per la rete, terzo e quarto per gli host)
Classe C: da 192.0.1.0 a 223.255.254.0 (primi tre ottetti per la rete, l'ultimo per gli host)
Classe D: da 224.0.0.0 a 239.255.255.255 (viene usata per il multicast, un particolare broadcast confinato che non e` attualmente di nostro interesse)
Classe E: da 240.0.0.0 a 254.255.255.255 (inutilizzati, sono riservati a ricerca e sviluppo)
Gli indirizzi riservati
Esistono anche alcuni indirizzi riservati come 0.0.0.0 e 255.255.255.255. Quest'ultimo e` definito indirizzo di broadcast, ovvero l'indirizzo che identifica qualunque host: viene usato per inviare dati a tutti gli host della rete. Originariamente anche 0.0.0.0 veniva considerato come broadcast, poi si decise di usarlo per identificare la rete e non la totalita` degli host in essa compresi. Un altro indirizzo di rete riservato e` il 127.0.0.0 nel quale troviamo l'unico indirizzo 127.0.0.1 che identifica la stessa macchina da cui parte il dato, chiamata anche localhost. Quest'ultimo e` usato spesso per testare la corretta installazione del protocollo IP.
Perche` la divisione in classi
L'indirizzo di esempio 192.168.10.45 e` quindi un indirizzo di classe C, andando a cadere nel range da 192.0.1.0 a 223.255.254.0. Perche` una divisione in classi? Come detto e` dovuta alle diverse dimensioni delle reti da progettare: abbiamo a disposizione all'incirca 16 milioni di host su 126 reti per la classe A, 65000 host su 16000 reti nella classe B e 254 host su 2 milioni di reti nella classe C. Ovviamente per la nostra piccola rete casalinga sceglieremo la classe che da` a disposizione il minor numero di host, ovvero la C, mentre per le reti di medie dimensioni sceglieremo la B e per quelle grandi la A. Schematizziamo la suddivisione in classi appena riportata per capire come si e` arrivati al calcolo del massimo numero di host e reti:
codice:8 bit 8 bit 8 bit 8 bit Classe A: rete host host host Classe B: rete rete host host Classe C: rete rete rete host
Classe A
Consideriamo la classe A: abbiamo 8 bit a disposizione per la rete e 24 per gli host. Gli sviluppatori del protocollo IP stabilirono che il primo bit del primo ottetto (byte) di un indirizzo di classe A doveva sempre essere a zero. Cio` significa che il primo ottetto deve essere cosi` strutturato:
0XXXXXXX, dove X rappresenta 0 oppure 1
Di conseguenza il range di indirizzi per il primo byte e` compreso tra
00000000 = 0
e
01111111 = 127
Esistono pero` due punti fermi: un indirizzo di rete il cui primo ottetto e` composto da soli zeri non e` da considerarsi valido per l'indirizzamento, cosi` come non e` valido per l'indirizzamento un indirizzo di rete che inizia con 127 (fa parte della rete 127.0.0.0 che identifica la rete del localhost). Il range viene cosi` ridotto da
00000001 = 1
a
01111110 = 126
In totale 126 reti. E per gli host? Restano 24 bit, ovvero 24 combinazioni di 0 e 1. Il calcolo dovrebbe risultare 2^24 = 16777216, dove 2 sono i valori che puo` assumere un bit e 24 la quantita` a disposizione, ma anche qui esistono le eccezioni: un indirizzo di host composto da tutti zeri non e` da considerarsi valido (identifica la rete, ad esempio 5.0.0.0 in una classe A), cosi` come non e` valido un indirizzo di host composto da tutti 1 (identifica il broadcast, ad esempio 5.255.255.255 in una classe A). Il calcolo esatto, valido per qualunque classe, e` quindi 2^N-2, dove N e` il numero di bit riservati agli host. Nel caso della classe A avremo 2^24-2, ovvero 16777214 host (per ognuna delle 126 reti). Tornando un attimo indietro sulla quantita` delle reti, vediamo che 126 non e` nient'altro che il risultato di 2^7-2.
Classe B
Per la classe B venne stabilito che i primi 2 bit del primo byte dovessero essere sempre 10, ovvero:
10XXXXXX
che definisce il range da
10000000 = 128
a
10111111 = 191
dallo schema vediamo che per la rete in classe B vengono riservati i primi 16 bit: in realta` non variando mai i primi 2 otteniamo solo 14 combinazioni, per un totale di 2^14-2 = 16382 reti. Per gli host abbiamo 16 bit e il calcolo e` 2^16-2, ovvero 65534 host per ognuna delle 16382 reti.
Classe C
Per la classe C venne stabilito che i primi 3 bit del primo byte dovessero essere sempre 110, ovvero:
110XXXXX
che definisce il range da
11000000 = 192
a
11011111 = 223
dallo schema vediamo che per la rete in classe C vengono riservati 24 bit: ancora una volta, non variando mai i primi 3 otteniamo solo 21 combinazioni, per un totale di 2^21-2 = 2097150 reti. Per gli host abbiamo 8 bit e il calcolo e` 2^8-2, ovvero 254 host per ognuna delle 2097150 reti.
Attenzione a un particolare: abbiamo detto che un indirizzo con tutti 0 identifica la rete e un indirizzo con tutti 1 identifica il broadcast. In realta` occorre considerare solo la parte riguardante gli host. Ad esempio, in classe A avremo 10.0.0.0 che identifica la rete e 10.255.255.255 come l'indirizzo di broadcast della rete suddetta.
Vale a dire che non esiste UN indirizzo di rete e UN indirizzo di broadcast, ma diversi indirizzi di questo tipo a seconda della rete su cui ci si trovi. Un'ultima considerazione: lo IANA (Internet Assignment Numbers Authority) stabili` a sua volta una serie di indirizzi riservati, ovvero una serie di indirizzi che non dovevano essere in alcun modo instradabili su wan (i costruttori di router si sono regolati di conseguenza). Essi sono tutti gli indirizzi che appartengono alle seguenti reti:
10.0.0.0 (classe A)
172.16.0.0 (classe B)
192.168.10.0 (classe C)
Chiaro ora perche` chi vi ha dato una mano a configurare la vostra piccola rete domestica vi ha suggerito di usare indirizzi 192.168.10.X?
Piu` avanti parleremo di subnet mask e del subnetting in genere.