1.3.5. ARP - Address Resolution Protocol

Im Abschnitt Prinzipien dieses Kapitels wurde erwähnt, daß manche Netze nicht aus Routern und Verbindungsleitungen bestehen, sondern ein gemeinsames Übertragungsmedium nutzen, auf das alle Endsysteme und die nach außen führenden Router Zugriff haben.

Das bekannteste und verbreitetste Beispiel ist Ethernet. In seiner "Urform" sind alle Rechner an ein Koaxkabel angeschlossen (mittlerweile gibt es zahlreiche Variationen, die Sie später kennenlernen werden):

Es ist leicht einzusehen, daß die von einem Rechner abgesendeten Datenpakete, rein elektrisch betrachtet, erst einmal bei jedem anderen Rechner ankommen. Damit nun nicht jeder Rechner alle Pakete auswerten muß, hat man jedem Rechner eine Ethernet-Adresse fest zugeordnet.

Diese Adresse ist 48 Bit lang und üblicherweise bereits in der Netzhardware (d.h. auf der Ethernet-Adapterkarte) festgelegt. Der Ethernet-Adapter empfängt im Normalfall nur Pakete (oder besser "Rahmen") mit seiner eigenen Ethernet-Adresse als Ziel.

Will man ein IP-Paket über Ethernet transportieren, wird folgendes Paketformat übertragen:

Sie werden sich vielleicht fragen, warum hier wieder neue Adressen eingeführt werden, wo doch schon in der IP-Schicht Adressen vorhanden sind. Der Grund dafür ist einmal darin zu suchen, daß Ethernet und Internet-Technologie nebeneinander entwickelt wurden, außerdem wollte man auch andere Netzwerk-Protokolle neben IP auf Ethernet verwenden können (z.B. Novell-IPX, AppleTalk, DECnet, ...).

Zur Unterscheidung dieser verschiedenen Netzwerk-Protokolle dient das Typ-Feld, für das hier einige Beispiele angegeben sind (hexadezimal):

IP 0x0800
ARP 0x0806
DECnet 0x6003
Apple Talk 0x809b
Novell IPX 0x8137

Wenn man (was selten vorkommt) einmal direkt mit Ethernetadressen zu tun hat, werden diese in Form von 6 Hexadezimalzahlen (00 ... ff) geschrieben, z.B.

  08:00:1e:01:c9:64
Auf diese Weise sind Verwechslungen mit IP-Adressen ausgeschlossen.

Neben Rahmen, die seine eigene Adresse als Ziel enthalten, empfängt ein Ethernet-Adapter auch alle Rahmen, die an die Ethernet-Broadcast-Adresse ff:ff:ff:ff:ff:ff sowie möglicherweise an Ethernet-Multicastadressen gerichtet sind (dazu später mehr).

In unserem Beispielnetz hat also jeder Rechner eine Ethernet-Adresse und (natürlich) auch eine IP-Adresse:

Sie sehen, daß die IP-Adressen zu dem Klasse-C-Netz 200.0.1 gehören. Die Ethernet-Adressen sind ja bekanntlich durch die Ethernet-Hardware vorgegeben und scheinen eher zufällig zu sein.

Ethernet-Adressen sind (wie die IP-Adressen) weltweit eindeutig, allerdings nicht, weil man ein weltweites Ethernet bauen wollte (das geht nicht), sondern weil sich in einem beliebigen Ethernet keine zwei gleichen Ethernet-Adressen "treffen" dürfen. Das wird so erreicht, daß jedem Hersteller von Ethernet-Karten die ersten 24 Bit fest zugeordnet werden. Die letzten 24 Bit kann er fortlaufend vergeben.

In unserem obigen Beispiel stammen also die Ethernet-Karten von A und B wohl vom gleichen Hersteller.
Beim Betrieb dieses Netzes entsteht aber ein Problem. Bei einem Kommunikationswunsch ist normalerweise nur die IP-Zieladresse bekannt (oder sie wurde vom Domain Name System aus dem symbolischen Namen bestimmt). Um das IP-Paket in einem Ethernet-Rahmen zustellen zu können, brauchen wir jedoch auch die Ethernetadresse des Zielrechners. Hier gibt es mehrere Möglichkeiten:
  1. Statische Zuordnung über eine Tabelle in jedem Rechner:
    Das Einstellen und Aktualisieren dieser Tabelle ist von Hand kaum zumutbar.

  2. Umrechnungsalgorithmus zwischen Internet- und Ethernetadresse:
    An dem obigen Beispiel war kein algorithmischer Zusammenhang zwischen beiden Adressen erkennbar. Erst bei der nächsten IP-Generation (IPv6) wird es möglich, in der dann 128 Bit langen IP-Adresse die 48-Bit-Ethernetadresse "unterzubringen".

  3. Dynamische Zuordnung durch Abfrage mit einem speziellen Protokoll:
    Dies ist die heute praktizierte Variante. Das dabei verwendete Protokoll heißt ARP.


Frage 1.3.5.1.:

Könnte man die Ethernet-Adressen als "Internet-Adressen" verwenden, wenn man einfach im IP-Kopf 48 Bit statt 32 Bit vorsieht?
Man würde damit die IP-Adreßvergabe sparen, denn die Ethernet-Adressen sind ja bereits weltweit eindeutig.


Der Ablauf des ARP-Protokolls ist recht einfach:

  1. Eine ARP-Anfrage wird als Ethernet-Broadcast (d.h. an ff:ff:ff:ff:ff:ff) geschickt, da die "richtige" Ethernet-Zieladresse ja noch unbekannt ist.

  2. Die ARP-Antwort kann gezielt an den Anfragenden geschickt werden, da dessen Ethernet-Adresse aus der Anfrage bekannt ist.

Am Format eines ARP-Pakets kann man erkennen, daß das Protokoll neben IP auf Ethernet auch andere Kombinationen zuläßt:

Hardware-Typ gibt die Art der hardwarenahen Adresse an. Im Falle von Ethernet wird der Wert 1 verwendet.

Protokolltyp gibt das verwendete Netzwerk-Protokoll an. Im Falle von IP steht hier der Wert 0x0800, d.h., hier gilt dieselbe Festlegung wie beim am Anfang dieses Abschnitts erläuterten Ethernet-Typ.

Hardware-Länge gibt die Länge der hardwarenahen Adressen in Bytes an. Bei Ethernet sind das 6 Byte.

Protokoll-Länge ist dementsprechend die Länge der Netzwerk-Adresse in Bytes, bei IP also 4 Byte.

Operation gibt an, ob es sich um eine Anfrage oder eine Antwort handelt:

RARP ist das Reverse Address Resolution Protocol. Die Erläuterung dazu folgt im Abschnitt "Dynamische Adreßvergabe" in diesem Kapitel.

Damit das ARP-Protokoll nicht für jedes IP-Paket erneut ausgeführt werden muß, merkt sich ein Rechner die Ethernetadressen der "in letzter Zeit" angesprochenen Ziele in einem ARP-Cache.


Frage 1.3.5.2.:
Warum sollte jeder Rechner diese Zuordnung nach einer gewissen Zeit "vergessen"? Wie würden Sie diese Zeit bemessen?
Frage 1.3.5.3.:
Wenn man IP (mit fest zugeordneten IP-Adressen) über das Telefonnetz oder ISDN betreibt, besteht eigentlich ein ähnliches Problem; die Telefonnummer hat ja etwa den gleichen Zweck wie eine Ethernetadresse. Könnte man ARP auch einsetzen, um die Zuordnung von IP-Adressen und Telefonnummern zu "automatisieren"?

Ein Sonderfall entsteht, wenn nicht der Rechner mit der Ziel-IP-Adresse antwortet, sondern ein speziell dafür konfigurierter "ARP-Server". Diese Variante bezeichnet man als Proxy-ARP (der ARP-Server antwortet "stellvertretend" für den eigentlich gemeinten Rechner). Man setzt diese Variante in folgenden Situationen ein:


© Uwe Hübner, 29.09.96