Capitolo successivo Capitolo precedente Indice

44. Rete

La funzionalità più importante di un sistema Unix è la possibilità di comunicare attraverso la rete. Linux, offrendo tutte le caratteristiche di un sistema Unix ben dotato, è una ottima risposta ai problemi legati alla gestione di una rete.

44.1 Modello ISO

La gestione della comunicazione in una rete è un problema complesso, e in passato, questo è stato alla base delle maggiori incompatibilità tra i vari sistemi, a cominciare dalle differenze legate all'hardware.

Il modello ISO scompone la gestione della rete in livelli, o strati (layer), in modo da suddividere le ``competenze'' e così permettere una standardizzazione nelle comunicazioni, indipendentemente dall'hardware utilizzato. Questi sono schematizzati nella tabella (seguente).


Livello Definizione Descrizione o esempi
7 Applicazione Filesystem di rete.
6 Presentazione Definizione standard del formato dei dati utilizzati.
5 Sessione RPC (Chiamate di procedura remote).
4 Trasporto TCP, UDP.
3 Rete IP.
2 Collegamento dei dati Trasmissione e ricezione dati dipendente dal tipo di hardware.
1 Fisico Hardware.
Modello ISO di suddivisione delle competenze legate alle comunicazioni in rete.

Livello 1 - Fisico

Perché si possa avere una connessione con altri computer, è necessario inizialmente un supporto fisico, solitamente composto da un cavo e da interfaccie 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.

Livello 2 - Collegamento dei dati

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 solitamente rappresentato in forma esadecimale, come nell'esempio seguente.

07:01:2a:e5:23:4f

Il trasferimento dei dati, visto dal punto di vista di questo livello, avviene a blocchi definiti ``pacchetti''.

Livello 3 - Rete

Per poter avere un tipo di comunicazione indipendente dal supporto fisico utilizzato, è necessaria una astrazione che riguarda il modo di inviare blocchi di dati e l'indirizzamento di questi. Questo è quindi il livello del protocollo IP, attraverso il quale vengono definiti gli indirizzi. I pacchetti che vengono utilizzati a questo livello si chiamano datagram.

Quando un datagram è più grande della dimensione massima di un pacchetto trasmissibile in quel tipo di rete fisica utilizzata, è il protocollo IP che si deve prendere cura di scomporre il datagram in segmenti più piccoli e di ricombinarli correttamente alla destinazione.

Livello 4 - Trasporto

A questo livello appartengono i protocolli di comunicazione che si occupano di suddividere i dati da inviare in datagram e di ricomporli all'arrivo. I protocolli principali di questo livello sono TCP (Transmission Control Protocol) e UDP (User Datagram Protocol).

Il protocollo TCP, oltre alla scomposizione e ricomposizione dei dati, si occupa di verificare e riordinare i dati all'arrivo: i datagram perduti o errati vengono ritrasmessi e i dati finali vengono ricomposti. Il protocollo UDP, invece, non esegue alcun controllo.

A questo livello si introduce, a fianco dell'indirizzo IP, il numero di porta. Il percorso di un datagram ha un'origine identificata dal numero IP e dalla porta e una destinazione identificata da un altro numero IP e dalla porta. Le porte identificano dei servizi concessi o richiesti e la gestione di questi riguarda il livello successivo.

Livello 5 - Sessione

Ogni servizio di rete (condivisione del filesystem, posta, FTP, ...) ha un proprio protocollo, porte di servizio e un meccanismo di trasporto (quelli definiti nel livello precedente). Ogni sistema può stabilire le proprie regole, anche se in generale è opportuno che i computer 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 di esempio.

ftp             21/tcp
telnet          23/tcp
smtp            25/tcp
finger          79/tcp
pop-3           110/tcp

Per esempio, il protocollo ftp utilizza la porta 21 per comunicare, e il protocollo di trasporto utilizzato è TCP.

Quando si avvia una comunicazione, a questo livello si parla di sessione. Quindi, si apre o si chiude una sessione.

Livello 6 - Presentazione

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 una eventuale conversione dei dati tra l'applicazione e la sessione di comunicazione.

Livello 7 - Applicazione

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, e così anche l'utente, in molti casi, può anche non rendersi conto della presenza di questa.

44.2 Indirizzi IP

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 ``scatole'' identificate da un indirizzo IP.

