giovedì, Novembre 21, 2024

La netmask spiegata a mia figlia

Emiliano Bruni
Emiliano Brunihttp://www.ebruni.it/
Responsabile R&D - Micso S.r.l.
Dott. Emiliano Bruni, info/at/ebruni_dot_it
Copyright © 2006 Emiliano Bruni
Ultima modifica: 2006/01/26
Licenza Creative Commons

Documento originale su http://www.ebruni.it/docs/la_netmask_spiegata_a_mia_figlia/

Abstract.

Tra tutti i parametri per l’impostazione dell’accesso alla rete, la netmask è uno tra gli elementi maggiormente circondato da un alone di mistero. Questo documento cerca di spiegare con un linguaggio comprensibile anche ai non addetti ai lavori, cos’è la netmask e in che modo il computer utilizza tale informazione per l’invio dei dati sulla rete.

La famigerata triade: IP, gateway e netmask.

A quasi tutti è capitato, almeno una volta, di imbattersi nel cosi detto indirizzo IP ossia in quella quaterna di numeri, compresi tra 0 e 255, separati da un punto. Magari incuriositi poi da questo oggetto si è ricercato un po’ sulla sulla rete il suo significato fino a scoprire che l’IP altri non è se non l’indirizzo univoco di ogni macchina pubblica su Internet.

L’indirizzo IP è quindi, nel mondo virtuale di Internet, quello che l’indirizzo postale è nella vita di tutti i giorni. Nel mondo reale l’indirizzo postale identifica univocamente un destinatario (e mittente) di una lettera di modo che questa possa giungere all’unico reale destinatario tra tutti i miliardi di possibili destinatari. Nel mondo virtuale l’indirizzo IP identifica univocamente il mittente e il destinatario di un particolare oggetto chiamato pacchetto TCP/IP.



Quindi come una lettera contiene, sulla busta, l’indirizzo postale del mittente e del destinatario, nel mondo del TCP/IP, ogni pacchetto contiene sulla busta, chiamata in questo caso “header”, l’indirizzo IP del mittente e del destinatario.

L’informazione che i due calcolatori vogliono scambiarsi e che, nel mondo reale, farebbe le veci del contenuto della lettera è chiamata, nel mondo dei computer, “payload”.

Quindi due computer per comunicare si scambiano pacchetti TCP/IP contenenti nell’header i loro rispettivi indirizzi IP e nel payload l’informazione vera e propria.

Affinchè tutto questo funzioni senza ambiguità è necessario che l’assegnazione degli indirizzi pubblici di Internet sia univoca e non sia quindi possibile darsi arbitrariamente un indirizzo IP. Infatti, come nella vita reale, anche in quella virtuale non possiamo inventarci un indirizzo ma esso ci viene assegnato.

Una volta in possesso dell’indirizzo IP da assegnare al nostro calcolatore possiamo aprire la schermata relativa alla configurazione della rete. Ma qualunque sia il nostro sistema operativo ci troveremo sempre di fronte ad almeno tre parametri: il già citato indirizzo IP, la netmask e il gateway di default e finchè la configurazione di questi parametri non è corretta e coerente non saremo in gradi di accedere alle risorse di rete.

Ma se nella vita reale, l’indirizzo postale basta per poter spedire e ricevere una lettera, perchè su Internet l’indirizzo IP non è sufficiente?

Come ragiona il computer all’invio di un pacchetto sulla rete.

Per capire perchè il solo indirizzo IP non sia una informazione sufficiente per poter interagire con gli altri calcolatori della rete dobbiamo seguire il processo logico che porta alla creazione di un pacchetto. Consideriamo quindi che il nostro computer S (sorgente) con indirizzo IP, per esempio, 195.32.69.2 debba inviare una informazione a un computer D (destinatario) che per ora identifichiamo con un indirizzo IP generico AAA.BBB.CCC.DDD.

