[Universität Karlsruhe, Institut für Rechnerentwurf und              Fehlertoleranz]Universität KarlsruheFakultät für InformatikInstitutUniversität Karlsruhe

Proseminar Grundlagen der Rechnerkommunikation:
Internet Control Message Protocol (ICMP)

Markus Klein

Inhaltsverzeichnis

        1 Einleitung
        2 ICMP-Nachrichten Format
        3 Typen von ICMP-Nachrichten
                3.1 Echo-Anforderung/Antwort (Echo Request/Reply) (Typ 8 und 0)
                3.2 Zielknoten unerreichbar (Destination Unreachable) (Typ 3)
                3.3 Quelle dämpfen (Source Quench) (Typ 3)
                3.4 Umleitungsmeldung (Route Change Request) (Typ 5)
                3.5 Router-Findungsmeldungen (Router Discovery Messages) (Typ 9 und 10)
                        3.5.1 Router-Ankündigungsmeldung (Router Advertisement Message) (Typ 9)
                        3.5.2 Router-Anforderungsmeldung (Router Solicitation Message) (Typ 10)
                3.6 Zeit überschritten (Time Exceeded) (Typ 11)
                3.7 Parameter-Problem (Typ 12)
                3.8 Zeitstempel-Anforderung/Antwort (Timestamp Request/Reply) (Typ 13 und 14)
                3.9 Informationsmeldung-Anforderung/Antwort (Information Request/Reply) (Typ 15 und 16)
                3.10 Adressfeld-Format Anforderung/Antwort (Adress Mask Request/Reply) (Typ 17 und 18)
        4 Zusammenfassung
        Literatur

1 Einleitung

Das Internet Control Message Protocol (ICMP) ist neben dem Internet-Protokoll (IP) als ein Hilfsprotokoll auf der Vermittlungsschicht (Layer 3) angesiedelt. Mit dem ICMP-Protokoll werden Fehlermeldungen und Informationsmeldungen zwischen Rechnern im Netz ausgetauscht. Veröffentlicht wurde das ICMP 1981 im [RFC792] Request for Comments 792. Im [RFC1256] RFC 1256 wurde der Umfang der ICMP-Nachrichten erheblich erweitert.

Mit dem Internet-Protokoll (IP) kann man Daten verschicken, man hat jedoch keine Garantie, dass diese ankommen. Unterwegs kann eine Menge schief laufen, Rechner oder Router können falsch konfiguriert, momentan oder dauerhaft ausgefallen oder überlastet sein, der time-to-live Zähler eines IP-Paketes kann abgelaufen sein, u.s.w.. In einem heterogenen Netz wie dem Internet hat man keine Möglichkeit, solche Fehler hardwarebasiert zu melden, bzw. zu beheben. Damit man solche Fehler überhaupt melden kann, wurde das Internet Control Message Protokoll (ICMP) standardisiert. Ursprünglich dafür entworfen, Informationen und Fehlermeldungen zwischen Routern auszutauschen, ist ICMP jedoch nicht auf Router beschränkt, sondern muss in jeder TCP/IP-Implementierung vorhanden sein, also auch auf ganz normalen Rechnern. ICMP ermöglicht es der IP-Software zweier Rechner miteinander zu kommunizieren, jedoch kann ICMP auch von normalen "höheren" Anwendungen benutzt werden (z.b. ping).

ICMP ist nur ein Mechanismus zur Fehlermeldung, nicht zur Fehlerbehebung. Wenn z.B. ein Paket über die Router R1,R2,...Rk geschickt wird, und Router Rk leitet das Paket falsch weiter an Router Re, dann kann Router Re nur eine Fehlermeldung an den Sender des Paketes schicken, nicht jedoch an den falsch konfigurierten Router.

2 ICMP-Nachrichten Format

Das ICMP-Protokoll baut auf dem IP-Protokoll auf, d.h. es wird von IP behandelt, als sei es ein Protokoll einer höheren Schicht. ICMP-Daten werden immer mit einem vollständigen IP-Header verschickt, die eigentlichen ICMP-Meldungen befinden sich im anschließenden IP-Datenteil:


Abbildung 2.1: Einbettung einer ICMP-Nachricht in ein IP-Paket

Die ICMP-Meldungen im Datenteil eines IP-Paketes beginnen mit einem ICMP-Header, der folgende Form hat:


Abbildung 2.2: Kopf einer ICMP-Nachricht

