Ein Ethernet-Netzwerk ist ein Multipoint-Netz, das heisst, man kann als Teilnehmer (host) über einen Anschluss (port) viele Gegenstellen (nodes) erreichen und von ihnen erreicht werden. Im Ethernet Netzwerk wird mit sogenannten MAC (Media Access Control) Adressen gearbeitet, die fest in den Speicher einer Netzwerkkarte gebrannt werden (kann aber vom OS zur Laufzeit verändert werden. Diese haben eine Länge von 48-bit, aufgeschrieben üblicherweise in sechs jeweils 8-bit lange Hex-Zahlen unterteilt, manchmal auch in drei 16bit-Zahlen. Die ersten drei 8-bit Werte sind der OUI (Organizationally Unique Identifier) und davon lässt sich meistens der Hersteller einer Netzwerkkarte oder eines Gerätes ableiten. Dafür gibt es Webseiten, aber ich mag das Tool ouilookup. Unter Linux lässt es sich sehr easy installieren aus den Quellen.
Will man nun IP auf Ethernet-Netzwerken sprechen, braucht es eine Technik, um eine IP einer MAC-Adresse zuzuordnen. Das Protokoll dazu heisst in IPv4 ARP (Adress Resolution Protocol) und in IPv6 ND (Neighbor Discovery). Wenn man Netzwerkprobleme debuggen will, ist der erste Schritt eigentlich immer zu prüfen, ob ARP oder ND erfolgreich war. Unter Linux war seit ehedem das Tool arp dafür zuständig. Hier ein Beispiel:
root@linux:~# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.161 ether e8:c5:7a:8d:e1:56 C ens18
192.168.1.165 ether bc:30:5b:f4:ad:cc C ens18
192.168.1.19 ether 00:26:0a:77:a7:c0 C ens18
192.168.1.208 ether 00:0c:29:44:22:5c C ens18
192.168.1.196 (incomplete) ens18
192.168.1.3 ether 08:92:04:a6:12:92 C ens18
Die erste Spalte zeigt die IP und die dritte die MAC Adresse, falls sie existiert. Steht da (incomplete)
, dann gibt es keine Verbindung. Die letzte zeigt den Ethernet-Port.
Aber oh Schreck! Auf neueren Linux-Installationen gibt es den Befehl nicht mehr. Unter Debian bekommt man ihn mit sudo apt-get install net-tools
zurück. Aber es gibt das neue Tool ip
, und das kann auch ARPs anzeigen. Aber weil es neu ist und nicht alt und weil es für IPv4 und IPv6 gebaut wurde, hat es die beiden Bezeichnungen zusammengefasst. Jetzt heisst es nicht mehr arp
, sondern neighbour
für beide. Und das ist ja eigentlich auch richtig so.
root@linux:~# ip neigh
192.168.1.161 dev ens18 lladdr e8:c5:7a:8d:e1:56 STALE
192.168.1.165 dev ens18 lladdr bc:30:5b:f4:ad:cc STALE
192.168.1.19 dev ens18 lladdr 00:26:0a:77:a7:c0 DELAY
192.168.1.208 dev ens18 lladdr 00:0c:29:44:22:5c REACHABLE
192.168.1.196 dev ens18 FAILED
192.168.1.3 dev ens18 lladdr 08:92:04:a6:12:92 STALE
Und man bekommt sogar mehr Informationen über den Status. STALE bedeutet etwa, dass der Eintrag schon länger nicht mehr aktualisiert wurde. Was die alle bedeuten, steht in der man-page, die man mit folgendem Befehl lesen kann (und sollte): man ip-neighbour