# Ping (Datenübertragung)

Ping ist ein Diagnose-Werkzeug, mit dem überprüft werden kann, ob ein bestimmter Host in einem IP-Netzwerk erreichbar ist. Daneben geben die meisten heutigen Implementierungen dieses Werkzeuges auch die Zeitspanne zwischen dem Aussenden eines Paketes zu diesem Host und dem Empfangen eines daraufhin unmittelbar zurückgeschickten Antwortpaketes an (= Paketumlaufzeit, meist round trip time oder RTT genannt). Das Programm wird üblicherweise als Konsolenbefehl ausgeführt. Entwickelt wurde Ping ursprünglich Ende 1983 von Mike Muuss und erschien zum ersten Mal in BSD 4.3.

## Funktionsweise

Ping sendet ein ICMP- oder ICMPv6-Paket des Typs „Echo Request“ an die angegebene Zieladresse. Der Empfänger antwortet darauf mit einem ICMP- oder ICMPv6-Paket vom Typ „Echo Reply“. Ist der Zielrechner nicht erreichbar, antwortet der zuständige Router mit einem ICMP- oder ICMPv6-Paket: „Network unreachable“ (Netzwerk nicht erreichbar) oder „Host unreachable“ (Gegenstelle nicht erreichbar).
Aus einer fehlenden Antwort kann nicht zweifelsfrei geschlossen werden, dass die Gegenstelle nicht erreichbar wäre, da manche Hosts oder Netze so konfiguriert sind, dass sie Ping-Anfragen ignorieren und verwerfen.
Wird dem Ping-Kommando ein Hostname anstatt einer IP-Adresse übergeben, lässt das Programm diesen durch das Betriebssystem auflösen. Bei einer fehlerhaft konfigurierten Namensauflösung schlägt diese nach Ablauf einer Wartezeit (Timeout) fehl und resultiert in einer Fehlermeldung. Falls eine IP-Adresse angegeben wurde, kann bei der Rückwärtsauflösung von IP-Adresse zu Name ebenfalls ein Timeout auftreten. Je nach Implementation von Ping ist die Rückwärtsauflösung jedoch standardmäßig deaktiviert oder lässt sich per Option abschalten.

## Beispiel

Es werden Datenpakete an den Zielhost www.google.de gesandt. Vom Programm wird die Zeit gemessen, bis die Antwort des Hosts eintrifft. Die Zeitangabe sagt aus, wie lange ein Datenpaket zum Host und wieder zurück benötigt („response time average“). Man kann daran grob erkennen, ob das Routing zur Gegenstelle funktioniert, deren TCP/IP-Stack funktionsfähig ist und mit welcher Verzögerung bei einer Verbindung zu rechnen ist.
Die Angabe TTL kann dazu genutzt werden, um grob abzuschätzen, über wie viele Router die ICMP-Antworten zurückgelaufen sind (jeder Router dekrementiert den Wert mindestens um 1, wobei der Initialwert je nach Implementierung 64, 128 etc. sein kann). Der Hinweg der Datenpakete muss nicht dem Rückweg entsprechen, daher ist die TTL nur ein Maß für die Anzahl der Router auf dem Rückweg. Bei Verwendung von dynamischen Routingmechanismem kann die TTL daher auch bei jeder Antwort anders aussehen.

## Round Trip Delay

