Wird die IP-Route Auswirkungen auf das ARP-Protokoll haben?

Wird die IP-Route Auswirkungen auf das ARP-Protokoll haben?

Ich habe auf meinem Host eine MacVLAN-Netzwerkschnittstelle erstellt mac0. Mein Docker-Container ist auch einem MacVLAN-Netzwerk beigetreten, das dieselbe übergeordnete Schnittstelle hat wie mac0.

Nachdem ich die obigen Schritte ausgeführt habe, kann ich pingmeine mac0IP immer noch nicht vom Docker-Container abrufen. Nachdem ich jedoch mit diesem Befehl eine Route zu meinem Host hinzugefügt habe:

ip route add <container_ip> dev mac0

Ich kann mac0von meinem Container aus erfolgreich einen Ping-IP senden.

Bevor ich die Route hinzufüge, schaue ich, tcpdump -i mac0 host <mac0_ip>was passiert. Es scheint, dass mac0 die ARP-Anfrage einfach nicht beantwortet:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:19:51.218288 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:52.219645 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:53.221646 ARP, Request who-has <host_name> tell 21.26.21.102, length 28

Nach dem Hinzufügen der Route:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:21:46.318010 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:21:46.318033 ARP, Reply <host_name> is-at <mac> (oui Unknown), length 28
20:21:46.318038 IP 21.26.21.102 > <host_name>: ICMP echo request, id 750, seq 1, length 64
20:21:46.318062 IP <host_name> > 21.26.21.102: ICMP echo reply, id 750, seq 1, length 64

Ich weiß, dass die MacVLAN-Subschnittstelle nicht direkt mit der übergeordneten Schnittstelle kommunizieren kann. Was ich nicht weiß, ist, warum die IP-Route das ARP-Protokoll beeinflussen kann, das meiner Meinung nach auf der L2-Netzwerkschicht arbeitet?

Antwort1

ARP ist kein eigenständiges Protokoll; es wird von IP als Hilfsprotokoll verwendet, um Layer-3-Adressen in Layer-2-Adressen aufzulösen. Obwohl es technisch gesehen ein generisches Protokoll ist, wird es praktisch immer nur für IPv4 verwendet und könnte fast als Teil von IPv4 betrachtet werden. (Und zum Vergleich: In IPv6 wird die gleiche Funktionalität in ICMPv6 ausgeführt, was wohlüberIP.)

Da ARP zum Abrufen der IP-Konfiguration verwendet wird, hat der IP-Stack die volle Entscheidungsbefugnis darüber, welche Schnittstellen welche ARP-Antworten erhalten sollen. Einige Betriebssysteme antworten beispielsweise auf ARP-Abfragen für jede Adresse auf jeder Schnittstelle, während andere dies auf Adressen derselben Schnittstelle wie die Abfrage beschränken.(Unter Linux können Sie jedes Verhalten auswählen, indem Sie „arp_ignore“ ändern.)

Linux hat mehrere andere ARP-Begrenzungensysctls, und eine davon ist insbesondere arp_filter, das – wenn aktiviert – das Betriebssystem anweist, ARP-Anfragen zu ignorieren, wenn die anfordernde IP-Adresse über eine andere Schnittstelle geleitet worden wäre. Dies scheint Ihrem Problem ähnlich zu sein.

verwandte Informationen