Come detto, l’informazione diventa quindi il “payload” di un pacchetto TCP/IP e viene quindi inserito in una particolare busta TCP/IP. Sulla busta viene messo l’indirizzo del mittente, 195.32.69.2 e quello del destinatario.

Immaginiamo, a questo punto, il calcolatore con la busta in mano che si reca nella cassetta postale più vicina. Ciò che vedremmo, a questo punto, e che esso si trova a dover fare una scelta.

Nel caso reale la cassetta ha due fessure, una per la posta destinata alla propria città e l’altra per tutte le altre destinazioni. La stessa cosa accade nella rete. Il computer deve decidere se la lettera è destinata ad un calcolatore della propria rete locale o se il destinatario è “più lontano”. Inoltre, mentre nel caso reale si può anche commettere un errore e sperare che la lettera venga ugualmente recapitata, nel caso informatico la scelta deve essere esatta.

Ma perchè bisogna fare questa scelta? Perchè il pacchetto va trattato in modo differente a seconda della diversa destinazione. Infatti se il pacchetto è destinato alla rete locale esso può essere già buttato cosi com’è sulla rete in quanto il computer D, ivi in ascolto, vedrà il pacchetto a lui destinato in transito e lo recupererà .

Nel caso in cui il destinatario è remoto, il pacchetto non può essere buttato cosi com’è sulla rete in quanto D non è in ascolto su di essa. Il pacchetto, in quest’ultimo caso, va modificato per essere dato in pasto ad un particolare calcolatore della rete locale, il gateway di default. Ed ecco quindi che fa la sua comparsa il secondo parametro fondamentale della configurazione della rete.

Il gateway identifica l’accesso al mondo esterno ed è il a sapere come raggiungere il resto di Internet ed è dunque a esso che dobbiamo inviare il pacchetto affinchè venga correttamente inoltrato a D. Allora senza una corretta configurazione del gateway di default potremmo magari raggiungere correttamente i nostri calcolatori locali ma il resto del mondo ci sarebbe interdetto.

Una volta chiarito quindi il perchè della necessità della scelta, bisogna chiarire il come. Come fa il nostro PC a capire se il destinatario è locale o è remoto? Nel mondo reale il processo deduttivo sarebbe semplice:

S abita nella città X. D abita nella città X?

Se la risposta a questa domanda è positiva allora la lettera va inviata nella fessura per la stessa città altrimenti va imbucata nell’altra. Nel caso virtuale la domanda è simile:

S si trova nella rete X. D si trova nella rete X?

Il risultato positivo o negativo di questa domanda decide il modo con cui il pacchetto va inviato, se ad un computer locale o al gateway di default.

La netmask risolve il problema di cosa è locale e cosa è remoto.

La domanda a cui dobbiamo quindi saper rispondere contiene però ancora una incognita. S ha indirizzo IP 195.32.69.2 ma cosa si intende per rete X?

Per calcolare la rete X non basta la conoscenza del solo indirizzo IP. Anche se i più scaltri potrebbero rispondere che la rete a cui l’indirizzo IP 195.32.69.2 appartiene è la rete 195.32.69.0 e questa risposta è spesso quella giusta, nel mondo dei calcolatori non basta azzeccarci spesso, bisogna azzeccarci sempre.

Avrete sicuramente capito che per ricavare l’indirizzo di rete a cui un indirizzo IP appartiene c’è bisogno di conoscere la netmask. La netmask, identificando la rete a cui un indirizzo IP appartiene, identifica cosa è locale e cosa è remoto. Inoltre l’identificazione di cosa è locale da anche una visualizzazione di qual’è l’intervallo di indirizzi IP locali e quindi di quanto è o può essere grande la nostra rete nel senso del numero di calcolatori che essa può contenere.

Un po’ di matematica binaria.

Ora non dobbiamo spaventarci ma per capire in che modo dalla conoscenza dell’indirizzo IP e della netmask derivi l’indirizzo della rete dobbiamo addentrarci un po’ in un mondo formato da zeri e uno, il mondo della matematica binaria.

