この質問にはさまざまなバリエーションがありますが、私の状況を正確に尋ねられたかどうかはわかりません。
次のようなシンプルなイーサネット ネットワークをセットアップしています。
ノード 0 ("rpi1") では、DNS サーバーと DHCP サーバーの両方として dnsmasq を実行しています。以下はその一部です/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 アドレスを学習しますか?
- また、たとえば rpi2 上の rpi3 の MAC アドレスを調べて、それらが互いを認識しているかどうかを確認するにはどうすればよいですか?
前もって感謝します!
答え1
ノードはどの時点で他のノードの MAC アドレスを学習しますか?
まず、DNS サーバーから他のノードの IP アドレスを問い合わせます。その後、すべてのノードに「arp」要求を送信し、IP アドレスを持つノードは、その「arp」要求に MAC アドレスで応答します。
また、たとえば rpi2 上の rpi3 の MAC アドレスを調べて、それらが互いを認識しているかどうかを確認するにはどうすればよいですか?
'arp -a' は通常 arp テーブルを提供し、エントリを調べて互いの MAC アドレスを学習したかどうかを確認できます。