Gratuitous ARP kenne ich, mich interessiert aber, wo denn
definiert ist, dass ein Node beim Booten einen Gratuitous ARP
senden muss, und wo steht, dass er bei einer Antwort seinen
IP-Stack deaktivieren muss.
Gibt's dazu irgendeinen RFC oder einen Standard? Interessiert
mich wirklich. Oder machen das einfach nur alle ordentlichen
Hersteller "halt" so?
Jein. Es steht so direkt meines Wissens in keinem RFC, aber die Definition des TCP/IP-Protokoll beinhaltet ja bereits die Anforderung, daß eine IP-Adresse eindeutig sein muss (weil es sonst auch nicht geht, zumindest in dem gleichen Netzsegment, die Zuordnung IP -> MAC muss eindeutig sein). Da es aber keine zentrale Instanz im Netz gibt, die ein bootender Host fragen kann (oder ihm seine IP zusteilt), muss er sich also selbst darum kümmern. Spezialfälle wie Failover, wirres Trunking und seltsames Balancing mal ausgenommen, kann ein Host gar nicht viel anderes machen, wenn er nicht die "Grundregel" einer eindeutigen IP verletzen will. Ob er selbst oder eigentlich der Admin, naja, die Macher der Stacks gehen halt davon aus, daß eine doppelte IP stets ein nicht gewollter Fehler in der Konfiguration ist, und fangen den vermeidlichen Fehler entsprechend ab. Zum Glück für die reale Netzwerkwelt da draußen, denn sowas kommt oft genug vor. Sonst könnte jeder Heini ein Netzwerk lahmlegen, indem er einfach mal seiner Kiste (oder einer mitgebrachten) einen Schwung IPs spendiert. Nicht jede Firma hat MAC-Steuerung an den Switches und früher gab's das schon überhaupt nicht. Ein kleiner SOHO-Router unter dem Schreibtisch, und schon hat man einen Tag frei, weil sich die Admins einen Wolf suchen.. ^^
Ich meine, mit IP kann das ja nichts zu
tun haben, weil sich die von Dir beschriebenen Mechanismen gar
nicht auf IP-Ebene abspielen (und daher auch der TCP/IP-Stack
damit nur mittelbar zu tun hat).
Gut, man kann sich nun trefflich drüber streiten, ob ARP ein Teil des IP-Protokolls für lokale Segmente ist oder nicht. Bei Netware ist die MAC ein Teil der Adresse, bei AppleTalk ist es irgendwie ganz anders, und viel mehr gibt/gab es nicht. Die Frage des OPs ging ja über lokale Segmente und da ist es mehr oder weniger halt ein Teil des TCP/IP-Protokolls für lokale Ethernetnetzwerke. Müßte nu nachlesen, ob NDP ähnliche Mechanismen bereithält, aber wenn ich mich recht erinner, setzt das ja auf ICMP auf. Ein Echo-Request auf die eigene IP würde prinzipiell ja auch gehen, aber dank sinnfreier Firewalls und ähnliches ist das nicht sicher genug, da ist ARP einfach besser geeignet.
In Bezug auf die Ursprungsfrage könnte man noch ergänzen, dass
das alles nur ein Problem ist, sofern sich die konkurrierenden
Nodes in derselben Layer 2-Wolke befinden und die
ARP-Geschichte ja auch (de facto) nur für Ethernet so
funktioniert.
Sind Router im Netz oder VLANs im Spiel, ist es eh wurscht. Nur bei gleicher Broadcastdomain kommt es ja überhaupt zu Problemen.
Es gibt ja auch IP-Netze über Medien, die keine MAC-Adressen
und kein ARP haben, und Anycast gibt's ja auch noch (als
Beispiel für doppelte IPs, die /kein/ Problem darstellen).
Nur das Anycast-Hosts nicht mit der gleichen IP im gleichen Netzsegment stehen, sondern wie beim DNS über die ganze Welt verteilt und das ganze auch strengen Reglen folgt und eigentlich mehr mit Unicasts zu vergleichen ist. Dazu müssen auch die Router die entsprechenden Infos haben und BGP und Co. nichts durcheinander bringen. Wenn man die ARP-Tabelle für das lokale Segment mit der Routingtabelle vergleicht, ergeben sich schon logische Gemeinsamkeiten. Kein Router darf die selbe Route zweimal haben - aber er darf beliebige Wege zum Ziel haben, was ARP so nicht kennt. Im Vergleich zu Ethernet wäre das dann am ehesten noch Spanning Tree, welches aber wiederum nur die Switches wissen. Auch wenn man Switches nu als "MAC-Router" bezeichnet, so muss IP+Ethernet auch auf 10Base2/5, FDDI etc. funktionieren. So wirklich miteinander vergleichbar ist das also doch nicht.