Iniziamo a conoscere questo mondo facendo la conoscenza con i due attori principali, Mr. UNO e Mr. ZERO. Grazie a questi due simboli è possibile definire qualsiasi numero e quello che ci apprestiamo a fare ora è di vedere come questa cosa, a prima vista cosi strana, possa funzionare.

Nel sistema di numerazione che noi tutti conosciamo entrano in gioco dieci simboli con cui scriviamo tutti i numeri. Questi dieci simboli sono:

0 1 2 3 4 5 6 7 8 9

che combinati insieme con una logica detta posizionale ci permettono di scrivere un qualsiasi numero. Per cosa sta l’aggettivo “posizionale”? Cerchiamo di capirlo con un esempio. Quando vogliamo scrivere l’anno di nascita del sottoscritto mettiamo uno di fianco all’altro i seguenti simboli

1 9 6 9

La nostra percezione di questa sequenza di cifre è una percezione posizionale nel senso che questo modo di scrivere da un peso differente alle singole cifre coinvolte cosi che il numero 9 in seconda posizione da sinistra non ha lo stesso valore dell’altro 9.

Ogni posizione a sinistra di un altra “pesa” dieci volte di più di quella a destra e quindi presi i numeri sopra da destra si avrà che quel numero indica nove volte uno più sei volte dieci più nove volte cento più una volta mille. E’ questo e solo questo che indichiamo quando scriviamo “1969”.

Posizione 3 2 1 0
Fattore moltipl. 103 102 101 100 in potenze
Fattore moltipl. 1000 100 10 1 in valore
Cifre 1 9 6 9

Dieci simboli, incremento posizionale di potenze di dieci, tutto questo ripetersi del valore dieci da il nome al nostro sistema numerico chiamato “decimale”.

Usualmente si dice che il fatto di avere un sistema decimale deriva dal fatto che abbiamo dieci dita e quindi l’utilizzo di dieci simboli è solo una convenzione ed è in realtà possibile utilizzare un numero arbitrario di simboli per scrivere i numeri. In realtà , il cosi detto sistema binario formato appunto dai soli simboli

0 1

ricopre un’importanza fondamentale nel mondo dei calcolatori in quanto il calcolatore, lavorando con correnti o campi magnetici è solo in grado di rilevare la presenza o l’assenza di uno di questi campi in un elemento di memoria e la rilevazione o meno di tali campi viene associata alla lettura nella cella di memoria di un uno o di uno zero.

Ma visto che il nostro cervello è assuefatto al sistema decimale, vediamo innanzitutto come si costruisce una corrispondenza tra i primi numeri del sistema decimale e di quello binario.

Lo zero e l’uno sono ovviamente uguali in tutte e due i sistemi. Con il due abbiamo il primo intoppo. Mentre nel sistema decimale esiste un simbolo unico che identifica univocamente tale valore, nel sistema binario abbiamo già esaurito tutti i numeri esprimibili con una sola cifra e quindi dobbiamo passare a due cifre. Come nel caso decimale in cui dopo il nove viene il dieci, anche nel caso binario, dopo l’1, si passa a dover usare due cifre e quindi il corrispettivo binario del due decimale e’ il 10. Il tre decimale sarà l’11 binario e con il quattro abbiamo finito anche tutti i modi di esprimere in binario un numero con due cifre e quindi passiamo a tre e dunque il quattro decimale e’ il 100 binario.

Riassumendo e estendendo queste associazioni, indicando con il pedice il tipo di numerazione relativa, si avrà che

10 => 02, 110 => 12,
210 => 102, 310 => 112,
410 => 1002, 510 => 1012, 610 => 1102, 710 => 1112,
810 => 10002, 910 => 10012, 1010 => 10102, 1110 => 10112,
1210 => 11002, 1310 => 11012, 1410 => 11102, 1510 => 11112,

