同じMACアドレスを持つ機器をスイッチに接続してみた その2

今回は前回の続きで、同じ MAC アドレスをもつ 2 台の BB ルータを
スイッチに接続してみたらどうなるか?を検証してみましたよと。

 

Ping で確認

 

スイッチ

 

まずは、別の MAC アドレスを持つ、PC-A から
ルータ A とルータ B にそれぞれ Ping を実行してみます。

すると、どちらのルータにも Ping が成功しました。

うーん、これはどのように考えればよいのでしょうか?

スイッチは MAC アドレスを学習して、スイッチが
フレームを受信すると、そのフレームの送信元 MAC アドレスを、
自身の MAC アドレステーブルに登録するという動作でしたね。
それを踏まえて、今回の動作を考えてみると、

  • まず PC-A は、ルータ A の IP アドレスに対する
    MAC アドレスを調べるために、ブロードキャストで
    ARP リクエストを送信
  • スイッチは ARP リクエストを全ポートへ転送
  • ARP パケットはルータ A もルータ B も受信するが、
    IP アドレスの違うルータ B は、そのパケットを破棄し、
    ルータ A は自身の IP アドレスを入れて ARP リプライを
    PC-A に返信
  • この時点でスイッチは、 PC-A とルータ A の
    MAC アドレスを学習
  • その後、PC-A からルータ A に Ping を送信
  • スイッチは MAC アドレステーブルに、ルータ A の
    MAC アドレスが登録されているため、ルータ A が
    接続されているポートにフレームを転送
  • ICMP リクエストを受信したルータ A は、
    PC-A へ ICMP リプライを返信

以上の動作から、PC-A にはルータ A の ICMP リプライが
返信されてくるため、Ping は成功する。

同様に、ルータ B へ Ping を実行した場合も、PC-A から
ARP リクエストをブロードキャストして、同様の動作で
Ping が成功すると…

 

つまり、同じ MAC アドレスを持つ機器が接続されていたと
しても、問題なく動作すると。

では、PC-A からルータ A とルータ B へ同時に Ping を
実行してみるとどうなるでしょうか?

PC-A からルータ A とルータ B に同時に Ping を
実行してみたところ…

ルータ A 宛の Ping は成功するものの、ルータ B の
Ping が失敗します。

どうやら、スイッチが保持している MAC アドレステーブルには、
ルータ A 宛のポートが登録され続けるために、
ルータ B 宛の Ping が失敗している模様。

 

Pingとスイッチ

 

Ping を実行し続けた状態で、約 5 分ほど放置してみると、
今度はルータ B への Ping が成功し、ルータ A への
Ping が失敗し始めました。

この結果から考えられる原因はとしては、

  • スイッチの MAC アドレステーブルは、5 分経過すると消去される
  • MAC アドレスが再学習されるタイミングで MAC アドレスと
    ポート番号の対応付けが変更される
  • そのため、Ping が成功するノードが、ルータ A からルータ B へ変わる

今回使用したスイッチのマニュアルを見ると、
MAC アドレステーブルの保持時間が 5 分と書かれているため、
おそらく上記動作をしていると思われます。

ということで今回の結論

  • 同じ MAC アドレスを持つノードをスイッチに接続した場合、
    うまいこと通信出来ない。
  • スイッチの MAC アドレステーブルが書き換わるタイミングは、
    ARP 等のブロードキャストが流れた場合や、
    MAC アドレステーブルの保持時間経過後に書き換わる。

関連記事