ICMP

Internet Control Message Protocol

Das ICMP-Protokoll wird für Diagnose und Fehler-Meldungen in einem IP-Netzwerk verwendet.
IP Daten-Pakete zum Transport. Die bekannten Konsolen-Programme ping und traceroute verwenden ICMP.
ICMP verfügt über max. 256 verschiedene Anweisungen und verwendet Standard IP Daten-Pakete zum Transport.
Netzwerk Zusammenarbeit - Lokal und weltweit
ICMP-Kompress Protokoll, Aufgaben
ICMP-Liste Liste der Anweisungen und Meldungen
Auswahl Häufig verwendete ICMP-Typen
ICMP-Paket Details zum Aufbau einer ICMP Nachricht oder -Anweisung
PING Ping und verwandtes Werkzeug
Links Ausgewählte Links zum Thema 'ICMP'

ICMP-Kompress

Protokoll

ICMP ist ein Protokoll - Eine standardisierte Sammlung von Regeln, nach denen Daten in Netzwerken ausgetauscht werden.

OSI-Modell

ICMP-Software arbeitet in der Vermittlungs-Schicht des → OSI-Modells, ebenso wie → IP.
ICMP benötigt zur Arbeit alle darunter liegenden Schichten, z.B. → Ethernet.

Aufgaben

ICMP bietet Werkzeuge zur Kontrolle bzw. zum Debuggen von → IP-Verbindungen. ICMP ist zu diesem Zweck besonders einfach und robust angelegt.

ICMP-Anweisungen

Es gibt 256 verschiedene mögliche ICMP-Befehle, davon sind derzeit ca. 40 definiert, der Rest ist Reserve (↓ Liste)

IP Daten-Pakete

ICMP verwendet zum Transport Standard IP Daten-Pakete (↓ Details).

↓ Ping

ist das bekannteste Programm, welches ICMP verwendet. Man prüft damit die Erreichbarkeit entfernter IP-Adressen.

ICMP-Nachrichten und -Anweisungen

Liste der ICMP-Anweisungen (ohne Gewähr):
TypeCodeAnmerkungen
0Echo Reply0 Echo Antwort, Anfrage mit ↓ Type 8
3Destination unrechable *Ziel nicht erreichbar
0Netzwerk nicht erreichbar
1Host (IP-Adresse) nicht erreichbar
2Protokoll nicht verwendbar
3Port nicht erreichbar
4Fragmentierung notwendig
5Route nicht verwendbar
4Source Quench0 Empfänger überlastet ↓
5Redirect Message0Umleitung
6Alternate Host Address0Alternative Ziel-Adresse
8Echo Request0 Echo Anfrage (Ping), Antwort mit ↑ Type 3
9Router Advertisement0 
10Router Solicitation0 
11Time Exceeded 0TTL (Time To Live, Lebensdauer) abgelaufen
1Fragmente abgelaufen
12Parameter Problem0 
13Timestamp0 
14Timestamp Reply0 
15Information Request0 
16Information Reply0 
17Address Mask Request0 
18Address Mask Reply0 
30Traceroute0Verfolgung der Route
31Datagram Conversion Error0 
32Mobile Host Redirect0 
33IPv6 Where-Are-You0 
34IPv6 Here-I-Am0 
35Mobile Registration Request0 
36Mobile Registration Reply0 
37Domain Name Request0 
38Domain Name Reply0 
39SKIP0 Simple Key-Management for Internet Protocol (SKIP) Algorithm Discovery Protocol
40Photuris0Security failures
Die Liste standardisierter ICMP-Typen und Codes wird von der IANA (Internet Assigned Numbers Authority) verwaltet:
IANA: ICMP Parameters
Die Typen-Liste (unverbindlich !) enthält einige Lücken für reservierte, jedoch noch nicht verwendete Typen.

Ausgewählte ICMP-Anweisungen

ICMP-Anweisungen   0..255

ICMP verwendet für seine Anweisungen und Nachrichten nicht Klartext sondern im ICMP-Header eine ganze Zahl von 8 Bit = 1 Byte Länge, d.h. mit Werten 0..255 (dezimal) oder 0..FF (hex). Einige Anweisungen gibt es paarweise in der Form Anfrage / Antwort.
Hier wird eine Auswahl häufig verwendeter ICMP-Anweisungen vorgestellt:

Echo Request (ICMP 008) und Echo Reply (ICMP 000)

