[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [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:
|
|
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.
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:
|
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
[Invio](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 riguarda la configurazione di una scheda Ethernet, dal momento che questa si trova a operare nella rete 192.168.1.0, l'instradamento corretto corrisponde allo schema seguente:
|
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
[Invio]
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
[Invio]
#
route add -host 192.168.1.2 dev eth0
[Invio]
#
route add -host 192.168.1.3 dev eth0
[Invio]
#
route add -host 192.168.1.4 dev eth0
[Invio]
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:
|
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 è lo stesso):
#
route add -host 192.168.7.1 dev plip1
[Invio]
#
route add -host 192.168.7.2 dev plip1
[Invio]
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
[Invio]
Oppure:
$
ping 192.168.7.2
[Invio]
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:
|
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.
La sintassi di route può articolarsi in diversi modi a seconda del tipo di azione da compiere.
route [opzioni] |
In particolare, conviene distinguere fra tre situazioni diverse, come descritto nel riepilogo seguente:
|
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 |
Quando si interroga la tabella degli instradamenti, si ottiene una struttura composta da diverse colonne, in cui, quelle principali sono descritte nella tabella 181.21.
|
I tipi di informazioni che possono essere rappresentati nella colonna Flags sono elencati nella tabella 181.22.
|
Seguono alcuni esempi di utilizzo.
#
route add -host 127.0.0.1 dev lo
[Invio]
Attiva l'instradamento verso l'interfaccia locale loopback.
#
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
[Invio]
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
[Invio]
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 è già stato definito un instradamento precedentemente.
#
route add default gw 192.168.1.254
[Invio]
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
[Invio]
Definisce un instradamento il cui accesso deve essere impedito.
$
route
[Invio]
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.
Il programma 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.
Il programma ping (6) permette di inviare una richiesta di eco a un indirizzo, utilizzando il protocollo ICMP, verificando di ricevere tale eco in modo corretto. Questo programma 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 virtuale <Control_c> (che di solito coincide proprio con la combinazione reale [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.
ping [opzioni] indirizzo |
|
Segue la descrizione di alcuni esempi.
$
ping 192.168.1.1
[Invio]
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
[Invio]
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
[Invio]
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
[Invio]
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 (177), si accenna 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 si fa riferimento a una tabella ARP che viene aggiornata automaticamente da ogni nodo durante il suo funzionamento.
Potrebbe essere interessante ispezionare ed eventualmente modificare il contenuto di questa tabella ARP, cosa che 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
.
Il programma arp permette di ispezionare e di modificare la tabella ARP del sistema.
arp opzioni |
|
Segue la descrizione di alcuni esempi.
#
arp -a
[Invio]
Elenca tutte le voci accumulate nella tabella ARP.
#
arp -a 192.168.1.2
[Invio]
#
arp -n -a 192.168.1.2
[Invio]
Come nell'esempio precedente, mostrando solo indirizzi numerici.
#
arp -d 192.168.1.2
[Invio]
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
[Invio]
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
[Invio]
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:
|
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) 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.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]