Nel mondo delle reti informatiche abbiamo sempre sentito parlare di indirizzi IP, ogni dispositivo li utilizza per comunicare in rete.
Gli indirizzi IP sono rappresentati da una sequenza di numeri raggruppati in 4 terzine come ad esempio 192.168.001.001 o 192.168.1.1 con omissione degli zeri nelle ultime due terzine.
Per comprendere cosa si cela dietro questo formato numerico dobbiamo introdurre il concetto di numerazione binaria.
Per poter ragionare in un sistema binario, e non sul decimale a cui siamo abituati (numeri da 0 a 9), dobbiamo utillizzare soltanto due cifre simboliche: 0 e 1. Ebbene sì, i calcolatori riconoscono solo due numeri.
Ogni numero, del classico sistema decimale, può essere rappresentato nel sistema binario, utilizzando una sequenza composta da sole due cifre.
Considerando l'indizzo IP citato pocanzi, andiamo ad analizzarne la struttura.
192. |
168. |
1. |
1 |
11000000 |
10101000 |
00000001 |
00000001 |
|
|||
Un byte= 8 bit |
|
|
|
4 byte = 32 bit |
Nel sistema decimale, ogni cifra all'interno del numero assume un peso differente in ragione della posizione, ad esempio possiamo esprimere il numero 168 come somma di prodotti, in particolare: (1x100)+(6x10)+(8x1). Tale sistema è basato sulle potenze in base dieci, di seguito una tabella esplicativa:
Posizione | III | II | I |
Potenza di 10 |
102 | 101 | 100 |
Valore associato alla potenza |
100 | 10 | 1 |
Cifra | 1 | 6 | 8 |
Per cui la cifra in posizione I ha peso unitario, la cifra in posizione II ha peso 10 volte maggiore rispetto alla precedente e la cifra in posizione III ha peso 100 volte maggiore rispetto alla I.
Il sistema binario è invece basato sulle potenze in base due, in particolare l'IP è composto da 4 gruppi di 8 bit, per cui possiamo seguire lo stesso ragionamento considerando una stringa di 8 cifre (1 byte):
Posizione | VIII | VII | VI | V | IV | III | II | I |
Potenza di 2 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
Valore associato alla potenza |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Cifra | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
La somma dei prodotti tra cifra e valore associato alla potenza restituisce il valore decimale:
(0x1)+(0x2)+(0x4)+(1x8)+(0x16)+(1x32)+(0x64)+(1x128)= 168
Ma come facciamo a passare da numeri decimali a numeri binari?
Vediamolo con un esempio numerico, convertiamo 168 dal sistema decimale al sistema binario.
Nella seguente tabella sono riportati: nella prima riga i valori delle potenze in base 2, nella seconda riga delle differenze e nella terza riga le cifre binarie
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | - | - | - | - | - | - |
Cifra binaria | 1 | - | - | - | - | - | - | - |
Per individuare la prima cifra binaria (VIII posizione) dobbiamo confrontare il numero da convertire (168) con il valore decimale più alto disponibile (128). Se tale numero è maggiore allora inseriremo 1 come cifra binaria, in caso contrario inseriremo 0.
Per determinare la cifra in posizione VII calcoliamo la differenza tra il valore decimale da convertire e 128, la confrontiamo con 64, se tale differenza è maggiore inseriamo 1 come cifra, in caso contrario inseriamo 0.
Nella seconda riga abbiamo effettuato la differenza ottenendo 40 come risultato, tale valore è minore di 64 per cui inseriamo uno 0 in corrispondenza della VII posizione.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | - | - | - | - | - | - |
Cifra binaria | 1 | 0 | - | - | - | - | - | - |
Procediamo con il calcolo della cifra in VI posizione confrontando 40 con 32. Quindi inseriamo 1 in quanto 40 è maggiore di 32.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | - | - | - | - |
Cifra binaria | 1 | 0 | 1 | - | - | - | - | - |
Procediamo con il calcolo della cifra in V posizione confrontando 8 con 16. Quindi inseriamo 0 in quanto 8 è minore di 16.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | - | - | - | - |
Cifra binaria | 1 | 0 | 1 | 0 | - | - | - | - |
Procediamo con il calcolo della cifra in IV posizione confrontando 8 con 8. Quindi inseriamo 1 in quanto 8 è uguale ad 8.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | 8-8=0 | - | - | - |
Cifra binaria | 1 | 0 | 1 | 0 | 1 | - | - | - |
Procediamo con il calcolo della cifra in III posizione confrontando 0 con 4. Quindi inseriamo 0 in quanto 0 è minore di 4.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | 8-8=0 | - | - | - |
Cifra binaria | 1 | 0 | 1 | 0 | 1 | 0 | - | - |
Procediamo con il calcolo della cifra in II posizione confrontando 0 con 2. Quindi inseriamo 0 in quanto 0 è minore di 2.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | 8-8=0 | - | - | - |
Cifra binaria | 1 | 0 | 1 | 0 | 1 | 0 | 0 | - |
Procediamo con il calcolo della cifra in I posizione confrontando 0 con 1. Quindi inseriamo 0 in quanto 0 è minore di 1.
Valore decimale | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Differenza | 168-128=40 | - | 40-32=8 | - | 8-8=0 | - | - | - |
Cifra binaria | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
In definitiva il numero decimale 168 nel sistema binario è esprimibile nel seguente modo: 10101000
In conclusione, quindi, ogni terzina dell'indirizzo IP può assumere valori decimali variabili da 0 a 255.
Valore decimale | 255 | 1 | 0 |
Valore binario | 11111111 | 00000001 | 00000000 |