Ovviamente anche il sistema binario è posizionale e, come nella numerazione decimale una posizione a sinistra è dieci volte maggiore di quella a destra, analogamente nel sistema binario, una posizione a sinistra è due volte maggiore di quella a destra per cui, per esempio, 1001112 significa, partendo da destra, una volta uno più una volta due più una volta quattro più una volta trentadue e quindi 3910.

Posizione 5 4 3 2 1 0
Fattore moltipl. 25 24 23 22 21 20 in potenze
Fattore moltipl. 32 16 8 4 2 1 in valore
Cifre 1 0 0 1 1 1

Bene, ora che conosciamo il punto di vista del calcolatore riguardo ai numeri, siamo in grado di guardare l’indirizzo IP da un nuovo punto di vista mettendoci nei panni di un computer.

Quando noi esseri umani diciamo che un calcolatore ha l’indirizzo 195.32.69.2 quello che il computer vede sono quattro sequenze di otto simboli binari separati da un punto. Ogni simbolo binario 0,1 viene chiamato in gergo “bit” e otto bit vanno a formare un nuovo elemento chiamato “byte”. Quindi l’indirizzo IP può essere visto come una sequenza di 4 byte o, il che è la stessa cosa, di 32 bit.

Perchè abbiamo detto che ogni elemento della sequenza è formato proprio da 8 bit? Perchè abbiamo già detto che i numeri separati dal punto possono andare da 0 a 255 e 255 in binario è

27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1

Che questo è proprio il valore che rappresenta 255 in binario lo si vede senza dover sommare tutti i termini sopra con un semplice trucchetto. Preso il numero

28 27 26 25 24 23 22 21 20
256 128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 0 0

che è il successivo del numero sopra si ha che questo è 28 = 256 in decimale e quindi il numero sopra è 28-1 ossia proprio 255.

A questo punto, per puro diletto mostriamo il nostro indirizzo IP usato nell’esempio dal punto di vista del sistema binario

1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 0
195 32 69 2

Gia che ci siamo, scriviamo anche la netmask 255.255.255.0 in formato binario. Questa è molto semplice visto che abbiamo appena visto qual’è la rappresentazione binaria del numero 255 per cui

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
255 255 255 0

Ma perchè ci siamo infilati in tutte queste sfilze di uno e zeri chilometriche? Perchè grazie a queste siamo ora in grado di introdurre l’operatore che ci permetterà di calcolare la rete conoscendo l’indirizzo IP e la netmask.

Facciamo quindi la conoscenza con l’operatore “AND”. Cosa possiamo dire di questo operatore?

Beh, innanzitutto che esso è un operatore binario ossia è una operazione matematica che va applicata a numeri binari e che esegue una qualche trasformazione sulle cifre binarie del numero trasformandole in qualcos’altro.

Il tipo di trasformazione viene definita a parole in questo modo: l’AND tra due cifre binarie da come risultato 1 se e solo se tutte e due le cifre sono 1 altrimenti il risultato è 0.

Visto che le possibili combinazioni di due cifre binarie sono solo quattro è possibile scrivere il funzionamento dell’operatore AND elencando tutti i possibili casi e quindi scrivendo che:

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1

Un modo equivalente per esprimere il funzionamento dell’operatore AND è dire che applicandolo a un qualsiasi cifra binario e allo 0 da come risultato 0 mentre applicandolo con il numero 1 da la stessa cifra binaria.

Calcoliamo la netmask.

Bene, ora abbiamo tutti gli strumenti per definire e calcolare la rete a cui appartiene un dato indirizzo IP. La rete di un indirizzo IP è il risultato dell’operatore AND applicato all’indirizzo stesso e alla sua netmask quindi, nel caso specifico, esprimendo per brevità , per ora i due elementi ancora in notazione binaria sarà il risultato dell’operazione

rete X = 195.32.69.2 AND 255.255.255.0

Si vede subito che, in questo caso, il calcolo è molto semplice. Iniziamo infatti ad applicare l’operatore AND sul primo byte dell’indirizzo IP e della netmask per ottenere il primo byte dell’indirizzo di rete

19510 AND 25510= 110000112 AND 111111112

