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

____________________________________________________________

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.


Valore-|Descrizione----------------------------------------|
0----|Tutto ok.-----------------------------------------|
1    |Non `estato ricevutounnumero dipacchettidirispostaugualeaquello |
|    |dei pacchetti inviati.                                 |
2-----Altro-tipo di errore.----------------------------------

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 firewalling5, 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

________________________

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
Sequenza-|-Descrizione-----------------------------------------|
!H------|-(Host unreachable)-Interfaccia-irraggiungibile.----------------|
!N      | (Network unreachable) Rete irraggiungibile.                 |
!P      | (Protocol unreachable) Protocollo irraggiungibile.            |
!S      | (Source route failed) ???.                              |
!F!X-pmtu  | (F(Croamgmmeunntiactiaotino nne aeddemdi)ni ?st?r?a (tivveielnye p vrisohuiabliitzzeda)to ??il? p.ath MTU).|
!V      | (Host precedence violation) ???.                         |
!C      | (Precedence cutoff in effect) ???.                        |
!num------(ICMP-unreachable code num) ???.---------------------

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