Dieses Paar von Anweisungen wird vom bekannten Konsolen-Programm ↓ ping verwendet. Der Echo Request provoziert eine Antwort von (fast) jedem erreichten Computer. Mit Hilfe von Optionen lassen sich zusätzlich wertvolle Informationen über die Qualität einer Übertragungs-Strecke gewinnen.
Leider wurde diese Anweisung von Viren und anderem Ungeziefer missbraucht. Daher wurde sie von einigen Providern gesperrt, obwohl der Standard RFC 1122 ausdrücklich für jeden Netzwerk Teilnehmer eine Echo-Antwort vorschreibt.

Destination Unreachable (ICMP 003)

Diese Nachricht mit Code=3 sendet → UDP, wenn zwar die IP-Adresse des Ziels, jedoch nicht der gewünschte → Port erreichbar ist. → TCP sendet in diesem Fall keine ICMP-Nachricht, sondern den TCP-Befehl Reset.

Source Quench (ICMP 004)

Diese Nachricht wird von einem überlasteten Empfänger (z.B. Router) zurück an den Absender geschickt. Sie informiert, dass wegen Überlastung einige IP-Pakete verloren wurden.

Time exceeded (ICMP 011)

Diese Nachricht wird von einem Router an den ursprünglichen Sender eines IP-Pakets gesendet, wenn dessen maximale Lebenszeit (TimeToLive TTL) angelaufen ist.
Das passiert, wenn ein IP-Paket unzustellbar ist.
Programme wie ↓ traceroute senden IP-Pakete mit manipulierten TTL-Werten zur Analyse des Netzwerk-Pfads zu einer IP-Adresse.

ICMP Paket

Typischer Aufbau eines IP Pakets mit ICMP Nutzdaten (grün unterlegt):
WortBitBitsNameKommentar
00..34 VersionIP-Version (4 oder 6)
4..74IHLIP Header Length
8..158TOSType of Service
10..1516Total Length Länge (Daten + IP-Header) in Byte
20..1516Identification Kennzeichnung fragmentierter IP-Pakete
30..23Flags Kennzeichen für fragmentierte IP-Pakete
3..1513Fragment Offset Position eines IP-Fragments
40..78 Time to LiveLebensdauer des IP-Pakets (Hop-Count)
8..158ProtocolICMP-Version
50..1516Header Checksum Prüfsumme für den IP-Header
60..3132 Source Address IPv4 Absender Adresse (beginnend mit MSB)
7
80..3132 Destination AddressIPv4 Ziel-Adresse
9
100..78 ICMP TypeType-Nr (Integer)
8..158ICMP CodeCode-Nr (Integer)
110..1516ID 
120..1516Sequence 
ICMP verwendet das Standard-Format des Internet Protocol (→ IP). An Stelle der bei anderen IP-Paketen folgenden TCP- oder UDP-Header folgt der ICMP Datenblock (grün unterlegt).  

ICMP-Type:

Die Type-Nr (0..255) bezeichnet die ICMP-Nachricht oder -Anweisung.

ICMP-Code:

Die Code-Nr (0..255) kann zusätzliche Details zur Type-Nr angeben.
Details zum Aufbau eines IP-Pakets, Ethernet Daten-Pakets  

PING Werkzeug

WLAN Probleme !
Unter manchen Bedingungen (Energiespar-Modus) werden ICMP Pakete von WLAN-Routern ohne Warnung blockiert !.
Tipp: Überprüfen sie die Konfiguration ihres WLAN Routers und schalten sie bei Verdacht in den Vollbetrieb.

Betreiben sie Standgeräte (Server, Drucker, Schreibtisch-PC ...) besser mit dem klassischen Kabel. Das ist wesentlich zuverlässiger, verpulvert nicht 99% seiner Energie in schädlichen ElektroSmog, lässt sich nicht so leicht abhören. WLAN ist nur dann wirklich wichtig, wenn sie ihren Notebook-PC auch im kleinsten Raum ihrer Wohnung verwenden wollen - und natürlich für die Hersteller von WLAN Geräten...

ping

Alle Betriebssysteme bieten das Konsolen-Programm ping (Packet Internet Groper).
Damit lässt sich feststellen, ob ein Ziel (seine IP-Adresse) über das Netzwerk erreichbar ist. Ping arbeitet extrem robust und ist eines der meist-verwendeten Konsolen-Programme.
Ping verwendet die ↑ ICMP-Anweisungen 8 (Echo Request) und 0 (Echo Reply).
Ping und traceroute arbeiten leider nicht auf jeder Internet-Strecke, da einige Provider das Echo sperren.

Linux - ping

