Was ist ICMP? – Das steckt hinter dem Nachrichtenprotokoll
Um Statusinformationen oder Fehlermitteilungen austauschen zu können, greifen Knoten in TCP/IP-Netzwerken auf das Internet Control Message Protocol (ICMP) zurück. Insbesondere Anwendungsserver und Gateways (z. B. Router) benutzen die IP-Erweiterung, um Benachrichtigungen über Probleme mit Datagrammen zum Absender des Pakets zurückzuschicken. Aufbau, Funktionsweise und Einordnung in den Internetprotokollstapel wurden 1981 im RFC 792 spezifiziert. Für Version 6 des Internetprotokolls ist darüber hinaus im RFC 4443 die spezifische Implementation ICMPv6 definiert worden.
Per Definition ist ICMP ein eigenständiges Protokoll, auch wenn die verschiedenen Benachrichtigungen in gewöhnliche IP-Pakete eingebunden werden. Zu diesem Zweck behandelt das Internet Protocol die optionale Erweiterung wie ein Protokoll höherer Schichten. Diverse, oft genutzte Netzwerkdienste wie traceroute oder ping basieren auf dem ICMP-Protokoll.
Wie funktioniert ICMP?
Um die Funktionsweise des Protokolls zu verstehen, schauen wir uns zunächst den Aufbau von ICMP bzw. des Headers an. Dieser knüpft direkt an den IP-Header an, wobei er durch die Angabe der Protokollnummer 1 bzw. 58 (ICMPv6) im IP-Feld „Protocol“ angekündigt wird. Der Kopfdatenbereich des Internet Control Message Protocol selbst ist nicht sehr umfangreich und hat folgende Form:
Das erste, 8 Bit lange Feld „Typ“ legt fest, um was für einen Benachrichtigungstyp es sich bei dem jeweiligen ICMP-Paket handelt. Diese Angabe kann durch das nachfolgende „Code“-Feld, das ebenfalls 8 Bit lang ist, spezifiziert werden. So gibt eine ICMP-Nachricht Typ 3 beispielsweise an, dass das Ziel des Datenpakets nicht erreichbar ist, während der Code diese Angabe präzisiert und Auskunft darüber gibt, ob das Zielnetzwerk (0), der gewünschte Host (1) oder der angestrebte Port (3) nicht auf die vorausgehende Anfrage reagiert haben. Im Anschluss an die Informationen über den Nachrichtentyp steht die ICMP-Prüfsumme, die für die Korrektheit der Benachrichtigung sorgt. Diese wird auf die gleiche Art und Weise gebildet wie die Prüfsumme anderer Standardprotokolle (IP, UDP, TCP).
Zuletzt stehen die ICMP-Daten, die abhängig von dem jeweiligen Typ und der auslösenden Instanz ganz unterschiedlich aufgebaut und strukturiert sind. Häufig werden hier noch einmal der IP-Header sowie die ersten 64 Bit des Datenpakets aufgeführt, das für die Fehlermeldung oder die Statusabfrage verantwortlich ist. Beim sogenannten ICMP-Tunneling wird dieses Feld dazu zweckentfremdet, Nutzdaten unter dem Radar von Firewalls zu verschicken oder einen verschlüsselten Kommunikationskanal zwischen zwei Rechnern aufzubauen.
Welche ICMP-Pakettypen gibt es?
Aufgrund der Feldlänge von 8 Bit sind theoretisch 256 verschiedene ICMP-Nachrichtentypen möglich, wobei rund 40 fest vergeben (inklusive einiger veralteter Vertreter) und einige für die experimentelle Nutzung blockiert sind. Der Großteil der Nummern (42–252) ist aktuell nicht vergeben, aber prinzipiell reserviert. Die Vergabe der Nummern liegt in der Verantwortung der IANA (Internet Assigned Numbers Authority), die beispielsweise auch die Zuordnung der IP-Adressräume und Ports reguliert. In der folgenden Tabelle haben wir einige der wichtigsten Paketarten zusammengefasst, die auf dem Internet Control Message Protocol basieren:
ICMP-Typ | ICMPv6-Typ | Typname | Code | Beschreibung |
---|---|---|---|---|
3 | 129 | Echo Reply | 0 | Antwort auf einen Netzwerk-Ping zum Testen der Erreichbarkeit |
0 | 1 | Destination Unreachable | 0–15 | ICMP-Nachricht, die u. a. über die Nichterreichbarkeit der im Feld „Code“ angegebenen Komponente (Netzwerk, Protokoll, Port, Host), über Routing-Probleme oder eine Blockierung durch Firewalls informiert |
5 | 137 | Redirect Message | 0–3 | Benachrichtigung über die Umleitung eines Pakets für das angegebene Netzwerk (0), den ausgewählten Host (1), für den angegebenen Dienst und das Netz (2) oder für den angegebenen Dienst und Host (3) |
8 | 128 | Echo Request | 0 | Netzwerk-Ping |
9 | 134 | Router Advertisement | 0 | Wird von Routern verwendet, um sich den verschiedenen Netzwerk-Clients mitzuteilen |
11 | 3 | Time Exceeded | 0 oder 1 | Statusbericht, der entweder angibt, dass die Lebensdauer (Time to Live, TTL) eines Pakets (0) oder die Wartezeit für den Zusammenbau fragmentierter IP-Pakete (1) abgelaufen ist |
13 | 13 | Timestamp | 0 | Versieht das entsprechende IP-Paket mit einem Zeitstempel, der dem Versandzeitpunkt entspricht und der Synchronisation zweier Rechner dient |
14 | - | Timestamp Reply | 0 | Antwortnachricht auf einen ICMP-Timestamp, die der Adressat nach dem Erhalt eines solchen verschickt |
30 | - | Traceroute | 0 | Veralteter ICMP-Nachrichtentyp, der dazu genutzt wurde, den Weg eines Datenpakets im Netzwerk nachzuverfolgen; heute sind zu diesem Zweck in erster Linie Echo-Requests und -Replys im Einsatz |
Hier kommen ICMP und ICMPv6 zum Einsatz
ICMP ist für die Kommunikation in IP-Netzwerken von entscheidender Bedeutung, wobei das Protokoll – wie bereits erwähnt – insbesondere von Routern eingesetzt wird. Server und Clients machen aber ebenso von den Möglichkeiten der an das Internet Protocol gekoppelten Nachrichten Gebrauch und erhalten auf diese Weise wichtige Netzwerkinformationen.
Ein weit verbreitetes Einsatzszenario ist der sogenannte Netzwerk-Ping, der mithilfe gleichnamiger Anwendungen über die Kommandozeile des jeweiligen Betriebssystems ausgeführt werden kann. Das simple, aber nützliche Diagnosewerkzeug stellt die einfachste Lösung dar, um die Erreichbarkeit eines bestimmten Hosts im Netzwerk zu überprüfen. Zu diesem Zweck versendet Ping ein IP-Paket inklusive ICMP(v6)-„Echo Request“ (Typ 8 bzw. 128), auf das der Empfänger seinerseits nach dem Erhalt mit einem Datenpaket beantwortet, das den ICMP-Eintrag „Echo Reply“ (Typ 0 bzw. 129) enthält. Wird das System, an das der Ping gesendet wurde, nicht erreicht, verschickt die letzte, noch erreichbare Netzwerkstation ein Antwortpaket. Dieses ist ebenfalls um eine ICMP-Komponente erweitert: Typ 3 bzw. 1 „Destination Unreachable“ („Ziel nicht erreichbar“).
Router wiederum nutzen ICMP für verschiedene Zwecke: Per Router Advertisement (ICMP-Typ 9; ICMPv6-Typ 134) setzen sie z. B. alle aktiven Netzwerkteilnehmer in regelmäßigem Abstand über ihre Anwesenheit und verschiedene Netzwerkinformationen in Kenntnis. Diese speichern die erhaltenen Daten in ihrem Cache und machen den Router wahlweise zum Standard-Gateway. Ferner versuchen Router den Weg von Datenpaketen im Netzwerk durch ICMP-Redirects (Typ 5 bzw. 137) zu optimieren. Mithilfe dieses Nachrichtentyps weisen die Netzwerkschnittstellen einen Host auf die Existenz eines besseren, ersten Hops (Zwischenstation) für den Versand von IP-Paketen hin.