Die Paketumlaufzeit wird als Round trip delay (RTD), round-trip-time (RTT) und im Deutschen häufig verkürzt als Pingdauer, Ping-Zeit oder schlicht Ping bezeichnet. Diese gemessene Latenz umfasst sowohl die entfernungsabhängige elektrische Signallaufzeit, als auch die Verarbeitungszeit in den als Zwischenstationen fungierenden Routern, zudem die Verarbeitungszeit in den TCP/IP-Stacks des Absende- und Zielrechners. Auf Verbindungen mit hoher Auslastung erhöhen sich die Zeiten durch Sendewarteschlangen in den jeweiligen Routern.
Die Entfernung zwischen zwei beliebigen Punkten auf der Erdoberfläche ist durch die zugehörige Orthodrome gegeben. Dividiert man die Entfernung durch die Übertragungsgeschwindigkeit und multipliziert anschließend das Ergebnis mit zwei (wegen der Zeitberechnung für Hin- und Rückweg), so erhält man die minimal mögliche RTT. Beispiel: Die Entfernung zwischen Berlin und Tokio beträgt 8941,2 km. Geht man von einer Übertragung mit Lichtgeschwindigkeit (im Vakuum ca. 300.000 km/s) aus, so ergibt sich eine minimal mögliche Paketumlaufzeit von etwa
    $2\cdot {\frac {8941{,}2\,\mathrm {km} }{300000\,\mathrm {km/s} }}\approx 0{,}0596\,\mathrm {s} =59{,}6\,\mathrm {ms}$
Ein realistischerer Wert für die Geschwindigkeit wäre etwa 150.000 km/s, wenn man die in der Materie (Glasfaser) reduzierte Lichtgeschwindigkeit sowie Verzögerungen an Umsetzstationen, Routern und Switches berücksichtigt. Unter Annahme dieser realistischeren Geschwindigkeit und dem direkten Leitungsweg ergibt sich eine minimale Pingzeit von etwa 120 ms.
In der Praxis liegt der Wert jedoch viel höher. So ergeben sich Laufzeiten von etwa 200 bis 300 ms zwischen Berlin und Tokio, da manche Verbindungen von Europa nach Asien nicht auf dem direkten Weg, sondern über die Vereinigten Staaten geroutet werden.
Zur Laufzeitmessung sind nur Hosts mit bekanntem Antwortverhalten sinnvoll nutzbar, da viele Netzwerkgeräte (Router, Switches) oft nur langsam auf ICMP-Requests reagieren, da sie nicht dahingehend optimiert wurden oder durch verzögerte Pings Angriffsszenarien auszuschließen versuchen (siehe Firewall).

## Herkunft des Namens

Der Name „ping“ stammt aus der Militärtechnik. Seit dem Zweiten Weltkrieg wird Sonar eingesetzt, um U-Boote aufzuspüren. Das dabei ausgestrahlte Schallsignal hört sich in einem U-Boot wie ein hohes Klopfgeräusch an, das als „Ping“ beschrieben wird.
Das Programm ping benutzt eine Serie von Internet Control Message Protocol (ICMP)-Echo-Nachrichten (messages), um zu prüfen, ob ein entfernter Host-Computer aktiv oder inaktiv ist. Es wurde (wie viele weitere Beiträge zur Entwicklung des Internets) als sogenannter Request for Comments (RFC) der Internet Engineering Task Force (IETF) zur Verfügung gestellt. Häufig wird „ping“ als Abkürzung von „Packet Internet Groper“ dargestellt. Der Autor des Programms selbst sagte jedoch: „Aus meiner Sicht ist PING kein Akronym für ‚Packet InterNet Grouper‘, sondern eine Analogie zum Sonar.“

## Verwandte Programme

Bei dem verbreiteten Unix-ähnlichen System Linux gibt es zusätzlich einige Programme, die ähnlich wie ping arbeiten:
* bing (misst zusätzlich die Übertragungsrate)
* fping (kann mehrere Rechner zugleich anpingen, siehe auch Broadcast)
* hping (erlaubt die Manipulation von Protokollen, Ports und Flags)
* arping (liest im lokalen Netzwerk auch die MAC-Adresse aus)
* mtr (kombiniert die Funktionalität von „traceroute“ und „ping“ in einem Netzwerkdiagnoseprogramm)
* httping (ermittelt für einen URL die Antwortzeit)
* ping6 (früher unter Linux für IPv6 verwandt, mittlerweile wieder mit ping vereint)
Im Betriebssystem Windows gibt es zur Fehlersuche im gerouteten Netzwerk:
* pathping (Mischung aus tracert und ping)