(Hilfe, typische Anwendung im LAN und im Internet)
# man ping
# ping -c3 192.168.0.123
# ping -c1 -n -t1 192.168.0.123
# ping -c1 google.de
Ohne Option -c erzeugt ein Linux-ping eine unendliche Folge von PINGs. Das ist z.B. mit Option -a (piepst) für ein Netzwerk-Service (Kabel, Stecker) praktisch und erspart den Blick auf den Monitor. Die PING-Folge wird mit ^C abgebrochen.
Bei automatischer Ausführung und Auswertung ist es sinnvoll, die Optionen genau einzustellen. Wenn ein bestimmter PING oft benötigt wird, dann kann man dafür ein Alias anlegen, z.B.
# alias ping_server='ping -c3 192.168.0.1'
# ping_server

Windows - ping

(Hilfe, typische Anwendung im LAN und im Internet)
C:\> ping /?
C:\> ping 192.168.0.123
C:\> ping -i 1 -n 1 -w 5 192.168.0.123
C:\> ping google.de
Argumente von Optionen müssen durch ein Leerzeichen getrennt werden: -w5 ergibt einen Fehler, -w 5 ist korrekt.
PINGs innerhalb des eigenen LAN laufen meist problemlos. Bei "paranoider" Konfiguration können auch PINGs verboten werden (nicht empfehlenswert).
Ein PING ins Internet kann am Router oder an einem Firewall scheitern.
Auch auf Windows ist mit Option -t eine unendliche Folge von PINGs möglich.
Die → Windows-Konsole kennt keine Alias. Man kann den Befehl in eine Text-Datei *.cmd eintragen und die Datei in einem der Pfade der → Umgebungs-Variablen PATH verschieben. Bei Eingabe des Datei-Namens (ohne .cmd) werden die Befehle der Datei ausgeführt.

fping

