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:
-
Zielknoten unerreichbar
-
Umleitungsmeldung
-
Quelle dämpfen
-
Zeit überschritten
-
Parameterproblem
Informationsmeldungen:
-
Echo-Anforderung/Antwort
-
Informationsmeldung-Anforderung/Antwort
-
Zeitstempel-Anforderung/Antwort
-
Adressfeld-Format Anforderung/Antwort
-
Router-Findungsmeldungen
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