Что происходит, когда ARP-запрос поступает из другой подсети?
Что произойдет, когда пакет запроса ARP будет отправлен с router1 на router2 в следующих двух случаях? Будет ли сформирован ответ ARP или пакет запроса ARP будет отброшен?
- [router1] Intf1 (20.0.0.1/24) ======== (40.0.0.1/24)Intf2[router2]
- [router1] Intf1 (20.0.0.1/24) ======== (20.0.0.2/8) Intf2 [router2]
В приведенной выше топологии порт "Intf1" на маршрутизаторе "router1" подключен к порту "Intf2" на другом маршрутизаторе "router2" через прямую связь (например, кабель 1 Гбит / с).
4 ответа
ARP работает только между устройствами в одной IP-подсети.
Когда устройству A с IP-адресом A необходимо отправить пакет на устройство B с IP-адресом B, в первую очередь он обращается к своей таблице маршрутизации, чтобы определить, принадлежит ли IP-адрес B подсети, к которой он может напрямую подключиться через свой сетевой интерфейс (ы).); если это так, то устройства A используют ARP для сопоставления IP-адреса B с физическим адресом Ethernet, а затем отправляют кадр Ethernet на этот адрес.
Но если два IP-адреса находятся в разных подсетях, устройство будет следовать совершенно другой логике: оно будет искать в своей таблице маршрутизации маршрут к сети назначения, а затем отправит свой пакет соответствующему маршрутизатору (или своему шлюз по умолчанию, если нет более конкретного маршрута); в этом сценарии ARP будет использоваться для поиска аппаратного адреса маршрутизатора, поскольку IP-адрес назначения уже считается недостижимым, поэтому пакет должен быть доставлен маршрутизатору, который может об этом позаботиться.
В НЕКОТОРЫХ случаях (я знаю, что Linux может вести себя таким образом, не уверенный в других), но хост может отвечать на ARP на "неправильном" интерфейсе. Возьми эту сеть:
10.0.0.0/24 ==== Host A ==== 192.168.0.0/24
Хост А имеет адрес в обеих сетях; скажем 10.0.0.1
а также 192.168.0.1
Если узел A получает ARP для 192.168.0.1 через интерфейс 10.0.0.1, он ответит MAC-адресом интерфейса 10.0.0.1.
Это поведение контролируется arp_ignore
настраиваемое ядро (Источник: http://blog.steve-miller.org/2010/03/tweaking-arp-behavior-in-linux.html):
arp_ignore - Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured on any interface.
1 - reply only if the target IP address is local address configured on the incoming interface.
2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface.
3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied.
4-7 - reserved
8 - do not reply for all local addresses.
Как указано выше, по умолчанию используется ответ на любой локальный адрес (т. Е. Адрес, настроенный на хосте A) независимо от интерфейса, на который получен ARP.
Ваша топология мне не понятна. у вас есть один IP-адрес на router1 / intf1 и 2 IP-адреса на router2/intf2? однако когда router1 / intf1 отправляет запрос arp на router2/intf2, router2 отправит ответ arp, а router1 сохранит mac-адрес для IP-адреса 20.0.0.2 в своей таблице arp. это будет работать, потому что 20.0.0.1/24 включен в сеть 20.0.0.2/8. почему вы настраиваете IP-адреса таким образом, это немного странно
Есть два возможных ответа, ни один из которых не имеет отношения к arp, а представляет собой таблицу пересылки.
Если на маршруте R1 есть оператор маршрутизации, предназначенный для всех сетей (маршрут по умолчанию) из Intf1, то ответы ARP будут сгенерированы R2 и будут получены R1 в обоих сценариях.
ARP - это протокол канального уровня, который использует аппаратный адрес для связи. Он не имеет зависимостей и не ограничен протоколами более высокого уровня, такими как IP.