ARP

Address Resolution Protocol

Das ARP Protokoll ist das Bindeglied zwischen der fixen, an die Hardware gebundenen MAC-Adresse und der IP-Adresse. ARP wird innerhalb eines lokalen Netzwerks verwendet, um die Verbindung zu den direkten Nachbarn aufzubauen.
Netzwerk Zusammenarbeit - Lokal und weltweit
Nahverkehr Direkte Kommunikation mit LAN-Partnern (Nachbarn)
ARP-Stack Nachschlag-Liste (Lookup-table) MAC <-> IP
ARPing Suche nach der MAC-Adresse zu einer IP-Adresse
Experimente Das Verhalten von ARP am eigenen PC
Verwandte Themen OSI-Modell, Ethernet, MAC, IPv4, IPv6,
Links Ausgewählte Links zum Thema ARP

Nahverkehr

ARP regelt (nur) die Kommunikation mit den direkt erreichbaren Partnern (Nachbarn) im gleichen Netzwerk-Segment.

PC

Ein typischer Arbeits-PC in einem lokalen Netzwerk (LAN) kommuniziert direkt nur mit 1 oder 2 Partner-Geräten (Nachbarn):
Server (eigene Resourcen)
Router (Internet)
In vielen kleinen LANs dient der → Server auch als → Router - Dann hat jeder PC nur ein Gerät als ständigen Kommunikations-Partner.

Die direkte Verbindung mit anderen Arbeits-PC des gleichen Netzwerks (Peer-to-Peer) ist zwar möglich, jedoch nur selten notwendig oder sinnvoll. Bei Bedarf wird auch dafür ARP verwendet.

Ein PC kommuniziert natürlich mit zahlreichen weiteren Geräten, jedoch:
Drucker und andere gemeinsam genutzte LAN-Geräte werden indirekt über den → Server erreicht.
Das Internet wird ebenfalls nur indirekt über den → Router erreicht.
Alle Fälle der indirekten Kommunikation (über Zwischenstufen) reduzieren sich auf der untersten Ebene auf die Kommunikation mit den direkt erreichbaren Nachbarn (Server, Router), die ihrerseits die Weiterleitung der Daten veranlassen.

Server

Der → Server eines lokalen Netzwerks kommuniziert laufend mit allen anderen Geräten seines LAN, die er mit seinen Diensten versorgt. Alle diese direkten Verbindungen werden mit Hilfe von ARP aufgebaut.

Router

Ein → Router (Proxy-Server) hat Verbindung mit 2 verschiedenen Netzwerk-Segmenten:
Ein (→ Ethernet)-Interface verbindet mit dem lokalen Netzwerk. Über dieses (und mit ARP) kommuniziert der Router mit allen PC des LAN, welche Daten mit dem → Internet austauschen.
Ein weiteres Interface verbindet den Router mit dem 'Außen'-Netzwerk. Dieses führt meist zum Internet-Provider. In diesem Segment ist der Router des Providers der einzige direkte Partner der mit ARP hergestellten Verbindung.

Brücke zwischen MAC und IP

Sinnvolle Kommunikations-Aufträge von Programmen erfolgen nur an IP-Adressen.
Damit ein Gerät (PC) Daten über ein (→ Ethernet)-Netzwerk zustellen kann, muss es allerdings die → MAC-(Hardware)-Adresse des direkten Kommunikations-Partners kennen.

ARP analysiert das lokale Netzwerk und findet die → MAC-Adresse zu einer gewünschten → IPv4-Adresse.
ARP schreibt diese Daten in eine Tabelle (ARP-Stack).
Mit Hilfe des ↓ ARP-Stack erspart man sich beim nächsten Kommunikations-Auftrag an den gleichen Partner die Analyse des LAN, da man die benötigte MAC-Adresse dort sehr viel rascher findet.

ARP-Stack

Der ARP-Stack

ist eine Liste, welche die MAC-Adressen aller direkten Kommunikations-Partner mit deren IP-Adressen verknüpft.
Mit dem → Konsolen-Befehl arp wird der aktuelle ARP-Stack angezeigt, z.B. auf Linux
$ arp
Address        HWaddress           Iface
192.168.0.2    00:19:DB:81:C7:3C   eth0
192.168.0.32   00:22:3F:DC:A0:5A   eth0
Auf Windows verwendet man die Option -a
C:\> arp -a
Schnittstelle 192.168.0.32
  Internetadresse  Physikal. Adresse
  192.168.0.1      00-02-e3-16-71-0e
  192.168.0.2      00-19-db-81-c7-3c
Der Stack ist eine Liste mit 2 Spalten. Links die → IPv4-Adressen aller in letzter Zeit kontaktierten direkten Nachbarn, rechts die → MAC-(Hardware)-Adresse von deren Netzwerk-(Ethernet)-Interface.
Je nach Option werden weitere Daten angezeigt, z.B. die Namen oder Adressen der eigenen Interface (Iface, Schnittstelle).

Timeout

Die Daten des ARP-Stack haben eine begrenzte Lebensdauer von einigen Minuten. Man findet darin nur jene Partner, mit denen unmittelbar vorher kommuniziert wurde.

Jede erfolgreiche Kommunikation verlängert die Lebensdauer des entsprechenden Datensatzes (Zeile) im ARP-Stack. Damit kann ARP auf Veränderungen im lokalen Netzwerk reagieren.

Wenn ein ARP-Stack fehlerhafte Datern enthält, dann ist während dieser Zeit keine Verbindung zum betroffenen Partner möglich. Wenn der fehlerhafte ARP-Datensatz abgelaufen ist oder manuell gelöscht wurde, wird der Partner erneut gesucht und der Fehler normalerweise behoben.

IPv4

Das ARP-Protokoll wird nur in der → IP-Version 4 verwendet.

IPv6

Die → IP-Version 6 verwendet für den gleichen Zweck das deutlicher benannte Neighbor Discovery Protocol (NDP) zum 'Auffinden der Nachbar-Geräte'.

ARPing

Suche im ARP-Stack

Wenn ein PC-Programm mit einem Partner kommunizieren will, dann wird die gewünschte IP-Adresse im ARP-Stack gesucht.

Wenn die gewünschte IP-Adresse im ARP-Stack eingetragen ist, dann wird ohne Verzögerung die Verbindung mit dem Partner hergestellt:
Das (Ethernet) Daten-Paket wird an die im Stack eingetragene MAC-Adresse des Partners (und damit normalerweise an die richtige IP-Adresse) gesendet.

Wenn die IP-Adresse nicht eingetragen ist, dann wird der Partner im Netzwerk mit einem ARPing gesucht.

ARPing

Damit sucht ARP einen Kommunikations-Partner, dessen IP-Adresse verlangt wird, dessen MAC-Adresse jedoch unbekannt ist.
ARP sendet einen Rundspruch (Broadcast) an die → MAC-Adresse FF:FF:FF:FF:FF:FF die von jedem Gerät im lokalen Netzwerk empfangen wird. In den Daten ist die gesuchte IPv4-Adresse enthalten.
Wenn ein Gerät darin seine eigene IP-Adresse erkennt, dann sendet es ein kurzes Daten-Paket an den Absender, in welchem die Verbindung bestätigt wird.
Eine bestätigte Verbindung wird auf beiden Seiten in den ARP-Stack eingetragen, und auf dieser Grundlage die weitere Kommunikation durchgeführt.
Jeder ARPing löst einen Broadcast aus. Das bedeutet einigen Aufwand und kostet mehr Zeit als das Nachsehen (Lookup) im ARP-Stack. Jedes Betriebssystem versucht die Ablaufzeit eines Eintrags im ARP-Stack zu optimieren und dadurch unnötigen Daten-Verkehr (Traffic) zu verhindern.

Programm ARPing

In allen Linux Server-Distributionen ist das Konsolen-(Shell)-Programm arping enthalten, welches u.a. Nachbar-Geräte mit bestimmten IP-Adressen suchen kann. In Linux Desktop-Distributionen kann man das Programm nachträglich laden; auch für Windows gibt es kostenfreie Versionen im Internet.

Das Programm funktioniert ganz ähnlich wie das bekannte Programm → Ping, welches jedoch mit dem → ICMP-Protokoll arbeitet. ARPing ist mächtiger und daher aus gutem Grund dem (Linux)-Administrator root vorbehalten.

