はじめに
こんにちは。ネットワークネンジニアの「だいまる」です。
今回は、マルチキャストシリーズの第一弾として、「マルチキャストとは?」
今回はマルチキャストを勉強したので1回目の記事として、「マルチキャストとは何か?」や「IGMPとは何か?」をまとめていきます。
マルチキャストとは?
マルチキャストとは、「1つの宛先で複数の受信者に対しデータ送信が可能となる通信」です。
この通信は、一般的に映像配信やグループでの音声通話等で利用されます。
ユニキャスト通信(1対1)が利用されないのは、同じデータを複製して送信するため、通信帯域を圧迫するためです。

一方、マルチキャストの場合、受信者の直前まで1つの通信フロー・データで転送するため、帯域を圧迫せずに通信できます。

では、次にマルチキャスト通信が開始されるまでの流れをざっくり説明していきます。
IGMPプロトコルを利用したマルチキャストグループへの参加
PIM-SMやPIM-DMといったマルチキャストプロトコルによるディストリビューションツリーの作成
各種プロトコルの確立後、マルチキャストによる通信が開始されます。

マルチキャストアドレスとは?
マルチキャストには、マルチキャスト専用のIPアドレスとMACアドレスが予約されています。
IPアドレス一覧
アドレス範囲 | 種別 | 詳細 |
マルチキャスト IPアドレス:224.0.0.0〜239.255.255.255(クラスD) | ||
224.0.0.0〜224.0.0.255 | リンクローカル | 同一セグメント上で利用 ※予約済多数あり |
224.0.1.0〜238.255.255.255 | グローバルスコープ | 組織間で利用 |
239.0.0.0〜239.255.255.255 | プラベートスコープ | 組織内で利用 |
MACアドレス一覧
項目 |
先頭の25ビットが以下の値 「00000001 00000000 01011110 0 」→「01-00-5E」となる |
第二オクテット以降のMACアドレスは、マルチキャストグループアドレスの後半3オクテットがマッピング |
IGMPとは?
マルチキャストの概要を理解したところで、次はIGMPについて、まとめていきます。
最初に理解するのは「IGMPとは何か?」
受信者がLHR(Last Hop Router)に対し、マルチキャストグループへの参加等を通知するプロトコル
このIGMPには、バージョンが1から3までの3つあるので、それぞれの要点とVersion1の動作確認を行なっていきます。
IGMPの基本動作である参加・維持・離脱
基本動作に入っていく前に、IGMPのフォーマットに触れていきます。
IGMPv1のフォーマットは以下の図の通りです。

IGMPv2やIGMPv3では、このフォーマットを基に多くの機能が追加されているので差分は多々あります。
- Version:IGMPのVersion値が挿入される(IGMPv1:1、IGMPv2:2、IGMPv3:3)
- Type:メッセージタイプを区別(メンバーシップクエリやレポート等のタイプを区別)
- グループアドレス:マルチキャストグループアドレスが定義(メンバーシップクエリの場合は0)

基本動作①:マルチキャストグループへの参加
最初に、マルチキャストグループへの参加をインプットしていきたいと思います。
IGMPでは、「メンバーシップレポートメッセージ(Joinメッセージ)をLHR(Last Hop Router)に送信することでマルチキャストグループに参加」できます。
IGMPv1とIGMPv2は同じ動作となりますが、IGMPv3には送信元IPアドレスを指定することで不正なマルチキャストパケットの受信を防ぐ機能が追加されています。
基本動作②:マルチキャストグループの維持
基本動作①でマルチキャストグループに参加後、グループへの参加を維持するためには2つのメッセージをやりとりします。
ラストホップルータが、マルチキャスト受信者に対しメンバーシップクエリを送信します。
このメッセージは、マルチキャストグループ関係なく、「224.0.0.1」を宛先として60秒毎に送信します。
そのメッセージを受信した受信者は、メンバーシップレポートで応答することでマルチキャストグループに参加し続けることができます。
維持の動作もIGMPv1とIGMPv2、IGMPv3は同じ動作となります。(ただ、IGMPv2からは最大応答時間を変更可能)
基本動作③:マルチキャストグループからの離脱
マルチキャストグループへの参加・維持を学んだ後は、「離脱」を理解していきます。
IGMPv1のマルチキャストグループからの離脱では、「特定の動作は実施せず、メンバーシップクエリーに対する応答が3回なかった場合に離脱」となります。
この離脱動作はIGMPv1とIGMPv2で大きく異なるため、少し深掘りをしていきましょう。

