Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Gli indirizzi IP e la comunicazione tra host

Un Indirizzo IP è un numero che identifica in modo univoco un dispositivo collegato a una rete informatica basata sullo standard di comunicazione TCP/IP. Gli host possono comunicare con reti diverse grazie agli indirizzi IP, composti da una sequenza di 32 bit suddivisi per convenzione in quattro gruppi di 8 bit.

L’indirizzo IP è più spesso rappresentato in forma decimale, in quattro gruppi sepa­rati da un punto (notazione decimale puntata). Essendo ogni numero rappresentato da 8 bit, esso può assumere un range di valori da 0 a 255 (28 = 256 valori possibili).
Ad esempio, l’indirizzo IP 192.168.2.7 corrisponde in forma binaria all’indirizzo 11000000.10101000.00000010.00000111.

 

Conversione da binario a decimale

Dato il numero binario 10101000, moltiplichiamo ogni cifra per il rispettivo peso (il conteggio del peso parte da zero, da destra verso sinistra):

1 0 1 0 1 0 0 0

0 * (2^0) = 0
0 * (2^1) = 0
0 * (2^2) = 0
1 * (2^3) = 8
0 * (2^4) = 0
1 * (2^5) = 32
0 * (2^6) = 0
1 * (2^7) = 128

Sommando i risultati ottenuti si risale al numero decimale:
128 + 0 + 32 + 0 + 8 + 0 + 0 + 0 = 168

 

Conversione da decimale a binario

Dato un numero decimale, ad esempio 192, dividiamo il numero per 2 e annotiamo il resto (sarà ovviamente 0 oppure 1). Il risultato ottenuto dovrà essere nuovamente diviso per due finché non si otterrà zero come risultato dell'ultima divisione. La sequenza dei resti ottenuti, letta in senso inverso, è il numero in binario.

192/2 = 96 resto 0
96/2 = 48 resto 0
48/2 = 24 resto 0
24/2 = 12 resto 0
12/2 = 6 resto 0
6/2 = 3 resto 0
3/2 = 1 resto 1
1 /2 = 0 resto 1

Pertanto 192 corrisponde al binario 11000000.

Altro esempio, 172 in binario diventa 10101100. Infatti:

172/2 = 86 resto 0
86/2 = 43 resto 0
43/2 = 21 resto 1
21/2 = 10 resto 1
10/2 = 5 resto 0
5/2 = 2 resto 1
2/2 = 1 resto 0
1/2 = 0 resto 1

 

Indirizzi di rete, di broadcast e di loopback

Ogni indirizzo IP può essere scisso in due parti: la prima corrisponde all’indirizzo di rete, la seconda corrisponde all’indirizzo di un host specifico appartenente a quella rete. E’ un pò come il concetto dei numeri telefonici: il prefisso identifica una determinata zona fisica (distretto telefonico), mentre la seconda parte numerica identifica l’apparecchio dell’utente finale.

L'indirizzo di rete si rappresenta ponendo tutti i bit della parte host a 0. Ad esempio, per l'host 192.168.2.7 con maschera 255.255.255.0, abbiamo:

|-----------rete---------||--host-|
11000000.10101000.00000010.00000111 <-> indirizzo IP 192.168.2.7
11111111.11111111.11111111.00000000 <-> subnet mask 255.255.255.0
11000000.10101000.00000010.00000000 <-> rete 192.168.2.0

 

Un indirizzo in cui i bit finali sono tutti 1 è un indirizzo broadcast, ossia un indirizzo per la trasmissione a tutti i nodi di quella sottorete. Ad esempio, è di broadcast l'indirizzo:

forma decimale       192.      168.        2.      255
forma binaria   11000000. 10101000. 00000010. 11111111 

I primi tre ottetti (192.168.2.0) continuano ad identificare la rete, l’ultimo ottetto con i bit  a 1 rappresenta simultaneamente tutti gli indirizzi di quella sottorete.

 