Ein ARPing wird sinnvoll nur an IP-Adressen im eigenen lokalen Netzwerk gerichtet. Man kann damit z.B. sehr rasch alle belegten und freien Adressen aus den 254 möglichen IPv4-Adressen eines LAN ermitteln.

Jeder PC-Firewall muss ARP Daten-Pakete zulassen, denn ansonsten können die Geräte keine ARP-Stacks führen und das würde jede Kommunikation unterbinden.
Ein ARPing darf daher immer passieren, auch dann wenn bei 'paranoider' Einstellung des Firewall sogar → ICMP (Ping) verboten ist.
Ein Router lässt ARP Daten-Pakete in keinem Fall durch, da ARP auf jeweils 1 Netzwerk-Segment begrenzt ist.

ARP-Experimente

Mit dem Konsolen-Programm arp kann man die Arbeit von ARP am eigenen PC verfolgen.
Als Test-Partner eignet sich am besten ein anderer Nachbar-PC im gleichen lokalen Netzwerk, mit dem man normalerweise keine Daten direkt austauscht.
Öffnen sie eine Konsole (Windows-'Eingabeaufforderung') und zeigen sie den aktuellen Inhalt des ARP-Stack an:

Linux

$ arp

Windows

C:\> arp -a
Löschen sie den ARP-Stack manuell. Unmittelbar danach sollte der ARP-Stack leer sein. Wenn irgend ein (Hintergrund)-Programm jedoch in der kurzen Zeit zwischen Löschen und erneuter Anzeige eine Verbindung eine Kommunikation durchgeführt hat, dann sehen sie die Adressen des entsprechenden Nachbarn in der Liste:
$ arp -d 192.168.0.2
$ arp
Zum Löschen eines Datensatzes muss man Name oder IPv4-Adresse des Nachbar-Geräts angeben.
C:\> arp -d
C:\> arp -a
Man kann ein bestimmtes Nachbar-Gerät angeben, oder ohne weitere Angabe alle Einträge löschen.
Führen sie nun eine beliebige Kommunikation mit einem Nachbar-Gerät durch, welches nicht im ARP-Stack angeführt ist.
Wenn das Ziel erreicht wurde, dann ist dessen Adresse unmittelbar danach im ARP-Stack eingetragen:
$ ping -c3 192.168.0.2
$ arp
C:\> ping 192.168.0.2
C:\> arp -a
Wiederholen sie die Anzeige des ARP-Stack und führen sie in dieser Zeit keine Komunikation mit dem Test-Nachbarn: Nach einigen Minuten werden die Daten dieses Geräts automatisch aus dem ARP-Stack gelöscht.
$ arp
C:\> arp -a
So wird die integrierte Hilfe zur Anweisung arp angezeigt:
$ man arp
Navigation mit den Pfeil-Tasten, Abbruch mit Taste q
C:\> arp /?

Manuelle Änderung

Es ist prinzipiell möglich, die Daten des ARP-Stack manuell oder mit einem entsprechenden Programm zu ändern.

Das Löschen von ARP-Stack Datensätzen ist ungefährlich. Wenn sie für eine neue Kommunikation gebraucht werden, dann werden die Daten mit ARPing gesucht und bei Erfolg in den Stack eingetragen.

Das manuelle Eintragen von Daten ist möglich, jedoch heikel. Bei einem Fehler ist das betroffene Nachbar-Gerät nicht mehr erreichbar. Besonders gefährlich sind 'statische' Einträge ohne Ablaufzeit: Bei einem Fehler können sie von ARP nicht automatisch korrigiert werden.

Böswillige Angreifer können den ARP-Stack manipulieren. Das ist allerdings erst dann möglich, wenn sie den Firewall überwunden haben und in das Netzwerk bzw. in einen PC eingedrungen sind.

Dann allerdings können sie ARP ungehindert verwenden, weil ARP-Daten prinzipiell von keinem Firewall blockiert werden dürfen.
Auf diese Weise ist es möglich, die Verbindung zu einem Gerät zu unterbrechen. Noch unangenehmer ist die (unbemerkte) Umleitung von Daten an ein anderes Ziel.