Ma, per quanto detto sopra, l’operatore AND tra un qualsiasi numero binario e 1 è il numero binario stesso e quindi

19510 AND 25510= 110000112 AND 111111112= 110000112 = 19510

e si vede quindi subito che il risultato dell’AND sui primi tre byte dell’indirizzo IP sono gli stessi 3 byte iniziali. Andando a calcolare il quarto byte della rete il cui valore è il risultato dell’operazione

210 AND 010= 000000102 AND 000000002

che, per quanto detto prima ossia che l’operazione di AND tra un qualsiasi numero e zero da sempre zero ci porta a concludere che

210 AND 010= 000000102 AND 000000002= 000000002= 010

Quindi siamo giunti al risultato definitivo. La rete a cui appartiene l’indirizzo IP 195.32.69.2 con netmask 255.255.255.0 è la rete 195.32.69.0.

Quali sono quindi gli indirizzi IP locali al nostro computer S? Per come abbiamo fatto i conti sopra si vede subito che sono tutti gli indirizzi della forma 195.32.69.x in quanto, per ogni x il suo AND con zero sarà sempre zero e quindi la rete sarà sempre quella sopra e quindi la stessa di S.

Allora siamo ora in grado di decidere se il nostro pacchetto tra S e D va inoltrato tramite il gateway di default o è per un IP locale. Se AAA.BBB.CCC.DDD è della forma 195.32.69.x allora la busta è destinata ad un computer da ricercare direttamente sulla rete locale, altrimenti va inviato al gateway di default per l’instradamento su Internet.

A questo punto qualcuno potrebbe pensare che il calcolo dell’indirizzo di rete sia banalmente fatto ponendo a zero l’ultimo byte dell’indirizzo IP. Ma questo non è vero e lo è solo e soltanto se la netmask è quella finora usata ad esempio.

Vediamo di chiarire questo con un ulteriore esempio. Prendiamo una comunicazione che coinvolge due calcolatori con indirizzo 195.32.68.2 e 195.32.69.2. Questi appartengono o no alla stessa rete? Pensateci bene un attimo prima di rispondere….

La risposta è che….dipende. Dipende dalla netmask assegnata. Se la netmask è quella considerata finora allora avrete azzeccato la risposta che, per quanto detto sopra, è ovviamente negativa. Ma vi faccio vedere che spesso conviene fare i conti almeno finchè non si è presa un po’ di dimestichezza e di manualità con gli IP e le netmask.

Consideriamo i due IP sopra ma consideriamo altresଠche sia stata loro assegnata un’altra netmask, 255.255.254.0, e calcoliamo di nuovo la rete a cui i due IP appartengono.

Per il primo indirizzo si ha che

195.32.68.2 AND 255.255.254.0 = 195.32.xxx.0

in quanto, non essendoci mai capitato il calcolo 68 AND 254 non sappiamo a priori quanto faccia. Eseguendo si ha che

6810 = 010001002 , 25410 = 111111102 e quindi

0 1 0 0 0 1 0 0 AND
1 1 1 1 1 1 1 0 =
0 1 0 0 0 1 0 0

e dunque il risultato è di nuovo 6810 e dunque la rete a cui appartiene l’indirizzo 195.32.68.2 con netmask 255.255.254.0 sembra verificare ancora la regola empirica vista sopra ossia da come risultato la rete 195.32.68.0.

Vediamo ora la rete dell’altro indirizzo. Di nuovo, l’unico calcolo che non abbiamo mai eseguito e’ 69 AND 254 ed essendo

6910 = 010001012 si ha che

0 1 0 0 0 1 0 1 AND
1 1 1 1 1 1 1 0 =
0 1 0 0 0 1 0 0

ed ecco la sorpresa 6910 AND 25410 = 6810!!! Per cui entrambi gli indirizzi IP appartengono alla stessa rete 195.32.68.0 e quindi sono indirizzi che appartengono a due calcolatori della stessa rete locale.