Typ bezeichnet den Typ der ICMP-Nachricht. Code ist eine zusätzliche Unterteilung, d.h. jeder Typ besitzt einen oder mehrere Codes, mit denen der Fehler bzw. die Information genauer spezifiziert wird. Die Prüfsumme "sichert" die ICMP-Daten ab dem ICMP-Typ Feld und ermöglicht Fehlererkennung.

3 Typen von ICMP-Nachrichten

3.1 Echo-Anforderung/Antwort (Echo Request/Reply) (Typ 8 und 0)

Die ICMP-Nachrichten Echo-Anforderung und Antwort werden zur Fehlersuche in Netzwerken benutzt. Dazu sendet Rechner A eine Echo-Anforderung an Rechner B. Wenn die Echo-Anforderung bei Rechner B ankommt sendet B eine Echo Antwort. Dies kann natürlich nur funktionieren, wenn alle Router auf dem Weg richtig funktionieren, Rechner B läuft, und die IP und ICMP Protokolle richtig implementiert sind. Der Kopf einer ICMP-Echo Nachricht sieht so aus:


Abbildung 3.1: Format der ICMP Echo-Anforderung/Antwort

Das Feld Identifizierung dient zur eindeutigen Identifizierung des Prozesses, das die Anforderung gesendet hat. Bei einer Antwort auf die Echo-Anforderung wird das Antwortpaket an diesen Port zurückgesendet. Der Sender eines Echo-Paketes nummeriert die Datagramme fortlaufend. Der Empfänger benutzt die gleiche Sequenznummer bei der Echo-Antwort. Der Sender kann dadurch auf sehr einfache Art die Richtigkeit der Echo-Antworten überprüfen. Der Rest des Datagramms besteht aus beliebigen Daten, die vom Empfänger vollständig an den Sender zurückgeschickt werden.

Der Befehl ping der auf den meisten Betriebssystemen implementiert ist, benutzt solche ICMP Echo Nachrichten, um die Erreichbarkeit von Rechnern zu testen.

3.2 Zielknoten unerreichbar (Destination Unreachable) (Typ 3)

Wenn ein Router ein IP-Paket nicht ausliefern kann, sendet er eine "Zielknoten unerreichbar" Nachricht zurück an den Sender. Diese sieht so aus:


Abbildung 3.2: Format der ICMP Zielknoten

Das Feld Code bezeichnet die Fehlerursache näher, die zur Nichtauslieferung geführt hat. Es sind folgende Codes möglich.
Wert  Bedeutung
0 Netzwerk unerreichbar
1 Rechner unerreichbar
2 Protokoll unerreichbar
3 Port unerreichbar
4 Fragmentation benötigt und DF-bit gesetzt
5 Source route Option fehlgeschlagen
6 Zielnetzwerk unbekannt
7 Zielrechner unbekannt
8 Senderechner isoliert
9 Kommunikation mit Zielnetzwerk administrativ verboten
10 Kommunikation mit Zielrechner administrativ verboten
11 Netzwerk unerreichbar für Dienst
12 Rechner unerreichbar für Dienst

Die meisten davon sind sicher selbsterklärend. IP-Pakete können verschieden groß sein. Damit sie auch über Netzwerke verschickt werden können, die nur kleinere Paketgrößen erlauben, können sie aufgeteilt (fragmentiert) werden. Es kann aber vom Sender des Paketes dafür gesorgt werden, dass das Paket nicht aufgeteilt wird, indem er das DF-Bit (Don´t Fragment-Bit) im IP-Header setzt. Wenn nun ein solches Paket über ein Netzwerk geschickt werden soll, in dem die maximale Paketgröße unter der Größe des IP-Paketes liegt, wird das Paket verworfen und eine "Zielknoten unerreichbar" Nachricht mit Code 4 an den Sender geschickt. "Source Route" ist eine Option, bei der man im voraus bestimmen kann, über welche Router das Paket geschickt wird. Schlägt ein solches vorgeschriebenes Routing fehl, wird das dem Sender über eine "Zielknoten unerreichbar" Nachricht mit Code 5 mitgeteilt.

Man hat bei Routern allerdings keine Garantie dafür, dass sie alle Fehler erkennen, d.h. es gibt Fälle, in denen ein IP-Paket nicht an den Zielrechner ausgeliefert werden kann, und der Router dies nicht bemerkt, also auch keine "Zielknoten unerreichbar" Nachricht an den Sender zurückschickt.

3.3 Quelle dämpfen (Source Quench) (Typ 3)

Router in Netzwerken können überlastet werden, wenn ein schnelleres Netzwerk Daten über ein langsameres Netzwerk zu einem dritten Netzwerk schicken will, oder wenn mehrere andere Router gleichzeitig einen einzelnen Router mit Paketen füttern, die dieser dann nicht mehr schnell genug verarbeiten kann. Ist dieses Mehraufkommen nur von kurzer Dauer, gleicht der Router dies durch seine internen Puffer aus. Wenn diese jedoch kurz vor dem Überlaufen sind, verwirft der Router IP-Pakete und schickt für jedes verworfene IP-Paket eine "Quelle dämpfen" Meldung an den Sender.


Abbildung 3.3: Format der ICMP Quelle

Wenn der Sender solche "Quelle dämpfen" Meldungen bekommt, verringert er die Anzahl an Paketen pro Zeiteinheit die schickt und zwar genau solange, bis er keine "Quelle dämpfen" Meldungen mehr bekommt. Danach erhöht der Sender die Anzahl wieder langsam, bis er wieder die ersten "Quelle dämpfen" Meldungen bekommt. Durch diesen Mechanismus wird immer die maximale Übertragungskapazität genutzt, ohne unnötig viele Pakete zu verlieren.

3.4 Umleitungsmeldung (Route Change Request) (Typ 5)

Wenn ein Router ein IP-Paket an einen Rechner empfängt, dessen Zielnetzwerk nicht über diesen Router zu erreichen ist und der Router den richtigen Router zum Zielnetzwerk kennt, schickt er dem Sender des Paketes eine Umleitungsmeldung mit dem richtigen Router. Dieser kann dann das Paket über den richtigen Router an das Zielnetzwerk schicken. Falsch konfigurierte Router auf dem Weg dazwischen können so zwar umgangen werden, aber der Fehler des Routers wird dadurch nicht behoben.


Abbildung 3.4: Format der ICMP Umleitungsmeldung

Das Feld Code spezifiziert die Meldung genauer.
Wert  Bedeutung
0 Umleitung aller Datagramme für ein bestimmtes Netz
1 Umleitung aller Datagramme für einen bestimmten Rechner
2 Umleitung aller Datagramme für bestimmten Dienst und Netz
3 Umleitung aller Datagramme für bestimmten Dienst und Rechner

3.5 Router-Findungsmeldungen (Router Discovery Messages) (Typ 9 und 10)

Durch die Router-Findungsmeldungen ist es einem Rechner im Netzwerk möglich, die IP-Adressen aller angeschlossenen Router herauszufinden. Die Router-Findungsmeldungen unterteilen sich in Router-Ankündigungsmeldungen und Router-Anforungsmeldungen.

3.5.1 Router-Ankündigungsmeldung (Router Advertisement Message) (Typ 9)

Ein Router verkündet durch die Router-Ankündigungsmeldung periodisch (per Multicast) die Verfügbarkeit seiner Schnittstellen zum Netz. Dadurch können Rechner im Netz schnell und ohne Eingriff des Systemadministrators die Router-Adressen lernen.


Abbildung 3.5: Format der ICMP Router-Ankündigungsmeldung

Im Feld "Num Addrs" steht die Anzahl der in dieser Ankündigungsmeldung enthaltenen IP-Adressen. Das "Addr Entry Size"-Feld definiert die Anzahl der 32-Bit Worte, die pro IP-Router-Adresse als Information in dieser Meldung enthalten sind. "Lifetime" legt die Gültigkeitsdauer fest. "Router Address [#]" ist die IP-Adresse eines Routers im Netzwerk, und "Preference Level [#]" seine Wertigkeit. Der Router mit der höchsten Wertigkeit wird als Standardrouter verwendet, ist dieser nicht erreichbar, wird der mit der zweithöchsten Wertigkeit verwendet, usw.

3.5.2 Router-Anforderungsmeldung (Router Solicitation Message) (Typ 10)

Ein Rechner sendet nach dem Initialisierungsvorgang eine oder mehrere Router-Anforderungsmeldungen aus. Ein Router der diese Meldung empfängt, sendet sofort eine Router-Ankündigungsmeldung.

3.6 Zeit überschritten (Time Exceeded) (Typ 11)

Jedes IP-Paket enthält im Header ein sogenanntes "Time-to-Live"-Feld (TTL), in dem die verbleibende Lebensdauer des IP-Paketes definiert ist. Fällt dieser Wert unter 0 muss das Paket zerstört werden, und dem Sender des Paketes wird eine "Zeit überschritten" ICMP-Meldung gesendet.


