Debian logo [inetdoc.LINUX]

4. Tests de communication ICMP

Commande ping

Le protocole Internet Control Message Protocol ou ICMP est décrit dans le document RFC792 Internet Control Message Protocol. Comme le protocole IP de la couche réseau fonctionne en mode non connecté, il ne fournit aucun service de contrôle lors de la transmission des paquets sur le réseau. Le rôle du protocole ICMP est de notifier l'émetteur lorsqu'il y a eu un problème.

La commande ping utilise principalement deux types de messages du protocole ICMP pour informer l'utilisateur sur les conditions de transmissions :

  • L'hôte distant est-il actif ou inactif.

  • Le temps de propagation en boucle (round-trip delay) lors de la communication avec l'hôte distant.

  • Les pertes de paquets pendant la communication.

Il existe 18 types de messages ICMP. Les deux types de messages employés par la commande ping sont :

  • Le type 8 (echo request) est émis vers l'hôte distant.

  • Le type 0 (echo reply) est émis par l'hôte distant en réponse.

Quelques autres types sont abordés dans la partie Section 9, « Fonctions réseau d'une interface ».

Pour valider le bon fonctionnement d'une communication sur un réseau IP, on suit une séquence précise de tests :

  1. adresse IP de l'interface de boucle locale : lo,

  2. adresse IP de l'interface du poste de travail : eth0 ou ppp0,

  3. adresse IP du destinataire de la passerelle par défaut,

  4. adresse IP extérieure au réseau local.

4.1. Etat de la pile TCP/IP

La commande suivante permet de valider le fonctionnement du protocole réseau IP pour les processus appartenant au même système. On parle alors de validation inter-processus.

$ ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.1 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.1 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.1 ms

Il s'agit ici de contrôler que les processus pairs à l'intérieur du même système sont capables de dialoguer entre eux.

On teste ensuite le fonctionnement de l'interface seule :

$ ping -c 2 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=0.1 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.1 ms

--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.1 ms

Il s'agit ici de contrôler que l'interface réseau est bien configurée et active.

Une fois ces deux étapes franchies, on peut tester les communications avec les autres systèmes.

4.2. Tests vers l'extérieur

Exemple d'echec :

$ ping -c 5 192.168.1.14
PING 192.168.1.14 (192.168.1.14): 56 data bytes

--- 192.168.1.14 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss

Exemple de succès :

$ ping -c 2 192.168.1.13
PING 192.168.1.13 (192.168.1.13): 56 data bytes
64 bytes from 192.168.1.13:1 icmp_seq=02 ttl=2553 time=1.1 ms
64 bytes from 192.168.1.13: icmp_seq=1 ttl=255 time=0.8 ms

--- 192.168.1.13 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.8/0.9/1.1 ms

1

Adresse de réponse du message ICMP : destinataire du test.

2

Numéro de séquence du message.

3

La valeur du champ TTL d'un paquet IP correspond au nombre d'interfaces de routage traversées pour arriver à l'interface.

Pour obtenir la syntaxe de toutes les options disponibles, il faut accéder aux pages de manuels Unix :

  • via la console avec la commande man ping.

  • via l'interface graphique avec le centre d'aide de KDE :Pages de manuels UnixSection 8 Administration systèmeping.

4.3. Tests de la résolution des noms

Cette commande est aussi très utile pour savoir si la résolution des noms d'hôtes fonctionne correctement. Dans ce cas on fait appel à un service Internet appelé Domain Name Service (>DNS). Cet appel au service >DNS nécessite un minimum de configuration.

$ ping -c 5 www.nic.fr 1
PING rigolo.nic.fr (192.134.4.20)2: 56 data bytes
64 bytes from 192.134.4.20: icmp_seq=0 ttl=54 time=57.6 ms
64 bytes from 192.134.4.20: icmp_seq=1 ttl=54 time=51.0 ms
64 bytes from 192.134.4.20: icmp_seq=2 ttl=54 time=57.0 ms
64 bytes from 192.134.4.20: icmp_seq=3 ttl=54 time=109.8 ms
64 bytes from 192.134.4.20: icmp_seq=4 ttl=54 time=165.3 ms

--- rigolo.nic.fr ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 51.0/88.1/165.3 ms

1

Utilisation de la commande ping avec un nom d'hôte au lieu d'une adresse IP.

2

Affichage de la correspondance entre le nom de l'hôte et son adresse IP.

En cas d'echec sur la résolution des noms, il faut contrôler la validité des informations dans les deux fichiers suivants :

  • /etc/resolv.conf

    search <domaine-fai>.fr1
    nameserver <addr dns-fai>2
    

    1

    Nom du domaine auquel l'interface de l'hôte est connectée.

    2

    Adresse IP du serveur de noms qui doit résoudre toutes les requêtes au service DNS.

  • /etc/host.conf

    order hosts, bind1
    multi on
    

    1

    Ordre de recherche des noms d'hôtes. Dans le cas présenté, la recherche est d'abord effectuée localement puis à l'aide du service DNS.