Quindi, se la netmask è 255.255.255.0 allora 195.32.68.2 e 195.32.69.2 appartengono a due reti differenti e i calcolatori si manderanno i pacchetti tramite i loro rispettivi gateway ma se la netmask è 255.255.254.0 allora il calcolatore manderà la busta direttamente sulla rete locale aspettandosi che l’altro sia direttamente connesso ad essa.

In definitiva possiamo dunque affermare che la netmask è un elemento discriminante per decidere cosa è locale e cosa è remoto e la domanda a quale rete appartiene un indirizzo IP è mal posta se non si specifica anche la netmask ad esso assegnata.

Netmask notevoli.

Elenchiamo ora alcuni casi notevoli.

La netmask 255.255.255.0 detta classe C, quella vista sopra, che ha indirizzi disponibili per 28-2 calcolatori (sottraggo due perchè uno è l’indirizzo di rete inusabile e l’altro è un altro indirizzo particolare che tutte le reti debbono avere chiamato indirizzo di broadcast) ossia 254 indirizzi usabili per assegnare ai calcolatori della rete

La netmask 255.255.255.192 che divide una classe C in quattro sottoreti di 26-2 =62 calcolatori

La netmask 255.255.255.128 che divide una rete di 256 indirizzi in due sottoreti di 27-2 =126 calcolatori

La netmask 255.255.255.252 è la più piccola rete usabile con 22-2 = 2 indirizzi disponibili, usata spesso nelle punto-punto dove un indirizzo è l’IP di un lato della connessione e l’altro è l’indirizzo dell’altro punto (il terzo è l’indirizzo di rete e il quarto è il sopra citato indirizzo di broadcast)

La netmask 255.255.255.254 è inusabile in quanto anche qui non c’è un IP disponibile 21-2 = 0.

La netmask 255.255.255.255 rappresenta il singolo host in quanto, essendo tutti i bit a 1 da come risultato il solo IP stesso. Relativamente al discorso IP disponibili questo è un caso degenere con cui non si identifica una rete ma l’indirizzo del computer stesso.

La netmask 255.255.0.0 detta classe B che ha indirizzi locali disponibili per 216-2 calcolatori formata quindi da 256 classi C.

La netmask 255.0.0.0 detta anche classe A ha indirizzi locali disponibili per 224-2 calcolatori formata da 256 classi B.

La netmask 0.0.0.0 che è un altro caso “degenere” in quanto essa rappresenta l’intero spazio degli indirizzi IP. In moltissimi casi in cui infatti è necessario intendere la frase “qualsiasi indirizzo” si usa infatti la notazione 0.0.0.0/0.0.0.0.

Più in generale la netmask si scrive iniziando a mettere simboli “1” partendo da destra e mettendone tanti quanti ne servono a formare lo spazio di indirizzi IP che si intende utilizzare nella rete locale.

Quindi la netmask non può assumere tutte le forme possibili utilizzando quattro sequenze di numeri da zero a 255 ma solo le seguenti forme

g1.g1.g1.g1
g1.g1.g1.g2
g1.g1.g1.g3
g1.g1.g2.g3
g1.g1.g3.g3
g1.g2.g3.g3
g1.g3.g3.g3
g2.g3.g3.g3
g3.g3.g3.g3

dove

g1) 255
g2) 254, 252, 248, 240, 224, 192, 128
g3) 0

Dedica

Questo documento è dedicato a mia figlia Benedetta con la speranza che, quando verrà il momento, apprezzi lo sforzo da me fatto per tentare di rendere un argomento ostico il più semplice possibile e possa rimanere affascinata dall’armonia e dal rigore che pervade il mondo del TCP/IP.

Un grazie a zaker per la nota sulle forme possibili che una netmask può assumere e per aver trovato alcuni errori che mi erano sfuggiti anche dopo 255.255.255.0 revisioni :-D.


This wiki code has been generated with I love wiki, an HTML to wiki syntax converter

Leggi anche: “La netsmask spiegata a mia figlia, seconda parte

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie