【マルチキャスト】MACアドレスへのマッピング

マルチキャストのパケットをイーサネットで送るとき、宛先 MAC アドレスには、宛先のマルチキャスト IP アドレスから計算した「マルチキャスト MAC アドレス」を使います。この記事では、MAC アドレスでユニキャストとマルチキャストを見分ける方法と、マルチキャスト IP アドレスを MAC アドレスにマッピングするしくみを説明し、実際のパケットで確かめます。

この記事でわかること
  1. MAC アドレスの1ビットで、ユニキャストとマルチキャストを見分けられること
  2. マルチキャスト MAC アドレスは 01:00:5E で始まり、IP アドレスの下位 23 ビットを入れて作ること
  3. 32 個のマルチキャスト IP アドレスが、同じ MAC アドレスになること

MAC アドレスの表し方

MAC アドレスは 48 ビットで、16 進数 12 桁で表します。通常は、8 ビット(1 オクテット)ごとにハイフン(-)やコロン(:)で区切って書きます(例:00-12-34-56-78-00、00:12:34:56:78:00)。

224.0.0.0〜239.255.255.255 のマルチキャスト IP アドレスは、イーサネットのインターフェースが「特定のグループ宛てのマルチキャストパケット」だと見分けられるように、専用の MAC アドレスにマッピングされます。

ユニキャストとマルチキャストの MAC アドレスの区別

MAC アドレスを見ただけで、ユニキャスト用か、マルチキャストやブロードキャスト用かがわかります。第1オクテットの最下位ビット(2進数で書いたときに左から 8 ビット目)が 0 ならユニキャスト用、1 ならマルチキャストまたはブロードキャスト用の MAC アドレスです。このビットを I/G ビット(Individual/Group)と呼びます。

第1オクテット 第2オクテット 第3オクテット 第4オクテット 第5オクテット 第6オクテット 48 ビット(8 ビット × 6) x x x x x x x I/G 左から 8 ビット目 0:ユニキャスト(1台の機器宛て) 1:マルチキャスト・ブロードキャスト(グループ宛て)
図1 第1オクテットの最下位ビット(I/G ビット)で区別する
MAC アドレスの例第1オクテット(2進数)種類
00:12:34:56:78:0000000000ユニキャスト
01:00:5E:01:01:0100000001マルチキャスト
FF:FF:FF:FF:FF:FF11111111ブロードキャスト

イーサネットでは、各オクテットを最下位ビットから順に送ります。そのため I/G ビットは、フレームの宛先 MAC アドレスの中でいちばん最初に送られるビットです。スイッチや NIC は、宛先の最初の1ビットを見ただけで、1台宛てかグループ宛てかを判断できます。

マルチキャスト MAC アドレスの作り方

先頭の 25 ビットは固定

IPv4 のマルチキャスト用の MAC アドレスは、先頭の 3 オクテット(24 ビット)が必ず 01:00:5E です。第1オクテットの 01 は 2進数で 00000001 なので、I/G ビットが 1 になっています。

では、残りの第4〜6オクテット(24 ビット)をすべてグループの区別に使うのかというと、そうではありません。第4オクテットの先頭(25 ビット目)は 0 で固定です。そのため、グループの区別に使える部分は残りの 23 ビットです。

0000000100000000010111100xxxxxxxxxxxxxxxxxxxxxxx 01 00 5E 01:00:5E(24 ビット)で固定 25 ビット目は 0 で固定 残りの 23 ビットでグループを区別
図2 マルチキャスト MAC アドレスの構成

つまり、IPv4 のマルチキャストで使う MAC アドレスは、01:00:5E:00:00:00〜01:00:5E:7F:FF:FF の範囲です。

IP アドレスの下位 23 ビットを入れる

次に、マルチキャスト IP アドレスの側を見ます。IPv4 のマルチキャストアドレスは、先頭の 4 ビットが 1110 で固定なので、グループの区別に使える部分は残りの 28 ビットです。

1110xxxxxxxxxxxxxxxxxxxxxxxxxxxx 1110 で固定 残りの 28 ビットでグループを区別 IPv4 マルチキャストアドレス(224.0.0.0〜239.255.255.255)
図3 IPv4 マルチキャストアドレスの構成

マルチキャスト IP アドレスの下位 23 ビットを、そのままマルチキャスト MAC アドレスの下位 23 ビットに入れます。

1110xxxxxxxxxxxxxxxxxxxxxxxxxxxx IP 5 ビットMAC に入らない 0xxxxxxxxxxxxxxxxxxxxxxx 01 00 5E MAC 下位 23 ビットをそのまま入れる
図4 IP アドレスの下位 23 ビットを MAC アドレスに入れる

IP アドレスの可変部分は 28 ビット、MAC アドレスの可変部分は 23 ビットなので、5 ビット分が MAC アドレスに入りません。この 5 ビットがどんな値でも、MAC アドレスは変わりません。つまり、2の5乗=32 個のマルチキャスト IP アドレスが、同じ MAC アドレスになります。

計算してみる

例えば、239.1.1.1 の MAC アドレスを計算します。

手順内容
2進数にする11101111.00000001.00000001.00000001
下位 23 ビットを取り出す0000001.00000001.00000001
先頭に 0 を付けて 24 ビットにする00000001.00000001.00000001 → 16進数で 01:01:01
01:00:5E の後ろにつなげる01:00:5E:01:01:01

MAC アドレスに入らない 5 ビットは、第1オクテットの下位 4 ビットと、第2オクテットの最上位ビットです。239.1.1.1 では 1111 と 0 です。ここを 1111 と 1 にすると、第2オクテットが 10000001(129)になり、IP アドレスは 239.129.1.1 です。下位 23 ビットは同じなので、239.129.1.1 の MAC アドレスも 01:00:5E:01:01:01 になります。

11101111000000010000000100000001 239.1.1.1 11101111100000010000000100000001 239.129.1.1 5 ビットMAC に入らない 000000010000000100000001 01 00 5E MAC 下位 23 ビットをそのまま入れる
図5 239.1.1.1 と 239.129.1.1 は同じ MAC アドレスになる
暗算のコツ

第1オクテットはどの値でも MAC アドレスに入らないので、見るのは第2〜4オクテットだけです。第2オクテットは 128 以上なら 128 を引き、第2〜4オクテットをそれぞれ 16 進数にして 01:00:5E の後ろにつなげます。例えば 239.129.1.1 なら、129−128=1 なので 01:00:5E:01:01:01 です。

実際のパケットで確認する

239.1.1.1 と 239.129.1.1 宛てのパケット(ping)の宛先 MAC アドレスを見ると、同じ値になっていることが確認できます。

画面イメージについて

この記事のパケットキャプチャの画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark):239.1.1.1 宛て画面イメージ
▾ Ethernet II, Src: 00:00:00_00:11:11 (00:00:00:00:11:11), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01)1  ▸ Destination: IPv4mcast_01:01:01 (01:00:5e:01:01:01)  ▸ Source: 00:00:00_00:11:11 (00:00:00:00:11:11)    Type: 802.1Q Virtual LAN (0x8100)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 122▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 239.1.1.1▸ Internet Control Message Protocol
図6 239.1.1.1 宛てのパケット(実際の画面ではなく、表示内容のポイントを示したイメージです)
パケットキャプチャ(Wireshark):239.129.1.1 宛て画面イメージ
▾ Ethernet II, Src: 00:00:00_00:11:11 (00:00:00:00:11:11), Dst: IPv4mcast_01:01:01 (01:00:5e:01:01:01)1  ▸ Destination: IPv4mcast_01:01:01 (01:00:5e:01:01:01)  ▸ Source: 00:00:00_00:11:11 (00:00:00:00:11:11)    Type: 802.1Q Virtual LAN (0x8100)▸ 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 122▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 239.129.1.1▸ Internet Control Message Protocol
図7 239.129.1.1 宛てのパケット(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Destination: 01:00:5e:01:01:01宛先 MAC アドレス。どちらのパケットも同じ。Wireshark は 01:00:5E で始まる MAC アドレスを IPv4mcast と表示する
2Dst: 239.1.1.1/Dst: 239.129.1.1宛先 IP アドレスは違う

同じ MAC アドレスになると何が起きるか

MAC アドレスが同じになるので、イーサネットの段階では 239.1.1.1 と 239.129.1.1 を区別できません。239.1.1.1 だけを受信したい端末の NIC も、239.129.1.1 宛てのフレームを受け取ります。受け取ったあと、IP の宛先アドレスを見て、不要なグループのパケットを捨てます。IGMP スヌーピングで MAC アドレスごとに転送先を決めているスイッチでも、同じように区別できないことがあります。

グループアドレスを選ぶときの注意

224.0.0.0/24 は、ルーティングプロトコルなどが使うリンクローカルのアドレスです。これと同じ MAC アドレス(01:00:5E:00:00:xx)になる 225.0.0.0/24 や 239.128.0.0/24 などのアドレスは、スイッチが IGMP スヌーピングを使っていても全ポートに流してしまうことがあります。Cisco は、01:00:5E:00:00:xx にマッピングされるアドレスを避けるよう推奨しています。

なお、IPv6 のマルチキャストでは、MAC アドレスは 33:33 で始まり、IPv6 アドレスの下位 32 ビットをそのまま入れます。

まとめ

項目内容
I/G ビット第1オクテットの最下位ビット。0 ならユニキャスト、1 ならマルチキャスト・ブロードキャスト
固定部分先頭 24 ビットは 01:00:5E、25 ビット目は 0
マッピングマルチキャスト IP アドレスの下位 23 ビットを、MAC アドレスの下位 23 ビットに入れる
重複IP アドレスの 5 ビットが MAC アドレスに入らないので、32 個の IP アドレスが同じ MAC アドレスになる
例239.1.1.1 も 239.129.1.1 も 01:00:5E:01:01:01

 

コメント