L'indirizzo 127.0.0.1 è invece un indirizzo speciale, detto di Loopback, utilizzato per funzioni di test del protocollo TCP/IP. Non genera traffico di rete e non può essere utilizzato per identificare un host in rete.

 

Il processo di messa in AND

Il meccanismo utilizzato per distinguere la rete prevede l’utilizzo di una maschera di sottorete (subnet mask). Il processo è conosciuto con il nome di messa in AND: consiste nell’abbinare la maschera di sottorete e l'indirizzo IP con l'operatore booleano AND. In pratica la subnet mask copre i bit che descrivono la rete, lasciando liberi i bit che identificano il nodo finale.

192.168.2.7 con subnet mask 255.255.255.0 in forma binaria diventa:

11000000.10101000.00000010.00000111 <-> indirizzo IP 192.168.2.7
11111111.11111111.11111111.00000000 <-> subnet mask 255.255.255.0
11000000.10101000.00000010.00000000
<-> rete 192.168.2.0

L’indirizzo di rete ottenuto è il risultato della messa in AND di ogni bit dell’indirizzo IP con i rispettivi bit della maschera di rete.

A questo punto è necessario introdurre l'algebra booleana e l'alfabeto binario. La logica binaria è composta da due soli valori, 0 e 1, che rappresentano i due stati fondamentali dell’elettronica digitale, ossia vero-falso oppure basso-alto. Le operazioni possibili su tali valori sono quelle di AND, OR, NOT (ci sono poi le derivate NAND, NOR, XOR, XNOR, che non tratteremo). Le seguenti tabelle, dette tabelle di verità, mostrano i risultati di ogni combinazione di due bit che possono assumere valore 0 oppure 1: la funzione AND restituisce 1 se e solo se tutti gli operandi hanno valore 1. La funzione OR restituisce 1 se almeno uno degli elementi è 1. La funzione NOT restituisce il valore inverso di quello in entrata.

tabella_and_or_not.jpg

 

Come gli host utilizzano la messa in AND per comunicare tra loro

Se l’host A con IP 192.168.2.7 e subnet 255.255.255.0 deve comunicare con l’host B 192.168.2.25, anch’esso con subnet 255.255.255.0, deve prima determinare se B è sulla sua stessa sottorete:

  • L'host A mette in AND il suo indirizzo IP e la sua subnet mask,
  • Effettua poi la stessa operazione sull'indirizzo IP dell'host B. Attenzione: in questo punto la messa in AND è tra l'indirizzo IP dell'host B e la subnet mask dell'host A. Quest'ultimo infatti non può sapere qual'è la subnet mask di B.
  • Infine vengono confrontati i due risultati: se identici, A può comunicare con B.

Di seguito i calcoli effettuati da A:

11000000.10101000.00000010.00000111 : indirizzo IP Host A 
11111111.11111111.11111111.00000000 : subnet mask Host A
11000000.10101000.00000010.00000000 : rete 192.168.2.0 (risultato della messa in AND)

11000000.10101000.00000010.00011001 : indirizzo IP Host B
11111111.11111111.11111111.00000000 : subnet mask Host A
11000000.10101000.00000010.00000000 : rete 192.168.2.0 (risultato della messa in AND)


Secondo i calcoli di A, le reti coincidono: A può comunicare con B.

Vediamo i calcoli eseguiti dall'host B, non appena questo deve fornire una risposta ad A:

11000000.10101000.00000010.00011001 : indirizzo IP Host B (192.168.2.25)
11111111.11111111.11111111
.00000000 : subnet mask Host B (255.255.255.0)
11000000.10101000.00000010
.00000000 : rete 192.168.2.0 (risultato della messa in AND)


11000000.10101000.00000010.00000111
: indirizzo IP Host A (192.168.2.7)
11111111.11111111.11111111.00000000 : subnet mask Host B (255.255.255.0)
11000000.10101000.00000010.00000000 : rete 192.168.2.0 (risultato della messa in AND)


