Назад | Перейти на главную страницу

Что происходит, когда запрос ARP поступает из другой подсети?

Что произойдет, если пакет запроса ARP будет отправлен с маршрутизатора 1 на маршрутизатор 2 в следующих двух случаях? Будет ли сгенерирован ответ ARP или пакет запроса ARP будет отброшен?

  1. [router1] Intf1 (20.0.0.1/24) ======== (40.0.0.1/24)Intf2[router2]
  2. [router1] Intf1 (20.0.0.1/24) ======== (20.0.0.2/8) Intf2 [router2]

В приведенной выше топологии порт «Intf1» на маршрутизаторе «router1» подключен к порту «Intf2» на другом маршрутизаторе «router2» через прямое соединение (например, кабель 1 Гбит / с).

ARP работает только между устройствами в одной IP-подсети.

Когда устройству A с IP-адресом A необходимо отправить пакет устройству B с IP-адресом B, первое, что оно делает, это проверяет свою таблицу маршрутизации, чтобы определить, принадлежит ли IP-адрес B к подсети, к которой оно может напрямую подключиться через свой сетевой интерфейс (s ); если это так, то устройства A используют ARP для сопоставления IP-адреса B с физическим адресом Ethernet, а затем отправляют кадр Ethernet на этот адрес.

Но если два IP-адреса находятся в разных подсетях, устройство будет следовать совершенно другой логике: оно будет искать в своей таблице маршрутизации маршрут к сети назначения, а затем отправит свой пакет на соответствующий маршрутизатор (или на свой шлюз по умолчанию, если более конкретный маршрут отсутствует); в этом сценарии ARP будет использоваться для поиска аппаратного адреса маршрутизатор, поскольку IP-адрес назначения уже считается недостижимым напрямую, поэтому пакет должен быть доставлен маршрутизатору, который позаботится об этом.

В НЕКОТОРЫХ случаях (я знаю Linux жестяная банка вести себя таким образом, не уверенный в других), но хост может отвечать на ARP на «неправильном» интерфейсе. Возьмем эту сеть:

10.0.0.0/24  ==== Host A ==== 192.168.0.0/24

Хост A имеет адреса в обеих сетях; скажем 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.

Есть два возможных ответа, ни один из которых не имеет отношения к arp, а не связан с таблицей пересылки.

Если есть инструкция маршрута на R1, перенаправляющем трафик, предназначенный для всех сетей (маршрут по умолчанию) из Intf1, тогда ответы ARP будут сгенерированы R2 и получены R1 в обоих сценариях.

ARP - это протокол канального уровня, который использует для связи аппаратный адрес. Он не имеет зависимостей и не ограничен протоколами более высокого уровня, такими как IP.

мне не понятна ваша топология. у вас есть один 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 адреса это немного странно