Существуют разные варианты ответа на этот вопрос, но я не могу быть уверен, что был задан вопрос о моей конкретной ситуации.
Я настраиваю простую сеть Ethernet, которая выглядит следующим образом:
На узле 0 ("rpi1") я запускаю dnsmasq как DNS- и DHCP-сервер. Вот его часть /etc/dnsmasq.conf
(без деталей MAC-адреса):
# Assign static IPs to cluster members
# Format = MAC:hostname:IP
dhcp-host=ZZ:YY:XX:WW:VV:UU,rpi1,10.0.0.1 # Node 0
dhcp-host=ZZ:YY:XX:WW:VV:UU,rpi2,10.0.0.2 # Node 1
dhcp-host=ZZ:YY:XX:WW:VV:UU,rpi3,10.0.0.3 # Node 2
dhcp-host=ZZ:YY:XX:WW:VV:UU,rpi4,10.0.0.4 # Node 3
Оба аспекта DNS и DHCP работают. Каждому узлу назначается его предполагаемый 10.0.0.X
IP-адрес, и я могу разрешить любой домен на любом узле, запустив, например, dig rpi4
(-> ... 10.0.0.4
). И, например, если я внутри rpi2, то я могу попасть в rpi3 с помощью ssh rpi3
, и я могу, например ping rpi4
, или ping 10.0.0.4
и получить 0% потери пакетов.
Однако мне не ясно, осуществляется ли связь между узлами напрямую через коммутатор или через rpi1 (который управляет dnsmasq и предоставляет услуги маршрутизатора).
Если узлы взаимодействуют напрямую, то я предполагаю, что они должны знать MAC-адреса друг друга, чтобы посылать кадры, которые идут друг другу напрямую через коммутатор. Если это так, то мои вопросы вкратце таковы:
- В какой момент узел узнает MAC-адреса других узлов?
- И как я могу проверить MAC-адрес, например, rpi3 на rpi2, чтобы убедиться, что они узнали друг о друге?
Заранее спасибо!
решение1
В какой момент узел узнает MAC-адреса других узлов?
Сначала они запросят IP-адреса других узлов у DNS-сервера. После этого они отправят запрос 'arp' всем узлам, и узел, имеющий IP-адрес, ответит на этот запрос 'arp' своим MAC-адресом.
И как я могу проверить MAC-адрес, например, rpi3 на rpi2, чтобы убедиться, что они узнали друг о друге?
«arp -a» обычно выдает вам таблицу ARP, и вы можете проверить записи, чтобы увидеть, узнали ли они MAC-адреса друг друга.