Le reti coincidono: B è in grado di fornire risposte ad A.

 

Vediamo ora un caso limite che ci fa comprendere meglio il processo di messa in AND. Consideriamo un Host A 192.168.2.7 con maschera 255.255.255.0 e un Host B 192.168.2.25 con maschera 255.255.255.252 (ossia 30 bit posti a 1):

I calcoli effettuati da A sono i seguenti:

11000000.10101000.00000010.00000111 : indirizzo IP Host A (192.168.2.7)
11111111.11111111.11111111
.00000000 : subnet mask Host A (255.255.255.0)
11000000.10101000.00000010
.00000000 : rete 192.168.2.0 (risultato della messa in AND)


11000000.10101000.00000010.00011001
: indirizzo IP Host B (192.168.2.25)
11111111.11111111.11111111
.00000000 : subnet mask Host A (255.255.255.0)
11000000.10101000.00000010
.00000000 : rete 192.168.2.0 (risultato della messa in AND)


Secondo i calcoli di A, le reti coincidono: A può comunicare con B.

Vediamo invece i calcoli eseguiti da B:

11000000.10101000.00000010.00011001 : indirizzo IP Host B (192.168.2.25)
11111111.11111111.11111111.111111
00 : subnet mask Host B (30 bit posti a 1, 255.255.255.252)
11000000.10101000.00000010
.00011000 : rete 192.168.2.24 (risultato della messa in AND)

11000000.10101000.00000010.00000111 : indirizzo IP Host A (192.168.2.7)
11111111.11111111.11111111.11111100 : subnet mask Host B (30 bit posti a 1, 255.255.255.252)
11000000.10101000.00000010.00000100 : rete 192.168.2.4 (risultato della messa in AND)


Secondo i calcoli di B, le reti NON COINCIDONO.

A è "convinto" che B appartenga alla sua stessa sottorete, ma B non  sarà in grado di fornire risposte ad A. Non ci può essere comunicazione tra i due host.

In linea generale, qualora il processo di messa in AND restituisca valori diversi, i due host non saranno in grado di comunicare in modo diretto. In questo caso è necessario un router che colleghi le due diverse reti, permettendo ai due host la comunicazione.

 

Classi di indirizzi

Le classi di indirizzi IP sono un modo (ma vedremo nel paragrafo successivo che non si usa più) per distinguere e caratterizzare lo spazio di indirizzamento IPv4. L'indirizzamento basato sulla classe, detto Classfull addressing, prevede che si possa determinare la subnet mask in base ai primi bit di un indirizzo IP.

Le classi sono così definite:

Classe A: rappresentata dagli indirizzi IP compresi tra 1.0.0.0 e 127.255.255.255 (0-127.x.x.x). Il primo byte identifica la rete, mentre i tre byte succesivi identificano l'host. In questo modo si possono ottenere 127 reti costituite ciascuna da 16.777.216 host. La maschera di rete è 255.0.0.0, gli indirizzi iniziano tutti con un bit posto a 0.

Classe B: rappresentata dagli indirizzi IP compresi tra 128.0.0.0 e 191.255.255.255 (128-191.0-255.x.x). La rete è identificata dai primi due byte, mentre i due successivi fanno riferimento agli host per un totale di 16.384 reti composte da 65.536 host. La maschera di rete è 255.255.0.0, gli indirizzi iniziano tutti con la sequenza di bit 10

Classe C: rappresentata dagli indirizzi compresi tra 192.0.0.0 e 223.255.255.255 (192-223.0-255.0-255.x). I primi tre byte rappresentano la rete, mentre l'host è identificato solo dall'ultimo byte, per un totale di 2.097.152 reti composte da 256 host. La maschera di rete è 255.255.255.0, gli indirizzi iniziano tutti con la sequenza di bit 110

Classi D ed E: utilizzate per scopi particolari. Gli indirizzi di classe D non identificano né la rete né l'host, bensì un indirizzo multicast: sono quindi utilizzati per le trasmissioni in multicast, dove un solo host trasmette e tutti gli altri ricevono. Gli indirizzi di classe E sono invece destinati ad un utilizzo futuro.

 

