orm@doc-tcpip.org | Erstellt: Mai 2001 - Letzte Modifikation: Februar 2003 |
Das ARP Protokoll ist eigentlich sehr einfach:
Eine Maschine, die die Link Layer Adresse, also die MAC Adresse,
einer anderen Maschine haben möchte, stellt diese Anfrage als
Broadcast ins Netz. Das muss so sein, denn von der fremden Maschine
ist ja "nur" die IP bekannt und mit der kann man auf dem lokalen Link
nichts machen: IP braucht eine Adapter Adresse, eine physikaliche Adresse.
In der Anfrage steht die eigene MAC, die eigene IP, die fremde,
gewünschte MAC (nur Nullen, ist ja noch nicht bekannt) und die
IP der fremden Maschine.
Alle Maschinen, die es nicht betrifft die also
nicht die angefragte IP-Adresse haben, ignorieren
diese Anfragen (da es Broadcasts sind, sieht man sie natürlich im
IpTrace; wofür es den Schalter "-a" gibt...). Die betroffene Maschine,
also die, welche diese IP-Adresse konfiguriert hat, antwortet darauf.
Sie wiederholt die Anfrage und füllt die fehlende MAC ein.
Die Antwort geht direkt an den Fragesteller - jeder Rechner hat in seinem
ARP-Cache also immer nur die Maschinen, mit denen er wirklich kommuniziert.
Das ist eigentlich alles. Die so gewonnene Information wird nur für kurze Zeit (Default: 20 Minuten) gespeichert und im Bedarfsfall läuft der Mechanismus nochmal an.
Auf einem Ethernet sieht das ARP-Paket so aus:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet Destination Address (6 Byte) | +---------------+---------------+---------------+---------------+ | | Ethernet Source | +-------------------------------+-------------------------------+ | Frame Type (ARP, 0x0806) | HW Address Format (Ether 0x1) | +-------------------------------+-------------------------------+ | Prot-Addr Format(IP 0x0800) | HW Länge: 6 | Prot-Länge: 4 | +-------------------------------+-------------------------------+ | Op-Code: Req. 1, Rep. 2 | HW Adresse des | +-------------------------------+-------------------------------+ | Senders (Ethernetadresse) (6 Byte) | +---------------------------------------------------------------+ | Protokoll Adresse des Senders (IP Adresse) (4 Byte) | +---------------------------------------------------------------+ | HW Adresse des Zieles | +---------------------------------------------------------------+ | (Ethernetadresse) (6 Byte) | Protokoll Adresse des | +---------------------------------------------------------------+ | Zieles (IP Adresse) (4 Byte) | +-------------------------------+
Bei einem ARP-Request ist die gesuchte Ziel-Adresse leer (Null). Im ARP-Reply wird die Ziel-Adresse eingetragen, beide Blöcke werden vertauscht und der Op-Code wird angepasst. Dann kommt das Paket auf den Draht.
In der ARP-Table wird den lokalen IP-Adressen eine MAC-Adresse zugeordnet. Über das ARP Protokoll wird die Tabelle gefüllt und aktuell gehalten. Das Senden eines Paketes an einen lokalen Rechner ist nur unter Kenntniss der MAC-Adresse möglich.
Die ARP-Table kann man manipulieren:
Der Befehl arp -a zeigt alle Einträge an:
#arp -a bosteam4.ncs.xyz.com (6.39.4.63) at 0:20:35:79:5:68 [token ring] dcesp6.ncs.xyz.com (6.39.7.146) at 8:0:5a:81:e6:97 [token ring] dcehd2.lbg.xyz.com (6.228.8.12) at (incomplete) obelixn.ncs.xyz.com (6.39.0.195) at 0:20:35:7a:cb:69 [token ring] cristina.ncs.xyz.com (6.39.0.74) at 0:6:29:b9:50:3f [token ring]
Mit dem Befehl arp -an kann man die Namensauflösung unterdrücken - die kann oft viel Zeit kosten. Es wird die IP und die MAC angegeben, sowie das benutzte Protokoll (hier Token Ring).
"Incomplete" bedeutet, das diese Maschine auf ARP Requests nicht antwortet.
Man kann ARP Einträge löschen (mit dem Befehl arp -d
hostname) und man kann sie anlegen:
arp -s ether HostName ether_address [temp] [pub]
Man muß dabei das Protokoll angeben (ether, token ring etc).
Man kann den
Eintrag als "temp" oder "pub" definieren.
Standard ist, das der Eintrag
bis zum Reboot in der Table bleibt - mit "temp" unterliegt er
dem arpkillc Intervall, wird also aus der ARP-Table
nach einer eingestellten Zeit gelöscht - wenn er nicht benutzt
wird.
Mit "pub" sagt man dem System, das dieser Eintrag im Netz auf
ARP Requests
hin ausgegeben werden soll - obwohl es nicht die eigene
Adresse des Hosts
ist (proxy ARP).
Die ARP Table des Kernels ist eine Hash-Table. Das heisst, sie ist nach verschiedenen Suchkriterien geordnet, um einen schnelleren Zugriff zu haben. Bei den meisten Unixen (und bei AIX) funktioniert der Algorithmus optimal, wenn man die Anzahl der Buckets auf eine Primzahl setzt.
Die ARP Table ist aus einigen "Buckets" mit einer bestimmten Größe zusammengesetzt. Das kann man definieren.
Die insgesamt möglichen Einträge sind dann :
Anzahl der Buckets * Größe des Bucket =
Gesamtanzahl ARP Einträge
Dabei sind pro Bucket nur 3 statische ARP Einträge möglich.
Unter normalen Bedingungen wird der älteste Eintrag gelöscht, wenn
Platz fehlt. Trotzdem ist es eine gute Administrationspraxis, die
Anzahl der möglichen Einträge den Gegebenheiten anzupassen - plus
eine Sicherheitsmarge.
Die Tabelle sollte also mindestens so groß sein wie die Anzahl
aller IP-Adressen auf dem lokalen Subnetz. Besser ist es jedoch,
etwa 2-3 mal soviel Platz vorzusehen, da es vorkommen kann,
das der Algorithmus eine Adresse in einen schon vollen Bucket legt
- obwohl woanders vielleicht noch Platzwäre.
Unter AIX ist das durch einige no-Parameter konfigurierbar:
arptab_bsiz = 7 arptab_nb = 25 arpqsize = 1 arpt_killc = 20arptab_bsiz ist die Größe der Buckets (jeder einzelne), Standard ist 7.
Mit AIX 5 ist die Ausgabe des arp-Kommandos deutlich Nutzer-freundlicher geworden. Man kann jetzt alle Buckets und ihren Inhalt sehen - und sogar zuordnen, welcher Eintrag in welchem Bucket sitzt. Hier ein Beispiel:
nd-3.orm.org (10.10.10.200) at 0:4:ac:97:76:d [ethernet] stored in bucket 5 nd-2.orm.org (10.10.10.1) at 8:0:20:be:4c:6f [ethernet] stored in bucket 6 nd-2aq1.orm.org (10.10.10.2) at 8:0:20:be:4c:6f [ethernet] stored in bucket 7 nd-2bq1.orm.org (10.10.10.3) at 8:0:20:be:4c:6f [ethernet] stored in bucket 8 nd-4a.orm.org (10.10.10.4) at 0:20:35:8d:97:a3 [ethernet] stored in bucket 9 nd-4b.orm.org (10.10.10.5) at 0:20:35:8d:e7:fd [ethernet] stored in bucket 10 nd-8.orm.org (10.10.10.80) at 0:20:35:8d:e7:fd [ethernet] stored in bucket 10 nd-80b.orm.org (10.10.10.82) at 0:6:29:c3:45:2e [ethernet] stored in bucket 12 dns.orm.org (10.10.10.60) at 0:4:ac:97:76:68 [ethernet] stored in bucket 15 dnscache.orm.org (10.10.10.61) at 0:4:ac:97:76:68 [ethernet] stored in bucket 16 bucket: 0 contains: 0 entries bucket: 1 contains: 0 entries bucket: 2 contains: 0 entries bucket: 3 contains: 0 entries bucket: 4 contains: 0 entries bucket: 5 contains: 1 entries bucket: 6 contains: 1 entries bucket: 7 contains: 1 entries bucket: 8 contains: 1 entries bucket: 9 contains: 1 entries bucket: 10 contains: 2 entries bucket: 11 contains: 0 entries bucket: 12 contains: 1 entries bucket: 13 contains: 0 entries bucket: 14 contains: 0 entries bucket: 15 contains: 1 entries bucket: 16 contains: 1 entries bucket: 17 contains: 0 entries bucket: 18 contains: 0 entries bucket: 19 contains: 0 entries bucket: 20 contains: 0 entries bucket: 21 contains: 0 entries bucket: 22 contains: 0 entries bucket: 23 contains: 0 entries bucket: 24 contains: 0 entries There are 10 entries in the arp table.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL