マルチキャストのパケットをイーサネットで送るとき、宛先 MAC アドレスには、宛先のマルチキャスト IP アドレスから計算した「マルチキャスト MAC アドレス」を使います。この記事では、MAC アドレスでユニキャストとマルチキャストを見分ける方法と、マルチキャスト IP アドレスを MAC アドレスにマッピングするしくみを説明し、実際のパケットで確かめます。
- MAC アドレスの1ビットで、ユニキャストとマルチキャストを見分けられること
- マルチキャスト MAC アドレスは 01:00:5E で始まり、IP アドレスの下位 23 ビットを入れて作ること
- 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)と呼びます。
| MAC アドレスの例 | 第1オクテット(2進数) | 種類 |
|---|---|---|
| 00:12:34:56:78:00 | 00000000 | ユニキャスト |
| 01:00:5E:01:01:01 | 00000001 | マルチキャスト |
| FF:FF:FF:FF:FF:FF | 11111111 | ブロードキャスト |
イーサネットでは、各オクテットを最下位ビットから順に送ります。そのため 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 ビットです。
つまり、IPv4 のマルチキャストで使う MAC アドレスは、01:00:5E:00:00:00〜01:00:5E:7F:FF:FF の範囲です。
IP アドレスの下位 23 ビットを入れる
次に、マルチキャスト IP アドレスの側を見ます。IPv4 のマルチキャストアドレスは、先頭の 4 ビットが 1110 で固定なので、グループの区別に使える部分は残りの 28 ビットです。
マルチキャスト IP アドレスの下位 23 ビットを、そのままマルチキャスト MAC アドレスの下位 23 ビットに入れます。
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 になります。
第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 アドレスを見ると、同じ値になっていることが確認できます。
この記事のパケットキャプチャの画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
▾ 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
▾ 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
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Destination: 01:00:5e:01:01:01 | 宛先 MAC アドレス。どちらのパケットも同じ。Wireshark は 01:00:5E で始まる MAC アドレスを IPv4mcast と表示する |
| 2 | Dst: 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 |
コメント