[>a2117.html>] [<a2115.html<] [^a2.html^]
La funzionalità più importante di un sistema Unix è la possibilità di comunicare attraverso la rete. GNU/Linux, offrendo tutte le caratteristiche di un sistema Unix ben dotato, è un'ottima risposta ai problemi legati alla gestione di una rete.
Prima di iniziare a vedere le particolarità delle reti TCP/IP, tipiche degli ambienti Unix, conviene introdurre alcuni concetti generali.
Il termine rete si riferisce idealmente a una maglia di collegamenti. In pratica indica un insieme di componenti collegati tra loro in qualche modo a formare un sistema. Questo concetto si riferisce alla teoria dei grafi.
Ogni nodo di questa rete corrisponde generalmente a un elaboratore, che spesso viene definito host (elaboratore host), o anche stazione; i collegamenti tra questi nodi consentono il passaggio di dati in forma di pacchetti.
Una rete può essere più o meno estesa; in tal senso si usano degli acronimi standard:
LAN, Local Area Network, rete locale
quando la rete è contenuta nell'ambito di un edificio, o di un piccolo gruppo di edifici adiacenti;
MAN, Metropolitan Area Network, rete metropolitana
quando la rete è composta dall'unione di più LAN nell'ambito della stessa area metropolitana, in altri termini si tratta di una rete estesa sul territorio di una città;
WAN, Wide Area Network, rete geografica
quando la rete è composta dall'unione di più MAN ed eventualmente anche di LAN, estendendosi geograficamente oltre l'ambito di una città singola.
Evidentemente, Internet è una rete WAN.
Le strutture fondamentali delle reti (si parla in questo caso di topologia di rete) sono di tre tipi:
Si ha una rete a stella quando tutti i nodi periferici sono connessi a un nodo principale in modo indipendente dagli altri. Così, tutte le comunicazioni passano per il nodo centrale e in pratica sono gestite completamente da quest'ultimo. Rientra in questa categoria il collegamento punto-punto, o point-to-point, in cui sono collegati solo due nodi.
Si ha una rete ad anello quando tutti i nodi sono connessi tra loro in sequenza, in modo da formare un anello ideale, e ognuno ha un contatto diretto solo con il precedente e il successivo. In questo modo, la comunicazione avviene (almeno in teoria) a senso unico, e ogni nodo ritrasmette al successivo i dati che non sono destinati allo stesso.
Si ha una rete a bus quando la connessione dei nodi è condivisa da tutti, per cui i dati trasmessi da un nodo sono intercettabili da tutti gli altri. In questa situazione la trasmissione simultanea da parte di due nodi genera un collisione e la perdita del messaggio trasmesso.
I dati viaggiano nella rete in forma di pacchetti. Il termine è appropriato perché si tratta di una sorta di confezionamento delle informazioni attraverso cui si definisce il mittente e il destinatario dei dati trasmessi.
Il confezionamento e le dimensioni dei pacchetti dipendono dal tipo di rete fisica utilizzata.
I dati sono un materiale duttile che può essere suddiviso e aggregato in vari modi. Ciò significa che, durante il loro tragitto, i dati possono essere scomposti e ricomposti più volte e in modi differenti. Per esempio, per attraversare un segmento di una rete particolare, potrebbe essere necessario suddividere dei pacchetti troppo grandi in pacchetti più piccoli, oppure potrebbe essere utile il contrario.
In particolare, si parla di incapsulamento quando i pacchetti vengono inseriti all'interno di altri pacchetti, e di tunnel quando questa tecnica viene usata in modo sistematico tra due punti.
A questo punto, dovrebbe essere evidente che il significato del termine pacchetto può avere valore solo in riferimento a un contesto preciso. Sui documenti che trattano delle reti in modo più approfondito, si parla anche di trama e di PDU (Protocol Data Unit), ma in generale, se non c'è la necessità di distinguere sfumature particolari di questo problema, è meglio evitare di usare termini che potrebbero creare confusione.
Il termine datagramma, rappresenta il pacchetto di un protocollo non connesso; per questo non va inteso come sinonimo di pacchetto in senso generale.
I pacchetti di dati vengono trasmessi e ricevuti in base a delle regole definite da un protocollo di comunicazione.
A qualunque livello della nostra esistenza è necessario un protocollo per comunicare: in un colloquio tra due persone, chi parla invia un messaggio all'altra che, per riceverlo, deve ascoltare. Volendo proseguire con questo esempio, si può anche considerare il problema dell'inizio e della conclusione della comunicazione: la persona con cui si vuole comunicare oralmente deve essere raggiunta e si deve ottenere la sua attenzione, per esempio con un saluto; alla fine della comunicazione occorre un modo per definire che il contatto è terminato, con una qualche forma di commiato.
Quanto appena visto è solo una delle tante situazioni possibili. Si può immaginare cosa accada in un'assemblea o in una classe durante una lezione.
La distinzione più importante tra i protocolli è quella che li divide in connessi e non connessi. Il protocollo non connesso, o datagramma, funziona in modo simile all'invio di una cartolina, o di una lettera, che contiene l'indicazione del destinatario ma non il mittente. In tal caso, il protocollo non fornisce il mezzo per determinare se il messaggio è giunto o meno a destinazione. Il protocollo connesso prevede la conferma dell'invio di un messaggio, la ritrasmissione in caso di errore, e la ricomposizione dell'ordine dei pacchetti.
La gestione della comunicazione in una rete è un problema complesso; in passato, questo è stato alla base delle maggiori incompatibilità tra i vari sistemi, a cominciare dalle differenze legate all'hardware.
Il modello OSI (Open System Interconnection), diventato parte degli standard ISO, scompone la gestione della rete in livelli, o strati (layer). Questo modello non definisce uno standard tecnologico, ma un riferimento comune ai concetti che riguardano le reti.
I livelli del modello OSI/ISO sono sette e, per tradizione, vanno visti nel modo indicato nell'elenco seguente, dove il primo livello è quello più basso ed è a contatto del supporto fisico di trasmissione, mentre l'ultimo è quello più alto ed è a contatto delle applicazioni utilizzate dall'utente.
Livello 7 Applicazione
Interfaccia di comunicazione con i programmi (Application Program Interface).
Livello 6 Presentazione
Formattazione e trasformazione dei dati a vario titolo, compresa la cifratura e decifratura.
Livello 5 Sessione
Instaurazione, mantenimento e conclusione delle sessioni di comunicazione.
Livello 4 Trasporto
Invio e ricezione di dati in modo da controllare e, possibilmente, correggere gli errori.
Livello 3 Rete
Definizione delle trame (frame), dell'indirizzamento e dell'instradamento in modo astratto rispetto al tipo fisico di comunicazione.
Livello 2 Collegamento dati (data link)
Definizione dei pacchetti e dell'indirizzamento in funzione del tipo fisico di comunicazione.
Livello 1 Fisico
Trasmissione dei dati lungo il supporto fisico di comunicazione.
I dati da trasmettere attraverso la rete, vengono prodotti al livello più alto del modello, quindi, con una serie di trasformazioni e aggiungendo le informazioni necessarie, vengono passati di livello in livello fino a raggiungere il primo, quello del collegamento fisico. Nello stesso modo, quando i dati vengono ricevuti dal livello fisico, vengono passati e trasformati da un livello al successivo, fino a raggiungere l'ultimo.
In questo modo, si può dire che a ogni passaggio verso il basso i pacchetti vengano imbustati in pacchetti (più grandi) del livello inferiore, mentre, a ogni passaggio verso l'alto, i pacchetti vengono estratti dalla busta di livello inferiore. In questa circostanza, si parla preferibilmente di PDU di livello n (Protocol Data Unit) per identificare il pacchetto realizzato a un certo livello del modello ISO/OSI.
.-------------------. | Applicazione | 7-PDU | ^ |-------------------| | | | Presentazione | | | |-------------------| | | | Sessione | | | |-------------------| | Estrazione | Trasporto | Imbustamento | |-------------------| | | | Rete | | | |-------------------| | | | Collegamento dati | | | |-------------------| | | | Fisico | 1-PDU V | `-------------------' Figura 87.1. Trasformazione dei pacchetti da un livello all'altro. |
Nel passaggio da un livello a quello inferiore, l'imbustamento implica un aumento delle dimensioni del pacchetto, ovvero del PDU. A certi livelli, può essere introdotta la frammentazione e la ricomposizione dei pacchetti, a seconda delle esigenze di questi.
In precedenza sono stati visti i tipi elementari di topologia di rete. Quando si vogliono unire due reti per formare una sola più grande, si devono utilizzare dei nodi speciali connessi simultaneamente a entrambe le reti da collegare. A seconda del livello su cui intervengono per effettuare questo collegamento, si parla di bridge, router o gateway.
Il bridge mette in connessione due (o più) reti limitandosi a intervenire nei primi due livelli del modello OSI/ISO. Di conseguenza, il bridge è in grado di connettere tra loro solo reti fisiche dello stesso tipo.
In altri termini, si può dire che il bridge sia in grado di connettere reti separate che hanno uno schema di indirizzamento compatibile.
Il bridge più semplice duplica ogni pacchetto, del secondo livello OSI/ISO, nelle altre reti a cui è connesso; il bridge più sofisticato è in grado di determinare gli indirizzi dei nodi connessi nelle varie reti, in modo da trasferire solo i pacchetti che necessitano questo attraversamento.
Dal momento che il bridge opera al secondo livello OSI/ISO, non è in grado di distinguere i pacchetti in base ai protocolli di rete del terzo livello (TCP/IP, IPX/SPX, ecc.) e quindi trasferisce indifferentemente tali pacchetti.
Teoricamente, possono esistere bridge in grado di gestire connessioni con collegamenti ridondanti, in modo da determinare automaticamente l'itinerario migliore per i pacchetti e da bilanciare il carico di utilizzo tra diverse connessioni alternative. Tuttavia, questo compito viene svolto preferibilmente dai router.
.-------------------. .-------------------. | Applicazione | | Applicazione | |-------------------| |-------------------| | Presentazione | | Presentazione | |-------------------| |-------------------| | Sessione | | Sessione | |-------------------| |-------------------| | Trasporto | | Trasporto | |-------------------| |-------------------| | Rete | BRIDGE | Rete | |-------------------| .--------------------------. |-------------------| | Collegamento dati | | Collegamento dati | | Collegamento dati | |-------------------| |--------------------------| |-------------------| | Fisico | | Fisico | | Fisico | | Fisico | `-------------------' `----------' `----------' `-------------------' | | | | `-------------------' `-------------------' Figura 87.2. Il bridge trasferisce PDU di secondo livello; in pratica trasferisce tutti i tipi di pacchetto riferiti al tipo di rete fisica a cui è connesso. |
Il router mette in connessione due (o più) reti intervenendo al terzo livello del modello OSI/ISO. Di conseguenza, il router è in grado di trasferire solo i pacchetti di un determinato tipo di protocollo di rete (TCP/IP, IPX/SPX, ecc.), indipendentemente dal tipo di reti fisiche connesse effettivamente.
In altri termini, si può dire che il router sia in grado di connettere reti separate che hanno schemi di indirizzamento differenti, ma che utilizzano lo stesso tipo di protocollo di rete al terzo livello OSI/ISO.
.-------------------. .-------------------. | Applicazione | | Applicazione | |-------------------| |-------------------| | Presentazione | | Presentazione | |-------------------| |-------------------| | Sessione | | Sessione | |-------------------| |-------------------| | Trasporto | ROUTER | Trasporto | |-------------------| .--------------------------. |-------------------| | Rete | | Rete | | Rete | |-------------------| |--------------------------| |-------------------| | Collegamento dati | | C. dati | | C. dati | | Collegamento dati | |-------------------| |----------| |----------| |-------------------| | Fisico | | Fisico | | Fisico | | Fisico | `-------------------' `----------' `----------' `-------------------' | | | | `-------------------' `-------------------' Figura 87.3. Il router trasferisce PDU di terzo livello; in pratica trasferisce i pacchetti di un certo tipo di protocollo a livello di rete. |
L'instradamento dei pacchetti attraverso le reti connesse al router avviene in base a una tabella di instradamento che può anche essere determinata in modo dinamico, in presenza di connessioni ridondanti, come già accennato per il caso dei bridge.
Il gateway mette in connessione due (o più) reti intervenendo all'ultimo livello, il settimo, del modello OSI/ISO. In questo senso, il suo scopo non è tanto quello di connettere delle reti differenti, ma di mettere in connessione i servizi di due o più ambienti che altrimenti sarebbero incompatibili.
Spesso, negli ambienti Unix, il termine gateway viene utilizzato impropriamente come sinonimo di router, ma sarebbe bene, quando possibile, fare attenzione a queste definizioni. |
Il nome TCP/IP rappresenta un sistema di protocolli di comunicazione basati su IP e si tratta di quanto utilizzato normalmente negli ambienti Unix. In pratica, il protocollo IP si colloca al terzo livello ISO/OSI, mentre TCP si colloca al di sopra di questo e utilizza IP al livello inferiore. In realtà, il TCP/IP annovera anche un altro protocollo importante: UDP.
I vari aspetti del sistema di protocolli TCP/IP si possono apprendere mano a mano che si studiano gli indirizzamenti e i servizi di rete che vengono resi disponibili. In questa fase conviene rivedere il modello OSI/ISO in abbinamento al TCP/IP.
Livello | Definizione | Descrizione |
7 | Applicazione | Applicazioni. |
6 | Presentazione | Definizione standard del formato dei dati utilizzati. |
5 | Sessione | Protocolli dei servizi (FTP, HTTP, SMTP, RPC, ecc.). |
4 | Trasporto | Protocolli TCP e UDP. |
3 | Rete | Protocollo IP. |
2 | Collegamento dati | Trasmissione e ricezione dati dipendente dal tipo di hardware. |
1 | Fisico | Hardware. |
Tabella 87.1. Modello OSI/ISO di suddivisione delle competenze di un sistema TCP/IP.
Perché si possa avere una connessione con altri nodi, è necessario inizialmente un supporto fisico, composto solitamente da un cavo e da interfacce di comunicazione. La connessione tipica in una rete locale è fatta utilizzando hardware Ethernet. Il cavo o i cavi e le schede Ethernet appartengono a questo primo livello.
Il tipo di hardware utilizzato nel primo livello determina il modo in cui avviene effettivamente la comunicazione. Nel caso dell'hardware Ethernet, ogni scheda ha un proprio indirizzo univoco (stabilito dal fabbricante) composto da 48 bit e rappresentato solitamente in forma esadecimale, come nell'esempio seguente:
00:A0:24:77:49:97
Per poter avere un tipo di comunicazione indipendente dal supporto fisico utilizzato, è necessaria un'astrazione che riguarda il modo di inviare blocchi di dati, l'indirizzamento di questi e il loro instradamento. Per quanto riguarda il TCP/IP, questo è il livello del protocollo IP, attraverso il quale vengono definiti gli indirizzi e gli instradamenti relativi.
Quando un pacchetto è più grande della dimensione massima trasmissibile in quel tipo di rete fisica utilizzata, è il protocollo IP che si deve prendere cura di scomporlo in segmenti più piccoli e di ricombinarli correttamente alla destinazione.
A questo livello appartengono i protocolli di comunicazione che si occupano di frammentare e ricomporre i dati, di correggere gli errori e di prevenire intasamenti della rete. I protocolli principali di questo livello sono TCP (Transmission Control Protocol) e UDP (User Datagram Protocol).
Il protocollo TCP, in qualità di protocollo connesso, oltre alla scomposizione e ricomposizione dei dati, si occupa di verificare e riordinare i dati all'arrivo: i pacchetti perduti o errati vengono ritrasmessi e i dati finali vengono ricomposti. Il protocollo UDP, essendo un protocollo non connesso, non esegue alcun controllo.
A questo livello si introduce, a fianco dell'indirizzo IP, il numero di porta. Il percorso di un pacchetto ha un'origine identificata dal numero IP e da una porta, e una destinazione identificata da un altro numero IP e dalla porta relativa. Le porte identificano dei servizi concessi o richiesti e la gestione di questi riguarda il livello successivo.
Ogni servizio di rete (condivisione del file system, posta elettronica, FTP, ecc.) ha un proprio protocollo, porte di servizio e un meccanismo di trasporto (quelli definiti nel livello inferiore). Ogni sistema può stabilire le proprie regole, anche se in generale è opportuno che i nodi che intendono comunicare utilizzino le stesse porte e gli stessi tipi di trasporto. Questi elementi sono stabiliti dal file /etc/services
. Segue un breve estratto dove si può osservare, per esempio, che il servizio ftp utilizza la porta 21 per comunicare e il protocollo di trasporto è il TCP:
ftp 21/tcp telnet 23/tcp smtp 25/tcp finger 79/tcp pop-3 110/tcp
Quando si avvia una comunicazione a questo livello, si parla di sessione. Quindi, si apre o si chiude una sessione.
I dati che vengono inviati utilizzando le sessioni del livello inferiore devono essere uniformi, indipendentemente dalle caratteristiche fisiche delle macchine che li elaborano. A questo livello si inseriscono normalmente delle librerie in grado di gestire un'eventuale conversione dei dati tra l'applicazione e la sessione di comunicazione.
L'ultimo livello è quello dell'applicazione che utilizza le risorse di rete. Con la suddivisione delle competenze in così tanti livelli, l'applicazione non ha la necessità di occuparsi della comunicazione; così, in molti casi, anche l'utente può non rendersi conto della sua presenza.
A livello elementare, la comunicazione attraverso la rete deve avvenire in un modo compatibile con le caratteristiche fisiche di questa. In pratica, le connessioni devono avere una forma di attuazione al secondo livello del modello appena presentato (collegamento dati); i livelli superiori sono solo astrazioni della realtà che c'è effettivamente sotto. Per poter utilizzare un protocollo che si ponga al terzo livello, come nel caso di IP che viene descritto più avanti, occorre un modo per definire un abbinamento tra gli indirizzi di questo protocollo superiore e gli indirizzi fisici delle interfacce utilizzate effettivamente, secondo le specifiche del livello inferiore.
Volendo esprimere la cosa in modo pratico, si può pensare alle interfacce Ethernet, che hanno un sistema di indirizzamento composto da 48 bit. Quando con un protocollo di livello 3 (rete) si vuole contattare un nodo identificato in maniera diversa da quanto previsto al livello 2, se non si conosce l'indirizzo Ethernet, ma ammettendo che tale nodo si trovi nella rete fisica locale, viene inviata una richiesta circolare secondo il protocollo ARP (Address Resolution protocol).
La richiesta ARP dovrebbe essere ascoltata da tutte le interfacce connesse fisicamente a quella rete fisica e ogni nodo dovrebbe passare tale richiesta al livello 3, in modo da verificare se l'indirizzo richiesto corrisponde al proprio. In questo modo, il nodo che ritiene di essere quello che si sta cercando dovrebbe rispondere, rivelando il proprio indirizzo Ethernet.
Ogni nodo dovrebbe essere in grado di conservare per un certo tempo le corrispondenze tra gli indirizzi di livello 2 con quelli di livello 3, ottenuti durante il funzionamento. Questo viene fatto nella tabella ARP, che comunque va verificata a intervalli regolari.
Come è stato visto nelle sezioni precedenti, al di sopra dei primi due livelli strettamente fisici di comunicazione, si inserisce la rete dal punto di vista di Unix: un insieme di nodi, spesso definiti host, identificati da un indirizzo IP. Di questi ne esistono almeno due versioni: IPv4 e IPv6. Il primo è quello ancora ufficialmente in uso, ma a causa del rapido esaurimento degli indirizzi disponibili nella comunità Internet, è in corso di introduzione il secondo.
Gli indirizzi IP versione 4, cioè quelli tradizionali, sono composti da una sequenza di 32 bit, suddivisi convenzionalmente in quattro gruppetti di 8 bit, e rappresentati in modo decimale separati da un punto. Questo tipo di rappresentazione è definito come: notazione decimale puntata. Per esempio,
00000001.00000010.00000011.00000100
corrisponde al codice 1.2.3.4.
All'interno di un indirizzo del genere si distinguono due parti: l'indirizzo di rete e l'indirizzo del nodo particolare. Il meccanismo è simile a quello del numero telefonico in cui la prima parte del numero, il prefisso, definisce la zona ovvero il distretto telefonico, mentre il resto identifica l'apparecchio telefonico specifico di quella zona. In pratica, quando viene richiesto un indirizzo IP, si ottiene un indirizzo di rete in funzione della quantità di nodi che si devono connettere. In questo indirizzo una certa quantità di bit nella parte finale sono azzerati: ciò significa che quella parte finale può essere utilizzata per gli indirizzi specifici dei nodi. Per esempio, l'indirizzo di rete potrebbe essere:
00000001.00000010.00000011.00000000
e in tal caso, si potrebbero utilizzare gli ultimi 8 bit per gli indirizzi dei vari nodi.
L'indirizzo di rete, non può identificare un nodo. Quindi, tornando all'esempio, l'indirizzo
00000001.00000010.00000011.00000000
non può essere usato per identificare anche un nodo. Inoltre, un indirizzo in cui i bit finali lasciati per identificare i nodi siano tutti a uno,
00000001.00000010.00000011.11111111
identifica un indirizzo broadcast, cioè un indirizzo per la trasmissione a tutti i nodi di quella rete. In pratica, rappresenta simultaneamente tutti gli indirizzi che iniziano con 00000001.00000010. Di conseguenza, un indirizzo broadcast non può essere utilizzato per identificare un nodo.
Naturalmente, i bit che seguono l'indirizzo di rete possono anche essere utilizzati per suddividere la rete in sottoreti. Nel caso di prima, volendo creare due sottoreti utilizzando i primi 2 bit che seguono l'indirizzo di rete originario:
xxxxxxxx.xxxxxxxx.xxxxxxxx.00000000
indirizzo di rete;
xxxxxxxx.xxxxxxxx.xxxxxxxx.01000000
indirizzo della prima sottorete;
xxxxxxxx.xxxxxxxx.xxxxxxxx.10000000
indirizzo della seconda sottorete;
xxxxxxxx.xxxxxxxx.xxxxxxxx.11111111
In questo esempio, per ogni sottorete, resterebbero 6 bit a disposizione per identificare i nodi: da 0000012 a 1111102.
Il meccanismo utilizzato per distinguere la parte dell'indirizzo che identifica la rete è quello della maschera di rete o netmask. La maschera di rete è un indirizzo che viene abbinato all'indirizzo da analizzare con l'operatore booleano AND, per filtrare la parte di bit che interessano. Una maschera di rete che consenta di classificare i primi 24 bit come indirizzo di rete sarà:
11111111.11111111.11111111.00000000
cosa che coincide con il ben più noto codice seguente:
255.255.255.0
Utilizzando l'esempio visto in precedenza, abbinando questa maschera di rete si ottiene l'indirizzo di rete:
00000001.00000010.00000011.00000100 nodo (1.2.3.4)
11111111.11111111.11111111.00000000 maschera di rete (255.255.255.0)
00000001.00000010.00000011.00000000 indirizzo di rete (1.2.3.0).
L'indirizzo che si ottiene abbinando l'indirizzo di un nodo e la sua maschera di rete invertita con l'operatore AND è l'indirizzo del nodo relativo alla propria rete. Esempio:
00000001.00000010.00000011.00000100 nodo (1.2.3.4)
00000000.00000000.00000000.11111111 maschera di rete invertita (0.0.0.255)
00000000.00000000.00000000.00000100 indirizzo relativo (0.0.0.4).
Gli indirizzi IP sono stati classificati in cinque gruppi, a partire dalla lettera «A» fino alla lettera «E».
Gli indirizzi di classe A hanno il primo bit a zero, utilizzano i sette bit successivi per identificare l'indirizzo di rete e lasciano i restanti 24 bit per identificare i nodi.
0rrrrrrr.hhhhhhhh.hhhhhhhh.hhhhhhhh
All'interno di questa classe si possono usare indirizzi che vanno da:
00000001.________.________.________
a
01111110.________.________.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 1.___.___.___ e 126.___.___.___.
Gli indirizzi di classe B hanno il primo bit a uno e il secondo a zero, utilizzano i 14 bit successivi per identificare l'indirizzo di rete e lasciano i restanti 16 bit per identificare i nodi.
10rrrrrr.rrrrrrrr.hhhhhhhh.hhhhhhhh
All'interno di questa classe si possono usare indirizzi che vanno da:
10000000.00000001.________.________
a
10111111.11111110.________.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 128.1.___.___ e 191.254.___.___.
Gli indirizzi di classe C hanno il primo e il secondo bit a uno e il terzo bit a zero, utilizzano i 21 bit successivi per identificare l'indirizzo di rete e lasciano i restanti 8 bit per identificare i nodi.
110rrrrr.rrrrrrrr.rrrrrrrr.hhhhhhhh
All'interno di questa classe si possono usare indirizzi che vanno da:
11000000.00000000.00000000.________
a
11011111.11111111.11111110.________.
In pratica, appartengono a questa classe gli indirizzi compresi tra 192.0.1.___ e 223.255.254.___.
Gli indirizzi di classe D hanno i primi tre bit a uno e il quarto a zero. Si tratta di una classe destinata a usi speciali.
1110____.________.________.________
Gli indirizzi di classe E hanno i primi quattro bit a uno e il quinto a zero. Si tratta di una classe destinata a usi speciali.
11110___.________.________.________
Lo spazio lasciato libero tra la classe A e la classe B, ovvero gli indirizzi 127.*, sono riservati per identificare una rete immaginaria interna al nodo stesso. All'interno di questa rete si trova normalmente un'interfaccia di rete immaginaria connessa su questa rete, corrispondente all'indirizzo 127.0.0.1, mentre gli altri indirizzi di questo gruppo non vengono mai utilizzati.
Per identificare questi indirizzi si parla di loopback, anche se questo termine viene usato ancora in altri contesti con significati differenti.
All'interno di ogni nodo, quindi, l'indirizzo 127.0.0.1 corrisponde a se stesso. Serve in particolare per non disturbare la rete quando un programma (che usa la rete) deve fare riferimento a se stesso.
L'indirizzo speciale 0.0.0.0, conosciuto come default route è il percorso, o la strada predefinita per l'instradamento dei pacchetti. Si usa spesso la parola chiave defaultroute per fare riferimento automaticamente a questo indirizzo particolare.
Se non si ha la necessità di rendere accessibili i nodi della propria rete locale alla rete globale Internet, si possono utilizzare alcuni gruppi di indirizzi che sono stati riservati a questo scopo e che non corrispondono a nessun nodo raggiungibile attraverso Internet.
Nella classe A è stato riservato l'intervallo da
00001010.00000000.00000000.00000000 = 10.0.0.0
a
00001010.11111111.11111111.11111111 = 10.255.255.255.
Nella classe B è stato riservato l'intervallo da
10101100.00010000.00000000.00000000 = 172.16.0.0
a
10101100.00010000.11111111.11111111 = 172.31.255.255.
Nella classe C è stato riservato l'intervallo da
11000000.10101000.00000000.00000000 = 192.168.0.0
a
11000000.10101000.11111111.11111111 = 192.168.255.255.
Quando si scompone la propria rete locale in sottoreti, di solito lo si fa per non intasarla. Infatti è probabile che si possano raggruppare i nodi in base alle attività che essi condividono. Le sottoreti possono essere immaginate come raggruppamenti di nodi separati che di tanto in tanto hanno la necessità di accedere a nodi situati al di fuori del loro gruppo. Per collegare due sottoreti occorre un nodo con due interfacce di rete, ognuno connesso con una delle due reti, configurato in modo da lasciare passare i pacchetti destinati all'altra rete. Questo è un router, chiamato abitualmente gateway, che in pratica svolge l'attività di instradamento dei pacchetti.
Il modo normale di rappresentare una maschera degli schemi di indirizzamento di IPv4 è quello della notazione decimale puntata a ottetti, come visto fino a questo punto. Tuttavia, considerato che le maschere servono prevalentemente per definire dei gruppi di indirizzi IP, cioè delle reti (o sottoreti), tali maschere hanno una forma piuttosto semplice: una serie continua di bit a uno e la parte restante di bit a zero. Pertanto, quando si tratta di definire una maschera di rete, potrebbe essere conveniente indicare semplicemente il numero di bit da porre a uno. Per esempio, la classica maschera di rete di classe C, 255.255.255.0, equivale a dire che i primi 24 bit devono essere posti a uno.
La possibilità di rappresentare le maschere di rete in questo modo è apparsa solo in tempi recenti per quanto riguarda IPv4. Quindi, dipende dai programmi di servizio utilizzati effettivamente, il fatto che si possa usare o meno questa forma. In ogni caso, il modo normale di esprimerla è quello di indicare il numero IP seguito da una barra obliqua normale e dal numero di bit a uno della maschera, come per esempio 192.168.1.1/24.
Tabella 87.2. Indirizzi IPv4.
La gestione diretta degli indirizzi IP è piuttosto faticosa dal punto di vista umano. Per questo motivo si preferisce associare un nome agli indirizzi numerici. Il sistema utilizzato attualmente è il DNS (Domain Name System), ovvero il sistema dei nomi di dominio. Gli indirizzi della rete Internet sono organizzati ad albero in domini, sottodomini (altri sottodomini di livello inferiore, ecc.), fino ad arrivare a identificare il nodo desiderato.
. (dominio principale o «root») | |-com... (dominio com) |-edu... (dominio edu) |-org... (dominio org) |-net... (dominio net) |-it (dominio it) | |-beta (dominio beta.it) | | |-alfa (dominio alfa.beta.it) | | | |-dani (nodo dani.alfa.beta.it) : : : : Figura 87.4. Struttura dei nomi di dominio. |
Non esiste una regola per stabilire quante debbano essere le suddivisioni, di conseguenza, di fronte a un nome del genere non si può sapere a priori se si tratta di un indirizzo finale, riferito a un nodo singolo, o a un gruppo di questi.
Spesso, all'interno della propria rete locale, è possibile identificare un nodo attraverso il solo nome iniziale, senza la parte restante del dominio di appartenenza. Per esempio, se la rete in cui si opera corrisponde al dominio brot.dg, il nodo roggen verrà inteso essere roggen.brot.dg. Quando un nome di dominio contiene tutti gli elementi necessari a identificare un nodo, si parla precisamente di FQDN o Fully Qualified Domain Name, quindi, roggen.brot.dg dell'esempio precedente è un FQDN.
In un sistema di nomi di dominio (DNS), il problema più grande è quello di organizzare i name server ovvero i servizi di risoluzione dei nomi (servizi DNS). Ciò è attuato da nodi che si occupano di risolvere, ovvero trasformare, gli indirizzi mnemonici dei nomi di dominio in indirizzi numerici IP e viceversa. A livello del dominio principale (root), si trovano alcuni serventi che si occupano di fornire gli indirizzi per raggiungere i domini successivi, cioè com, edu, org, net, it,... A livello di questi domini ci saranno alcuni serventi (ogni dominio ha i suoi) che si occupano di fornire gli indirizzi per raggiungere i domini inferiori, e così via, fino a raggiungere il nodo finale. Di conseguenza, un servizio di risoluzione dei nomi, per poter ottenere l'indirizzo di un nodo che si trova in un dominio al di fuori della sua portata, deve interpellare quelli del livello principale e mano a mano quelli di livello inferiore, fino a ottenere l'indirizzo cercato. Per determinare l'indirizzo IP di un nodo si rischia di dover accedere a una quantità di servizi di risoluzione dei nomi. Per ridurre questo traffico di richieste, ognuno di questi è in grado di conservare autonomamente una certa quantità di indirizzi che sono stati richiesti nell'ultimo periodo.
In pratica, per poter utilizzare la notazione degli indirizzi suddivisa in domini, è necessario che il sistema locale sul quale si opera possa accedere al suo servizio di risoluzione dei nomi più vicino, oppure gestisca questo servizio per conto suo. In una rete locale privata composta da nodi che non sono raggiungibili dalla rete esterna (Internet), non dovrebbe essere necessario predisporre un servizio di risoluzione dei nomi; in questi casi è comunque indispensabile almeno il file /etc/hosts
(93.2.1) compilato correttamente con gli indirizzi associati ai nomi completi dei vari nodi della rete locale.
Per poter utilizzare i servizi di rete è necessario avere previsto questa gestione durante la configurazione del kernel. Per quanto riguarda GNU/Linux, si tratta principalmente di attivare la gestione della rete in generale e di attivare le particolari funzionalità necessarie per le attività che si intendono svolgere. Ciò corrisponde alla configurazione delle opzioni di rete che si trovano sotto la voce Networking options (21.2.7).
Oltre alla gestione della rete, occorre anche pensare al tipo di hardware a disposizione; per questo si deve configurare la parte riguardante i dispositivi di rete, sotto la voce Network device support (21.2.9).
Olaf Kirch, NAG, The Linux Network Administrators' Guide
Terry Dawson, Linux NET-3-HOWTO
S. Gai, P. L. Montessoro, P. Nicoletti, Reti locali: dal cablaggio all'internetworking