Wolfgang Lösch

Contact© Wolfgang Lösch

Lokale Netze (LAN) — ARP, ICMP und PING

Stand: 2007 (weitere Aktualisierung eingestellt)

Good, Fast, Cheap: Pick any two (you can't have all three).

R. Callon, The Twelve Networking Truths, April 1996

Address Resolution Protocol (ARP)

Um einem Endsystem/Host ein Datenpaket zuzusenden, reicht die Kenntnis der Netzwerkadresse allein nicht aus. Dem sendenden System muss auch die physikalische Adresse des Zielsystems bekannt sein. Endsysteme brauchen also eine Möglichkeit, Netzwerkadressen in physikalische Adressen umsetzen zu können bzw. zu Netzwerkadressen die zugehörigen physikalischen Adressen herausfinden zu können.

ARP-Datagramm

In der Internet-Protokollwelt gibt es für die Adressumsetzung ein eigenes Protokoll, das Address Resolution Protocol (ARP). Die folgende Abbildung zeigt den Aufbau eines ARP-Datagramms.

Aufbau eines ARP-Datagramms
Hardware Address Space 2 Byte
Protocol Address Space 2 Byte
Length of Hardware Address (n) 1 Byte
Length of Protocol Address (m) 1 Byte
Operation Code 2 Byte
Hardware Address of Sender n Byte
Protocol Address of Sender m Byte
Hardware Address of Target n Byte
Protocol Address of Target m Byte
Hardware Address Space:
Netzwerk-Typ, in dem das Datagramm generiert wurde (z.B. Ethernet: 1, IEEE 802 Networks: 6).
Protocol Address Space:
Protokoll-Typ, von dem die Operation angefordert wurde (identisch mit dem Ethernet-Typenfeld).
Length of Hardware Address:
Länge der physikalischen Adresse in Byte (z.B. MAC-Adresse: 6).
Length of Protocol Address:
Länge der Netzwerk-Adresse (z.B. IP-Adresse: 4).
Operation Code:
Art der Operation (1 = ARP-Anforderung, 2 = ARP-Antwort, 3 = RARP-Anforderung, 4 = RARP-Antwort).
Hardware Address of Sender:
Physikalische Adresse des Absenders (z.B. MAC-Adresse).
Protocol Address of Sender:
Netzwerk-Adresse des Absenders (z.B. IP-Adresse).
Hardware Address of Target
Physikalische Adresse des Empfängers (falls bekannt).
Protocol Address of Target:
Netzwerk-Adresse des Empfängers.

Arbeitsweise von ARP

Eine ARP-Operation läuft folgendermaßen ab:

  1. System A will ein IP-Datagramm an System B senden, kennt aber nur dessen IP-Adresse, nicht jedoch dessen MAC-Adresse. System A sieht in der eigenen Adresstabelle (ARP-Cache) nach, ob dort die Zuordnung MAC-Adresse/IP-Adresse für System B eingetragen ist. Wenn nicht, bildet System A ein ARP-Anforderungs-Datagramm und sendet dieses als MAC-Broadcast an alle erreichbaren Systeme.
  2. Sobald das gesuchte Datenendgerät B das ARP-Anforderungs-Datagramm erhält und die eigene IP-Adresse erkennt, sendet sie ein ARP-Antwort-Diagramm zurück an System A und teilt dieser damit ihre MAC-Adresse mit. Gleichzeitig trägt System B in seine Adresstabelle die Zuordnung MAC-Adresse/IP-Adresse für System A ein, sofern diese Zuordnung noch nicht im ARP-Cache von B ist.
  3. System A trägt nach Erhalt des ARP-Antwort-Datagramms von B die Zuordnung MAC-Adresse/IP-Adresse für System B in seine Adresstabelle ein und kennt damit die MAC-Adresse von System B. Anschließend kann A dann das anstehende IP-Datagramm mit der richtigen MAC-Zieladresse versehen und abschicken.

Ergänzt wird ARP durch ein weiteres Protokoll, das Reverse Address Resolution Protocol (RARP). Dieses Protokoll stellt das Gegenstück zu ARP dar und ermöglicht es, zu einer bekannten physikalischen Adresse (MAC-Adresse) die zugehörige Netzwerkadresse (IP-Adresse) zu finden. Hierbei benötigt man allerdings einen entsprechenden Server, der die gesuchten Adressinformationen bereithält.

ARP als Kommando

Basierend auf dem Protokoll ARP gibt es bei allen bekannten Betriebssystemen ein Zeilenkommando, das ebenfalls ARP heißt. Unter Windows 2000 sieht die Syntax folgendermaßen aus:


  ARP -s IP_Adr Eth_Adr [Schnittst]
  ARP -d IP_Adr [Schnittst]
  ARP -a [IP_Adr] [-N Schnittst]

   -a            Zeigt aktuelle ARP-Einträge durch Abfrage der Protokoll-
                 daten an. Falls IP_Adr angegeben wurde, werden die IP- und
                 physikalische Adresse für den angegebenen Computer ange-
                 zeigt. Wenn mehr als eine Netzwerkschnittstelle ARP
                 verwendet, werden die Einträge für jede ARP-Tabelle
                 angezeigt.
   -g            Gleiche Funktion wie -a.
   IP_Adr        Gibt eine Internet-Adresse an.
   -N Schnittst  Zeigt die ARP-Einträge für die angegebene Netzwerk-
                 schnittstelle an.
   -d            Löscht den durch IP_Adr angegebenen Hosteintrag. IP_Adr
                 kann mit dem '*'-Platzhalter versehen werden, um alle Hosts
                 zu löschen.
   -s            Fügt einen Hosteintrag hinzu und ordnet die Internetadresse
                 der physikalischen Adresse zu. Die physikalische Adresse wird
                 durch 6 hexadezimale, durch Bindestrich getrennte Bytes
                 angegeben. Der Eintrag ist permanent.
   Eth_Adr       Gibt eine physikalische Adresse (Ethernetadresse) an.
   Schnittst     Gibt, falls vorhanden, die Internetadresse der Schnittstelle
                 an, deren Übersetzungstabelle geändert werden soll.
                 Sonst wird die erste geeignete Schnittstelle verwendet.

Internet Control Message Protocol (ICMP)

Da IP einen (verbindungslosen) Datagramm-Dienst darstellt und somit die korrekte Zustellung von IP-Datagrammen nicht garantiert werden kann, gibt es ein zusätzliches Protokoll, das Internet Control Message Protocol (ICMP), das in gewissem Umfang Fehlersituationen behandeln kann und darüberhinaus Diagnoseinformationen über den Netzbetrieb liefert. ICMP setzt zwar direkt auf IP auf und benötigt somit keines der üblichen Transportprotokolle UDP oder TCP. Da es jedoch den höheren Kommunikationsschichten nicht zur Verfügung steht, wird es wie IP in der Netzwerkschicht angesiedelt.

Im Header eines IP-Datagramms, das eine ICMP-Nachricht enthält, steht im Feld Protocol der Wert 1 für ICMP und im Feld Type of Service (TOS) der Wert 0. Ein ICMP-Datagramm hat folgenden Aufbau:

Aufbau eines ICMP-Datagramms
Type 1 Byte
Code 1 Byte
Checksum 2 Byte
Data  
Type:
Typ der ICMP-Nachricht.
Code:
Zusatzinformationen für den betreffenden Nachrichtentyp.
Checksum:
Prüfsumme.
Data:
Kontextabhängige Informationen.

Die folgende Tabelle gibt einen Überblick über die möglichen ICMP-Nachrichtentypen.

ICMP-Nachrichtentypen
Wert (dez) ICMP-Nachrichtentyp
0 Echo reply (Echo Antwort)
3 Destination unreachable (Ziel nicht erreichbar)
4 Source quench (Aussenderate drosseln)
5 Redirect (Umleitung)
8 Echo (Echo Anforderung)
11 Time exceeded (Zeitüberschreitung)
12 Parameter problem (Parameterprobleme)
13 Timestamp (Uhrzeit anfordern)
14 Timestamp reply (Antwort auf Uhrzeitanforderung)
15 Information request (Anforderung von Netzwerk-Informationen)
16 Information reply (Antwort auf Informationsanforderung)
17 Address mask request (Anforderung von Adressmasken)
18 Address mask response (Antwort auf Maskenanforderung)

Echo / Echo reply

Wenn ICMP zu Diagnose-Zwecken eingesetzt wird, kommen am häufigsten die Nachrichtentypen 0 und 8 vor. Das bekannte Programm PING stellt eine Implementierung dieser beiden Nachrichtentypen dar.

Aufbau eines ICMP-Datagramms Echo (PING)
Type 0 (Echo reply) / Type 8 (Echo) 1 Byte
Code 0 1 Byte
Checksum 2 Byte
Identifier 2 Byte
Sequence Number 2 Byte
Data  
Identifier:
Hilfe zur eindeutigen Kennzeichnung von ICMP-Datagrammen.
Sequence Number:
Hilfe zur eindeutigen Kennzeichnung von ICMP-Datagrammen.
Data:
Lasterzeugung durch optionales Mitführen von Daten.

Destination unreachable

Wenn ein IP-Datagramm nicht zugestellt werden kann, kann der Grund für die Unzustellbarkeit mit Hilfe eine ICMP-Datagramms des Typs 3 dem Absender mitgeteilt werden.

ICMP-Datagramm Destination unreachable
Type 3 (Destination unreachable) 1 Byte
Code 1 Byte
Checksum 2 Byte
Unused 4 Byte
Data  
Code:
Fehlerursache für die Unzustellbarkeit:
  • 0: Net unreachable (das mit der IP-Zieladresse angegebene Netz wurde von einem Router nicht gefunden),
  • 1: Host unreachable (der mit der IP-Zieladresse angegebene Host wurde vom Standard-Router (Standard-Gateway) nicht gefunden),
  • 2: Protocol unreachable (das im IP-Datagramm transportierte Protokoll ist im Ziel-Host nicht verfügbar),
  • 3: Port unreachable (der im IP-Datagramm angegebene Anwendungsdienst ist im Ziel-Host nicht verfügbar),
  • 4: Fragmentation needed and Don't Fragment Bit set (Router müsste, darf aber nicht fragmentieren),
  • 5: Source Route failed (Router kann IP-Datagramm auf vorgeschriebener Route nicht weiterschicken).
Unused:
Wert muss auf 0 gesetzt sein.
Data:
Kompletter IP-Header und die ersten 64 bit der im IP-Datagramm transportierten Daten.

ICMP-Datagramme mit den Codes 0, 1, 4 und 5 werden von einem Router oder Gateway erzeugt, ICMP-Datagramme mit den Codes 2 und 3 vom Ziel-Host.

Time exceeded

Kann ein IP-Datagramm wegen einer Zeitüberschreitung sein Ziel nicht erreichen, kann dies dem Absender mit Hilfe eines ICMP-Datagramms des Typs 11 angezeigt werden.

ICMP-Datagramm Time exceeded
Type 11 (Time exceeded) 1 Byte
Code 1 Byte
Checksum 2 Byte
Unused 4 Byte
Data  
Code:
  • 0: TTL-Wert (Time to live) des IP-Datagramms hat den Wert 0 erreicht und wird verworfen,
  • 1: Beim Zusammensetzen von Fragmenten wurde Zeitlimit überschritten.
Unused:
Wert muss auf 0 gesetzt sein.
Data:
Kompletter IP-Header und die ersten 64 bit der im IP-Datagramm transportierten Daten.

ICMP-Datagramme mit dem Code 0 werden von einem Router oder Gateway erzeugt, ICMP-Datagramme mit dem Code 1 vom Ziel-Host.

Das Kommando PING

Das Zeilenkommando PING (Packet Internet Groper) ist ein Programm, mit der die Erreichbarkeit unter IP getestet werden kann. Ein System, das ein PING abschickt, sendet ICMP-Datagramme des Typs 8 (Echo) und erwartet ein ICMP-Datagramm des Typs 0 (Echo reply) vom Empfänger, falls dieser erreichbar ist. Unter Windows 2000 sieht die Syntax folgendermaßen aus:


  ping [-t] [-a] [-n Anzahl] [-l Größe] [-f] [-i Gültigkeitsdauer]
               [-v Diensttyp] [-r Anzahl] [-s Anzahl] [[-j Hostliste] |
               [-k Hostliste]] [-w Zeitlimit] Zielliste

    -t             Sendet fortlaufend Ping-Signale zum angegebenen Host.
                   Geben Sie STRG-UNTRBR ein, um die Statistik anzuzeigen.
                   Geben Sie STRG-C ein, um den Vorgang abzubrechen.
    -a             Löst Adressen in Hostnamen auf.
    -n n Anzahl    Anzahl zu sendender Echoanforderungen
    -l Länge       Pufferlänge senden
    -f             Setzt Flag für "Don't Fragment".
    -i TTL         Gültigkeitsdauer (Time To Live)
    -v TOS         Diensttyp (Type Of Service)
    -r Anzahl      Route für Anzahl der Abschnitte aufzeichnen
    -s Anzahl      Zeiteintrag für Anzahl Abschnitte
    -j Hostliste   "Loose Source Route" gemäß Hostliste
    -k Hostliste   "Strict Source Route" gemäß Hostliste
    -w Zeitlimit   Zeitlimit in Millisekunden für eine Rückmeldung
    Zielliste      Adresse oder Name des Zielhosts

Die Reichweite von PING endet in der Netzwerkschicht. Arbeitet PING einwandfrei, bedeutet dies somit lediglich, dass die unteren 3 Protokoll-Schichten (z.B. Ethernet und IP) funktionsfähig sind. Ob z.B. eine TCP-Verbindung möglich ist oder ob eine auf TCP aufbauende Kommunikationsanwendung funktioniert, kann mit PING nicht verifiziert werden.

Manuelle MTU-Bestimmung

Im Abschnitt Fragmentierung und MTU des Kapitels Internet-Protokoll und IP-Adressen wird der Begriff der Maximum Transmission Unit (MTU) vorgestellt und erläutert. Diese MTU kann mit Hilfe des PING-Kommandos manuell auf folgende Weise bestimmt werden:

Sowohl das automatische, als auch das manuelle Ermitteln der optimalen MTU scheitert, wenn auf dem Übertragungsweg ein Router oder ein Gateway so konfiguriert ist, dass die benötigten ICMP-Nachrichten unterdrückt oder herausgefiltert werden.

Das Kommando TRACERT / TRACEROUTE

Das Zeilenkommando TRACERT bzw. TRACEROUTE ist ein Programm, mit dem der Weg von IP-Datagrammen verfolgt werden kann. Das Programm sendet IP-Datagramme mit ständig wachsendem TTL-Wert (Time to live) aus. Der TTL-Wert eines IP-Datagramms wird von jedem Router, der das Paket weiterleitet, um 1 erniedrigt. Derjenige Router, der ein IP-Datagramm mit dem TTL-Wert 1 empfängt und diesen Wert dann auf 0 setzt, verwirft das IP-Datagramm und zeigt dies dem Absender über eine ICMP-Nachricht des Typs 11 an. Durch ein IP-Datagramm mit einem TTL-Wert von 1 kann so eine Fehlermeldung durch den ersten Router erzwungen werden, durch ein IP-Datagramm mit einem TTL-Wert von 2 eine Fehlermeldung durch den zweiten Router, durch ein IP-Datagramm mit einem TTL-Wert von 3 eine Fehlermeldung durch den dritten Router usw., so dass letztendlich die gesamte Routerstrecke bis zum Ziel ermittelt werden kann. Unter Windows 2000 sieht die Syntax folgendermaßen aus:


  tracert [-d] [-h Abschnitte max] [-j Hostliste] [-w Zeitlimit]
                  Zielname

    -d                  Adressen nicht in Hostnamen auflösen
    -h Abschnitte max   Max. Anzahl an Abschnitten bei Zielsuche
    -j Hostliste        "Loose Source Route" gemäß Hostliste
    -w Zeitlimit        Zeitlimit in Millisekunden für eine Antwort

Dieses Programm ist insbesondere beim Aufspüren von Engpässen hilfreich. Das Programm kann ermitteln, wieviel Router auf dem Weg zum Empfänger zu passieren sind, welche Netz-Provider involviert sind (über den Domänen-Namen) und welche Netzsegmente hohe Verzögerungsraten aufweisen.