[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
L'instradamento definisce la strada che devono prendere i pacchetti di livello 3 (rete), secondo il modello ISO-OSI, a partire dal nodo a cui si fa riferimento. In questo capitolo, viene preso in considerazione l'instradamento locale, inteso come quello che non si serve di router.
In una rete elementare, in cui ogni elaboratore ha una sola scheda di rete e tutte le schede sono connesse con lo stesso cavo, potrebbe sembrare strana la necessità di dover stabilire un percorso per l'instradamento dei dati sulla rete. Ma in una rete IPv4 non è così: per qualunque connessione possibile è necessario stabilire il percorso, anche quando si tratta di connettersi con l'interfaccia locale immaginaria (loopback).
Ogni elaboratore che utilizza la rete ha una sola necessità: quella di sapere quali percorsi di partenza siano possibili, in funzione degli indirizzi utilizzati. Gli eventuali percorsi successivi, vengono definiti da altri elaboratori nella rete. Si tratta di costruire la cosiddetta tabella di instradamento, attraverso la quale, ogni elaboratore sa quale strada deve prendere un pacchetto a partire da quella posizione.
|
Riprendendo l'esempio già mostrato a proposito della configurazione delle interfacce di rete, si potrebbero definire le tabelle di instradamento seguenti, che si riferiscono rispettivamente al nodo A e al nodo B dello schema:
Destinazione | Maschera di rete | Router | Interfaccia di rete |
192.168.1.0 | 255.255.255.0 | -- | eth0 |
192.168.7.1 | 255.255.255.255 | -- | plip1 |
192.168.7.2 | 255.255.255.255 | -- | plip1 |
127.0.0.0 | 255.0.0.0 | -- | lo |
Destinazione | Maschera di rete | Router | Interfaccia di rete |
192.168.7.1 | 255.255.255.255 | -- | plip1 |
192.168.7.2 | 255.255.255.255 | -- | plip1 |
127.0.0.0 | 255.0.0.0 | -- | lo |
Quando si configura un'interfaccia di rete e gli si attribuisce l'indirizzo IP, dal momento che esiste una maschera di rete indicata espressamente o predefinita, potrebbe essere lo stesso programma di configurazione dell'interfaccia che si occupa di definirne l'instradamento nella rete locale; a ogni modo, rimane la necessità di definirlo (in un modo o nell'altro).
Per la spiegazione di questi instradamenti vengono mostrati nelle sezioni seguenti degli esempi ottenuti con un sistema GNU/Linux, attraverso il programma Route, (1) a cui corrisponde l'eseguibile route. Tuttavia, il concetto rimane tale per gli altri sistemi operativi, anche se la modalità per definire gli instradamenti può essere differente.
La definizione dell'instradamento per gli indirizzi locali di loopback è obbligatoria:
Destinazione | Maschera di rete | Router | Interfaccia di rete |
127.0.0.0 | 255.0.0.0 | -- | lo |
Con un sistema GNU/Linux dovrebbe essere lo stesso programma Ifconfig che prepara l'instradamento corretto all'atto dell'impostazione dell'interfaccia lo; tuttavia, usando Route si potrebbe intervenire nel modo seguente:
#
route add -net 127.0.0.0 netmask 255.0.0.0 dev lo
(2)
La tabella di instradamento che si ottiene viene descritta di seguito.
$
route -n
[Invio]
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2 lo |
Di solito la rete 127.0.0.0 serve a raggiungere solo l'indirizzo 127.0.0.1, quindi, spesso si preferisce inserire solo questo nella tabella di instradamento. In pratica si utilizza il comando:
In questo caso non si indica la maschera di rete perché deve essere necessariamente 255.255.255.255, essendo riferita a un nodo singolo. |
La verifica dell'instradamento è semplice, basta provare a richiedere un eco all'interfaccia lo.
$
ping 127.0.0.1
[Invio]
PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.4 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.3 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.3 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.3 ms |
[Ctrl+c]
--- 127.0.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.3/0.3/0.4 ms |
Le schede di rete Ethernet sono usate per la connessione a una rete locale e per questo sono potenzialmente in grado di offrire un collegamento con tutti gli indirizzi che ricadono all'interno della rete logica di cui fanno parte.(3) Quando si stabilisce un instradamento che utilizza questo tipo di interfaccia, è preferibile l'indicazione dell'intera rete logica a cui appartiene.(4)
Seguendo l'esempio visto in precedenza nella sezione che riguardava la configurazione di una scheda Ethernet, dal momento che questa si trovava a operare nella rete 192.168.1.0, l'instradamento corretto corrisponde allo schema seguente:
Destinazione | Maschera di rete | Router | Interfaccia di rete |
192.168.1.0 | 255.255.255.0 | -- | eth0 |
Con un sistema GNU/Linux, se Ifconfig non ha già provveduto da solo, si può usare Route nel modo seguente:
#
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
La tabella di instradamento che ne deriva viene descritta di seguito.
$
route -n
[Invio]
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 1 eth0 |
Volendo è possibile indicare un instradamento specifico per ogni destinazione. Nell'esempio seguente si aggiunge l'instradamento per alcuni elaboratori: si deve utilizzare route più volte.
#
route add -host 192.168.1.1 dev eth0
#
route add -host 192.168.1.2 dev eth0
#
route add -host 192.168.1.3 dev eth0
#
route add -host 192.168.1.4 dev eth0
Si ottiene una tabella di instradamento simile a quella seguente:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.1.3 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.1.4 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 |
Anche l'indirizzo dell'interfaccia locale, quella del proprio elaboratore, è raggiungibile solo se è stato specificato un instradamento. Quando si indicava un instradamento della rete, questa veniva inclusa automaticamente nel gruppo; nel caso si voglia indicare dettagliatamente ogni indirizzo da raggiungere, se si vuole accedere anche alla propria interfaccia, occorre inserirla nella tabella di instradamento. Nell'esempio visto sopra, viene aggiunto anche l'indirizzo 192.168.1.1 per questo scopo. |
La verifica dell'instradamento deve essere fatta inizialmente controllando l'interfaccia locale, quindi tentando di raggiungere l'indirizzo di un altro elaboratore sulla rete. Naturalmente, occorre che quell'elaboratore abbia una tabella di instradamento corretta.
$
ping 192.168.1.1
[Invio]
PING 192.168.1.1 (192.168.1.1): 56 data bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.5 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.4 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.4 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.4 ms |
[Ctrl+c]
--- 192.168.1.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.5 ms |
$
ping 192.168.1.2
[Invio]
PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=1.1 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=1.1 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=1.1 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=1.1 ms |
[Ctrl+c]
--- 192.168.1.2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 1.1/1.1/1.1 ms |
Con le connessioni di tipo punto-punto, dal momento che riguardano esclusivamente due elaboratori, sono tali per cui un instradamento verso una rete non sia sensato, benché possibile. In generale, è necessario aggiungere semplicemente un instradamento verso l'indirizzo all'altro capo, ma è utile aggiungere comunque l'instradamento anche all'indirizzo locale.
Seguendo l'esempio già visto in precedenza, vengono riepilogati gli instradamenti di due nodi che utilizzano l'interfaccia plip1 per la connessione, che in questo caso sono identici:
Destinazione | Maschera di rete | Router | Interfaccia di rete |
192.168.7.1 | 255.255.255.255 | -- | plip1 |
192.168.7.2 | 255.255.255.255 | -- | plip1 |
Con un sistema GNU/Linux, supponendo di usare una connessione PLIP, attraverso le porte parallele, se Ifconfig non ha già provveduto da solo, si può usare Route nel modo seguente (in entrambi i nodi, nello stesso modo, dato che il nome dell'interfaccia e lo stesso):
#
route add -host 192.168.7.1 dev plip1
#
route add -host 192.168.7.2 dev plip1
La tabella di instradamento che si ottiene viene descritta di seguito.
$
route -n
[Invio]
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.7.1 0.0.0.0 255.255.255.255 UH 0 0 1 plip1 192.168.7.2 0.0.0.0 255.255.255.255 UH 0 0 1 plip1 |
Per verificare gli instradamenti, si può provare come al solito con ping:
$
ping 192.168.7.1
oppure:
$
ping 192.168.7.2
L'ordine in cui appaiono le voci nella tabella degli instradamenti è significativo, ma solitamente viene determinato in modo automatico dal sistema operativo. Si osservi lo schema seguente che rappresenta una variante dell'esempio già mostrato in precedenza:
|
Per quanto riguarda il nodo A, come si può intuire, l'instradamento della connessione punto-punto potrebbe entrare in conflitto con quello della rete locale 192.168.1.0. In pratica, se si definiscono correttamente tutti gli instradamenti, le voci della connessione punto-punto appaiono prima nell'elenco, pertanto, l'instradamento verso un indirizzo diverso da quello della connessione punto-punto, verrebbe preso in considerazione in un momento successivo:
Destinazione | Maschera di rete | Router | Interfaccia di rete |
172.0.0.0 | 255.0.0.0 | -- | lo |
192.168.1.2 | 255.255.255.255 | -- | plip1 |
192.168.1.3 | 255.255.255.255 | -- | plip1 |
192.168.1.0 | 255.255.255.0 | -- | eth0 |
In un sistema GNU/Linux, gli instradamenti, cioè la compilazione della tabella di instradamento, vengono stabiliti attraverso Route, (5) a cui corrisponde in pratica l'eseguibile route.
route [opzioni]
La sintassi di route può articolarsi in diversi modi a seconda del tipo di azione da compiere. In particolare, conviene distinguere tra: l'analisi della tabella di instradamento;
route [-v] [-n] [-e | -ee]
l'aggiunta di un nuovo instradamento;
route [-v] add [-net|-host] destinazione [netmask maschera_di_rete] [gw router]
<-'
`->[altre_opzioni] [[dev] interfaccia]
l'eliminazione di un instradamento preesistente.
route [-v] del [-net|-host] destinazione [netmask maschera_di_rete] [gw router]
<-'
`->[altre_opzioni] [[dev] interfaccia]
In pratica, nel primo caso è possibile visualizzare (attraverso lo standard output) la tabella di instradamento. Generalmente, per questo scopo, l'uso normale è proprio quello di route senza argomenti.
Nel secondo caso, l'inserimento di una nuova voce nella tabella di instradamento avviene per mezzo dell'opzione add e dell'indicazione della destinazione da raggiungere. L'indicazione dell'interfaccia è facoltativa, se può essere determinata in modo predefinito.
Nel terzo caso, l'eliminazione di una voce della tabella di instradamento avviene per mezzo dell'opzione del e dell'indicazione della destinazione che prima veniva raggiunta. Anche in questo caso, l'indicazione dell'interfaccia è facoltativa, se può essere determinata in modo predefinito.
Quando si visualizza la tabella degli instradamenti, il programma tenta di risolvere gli indirizzi in nomi. Spesso, questo fatto può essere inopportuno, pertanto è comune l'uso dell'opzione -n con cui si evita tale conversione e non si perde tempo nel tentativo di risolvere indirizzi che non hanno un nome. Si osservi che, solitamente, la risoluzione di un indirizzo relativo a una rete, non ha un nome offerto dal servizio DNS, pertanto occorre predisporre il file |
-n
Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi e delle reti. Questo tipo di approccio potrebbe essere utile specialmente quando si hanno difficoltà ad accedere a un servizio di risoluzione dei nomi, o comunque quando si vuole avere la situazione completamente sotto controllo.
-net destinazione
L'indirizzo indicato nella destinazione fa riferimento a una rete. L'indirizzo può essere indicato in forma numerica o attraverso un nome di dominio; in questo ultimo caso, la traduzione avviene in base al contenuto del file /etc/networks
.
-host destinazione
L'indirizzo indicato nella destinazione fa riferimento a un nodo. L'indirizzo può essere indicato in forma numerica o attraverso un nome di dominio.
netmask maschera_di_rete
Permette di specificare la maschera di rete quando si sta facendo riferimento a un indirizzo di rete. Quando si inserisce una voce riferita a un nodo singolo, questa indicazione non ha senso. Quando la maschera di rete è un dato richiesto, se non viene inserito si assume il valore predefinito che dipende dalla classe a cui appartiene l'indirizzo indicato.
gw router
Fa in modo che i pacchetti destinati alla rete o al nodo per il quale si sta indicando l'instradamento, passino per il router specificato. Per questo, occorre che l'instradamento verso l'elaboratore che funge da router sia già stato definito precedentemente e in modo statico.
Normalmente, l'indirizzo utilizzato come router riguarda un'interfaccia collocata in un altro nodo. Eventualmente, per mantenere la compatibilità con Unix BSD, è possibile specificare un'interfaccia locale, intendendo così che il traffico per l'indirizzo di destinazione deve avvenire utilizzando quella interfaccia.
metric valore_metrico
Permette di definire il valore metrico dell'instradamento e viene utilizzato dai demoni che si occupano dell'instradamento dinamico per determinare il costo di una strada, o meglio per poter decidere il percorso migliore.
reject
Permette di impedire l'utilizzo di un instradamento.
[dev] interfaccia
Permette di definire esplicitamente l'interfaccia da utilizzare per un certo instradamento. Solitamente, questa informazione non è necessaria perché il kernel riesce a determinare l'interfaccia in base alla configurazione delle stesse.
È importante che questa indicazione appaia alla fine della riga di comando, in questo modo, il parametro dev, che precede il nome dell'interfaccia, è solo facoltativo.
Quando si interroga la tabella degli instradamenti, si ottiene una struttura composta da diverse colonne, in cui, quelle principali sono descritte nella tabella 115.7.
Tabella 115.7. Intestazioni della tabella di instradamento.
I tipi di informazioni che possono essere rappresentati nella colonna Flags sono elencati nella tabella 115.8.
Tabella 115.8. Significato delle lettere e dei simboli utilizzati nella colonna Flags della tabella di instradamento.
Seguono alcuni esempi di utilizzo.
#
route add -host 127.0.0.1 dev lo
Attiva l'instradamento verso l'interfaccia locale loopback.
#
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
Attiva l'instradamento della rete 192.168.1.0 che utilizza la maschera di rete 255.255.255.0, specificando che riguarda l'interfaccia di rete eth0.
#
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254
Attiva l'instradamento della rete 192.168.2.0 che utilizza la maschera di rete 255.255.255.0, attraverso il router 192.168.1.254 per il quale era già stato definito un instradamento precedentemente.
#
route add default gw 192.168.1.254
Attiva l'instradamento predefinito (nel caso che non siano disponibili altre possibilità) attraverso il router 192.168.1.254. La parola default fa automaticamente riferimento all'indirizzo IP 0.0.0.0.
#
route add 10.0.0.0 netmask 255.0.0.0 reject
Definisce un instradamento il cui accesso deve essere impedito.
$
route
Mostra la tabella di instradamento attuale.
La definizione degli instradamenti, serve per stabilire un collegamento con le interfacce di altri elaboratori. Quando anche le tabelle di instradamento degli altri elaboratori sono corrette, si può verificare che le comunicazioni sono possibili attraverso il programma ping.
ping permette di inviare una richiesta di eco a un indirizzo determinato, ovvero, a un'interfaccia determinata. Si riesce a ottenere l'eco solo se l'instradamento verso quell'indirizzo è funzionante e, nello stesso modo, se è attivo quello di ritorno gestito a partire dall'indirizzo di destinazione.
|
Normalmente si procede controllando prima l'indirizzo della propria interfaccia locale, quindi, via via si tenta di raggiungere indirizzi più lontani.
ping [opzioni] indirizzo
ping (6) permette di inviare una richiesta di eco a un indirizzo, utilizzando il protocollo ICMP, verificando di ricevere tale eco in modo corretto. ping viene usato quasi sempre senza opzioni, in modo da ottenere una richiesta di eco continuo, a intervalli di un secondo, che può essere interrotta attraverso la tastiera con la combinazione [Ctrl+c]. Tuttavia, dal momento che ping serve a scoprire dei problemi negli instradamenti e nel sistema di trasporto generale, può essere conveniente intervenire sulla dimensione dei pacchetti trasmessi e sul loro contenuto.
-c quantità
Conclude il funzionamento di ping dopo aver ricevuto il numero indicato di risposte.
-f
Invia la maggior quantità possibile di pacchetti di richiesta, limitandosi a segnalare graficamente la quantità di quelli che risultano persi, cioè per i quali non si ottiene l'eco di risposta. Serve per analizzare pesantemente un tratto di rete, tenendo conto che questa possibilità va usata con prudenza. Proprio a causa della pericolosità di tale opzione, questa può essere richiesta solo dall'utente root.
-i n_secondi_pausa
Permette di stabilire una pausa, espressa in secondi, tra l'invio di una richiesta di eco e la successiva. Se non viene utilizzata l'opzione -f, il valore predefinito di questa è di un secondo.
-p stringa_di_riempimento
Permette di aggiungere un massimo di 16 byte ai pacchetti utilizzati da ping, specificandone il contenuto in esadecimale. Ciò può essere utile per verificare il passaggio di pacchetti che hanno contenuti particolari e che per qualche ragione possono avere delle difficoltà.
-s dimensione
Permette di definire la dimensione dei pacchetti utilizzati, a cui si aggiunge l'intestazione ICMP. Il valore predefinito è di 56 byte a cui si aggiungono 8 byte di intestazione (64 in tutto).
$
ping 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1, a intervalli regolari di un secondo, fino a che riceve un segnale di interruzione.
$
ping -c 1 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1 e termina di funzionare quando riceve la prima risposta di eco.
$
ping -p ffffffff 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1, utilizzando pacchetti contenenti una serie di 32 bit a uno (FFFFFFFF16).
$
ping -s 30000 192.168.1.1
Invia una richiesta di eco all'indirizzo 192.168.1.1, utilizzando pacchetti lunghi 30 000 byte, oltre all'intestazione ICMP.
Nel capitolo introduttivo alle reti TCP/IP, si è accennato al protocollo ARP, con il quale si ottengono le corrispondenze tra indirizzi di livello 2 (collegamento dati) e indirizzi di livello 3 (rete), ovvero IP nel nostro caso. In particolare è stato fatto riferimento a una tabella ARP che viene mantenuta automaticamente da ogni nodo durante il suo funzionamento.
Potrebbe essere interessante ispezionare ed eventualmente modificare il contenuto di questa tabella ARP. Questo si fa con il programma arp. (7)
Ci sono situazioni in cui il protocollo ARP non può funzionare e in quei casi è possibile predisporre una tabella ARP preconfezionata attraverso la configurazione di un file: /etc/ethers
.
arp opzioni
arp permette di ispezionare e di modificare la tabella ARP del sistema.
-n | --numeric
Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi.
-a [host] | --display [host]
Mostra le voci corrispondenti a un nodo particolare, oppure tutti gli abbinamenti conosciuti.
-d host | --delete host
Elimina le voci riferite al nodo indicato.
-s host indirizzo_fisico
Crea una voce nella tabella ARP, abbinando l'indirizzo di un nodo a un indirizzo fisico (generalmente si tratta di un indirizzo Ethernet).
-f file | --file file
Indica un file da utilizzare per caricare delle voci nella tabella ARP. Generalmente, quando le interfacce sono di tipo Ethernet, questo file è rappresentato da /etc/ethers
.
#
arp -a
Elenca tutte le voci accumulate nella tabella ARP.
#
arp -a 192.168.1.2
Mostra le voci riferite esclusivamente al nodo 192.168.1.2.
#
arp -n -a 192.168.1.2
Come nell'esempio precedente, mostrando solo indirizzi numerici.
#
arp -d 192.168.1.2
Cancella le voci riferite al nodo 192.168.1.2 contenute nella tabella ARP.
#
arp -s 192.168.1.2 00:01:02:03:04:05
Assegna permanentemente (per la durata del funzionamento del sistema) l'indirizzo Ethernet 00:01:02:03:04:05 all'indirizzo IP 192.168.1.2.
#
arp -f /etc/ethers
Legge il file /etc/ethers
e utilizza il contenuto per definire delle voci permanenti nella tabella ARP.
Il file /etc/ethers
può essere usato per configurare a priori l'abbinamento tra indirizzi Ethernet (livello 2 del modello ISO-OSI) e indirizzi IP. Questo file può contenere esclusivamente delle righe composte da due elementi: l'indirizzo IP (o il nome) corrispondente a un'interfaccia e a fianco l'indirizzo Ethernet corrispondente. Si osservi l'esempio seguente:
192.168.1.2 00:01:02:03:04:05 192.168.1.3 00:14:02:23:07:1c 192.168.1.4 00:00:03:2d:00:0b |
daniele @ swlibero.org
2) In caso di difficoltà si può optare per l'instradamento del nodo 127.0.0.1 soltanto, come mostrato nel seguito.
3) Si parla di connessione broadcast.
4) Teoricamente sarebbe possibile indicare un instradamento per ogni elaboratore che si intende raggiungere, ma questo è decisamente poco conveniente dal punto di vista pratico.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ipv4_instradamento_locale.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]