IGMPv2の離脱動作について
IGMPv1では、60秒ごとに送信されるメンバーシップクエリに対する応答が3回なかった場合、自動的に離脱することになってましたが、IGMPv2では受信者から離脱を通知することになります。
具体的には、IGMPリーブグループメッセージを各マルチキャストルータに送信することで離脱することになります。
この機能の追加により、離脱に関する遅延時間が短縮され、無駄なマルチキャストパケットが送信されないメリットが生まれます。
上記のイメージ図では、宛先が全てのマルチキャストルータ宛となる「224.0.0.2」ですが、IGMPv2では特定のグループアドレスを指定したメッセージを送信することができます。
この機能により、不要なメッセージのやり取りも削減され、より最適化された状態でマルチキャストの管理を行うことができます。
IGMPv1の動作を実機確認してみよう!
IGMPの概要を理解した後は、実機による動作確認を実施していきます。
今回は、以下3つの項目を確認していきたいと思います。
確認項目表 | ||
---|---|---|
No | 項目 | 詳細 |
1 | マルチキャストグループへの参加 | 設定・ログ・パケットキャプチャ |
2 | マルチキャスグループ参加の維持 | |
3 | マルチキャストグループからの離脱 |
また、検証構成は、マルチキャストに関する記事で統一し、以下の構成とします。

これより以下は、現在、記事の品質向上のため、修正中です。
項目①:マルチキャストグループへの参加
マルチキャストグループへの参加には、PIM-SMもしくはPIM-DMのどちらかの環境を構築した上で、IGMPの設定を行います。
(config)# interface gigabitEthernet0/3
(config-if)# ip igmp version 1
(config-if)# ip igmp join-group 239.1.1.1
この設定の投入前後の状態を確認していきましょう。
今回は、ルータとユーザ4間で確認していきます。
Router6#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 3d06h/00:02:22, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 3d06h/stopped
GigabitEthernet0/1, Forward/Dense, 3d06h/stopped
この状況では、(*、224.0.1.40)のみしかないことがわかります。
では、設定後の状態はどうなっているかというと
Router6#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.1.1.1), 00:00:06/00:02:53, RP 0.0.0.0, flags: DC
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 00:00:06/stopped
GigabitEthernet0/1, Forward/Dense, 00:00:06/stopped
(*, 224.0.1.40), 3d06h/00:01:56, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 3d06h/stopped
GigabitEthernet0/1, Forward/Dense, 3d06h/stopped
追加されていることがわかります。
この時のメンバーシップレポートメッセージがどうなっているか見てみます。

ここからわかるとおり、送信元を「10.9.0.3」、宛先を「239.1.1.1」としたメンバーシップレポートが送信されていることがわかります。

項目②:マルチキャストグループ参加の維持
次にマルチキャストグループの維持ですが、コマンドによる動作を確認しても仕方ないのでパケットキャプチャの状況を確認してみましょう。
ここでは、送信元を「10.9.0.1」、宛先を「224.0.0.1」としたメンバーシップクエリが送信され、その応答として送信元「10.9.0.3」・宛先「239.1.1.1」のメンバーシップレポートが返ってきてることがわかると思います。

項目③:マルチキャストグループからの離脱
最後に離脱ですが、項目①で投入したConfigを削除し、180秒待てば確認できます。
削除後、「show ip mroute」で状態を確認したところ以下の通りでした。
Router6#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.1.1.1), 00:00:06/00:02:53, RP 0.0.0.0, flags: DC
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 00:00:06/stopped
GigabitEthernet0/1, Forward/Dense, 00:00:06/stopped
(*, 224.0.1.40), 3d06h/00:01:56, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 3d06h/stopped
GigabitEthernet0/1, Forward/Dense, 3d06h/stopped
黄色文字のタイマーが「2:53」となっていますが、これは離脱するまでの時間です。
2分後ぐらいに取得したログでは、「0:25」となっています。
Router6#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.1.1.1), 00:09:35/00:00:25, RP 0.0.0.0, flags: D
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 00:09:35/stopped
(*, 224.0.1.40), 3d07h/00:02:31, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 3d07h/stopped
GigabitEthernet0/1, Forward/Dense, 3d07h/stopped
そして、しっかりと消えていることがわかります。
Router6#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.0.1.40), 3d07h/00:02:54, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/3, Forward/Dense, 3d07h/stopped
GigabitEthernet0/1, Forward/Dense, 3d07h/stopped
最後に
この記事ではマルチキャストの基本となるIGMPについて、まとめてみました。
他の記事ではPIM-SMやPIM-DMをまとめています。
ぜひそちらもご参照頂けると幸いです。