Abbildung 3.6: Format der ICMP Maximale Zeit überschritten Meldung

Das Feld Code spezifiziert den Grund genauer, weshalb das Datagramm zerstört wurde:
Wert  Bedeutung
0 Lebenszeit des Datagramms wurde überschritten
1 Beim Fragmentierungsprozess wurde die Lebenszeit überschritten

3.7 Parameter-Problem (Typ 12)

Wenn ein Router in einem IP-Paket einen Fehler entdeckt, vernichtet er das Paket und schickt dem Sender des Paketes eine "Parameter-Problem" Nachricht.


Abbildung 3.7: Format der ICMP Parameter-Problem Meldung

Das Feld Pointer enthält einen Wert n der angibt, dass der Parameterfehler im n-ten Byte des IP-Headers aufgetreten ist. Die Fehler eines IP-Headers können z.b. falsch gesetzte Optionen im Optionen-Feld sein.

3.8 Zeitstempel-Anforderung/Antwort (Timestamp Request/Reply) (Typ 13 und 14)

Der Zeitstempel Mechanismus von ICMP kann dazu benutzt werden, die "Uhren" von Rechnern und Routern zu korrigieren. Wenn ein Rechner/Router die Uhrzeit eines anderen Rechners/Routers wissen will, sendet er ihm eine Zeitstempel-Anforderung.


Abbildung 3.8: Format der ICMP Zeitstempel Anforderung/Antwort

Die Zeit, zu der Rechner A die Anforderung sendet, erscheint im "Originate Timestamp"-Feld. Empfängt nun Rechner B eine solche Nachricht, trägt er die Empfangszeit in das "Receive Timestamp"-Feld, und die Zeit, zu der er die Nachricht zurücksendet in "Transmit Timestamp". Empfängt nun A wieder diese Nachricht, kann A aus der Empfangszeit, und den anderen 3 Zeiten in der ICMP Zeitstempel Antwort Rückschlüsse auf die Laufzeit ziehen, und dadurch die Uhrzeit berechnen. Normalerweise werden mehrere solcher Nachrichten nacheinander gesendet, jeweils fortlaufend nummeriert im "Sequence Number"-Feld. Aus der Mittelung vieler solcher Zeitstempel, kann die Uhrzeit recht genau ermittelt werden. Die Zeiten sind übrigens in Millisekunden seit Mitternacht der "Universal Time", also der Londoner Zeitzone angegeben.

3.9 Informationsmeldung-Anforderung/Antwort (Information Request/Reply) (Typ 15 und 16)

Mit Hilfe der ICMP Informationsmeldung kann ein Rechner die Netzwerkandresse seines Netzwerks erfragen. Dazu sendet er eine Informationsmeldung-Anforderung mit der Zieladresse 0.0.0.0 , was dem eigenen Netzwerk entspricht. Ein beliebiger Rechner, der die Anforderung empfängt, sendet nun eine Antwort mit der richtigen Netzwerkandresse als Sendeadresse. Dieses Verfahren wird als veraltet betrachtet und sollte nicht mehr verwendet werden.

3.10 Adressfeld-Format Anforderung/Antwort (Adress Mask Request/Reply) (Typ 17 und 18)

Die Adressfeld-Format Nachrichten dienen dazu, die Subnetzmaske eines Netzwerkes herauszufinden.


Abbildung 3.10: Format der ICMP Adressfeld-Format Anforderung/Antwort

Ein Rechner sendet dazu einfach eine Adressfeld-Format Anforderung an den Router, und bekommt von diesem eine Antwort, in der der Router dem Rechner im Feld "Adress Mask" die Subnetzmaske mitteilt.

4 Zusammenfassung

Man kann ICMP-Nachrichten in Fehlermeldungen und Informationsmeldungen unterteilen:

Fehlermeldungen:

Informationsmeldungen: ICMP-Nachrichten werden im Datenteil eines normalen IP-Paketes verschickt. Der Kopf einer ICMP-Nachricht enthält drei festgelegte Felder, das Typfeld, das Codefeld und das ICMP-Prüfsummenfeld. Der Rest einer ICMP-Nachricht hängt vom Typ der Nachricht ab. Das Internet Control Message Protocol ICMP bietet also Kommunikation zwischen Routern und Rechnern, es ist ein Teil des IP-Protokolls. Es dient zum versenden von Fehlermeldungen und Informationsmeldungen zwischen der IP-Software verschiedener Rechner und Router.

Literatur

  [Universität Karlsruhe] [Institut] [Email an Autor] [Adresse]