Esistono almeno due versioni di questi tipi di indirizzo: IPv4 e IPv6. Il primo è quello ancora ufficialmente in uso, ma a causa del rapido esaurimento degli indirizzi disponibili nella comunità Internet, sta per essere introdotto il secondo.

44.3 Indirizzi IPv4

Gli indirizzi IP versione 4, cioè quelli attualmente ancora in uso, sono composti da una sequenza di 32 bit convenzionalmente suddivisi 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

Indirizzo di rete e indirizzo dell'host

All'interno di un indirizzo del genere si distinguono due parti: l'indirizzo di rete e l'indirizzo del computer host 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 computer host che si devono connettere. In questo indirizzo, una certa quantità di bit nella parte finale sono azzerati, e questo significa che quella parte finale può essere utilizzata per gli indirizzi specifici dei computer host. 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 computer host.

Indirizzo di rete e indirizzo broadcast

L'indirizzo di rete, non può identificare un host, quindi nell'esempio, l'indirizzo

00000001.00000010.00000011.00000000

non può essere usato per identificare anche un computer host. Inoltre, un indirizzo in cui i bit finali lasciati per identificare gli host siano tutti a uno,

00000001.00000010.00000011.11111111

identifica un indirizzo broadcast, cioè un indirizzo per la trasmissione a tutti gli host di quella rete. Di conseguenza, un indirizzo broadcast non può essere utilizzato per identificare un computer host.

Sottoreti

Naturalmente, i bit che seguono l'indirizzo di rete possono anche essere utilizzati per suddividere la rete in sottoreti. Nel caso di prima, si potrebbero per esempio voler creare due sottoreti utilizzando i primi due 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

Indirizzo broadcast.

In questo esempio, per ogni sottorete, resterebbero 6 bit a disposizione per identificare i computer host: da 000001 a 111110.

Maschera di rete o netmask

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 al 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 host (1.2.3.4)

11111111.11111111.11111111.00000000 netmask (255.255.255.0)

00000001.00000010.00000011.00000000 indirizzo di rete (1.2.3.0).

Classi di indirizzi

Gli indirizzi IP sono stati classificati in cinque gruppi, a partire dalla lettera A fino alla lettera F.

Classe A

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 gli host.

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.___.___.___.

Classe B

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 gli host.

10rrrrrr.rrrrrrrr.hhhhhhhh.hhhhhhhh

All'interno di questa classe si possono usare indirizzi che vanno da:

10000000.00000001.________.________

a

01111111.11111110.________.________.

In pratica, appartengono a questa classe gli indirizzi compresi tra 128.1.___.___ e 191.254.___.___.

Classe C

Gli indirizzi di classe C hanno i primi due bit a uno e il terzo a zero, utilizzano i 21 bit successivi per identificare l'indirizzo di rete e lasciano i restanti 8 bit per identificare gli host.

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.___.

Classe D

Gli indirizzi di classe D hanno i primi tre bit a uno e il quarto a zero. Si tratta di una classe destinata ad usi speciali.

1110____.________.________.________

Classe E

Gli indirizzi di classe E hanno i primi quattro bit a uno e il quinto a zero. Si tratta di una classe destinata ad usi speciali.

11110___.________.________.________

Indirizzi broadcast in generale

Un indirizzo broadcast si distingue per avere la parte finale (più o meno lunga) di bit a uno.

Un indirizzo broadcast identifica tutte le reti, sottoreti e host di quel segmento.

Per esempio, l'indirizzo:

00000001.00000010.11111111.11111111

rappresenta simultaneamente tutti gli indirizzi che iniziano con 00000001.00000010.

Indirizzo relativo alla rete locale

L'indirizzo che si ottiene abbinando l'indirizzo di un host e la sua maschera di rete invertita con l'operatore AND è l'indirizzo dell'host relativo alla propria rete. Esempio:

00000001.00000010.00000011.00000100 host (1.2.3.4)

00000000.00000000.00000000.11111111 netmask invertita (0.0.0.255)

00000000.00000000.00000000.00000100 indirizzo relativo (0.0.0.4).

Indirizzo di loopback - 127.___.___.___

Dalla classe A è stato escluso l'indirizzo 127.0.0.0 che identifica una rete immaginaria interna al computer stesso. All'interno di questa rete si trova normalmente una interfaccia di rete immaginaria connessa su questa rete: 127.0.0.1.

