hartr@interweft.com.au
This document is distributed under the terms of the GNU Public License (GPL).
This document is directly supported by InterWeft IT Consultants (Melbourne, Australia).
Questo documento è distribuito secondo i termini della GNU Public License (GPL).
Questo documento è direttamente supportato da InterWeft IT Consultants (Melbourne, Australia).
La versione aggiornata di questo documento è disponibile presso il sito WWW di InterWeft all'indirizzo InterWeft IT Consultants e presso il The Linux Documentation Project.
Con la progressiva evoluzione del numero degli indirizzi IP verso una specie protetta, è importante fare un uso efficiente di questa risorsa sempre più scarsa.
Questo documento spiega come suddividere un singolo indirizzo di rete IP in modo tale da poter essere usato per molte reti diverse.
Questo documento tratta specificatamente degli indirizzi di rete di classe C, ma allo stesso modo i principi esposti possono essere applicati alle reti di classe A e B.
Vi è un buon numero di risorse informative di una certa rilevanza, sia specifica che di base, a proposito degli indirizzi IP. Quelle che l'autore raccomanda sono:
Prima di immergerci nelle delizie del "sub-networking", abbiamo bisogno di stabilire alcuni concetti base sugli indirizzi IP.
Per prima cosa, eliminiamo la causa di un errore fondamentale - gli indirizzi IP non sono assegnati agli host, ma bensì alle interfacce di rete presenti su un host.
Come? - E cosa sono?
Mentre molti (se non tutti) i computer di una rete IP avranno installata una singola interfaccia di rete (e avranno di conseguenza un singolo indirizzo IP), questo non accade sempre. Computer e altri dispositivi possono avere diverse (addirittura molte) interfacce di rete ciascuna delle quali con il proprio indirizzo IP.
Quindi un dispositivo con 6 interfacce attive (come un router) avrà 6 indirizzi IP - uno per ogni interfaccia connessa a una diversa rete. La ragione di ciò sarà chiara non appena daremo un'occhiata a una rete IP.
A dispetto di questo però, la gran parte della gente parla di indirizzo di questo host quando vuole riferirsi a un indirizzo IP. Ricordate soltanto che si tratta di un modo veloce per indicare l'indirizzo IP di questa interfaccia su questo host. Molti (ma non la maggior parte) dei dispositivi in Internet hanno un'unica interfaccia e quindi un solo indirizzo IP.
Nella loro implementazione corrente (IPv4), gli indirizzi IP consistono di 4 byte - e forniscono un totale di 32 bit di informazione disponibile. Sono numeri piuttosto grandi (anche se espressi in notazione decimale). Così per aumentare la leggibilità (ma anche per ragioni di organizzazione) gli indirizzi IP vengono normalmente scritti con la notazione puntata. L'indirizzo
192.168.1.24
ne è un esempio - 4 numeri (decimali) separati con un punto (.) l'uno dall'altro.
Dal momento che ciascuno dei quattro numeri è la rappresentazione decimale di un byte, ciascuno dei quattro numeri può rappresentare i valori compresi tra 0 e 255 (per un totale di 256 valori diversi - si ricordi cha anche lo zero è un valore).
Una parte dell'indirizzo indentifica la rete a cui un host appartiene, i restanti bit identificano l'host stesso (ehm - l'interfaccia di rete). L'esatta suddivisione tra bit usati per indirizzare la rete e quelli disponibili per identificare gli host (interfacce) in quella rete sono determinati dalla 'classe' della rete.
Esistono tre classi di indirizzi IP
Riassumendo:
Classe della rete Intervallo di valori disponibili
sul primo byte (decimale)
A da 1 a 126
B da 128 a 191
C da 192 a 254
Sono altresì previsti indirizzi speciali riservati alle reti "non connesse"
- reti cioè che usano IP, ma non sono collegate alla Internet.
Questi indirizzi sono:
Sì noterà come questo documento utilizzi queste sequenze di valori per evitare di generare 'confusione' con le reti reali e i loro host.
Gli indirizzi IP possono avere tre differenti significati:
Riassumendo per essere più chiari:
Per una rete di Classe A...
(un byte nello spazio di indirizzamento di rete seguito da tre byte
per lo spazio destinato agli host)
10.0.0.0 è un indirizzo di rete di classe A perché
tutti i bit dello spazio destinato agli host sono 0
10.0.1.0 è un host di quella rete
10.255.255.255.255 è l'indirizzo di broadcast di quella rete
perché tutti i bit dello spazio destinato agli host
sono 1
Per una rete di Classe B...
(due byte nello spazio di indirizzamento di rete seguito da due byte
per lo spazio destinato agli host)
172.17.0.0 indirizzo di classe B
172.17.0.1 un host in questa rete
172.17.255.255 indirizzo di broadcast
Per una rete di Classe C...
(tre byte nello spazio di indirizzamento di rete seguito da un byte
per lo spazio destinato agli host)
192.168.3.0 indirizzo di classe C
192.168.3.42 un host in questa rete
192.168.3.255 indirizzo di broacast
Tutti gli indiriizi di rete IP ancora disponibili per essere utilizzati
oggi sono soltanto indirizzi di classe C.
Una maschera di rete (netmask) è più propriamente chiamata maschera di sottorete. Comunque ci si può generalmente riferire a essa come a una maschera di rete.
È sulla maschera di rete e sulle implicazioni che produrrà nella interpretazione degli indirizzi locali di una rete, che ci concentreremo adesso, dal momento che essa determinerà la realizzazione stessa della sottorete.
La maschera di (sotto)rete standard è costituita da tutti '1' nei bit relativi alla rete e da tutti '0' nei bit relativi agli host. Questo significa che le maschere standard per le tre classi di rete sono:
Vi sono due aspetti importanti da ricordare a questo proposito:
Una sottorete rappresenta un modo per prendere un singolo indirizzo di rete IP e suddividerlo localmente in maniera tale che questo stesso indirizzo possa essere utilizzato su diverse reti locali interconnesse. Si ricordi che un singolo indirizzo di rete IP può essere usato soltanto per una rete.
La parola chiave è locale: per tutto quanto riguarda il mondo che sta all'esterno rispetto alla macchine e alle reti fisiche coinvolte nell'operazione di realizzazione delle sottoreti a partire da un'unica rete IP, nulla è cambiato - il tutto viene visto ancora come un'unica rete IP. Questo concetto è importante - il "sub-networking" è una configurazione locale ed è invisibile al resto del mondo.
La ragione che sta dietro a questa soluzione risale alla prime caratteristiche di IP - quando una manciata di siti utilizzavano indirizzi di classe A permettendo a milioni di host di connettersi ad essi.
È evidente che si presenterebbero enormi problemi di traffico e di amministrazione se tutti i computer di un grande sito dovessero essere connessi alla stessa rete: provare a gestire un tale mostro sarebbe un incubo e la rete potrebbe (quasi certamente) collassare sotto il carico del suo stesso traffico (saturazione).
Adottando il "sub-networking": la rete di Classe A può essere suddivisa in diverse (anche molte) reti separate, l'amministrazione delle quali può facilmente a sua volta essere ripartita.
Questo consente di realizzare piccole reti, facilmente gestibili - in grado anche, in una certa misura, di utilizzare tecnologie differenti. Si ricordi che non si possono mescolare Ethernet, Token Ring, FDDI, ATM ecc sulla stessa rete fisica - ma possono sempre essere interconnesse.
Altre ragioni per usare le sottoreti sono:
Avete deciso di suddividere il vostro indirizzo di rete IP per usarlo in tante sottoreti, come potete fare? Di seguito sono elencati i passi salienti da compiere, che verrano spiegati in dettaglio più avanti:
Per i propositi di questo esempio si assumerà di disporre di una rete classe C, il cui unico indirizzo è: 192.168.1.0
Questa classe ci rende disponibili fino a un massimo di 254 interfacce (host), più l'indirizzo di rete (192.168.1.0) e l'indirizzo di broadcast (192.168.1.255).
Avrete bisogno di installare le corrette infrastrutture di cablaggio per interconnettere tutti i dispositivi previsti in modo compatibile con la struttura fisica del sito.
Avrete bisogno di approntare dei meccanismi per connettere insieme i vari segmenti (router, convertitori per mezzi diversi ecc.)
Una discussione dettagliata di questi aspetti è ovviamente impossibile in questa sede. Se doveste averne bisogno esistono consulenti che offrono proprio questo tipo di servizio di progettazione e installazione di reti. È anche disponibile dell'aiuto gratuito in un certo numero di newsgroup (si veda comp.os.linux.networking).
Il numero di possibili sottoreti che si possono creare si scontra con un certo numero di indirizzi IP 'sprecati' come conseguenza di questa operazione.
Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host - l'indirizzo di rete in sè e l'indirizzo di broadcast. Quando si creano delle sotoreti, ciascuna di esse ha bisogno che le venga riservata una coppia di questi indirizzi - essi devono essere numeri validi all'interno dell'intervallo di indirizzi relativo a ciascuna sottorete.
Quindi, suddividendo un rete in due sottoreti separate troveremo due indirizzi di rete e due indirizzi di broadcast - con la conseguenza di aumentare il numero degli indirizzi 'inutilizzabili' per le interfacce (host); creando 4 sottoreti gli indirizzi che si "perdono" diventano otto, e così via.
Il limite minimo nelle dimensioni di una sottorete consta di 4 indirizzi IP:
Perché poi si voglia realizzare una rete tanto piccola è un'altra questione! Con un singolo host tutto il traffico deve dirigersi verso un'altra rete. In ogni caso l'esempio è utile per comprendere gli effetti della diminuzione degli indirizzi utili, nella creazione di sottoreti.
Inizialmente l'indirizzo IP a disposizione può essere suddiviso in 2^n (n rappresenta il numero di bit a disposizione degli host nell'indirizzo, diminuito di uno) indirizzi di sottorete di uguali dimensioni (una sottorete potrà essere poi ulteriormente suddivisa).
Si deve cercare di essere pragmatici durante la progettazione - è opportuno stimare il numero minimo di singole sottoreti che sia consistente con i vincoli fisici, di gestione, tecnologici e di sicurezza.
La maschera di sottorete è l'oggetto magico che consente la suddivisione locale di una rete in sottoreti multiple.
La maschera di rete, se non vi sono suddivisioni è semplicemente realizzata ponendo a '1' tutti i bit dello spazio di indirizzamento di rete e a '0' tutti i bit destinati agli host.
Quindi, per le tre classi, avremo le seguenti maschere standard:
Il modo con cui si realizza una sottorete è chiedere in prestito uno o più bit allo spazio degli host e fare in modo che le interfacce interpretino localmente questi bit presi in prestito come parte dei bit relativi allo spazio di rete. Allora, per ottenere due sottoreti chiederemo un bit allo spazio degli host mettendo a '1' il bit appropriato nella maschera di rete.
Per un indirizzo di classe C, questa sarà la maschera di rete:
Per la rete di classe C del nostro esempio (192.168.1.0), quelle di seguito sono alcune delle soluzioni possibili:
No di sottoreti Host Rete Maschera ----------|--------|---------------|------------------------------------- 2 126 255.255.255.128 (11111111.11111111.11111111.10000000) 4 62 255.255.255.192 (11111111.11111111.11111111.11000000) 8 30 255.255.255.224 (11111111.11111111.11111111.11100000) 16 14 255.255.255.240 (11111111.11111111.11111111.11110000) 32 6 255.255.255.248 (11111111.11111111.11111111.11111000) 64 2 255.255.255.252 (11111111.11111111.11111111.11111100)
Non vi è nessuna ragione di principio che obblighi a procedere secondo questa tecnica in cui i bit della maschera di rete sono aggiunti a partire dal bit più significativo degli host procedendo verso il meno significativo. Però se non si fa così gli indirizzi che risulteranno saranno molto strani, rendendo a noi umani la vita difficile nel determinare a quale sottorete appartenga un particolare indirizzo, visto che non siamo abili a pensare in numeri binari (i computer invece trattano e tratteranno qualunque schema verrà loro sottoposto con definita equanimità).
Una volta decisa la maschera di rete, si deve lavorare sugli indirizzi di rete e di broadcast - e sugli intervalli di indirizzi resisi disponibili a questo punto, per ciascuna sottorete. Ancora, considerando solo una rete di Classe C, elenchiamo soltanto la parte finale dell'indirizzo:
Netmask Subnets Network B'cast MinIP MaxIP Hosts Total Hosts -------------------------------------------------------------------------- 128 2 0 127 1 126 126 128 255 129 254 126 252 192 4 0 63 1 62 62 64 127 65 126 62 128 191 129 190 62 192 255 193 254 62 248 224 8 0 31 1 30 30 32 63 33 62 30 64 95 65 94 30 96 127 97 126 30 128 159 129 158 30 160 191 161 190 30 192 223 193 222 30 224 255 225 254 30 240
Come si può vedere, c'è una sequenza perfettamente definita in questi numeri che li rende piuttosto facili da verificare. La parte 'spiacevole' della realizzazione delle sottoreti è visibile nei termini di una riduzione del numero degli indirizzi disponibili per gli host, a mano a mano che si aumenta il numero delle sottoreti.
Con le informazioni fino a qui accumulate si può procedere ad assegnare host, indirizzi di rete e maschere di rete.
Se utilizate Linux su un PC con due interfacce di rete come router tra due (o più) sottoreti, dovrete verificare che il kernel supporti l'IP Forwarding. Lanciate un comando di questo tipo:
cat /proc/ksyms | grep ip_forward
Dovreste ottenere qualcosa del genere...
00141364 ip_forward_Rf71ac834
Se non accade significa che il supporto per l'IP forwarding non è disponibile e dovrete ricompilare e reinstallare il kernel riconfigurato.
Per il nostro esempio, facciamo l'ipotesi che si voglia suddividere l'indirizzo di classe C 192.168.1.0 in 4 sottoreti (ognuna dele quali disponga di 62 indirizzi liberi per le interfacce). Poi due di queste sottoreti si vuole che siano riaccorpate a costituire un'unica rete più grande, ottenendo così fisicamente tre reti.
Si avrà:
Rete Broadcast Maschera Hosts 192.168.1.0 192.168.1.63 255.255.255.192 62 192.168.1.64 192.168.1.127 255.255.255.192 62 182.168.1.128 192.168.1.255 255.255.255.126 124 (see note)
Nota: la ragione per la quale l'ultima rete ha soltanto 124 indirizzi utili (invece di 126 come ci si sarebbe aspettati) sta nel fatto che essa è una 'super rete' composta di due sottoreti. Gli host delle altre due reti interpreteranno 192.168.1.192 come indirizzo di rete della sottorete 'non esistente'. E 192.168.1.191 come indirizzo di broadcast della sottorete 'non esistente'.
Quindi, se si utilizzasse 192.168.1.191 o 192 come indirizzi di host sulla terza rete, le macchine delle sottoreti più piccole non sarebbero in grado di comunicare tra loro.
Ciò mette in evidenza un aspetto importante della questione - gli indirizzi utilizzabili sono determinati dalla sottorete PIÙ PICCOLA in un determinato spazio di indirizzamento.
Si assuma che un computer con un sistema Linux agisca come router per questa sottorete. Esso avrà tre interfacce di rete per le LAN e, con ogni probabilità una quarta interfaccia verso Internet (che rappresenterà il suo instradamento predefinito - dafault route).
Facciamo l'ipotesi che la macchina Linux utilizzi il più basso degli indirizzi IP disponibili in ciascuna sottorete per ognuna delle proprie interfacce. La configurazione di rete sarà del tipo seguente:
Interfaccia Indirizzo Maschera eth0 192.168.1.1 255.255.255.192 eth1 192.168.1.65 255.255.255.192 eth2 192.168.1.129 255.255.255.128
L'instradamento (routing) che Linux predisporrà potrà essere:
Destinazione Gateway Maschera Iface 192.168.1.0 0.0.0.0 255.255.255.192 eth0 192.168.1.64 0.0.0.0 255.255.255.192 eth1 192.168.1.128 0.0.0.0 255.255.255.128 eth2
Su ciascuna sottorete, gli host dovrebbero essere configurati con il proprio indirizzo IP e la maschera relativa alla rete cui appartengono. In ciascun host verrà dichiarato come suo gateway/router il PC Linux con l'indirizzo che esso ha nella sottorete in cui si trova l'host stesso.
Robert Hart Melbourne, Australia March 1997.