Das Linux Shell-Programm fping führt mit einem einzigen Befehl PINGs zu einer Liste oder zu einem Bereich mehrerer IP-Adressen durch.
Beispiel: Hilfe, PING an alle Adressen im LAN, Anzeige nur der aktiven Adressen:
# man fping
# fping -r1 -C1 -i5 -t5 -g 192.168.0.0/24
# fping -r1 -C1 -i5 -t5 -g 192.168.0.0/24 2>/dev/null
Das Programm ist relativ mächtig und daher auf den meisten Linux-Systemen dem Administrator root vorbehalten. Das schließt die Verwendung auf dynamischen Webseiten aus, wenn man den Webserver nicht die Erlaubnis dazu (Stichwort sudoers gibt.

Windows bietet kein fping Programm. Im Internet werden kostenlos einige Varianten angeboten, z.B. fping von
kwakkelflap oder pingit von googlepages.

Tipp: Im Zweifel als Administrator anmelden
Beispiel: Hilfe, PING an alle Adressen im lokalen Netzwerk
C:\> fping /?
C:\> fping -t5 -w5 -n1 -h1 -g 192.168.0.0/192.168.0.254

Verlängern sie in großen LANs die Zeiten (hier je 5 ms) auf 10..100ms.

arping

Das Linux Shell-Programm arping liefert mit jedem PING auch die → MAC-Adresse des entfernten PC, z.B.:
# man arping
# arping -c -f -I eth0 192.168.0.123
Unicast reply from 192.168.0.123 [11:22:33:44:55:66] 1.5 ms

Für Windows scheint es keine Ausgabe von arping zu geben, leider auch nicht für → Cygwin auf Windows.
Suchen sie evtl. selbst nach "arping & windows"

Details zum Thema ARP

bing

Das Linux Shell-Programm bing liefert zusätzlich eine Live-Analyse der Übertragungs-Rate:
# bing 127.0.0.1 192.168.0.123
1024 bits in 0.020ms...

Für Windows scheint es kein derartiges Programm zu geben. Man kann jedoch von jedem Linux-PC oder Server die Verbindung zu einem Windows-PC messen.

Eigene (Script)-Programme

Ein Script-Programm kann eine Vielzahl unabhängig (gleichzeitig) laufender Child-Programme starten, von denen jedes einen einzelnen Ping ausführt.

Da Ping meist keinen Beschränkungen unterliegt, ist es auf diese Weise möglich, alle 254 IP-Adressen eines typischen LAN in ca. 1 Sekunde zu testen und auf einer dynamischen Webseite anzuzeigen.
Beispiel netping als Perl-Programm.

traceroute

Dieses Programm dient zur Analyse des kompletten Netzwerk-Pfades zwischen den IP-Adressen von Sender und Empfänger.
Dazu sendet traceroute (bzw. traceroute6 für IPv6) eine Folge von PINGs (ICMP Type 8) mit speziell manipulierten TTL-Daten an die IP-Adresse des Ziels.
TTL (0..255) bestimmt die Lebenszeit eines IP-Pakets. Jeder Router verringert TTL um 1, bei TTL=0 wird das Paket gelöscht und eine ICMP-Nachricht Type=11 (Time exceeded) mit seiner eigenen IP-Adresse an den Absender zurückgesendet.
Der erste PING wird mit TTL=1 abgesendet und endet daher am nächsten Router.
Danach werden so lange weitere PINGs mit TTL=2, 3, 4, ... gesendet, bis das Ziel erreicht ist. Diese PINGs erreichen der Reihe nach alle am Weg liegenden Router. So lässt sich der Weg durch das Netzwerk analysieren.
Bei längeren Wegen steigt allerdings die Wahrscheinlichkeit, dass zumindest ein Teil der Daten auch über andere Wege ans Ziel kommt.

Beispiele:
# man traceroute
# traceroute -w1000 domain.com
# traceroute6 -w1000 domain.com

Linux bietet auch die Programme mtr (mytraceroute) und die Fenster-Variante xmtr mit ähnlicher Funktionalität.

Auf Windows sind traceroute-Programme unter ähnlichen Namen verfügbar.
Optionen und deren Werte müssen durch Leerzeichen getrennt werden, z.B.
C:\> tracert /?
C:\> tracert -d -w 1000 domain.com
C:\> tracert6 -d -w 1000 domain.com
C:\> ping -n 1 -r 9 domain.com
C:\> pathping -w 1000 domain.com

Hinweis: Manche Provider sperren die Weitergabe von ICMP Echo Anweisungen.

Firewall: Je nach Einstellung kann jeder Firewall ICMP Echo Anweisungen sperren, z.B. auf ihrem eigenen PC oder Router, oder am Router oder Computer des traceroute-Ziels. Im eigenen LAN werden traceroute-Pakete manchmal fälschlich für (gefährliche) Versuche von Port-Scans gehalten.

Blockierende Firewalls kann man manchmal mit UDP- oder TCP-Varianten von traceroute-Programmen täuschen. Diese arbeiten nach dem gleichen Prinzip (z.B. mit dem fast immer freigegebenen Port 80) und schaffen zumindest den Weg bis an ihr Ziel. Oft wird aber trotzdem die zurückgesendete ICMP-Antwort blockiert.

Windows Entwicklung: Man kann die Windows-Bibliothek icmp.dll verwenden oder mit winsock einen eigenen raw-Socket öffnen. Vorsicht - manche Varianten der Betriebssysteme oder von Firewalls neigen dazu, raw-Sockets ungefragt zu sperren.

Zugriffs-Rechte

Netzwerk-Informationen können je nach Situation als sensible Daten eingestuft werden.
Deshalb ist die Ausführung mancher Programme (zumindest auf Linux) an besondere Zugriffs-Rechte (root) gebunden.
Testen sie die hier vorgestellten und ähnliche Programme nicht nur als User root, sondern auch als gewöhnlicher User. Unberechtigte erhalten die Meldung command not found
Unabhängig davon können ICMP-Pakete an vielen Stellen durch Firewalls blockiert werden (eigener PC, sämtliche beteiligten Router, Ziel-System).

Automatisierung

Im Prinzip lassen sich Konsolen-Programme auch von Scripts und von dynamischen Webseiten (CGI-Programmen) ausführen. In diesem Fall benötigen diese Programme jedoch die Ausführungs-Rechte.
Auf Linux müssen sie diesen Punkt streng beachten.
Dynamische Webseiten werden vom Webserver-Programm ausgeführt, auf Linux meist vom User wwwrun
Dieser User hat aus gutem Grund nur beschränkten Zugriff auf Betriebssystem und Netzwerk.
Je nach Konfiguration wird der User wwwrun an der Ausführung sensibler Programme gehindert. Es wird davon abgeraten diesem User auch nur temporär root-Rechte einzuräumen.
Es ist nicht allzu schwierig, aber einiger Aufwand, ICMP-Anweisungen auf niedriger Ebene mit einem raw-Socket selbst zu programmieren. Das funktioniert auf Linux problemlos, wird jedoch auf Windows je nach System manchmal ohne Angabe von Gründen blockiert.


XHTML CSS