Per identificare questi indirizzi si parla di loopback.

All'interno di ogni computer, quindi, questo indirizzo 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.

Default route - 0.0.0.0

Default route è il percorso, o la strada, predefinita per l'instradamento dei pacchetti. Il termine defaultroute fa automaticamente riferimento a questo indirizzo particolare.

Indirizzi riservati per le reti private

Se non si ha la necessità di rendere accessibili i computer 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 host 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.

Sottoreti e routing

Quando si scompone la propria rete locale in sottoreti, di solito lo si fa per non intasarla. Infatti è probabile che si possano raggruppare i computer in base alle attività che essi condividono. Le sottoreti possono essere immaginate come raggruppamenti di computer separati che di tanto in tanto hanno la necessità di accedere a computer situati al di fuori del loro gruppo. Per collegare due sottoreti occorre un computer con due schede di rete, ognuno connesso con una delle due reti, configurato in modo da lasciare passare i pacchetti destinati all'altra rete. Questo computer è un router, chiamato abitualmente gateway, e in pratica svolge l'attività di instradamento dei pacchetti.

44.4 Nomi di dominio

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 attualmente utilizzato è 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...), fino ad arrivare a identificare il computer host desiderato.

dominio 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       (host dani.alfa.beta.it)
 :  :  :  :

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 computer, o a un dominio.

Spesso, all'interno della propria rete locale, è possibile identificare un computer attraverso il solo nome senza il dominio di appartenenza. Per esempio, se la rete in cui si opera corrisponde al dominio zigozago.dg, il computer pippo verrà inteso essere pippo.zigozago.dg. Quando un nome di dominio contiene tutti gli elementi necessari a identificare un computer, si parla di FQDN o Fully Qualified Domain Name, quindi, pippo.zigozago.dg dell'esempio precedente è un FQDN.

DNS server

In un sistema di nomi di dominio (DNS), il problema più grande è quello di organizzare i così detti name server o DNS server. Si tratta di computer che si occupano di risolvere, ovvero trasformare, gli indirizzi mnemonici dei nomi di dominio in indirizzi numerici IP. A livello di dominio root, si trovano alcuni server 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 server (ogni dominio ha i suoi) che si occupano di fornire gli indirizzi per raggiungere i domini inferiori, e così via, fino a raggiungere il computer host finale. Di conseguenza, un name server, per poter ottenere l'indirizzo di un host che si trova in un dominio al di fuori della sua portata, deve interpellare i name server a livello di root e mano a mano quelli di livello inferiore, fino a ottenere l'indirizzo cercato. Per determinare l'indirizzo IP di un computer host si rischia di disturbare una quantità di name server. Per ridurre questo traffico di richieste, ogni name server è in grado di conservare automaticamente 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 computer locale sul quale si opera possa accedere al suo name server più vicino, oppure gestisca un name server per conto suo. In una rete locale privata, i cui computer non siano quindi raggiungibili dalla rete Internet, non è solitamente necessario predisporre un name server. È sufficiente il file /etc/hosts ( hosts) compilato correttamente con gli indirizzi associati ai nomi completi dei vari host.

44.5 Indirizzi degli utenti

Spesso, specialmente quando si utilizza la posta, c'è la necessità di individuare un utente tra quelli registrati all'interno di un certo computer host. Gli utenti sono identificati utilizzando il loro nome di login seguito dal simbolo @ (a commerciale o chiocciolina) che significa at (presso), seguito dall'indirizzo del computer host presso cui l'utente risiede. L'indirizzo dell'host può essere espresso sia secondo lo stile dei nomi di dominio, sia nella sua sua forma numerica puntata.

pluto@topolino.zigozago.dg

pluto@192.168.1.1

44.6 Kernel, configurazione per la rete

Per poter utilizzare i servizi di rete è necessario aver previsto questo durante la configurazione del kernel. Per quanto riguarda 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, o Networking options ( `Networking options').

Oltre alla gestione della rete, occorre anche pensare al tipo di hardware a disposizione, e per questo si deve configurare la parte riguardante i dispositivi di rete, o Network device support ( `Network device support').

44.7 Riferimenti

I documenti fondamentali per lo studio delle reti in Linux sono:

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice