Das Address Resolution Protocol (ARP)

Im LAN, speziell im Ethernet, kommunizieren die Geräte allerdings nicht direkt über IP-Adressen, sondern über unsere bekannten 48-stellige MAC-Adresse.

Unser Rechner kennt in einem IP-Netzwerk allerdings nur die IP-Adresse des Rechners mit dem er reden soll, zum Beispiel die IP-Adresse seines Anmeldeservers.

Ein Rechner der frisch eingeschaltet wird, muss also zuerst einmal die MAC-Adresse seines Anmeldeservers herausfinden. Um das zu tun sendet er einen ARP-Request.

Mann kann sich das etwa so vorstellen: Der Rechner ruft nach dem Hochfahren ins Netz hinaus :

»Ich bin der Rechner mit der MAC-Adresse xx-xx-xx-xx-xx-xx und  der IP-Adresse yyy.yyy.yyy.yyy. Ich soll mit dem Rechner mit der IP-Adresse zzz.zzz.zzz.zzz reden, weiss jemand dessen MAC-Adresse?«

Das ganze LAN hört diese Ankündigung und merkt sich gleich das mitgelieferte Adressenpärchen, aber nur der Rechner mit der IP-Adresse zzz.zzz.zzz.zzz antwortet und sagt:

»Ja Hallo, ich bin der Rechner mit der IP-Adresse zzz.zzz.zzz.zzz und meine MAC-Adresse ist aa-aa-aa-aa-aa-aa.«

Etwas technischer ausgedrückt sieht das so aus:

Wenn eine Maschine eine Anforderung an eine IP-Adresse erhält, dann sieht sie in ihrem ARP-Cache nach ob sie die entsprechende MAC-Adressse schon kennt. Der ARP-Cache ist eine Tabelle die etwa so aussieht:

ARP-Tabelle

Dabei bedeuten die einzelnen Felder:

  • IF-Index - eine Indexzahl die die Netzwerkkarte ( und damit das Teilnetz) bezeichnet in dem dieser Eintrag empfangen wurde.
  • Physical Address - die gesuchte MAC-Adresse (zumindest bei Ethernet)
  • IP-Address - die zugehörige IP-Adresse
  • Type - der Typ des Eintrags.

Für den Typ des Eintrags sind folgende Werte möglich:

Typ Bedeutung
1 keiner der folgenden
2 der Eintrag ist ungültig und sollte gelegentlich ersetzt werden.
3 der Eintrag ist dynamisch und sollte korrigiert werden wenn ein neues ARP-Paket vorbeikommt.
4 der Eintrag ist statisch und bleibt so, egal was das Netz behauptet.

Auf NT- und Inix-Maschinen kann der ARP-Cache mit dem Befehl arp eingesehen und manipuliert werden.

Findet er keinen entsprechenden Eintrag, dann sendet er einen ARP-Request als Broadcast in das Netz. Der sieht etwa so aus:

ARP-Request

Der hat natürlich wieder ein paar Felder und zwar:

  • Hardware Type - Der Typ des Interfaces mit dem hier gearbeitet wird. Dafür sind folgende Einträge möglich:

    Typ Beschreibung
    1 Ethernet
    2 experimentelles Ethernet
    3 X25
    4 Token Ring
    5 Chaos ( das ist tatsächlich ein Netzwerk)
    6 IEEE 802.x
    7 ARCnet

    Man sieht also, das sich ARP nicht nur für Ethernet einsetzen lässt.

  • Der Protokoll-Typ - im Unterschied zum vorigen Feld, das die Hardware beschreibt, beschreibt dieses das vom Sender benutzte Protokoll . Mit TCP/IP wahrscheinlich eines von

    Nummer Beschreibung
    512 XEROX PUP
    513 PUP Address Translation
    1536 XEROX NS IDP
    2048 Internet Protocol (IP)
    2049 X.75
    2050 NBS
    2051 ECMA
    2052 Chaosnet
    2053 X.25 Level 3
    2054 Address Resolution Protocol (ARP)
    2055 XNS
    4096 Berkeley Trailer
    21000 BBN Simnet
    24577 DEC MOP Dump/Load
    24578 DEC MOP Remote Console
    24579 DEC DECnet Phase IV
    24580 DEC LAT
    24582 DEC
    24583 DEC
    32773 HP Probe
    32784 Excelan
    32821 Reverse ARP
    32824 DEC LANBridge
    32823 AppleTalk
  • Hardware Address Length - die Länge der Hardwareadresse in Bytes ( bei Ethernet also 6

  • Protocoll- Address Length - die Länge der Protokolladresse in Bytes ( bei TCP/IP also 4

  • Opcode - Der Operationsmodus des Paketes. 1 für eine Anfrage, 2 für eine Durchsage.

  • Sender Hardware Address - Die Hardware-Adresse des Senders

  • Sender IP-Address - Die Protokoll-Adresse des Senders (bei uns wohl die IP-Adresse)

  • Recipient Hardware-Adress - Die Hardware-Adresse des Empfängers

  • Recipient IP-Address - Die Protokoll-Adresse des Empfängers

Bei einem ARP-Request werden alle Felder bis auf die Hardware-Adresse des Empfängers genutzt (genau die versuchen wir ja gerade herauszufinden )

Dieser Request wird nun von allen Maschinen im Netz gehört, und gegebenenfalls genutzt um den ARP-Cache auf den neuesten Stand zu bringen. Die Maschine nach der gefragt wird sendet dann einen ARP-Reply der genauso aussieht wie der Request, aber alle Felder nutzt. Auch dieses Paket wird wieder genutzt um den ARP-Cache aller Maschinen im Netz auf den neuesten Stand zu bringen.

Einträge im ARP-Cache die nicht statisch sind werden nach einer bestimmten Zeit wieder gelöscht.

Wer es noch technischer will kann das Ganze in RFC826 nachlesen.

Frage: Nehmen wir an ein Gerät ist, aus welchen Gründen auch immer auf die IP-Adresse eines unserer Drucker konfiguriert und antwortet die ganze Zeit auf entsprechende ARP-Requests: Was hat das für Auswirkungen, und was tun wir dagegen?

Da es sich bei ARP-Paketen um Broadcasts handelt werden sie nicht geroutet, sondern bleiben in dem Netz, in dem sie abgesandt wurden. Damit man trotzdem noch mit Rechnern in anderen Netzsegmenten reden kann nimmt man etwas namens Proxy-ARP. Dabei macht der Router einen entsprechenden Eintrag in seinen ARP-Cache und sendet alle Pakete für Rechner in dem entsprechenden Netz dorthin. Auf diese Art können LANs transparent verbunden werden.