tabella_classi

 

 

Classless Inter-Domain Routing (CIDR)

Caratterizzare lo spazio di indirizzamento IP con l'uso delle classi nel tempo si è rivelato troppo rigido; a partire dal 1993 questa modalità è stata abbandonata in favore del Classless Inter-Domain Routing (CIDR), un indirizzamento non più basato sulla classe. Il CIDR consente una gestione ottimizzata ed orientata ad evitare sprechi di indirizzi di rete, sempre più scarsi con il crescere di Internet. Presenta inoltre una più efficiente organizzazione delle tabelle di routing.

La notazione usata per esprimere indirizzi nella modalità CIDR prevede semplicemente di indicare il numero di bit (contati partendo da sinistra) che compongono la parte rete. Ad esempio, l'indirizzo di classe C 192.168.2.7 con maschera di rete 255.255.255.0 diventa semplicemente 192.168.2.7/24.

Con questa notazione, le reti possono essere definite a piacimento, impostando un'opportuna maschera, e ricordando che: ottenuto il numero massimo N di indirizzi disponibili per una rete, gli indirizzi host sono N-2, perchè  il primo  indirizzo rappresenta la rete mentre l'ultimo è di broadcast.

/32 (netmask 255.255.255.255) è un singolo host (32-32 = 0 => 20=1)

/31 (netmask 255.255.255.254) è una rete formata da 2 host (32-31 = 1 => 21=2) ma è inusabile in quanto togliendo l'indirizzo di rete e quello di broadcast non rimangono indirizzi utili.

/30 (netmask 255.255.255.252) è una rete formata da 4 host (32-30 = 2 => 22=4) di cui due usabili; è quindi la più piccola rete usabile, usata spesso nelle punto-punto.

/29 (netmask 255.255.255.248) è una rete formata da 8 host (32-29 = 3 => 23=8) di cui 6 usabili

/12 è una rete formata da 220 calcolatori (32-12 = 20 => 220)

/0 rappresenta l'intero spazio degli indirizzi IP. Nei casi in cui è necessario esprimere il concetto di "qualsiasi indirizzo" si usa infatti la notazione 0.0.0.0/0.0.0.0.

 

Gli indirizzi IP privati

Sono gruppi di indirizzi IPv4 riservati alle reti locali, introdotti per ridurre le richieste di indirizzi pubblici inizialmente utilizzati anche nelle reti locali. Questi indirizzi possono essere impiegati nella propria rete interna nel numero e nelle combinazioni desiderate, perché i pacchetti relativi a tali reti non vengono instradati dai router su internet: pertanto non entreranno mai in conflitto con analoghi indirizzi posti su altre reti locali.

Le classi in questione sono le seguenti e sono state definite nella RFC 1918:

Indirizzo inizialeIndirizzo finaleClasseblocco CIDR
Numero di indirizzi disponibili
10.0.0.0 10.255.255.255 singola classe A 10.0.0.0/8 16.777.216
172.16.0.0 172.31.255.255 16 classi B contigue 172.16.0.0/12 1.048.576
192.168.0.0 192.168.255.255 256 classi C contigue 192.168.0.0/16 65.536

Nel caso occorra connettere ad Internet una rete locale che utilizza queste classi di indirizzi, si deve ricorrere al network address translation (NAT).

 

Notazioni degli indirizzi

Secondo quanto visto sino ad ora, esistono 2 principali notazioni attraverso le quali è possibile indicare un indirizzo IP:

  • la prima, detta notazione decimale puntata, consiste nell'indicare espressamente la subnet mask. Es.: 192.168.2.7 255.255.255.0;
  • la seconda, detta notazione CIDR, consiste nell'indicare il numero di bit della subnet mask che sono posti a 1. Es.: 192.168.2.7/24
(0 Votes)