17.2.7 Diagnosi di problemi di connettività
Per verificare la connettività delle interfacce di rete è spesso utile ricorrere ad alcuni semplici
programmi messi a disposizione dal sistema, che attraverso l’invio di particolari pacchetti
effettuano un test di massima sulla raggiungibilità delle interfacce di rete.
17.2.7.1 ping
Il comando ping (man page ping(8), il cui nome deriva dal suono dei sonar per lo scandaglio
del fondale marino presenti sulle navi, è utilizzato per verificare la comunicazione tra due
interfacce di rete per mezzo dell’invio di pacchetti ICMP. Il programma invia dei pacchetti
ICMP di tipo Echo request ad una determinata interfaccia di rete ed attende i relativi
pacchetti ICMP Echo reply di risposta.
____________________________________________________________________
Comando: ping
Path: /bin/ping
SINTASSI
$ ping [option] destination
DESCRIZIONE
-
option indica la modalità di funzionamento di ping. Può assumere i seguenti
valori
-
-a emette un segnale acustico per ogni pacchetto trasmesso;
-
-A indica di essere adattativo, ovvero l’intervallo di tempo tra l’invio di
un pacchetto e quello successivo dipende dal tempo di ritorno dei
pacchetti stessi;
-
-b permette di effettuare ping in broadcast;
-
-B non permette di cambiare l’indirizzo del mittente nei pacchetti
inviati;
- -c count
indica di fermarsi dopo aver inviato count messaggi ICMP di tipo
“echo request”;
-
-f indica di visualizzare un carattere ‘.’ per ogni messaggio ICMP
di tipo “echo request” inviato ed un carattere Backspace per ogni
messaggio ICMP di tipo “echo reply” ricevuto;
-
-F ???.
-
-i interval
specifica il tempo di attesa (in secondi) tra l’invio di un pacchetto e
l’altro (il valore di default è 1 s);
-
-I source_addr
specifica l’indirizzo IP da inserire come mittente;
-
-l preload
indica di inviare inizialmente preload pacchetti senza attendere la
relativa risposta;
-
-L indica di non effettuare il loopback dei pacchetti inviati in multicast;
-
-n indica di visualizzare gli indirizzi IP in forma numerica;
-
-p value
indica di aggiungere in coda ai pacchetti un valore di 16 bit espresso
in notazione esadecimale;
-
-Q tos specifica il valore da assegnare al campo TOS (v. RFC 1349 e 2474);
-
-q indica di non visualizzare niente in output tranne quelle di riepilogo
all’inizio ed alla terminazione dell’esecuzione;
-
-r indica di non considerare la routing table, ma di inviare i messaggi
ICMP come se l’interfaccia di destinazione fosse raggiungibile
direttamente;
-
-R indica di includere l’opzione “record route” nei messaggi ICMP di
tipo “echo request” e di visualizzare il relativo buffer al ricevimento
dei messaggi ICMP di risposta;
-
-s packetsize
specifica il numero di byte di dati da inviare (il valore di default è
56, per un totale di 64 byte, di cui 8 sono dell’header ICMP);
-
-S sndbuf
imposta il numero di pacchetti da bufferizzare (sndbuf ) nel socket (il
valore di default è 1);
-
-t ttl imposta il valore da assegnare al campo TTL dell’IP datagram;
-
-T timestamp_options
imposta le opzioni di timestamp dell’IP datagram;
-
-M hint
indica la strategia del Path MTU Discovery, secondo quanto
illustrato nella tab. 17.10;
| Tabella 17.10: | Possibili valori di hint del comando ping. |
|
-
-U visualizza il tempo totale user-to-user al posto del network round trip
time (che potrebbe differire a causa di malfunzionamenti dei
DNS);
-
-v indica di visualizzare un output più verboso;
-
-V visualizza la versione di ping;
-
-w deadline
specifica il tempo (in secondi) dopo il quale ping deve terminare;
-
-W timeout
specifica il tempo (in secondi) di attesa della risposta ad un pacchetto
inviato;
-
destination specifica l’interfaccia alla quale inviare i pacchetti ICMP. Questa può essere
espressa con il proprio indirizzo IP oppure il relativo nome di dominio (v.
sez. 19.1);
____________________________________________________________
Al suo avvio, ping inizia ad inviare una sequenza di pacchetti ICMP Echo request
all’interfaccia specificata da destination, con una frequenza di 1 al secondo ed attende una
risposta. L’esito di ogni risposta, assieme ad altri eventuali dettagli, viene visualizzato sullo
schermo. Per interrompere la sequenza di pacchetti ICMP inviati, si deve interrompere il
funzionamento di ping con la combinazione di tasti 
.
L’exit status di ping è riportato nella tab. 17.11.
| Tabella 17.11: | Possibili valori dell’exit status di ping. |
|
La verifica della comunicazione tra interfacce per mezzo di ping, cioè con il protocollo
ICMP, si basa sulla supposizione logica che, generalmente, se non si è in grado di
comunicare con pacchetti ICMP, non lo si potrà fare nemmeno con protocolli di più alto
livello.
È comunque possibile, attraverso un meccanismo di firewalling,
fare in modo che un’interfaccia di rete ignori i pacchetti ICMP ricevuti e quindi
non risponda a questi ultimi, ma svolga il suo compito in maniera opportuna con
pacchetti relativi a protocolli di livello più elevato (TCP, UDP, ...). In genere
questo modo di funzionamento delle interfacce di rete viene utilizzato sui sistemi
che danno un servizio continuo su Internet per evitare di sommergere altri sistemi
di risposte a pacchetti ICMP non desiderate.
|
(esempio di ping) [da completare ...]
17.2.7.2 traceroute
Il comando traceroute (man page traceroute(8)) permette di scoprire qual’è il percorso dei
pacchetti sulla rete, dal mittente alla destinazione. Per la natura dell’algoritmo di
instradamento dei pacchetti, questa affermazione non è del tutto vera, ma questo è il metodo
più utilizzato per scoprire il percorso dei pacchetti.
Il funzionamento di traceroute si basa sull’invio di IP datagram. Ogni IP datagram
inviato, contiene un valore via via crescente nel campo TTL.
Il primo IP datagram inviato da traceroute avrà il TTL contenente il valore 1. Così
facendo, la prima interfaccia di rete che riceverà l’IP datagram lo scarterà, inviando un
pacchetto ICMP di risposta al mittente per informarlo dell’accaduto. In questo modo
traceroute conoscerà la prima interfaccia di rete che ha ricevuto l’IP datagram. Se tale
interfaccia non è quella di destinazione (il suo indirizzo IP non è quello del destinatario
dell’IP datagram inviato), traceroute invia un altro IP datagram ma con il campo
TTL contenente il valore 2. Questa volta la seconda interfaccia di rete scarterà
l’IP datagram rispondendo al mittente un con un pacchetto ICMP. E così via. Si
arriva così a delineare, interfaccia di rete dopo interfaccia di rete, il percorso seguito
da un generico IP datagram inviato dall’interfaccia di rete considerata a quella di
destinazione.
____________________________________________________________________
Comando: traceroute
Path: /usr/sbin/traceroute
SINTASSI
$ traceroute [option] destination [packetlen]
DESCRIZIONE
-
option indica la modalità di funzionamento di traceroute. Può assumere i seguenti
valori
-
-f first_ttl
imposta il valore iniziale del TTL degli IP datagram secondo quanto
specificato da first_ttl (il valore di default è 1);
-
-F imposta il bit di non frammentazione;
-
-d abilita il debug;
-
-g gateway
specifica il gateway ???;
-
-i iface
specifica l’interfaccia di rete (iface) dalla quale inviare i pacchetti;
-
-I indica di utilizzare messaggi ICMP di tipo echo, invece degli UDP
datagram;
-
-m max_ttl
imposta il valore masimo del TTL degli IP datagram secondo quanto
specificato da max_ttl (il valore di default è 30);
-
-n visualizza gli indirizzi soltanto in forma numerica;
-
-p port
specifica la porta UDP di base (port) da utilizzare (per default è la
33434). Si suppone infatti che sulle macchine che ricevono i pacchetti
UDP, non ci sia in ascolto nessun processo sull’intervallo di porte
[base, base+nhops-1];
-
-q nqueries
imposta il numero di pacchetti da inviare con lo stesso TTL (per
default è 3);
-
-r indica di non considerare la routing table, ma di inviare i pacchetti
come se l’interfaccia di destinazione fosse raggiungibile direttamente;
-
-s src_addr
specifica l’indirizzo dell’interfaccia (src_addr) da utilizzare come
mittente;
-
-t tos imposta il valore del TOS degli IP datagram secondo quanto
specificato da tos (il valore di default è 0);
-
-v (verbose) indica di visualizzare tutti i messaggi ICMP di ritorno;
-
-w waittime
imposta il tempo massimo di attesa (in secondi) per la risposta ad
un pacchetto inviato (per default è 5 secondi);
-
-x disabilita il calcolo del checksum dell’IP;
-
-z pause
imposta il tempo (in millisecondi) tra un unvio di un pacchetto e
quello successivo (per default è 0);
-
destination indica l’indirizzo IP dell’interfaccia di destinazione o il suo relativo
nome;
-
packetlen indica la lunghezza massima dei pacchetti (in byte);
________________________
Ogni volta che viene ricevuto un messaggio ICMP come risposta ad un pacchetto inviato,
traceroute visualizza l’indirizzo dell’interfaccia mittente relativa. Nel caso in cui non si abbia
ricevuto alcuna risposta entro il tempo massimo di attesa impostato viene visualizzato un
carattere ‘*’, al posto dell’indirizzo IP dell’interfaccia mittente
Si consideri il seguente esempio
$ traceroute allspice.lcs.mit.edu.
traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max
1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms
3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms
4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms
5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms
6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms
7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms
8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms
9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms
10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms
11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms
12 * * *
13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms
14 * * *
15 * * *
16 * * *
17 * * *
18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms
La prima riga visualizzata da traceroute conferma l’interfaccia di rete che verrà ricercata
ed il numero massimo di hops (TTL). Le righe 2 e 3 riportano la stessa indicazione: ciò è
dovuto ad un bug presente sul kernel del sistema lilac-dmc.Berkeley.EDU che effettua l’inoltro
dei pacchetti con TTL = 0. Le righe 12, 14, 15, 16 e 17 non riportano gli indirizzi delle
interfacce poiché non è stato risposto alcun messaggio ICMP “time exceeded” o è stato fatto
con un valore di TTL troppo basso per raggiungere il destinatario. In corrispondenza di ogni
riga, viene visualizzato anche il tempo di risposta stimato. Inoltre può essere visualizzato un
carattere ‘!’ nel caso in cui il pacchetto IP relativo al messaggio ICMP di risposta
abbia un valore di TTL < 1. Altre annotazioni possibili sono quelle riportate nella
tab. 17.12
| Tabella 17.12: | Possibili annotazioni nell’output di traceroute (v. RFC 1812). |
|
[da completare ...]
Il fatto è che la politica di gestione dell’instradamento dei pacchetti da parte di un
router può cambiare da un momento all’altro o addirittura il percorso da far seguire
ad un pacchetto può cambiare da un momento all’altro perché un indirizzo non è
momentaneamente raggiungibile (è caduto il collegamento, lo stack TCP/IP non
risponde, ...). Quindi non è detto che il percorso dei pacchetti rimanga lo stesso
tra l’invio di un IP datagram e l’altro, ma, con molta probabilità, il percorso non
cambierà.