ping

La commande ping permet de tester la connexion réseau entre deux ordinateurs à l'aide de ICMP. Pour ce faire, la commande envoie des paquets à un ordinateur, et attend de celui-ci qu'il réponde. Si l'ordinateur répond, on peut conclure qu'il existe une route entre les deux ordinateurs.

Voici un exemple d'utilisation de ping sur l'ordinateur d'adresse 192.168.0.29:

$ ping -c 1 192.168.0.29
PING 192.168.0.29 (192.168.0.29) 56(84) bytes of data.
64 bytes from 192.168.0.29: icmp_seq=1 ttl=64 time=0.269 ms

--- 192.168.0.29 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.269/0.269/0.269/0.000 ms

ICMP

ICMP est un protocole réseau qui est directement lié au protocole TCP/IP. Ce protocole permet de véhiculer des messages d'information et d'erreur. Il permet par exemple à un routeur de signaler qu'un ordinateur n'est pas accessible.

Le principe de fonctionnement de ping est le suivant: Des paquets ICMP de type ECHO_REQUEST sont envoyés à destination d'un ordinateur sur le réseau. Lorsque l'ordinateur destinataire reçoit un tel paquet, il répond à l'aide d'un paquet ECHO_RESPONSE. L'ordinateur utilisant ping sait alors qu'il existe une connexion réseau vers l'ordinateur qui lui a répondu.

Un ordinateur sous Linux peux bloquer les requêtes ICMP à l'aide des paramètres du noyau ou d'un firewall. Tester la connectivité réseau avec ping est donc insuffisant. Il est impératif de vérifier que les paquets ICMP sont acceptés avant de conclure à un problème de réseau.

Utilisation

La plupart du temps, la commande ping est utilisée sans options. Il suffit de préciser l'adresse de destination pour la "pinger":

$ ping 192.168.0.29
PING 192.168.0.29 (192.168.0.29) 56(84) bytes of data.
64 bytes from 192.168.0.29: icmp_seq=1 ttl=64 time=0.250 ms
64 bytes from 192.168.0.29: icmp_seq=2 ttl=64 time=0.316 ms
64 bytes from 192.168.0.29: icmp_seq=3 ttl=64 time=0.313 ms
64 bytes from 192.168.0.29: icmp_seq=4 ttl=64 time=0.299 ms
64 bytes from 192.168.0.29: icmp_seq=5 ttl=64 time=0.330 ms

--- 192.168.0.29 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4065ms
rtt min/avg/max/mdev = 0.250/0.301/0.330/0.033 ms

Lorsque la commande est utilisé de cette façon, elle enverra des requêtes ICMP continuellement. Pour arrêter la commande, il suffit de lui envoyer le signal SIGINT qui est obtenu par par la combinaison de touche Ctrl+c.

Préciser le nombre de requêtes

Pour un script, le comportement par défaut de la commande ne convient par car elle ne s'arrête jamais. Pour limiter le nombre de requêtes ICMP à envoyer, il faut utiliser l'option -c suivie du nombre de paquet à envoyer:

$ ping -c 2 192.168.0.29
PING 192.168.0.29 (192.168.0.29) 56(84) bytes of data.
64 bytes from 192.168.0.29: icmp_seq=1 ttl=64 time=0.168 ms
64 bytes from 192.168.0.29: icmp_seq=2 ttl=64 time=0.246 ms

--- 192.168.0.29 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.168/0.207/0.246/0.039 ms

Page de manuel

La page de manuel de ping décrit la commande ping, mais aussi ping6, la variante de ping pour le protocole IPv6.