【ネットワーク入門】映像配信でよく利用されるマルチキャスト・IGMPとは?

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークネンジニアの「だいまる」です。

今回はマルチキャストを勉強したので1回目の記事として、「マルチキャストとは何か?」「IGMPとは何か?」をまとめていきます。

マルチキャストとは?

マルチキャストの概要

マルチキャストとは、「複数の受信者がグループを形成し、1つのIPアドレスを宛先とすることでグループ全体にデータ送信が可能となる機能」です。

この機能は、一般的に映像配信や音声通話で利用されています。

では、なぜ映像配信や音声通話ではユニキャスト通信を利用しないのか?

それはユニキャストのデメリットが大きいためです。

ユニキャスト通信の場合、各受信者がIPアドレスを持つことで、それぞれのIPアドレスにデータを送信します。

この場合、同じデータが同じ区間を流れることで通信帯域を圧迫するような非効率的な状況が生まれます。

ユニキャスト通信の場合

マルチキャストを利用すると、受信者が直接接続するルータ等の通信機器まで1つの通信フローとなるため、効率的に通信が可能となります。

マルチキャストの通信

これがマルチキャストの概要となります。

ここからは技術寄りの話をしていきたいと思います。

まずは「マルチキャスト通信が始まるまでの流れ」を説明していきます。

マルチキャスト通信の開始には主に3ステップ存在します。

STEP
マルチキャストグループへの参加

IGMPプロトコルを利用し、マルチキャストグループに受信者の参加

STEP
マルチキャストグループの経路交換

PIM-SM等のプロトコルを利用し、ディストリビューションツリーを作成し効率的な通信の実現

STEP
マルチキャスト通信開始

マルチキャストアドレス(IPアドレス・MACアドレス)

マルチキャストで利用されるIPアドレスとMACアドレスは指定されています。

アドレス範囲種別詳細
マルチキャスト 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アドレスは以下のルールになります。

ルール1:先頭の25bitが「00000001 00000000 01011110 0 」 つまり「01-00-5E」となる

ルール2:第2オクテット以降のアドレスを残りの23bitにマッピング

IGMPとは?

IGMPとは、「ホスト(Receiver)がラストホップルータに対し、マルチキャストグループへの参加・維持・離脱を通知するプロトコル」になります。

このIGMPには「Version1からVersion3の3種類」が存在し、本記事では「IGMPv1」「IGMPv2」についてまとめたいと思います。

まずはIGMPの基本となるIGMPv1を覚えよう

IGMPの基本は「IGMPv1」にあります。

そのため、IGMPv1から理解していきましょう。

このIGMPv1には参加、維持、離脱の3つの動作があります。

この動作の説明の前に、パケットのフォーマットを抑える必要があります。

フォーマットをしっかり抑えよう!

IGMPv1はプロトコル番号が「2」と指定されており、他のフィールドは以下の図の通りとなっています。

IGMPv1の場合、Versionは「1」であり、タイプ部分はメッセージの種別により異なります。

メンバーシップクエリが「0x1」、メンバーシップレポートが「0x2」となる

2つのメッセージについては後ほど説明します。

フォーマットを頭に入れたら、次は「参加、維持、離脱」の3つの動作を理解していきたいと思います。

動作の理解に実機確認は必須です。

今回は、以下の構成で動作確認を実施し、ユーザはCisco IOS Switchを使っています。

ユーザD
ユーザD
ユーザA
ユーザA
ユーザB
ユーザB
ユーザC
ユーザC
送信サーバ
送信サーバ
Router2
Router2
Router3
Router3
Router1
Router1
Router4
Router4
172.168.1.0/29
172.168.1.0/29
.1
.1
.2
.2
.3
.3
172.168.4.0/30
172.168.4.0/30
.1
.1
.2
.2
192.168.1.0/30
192.168.1.0/30
.1
.1
.2
.2
192.168.2.0/30
192.168.2.0/30
.1
.1
.2
.2
192.168.3.0/30
192.168.3.0/30
.1
.1
.2
.2
172.168.2.0/30
172.168.2.0/30
.1
.1
.2
.2
.1
.1
.2
.2
172.168.3.0/30
172.168.3.0/30
Text is not SVG – cannot display

動作①:マルチキャストグループへの参加

マルチキャストグループへの参加は、「メンバーシップレポートメッセージ(別名:Joinメッセージ)を送信し、グループに追加」されます。(イメージは以下の図)

追加後は「show ip igmp groups」で受信者のアドレスが表示されるようになります。

基本的にルータ側では「PIM SM」の設定を行うことで自動的にIGMPが有効となるため、対応することは特にありません。

ただ、今回はCisco L2SWをReceiverと見立てているので、以下のConfigでReceiverの設定を行いました。

User1(config)#interface gigabitEthernet 0/1
User1(config-if)#ip igmp version 1
User1(config-if)#ip igmp join-group 239.10.10.1
User1(config-if)#end

この設定を行う前後のログを確認するとしっかり「239.10.10.1」に追加されていることがわかります。

まず、事前状態ではUser1のIGMPグループやインタフェースに設定が入ってないことがわかります。

そして、Router2でも「239.10.10.1」の出力がないため、設定がないことがわかります。

###事前状態###
User1#show ip igmp groups
IGMP Connected Group Membership
Group Address    Interface                Uptime    Expires   Last Reporter   Group Accounted
User1#show ip igmp interface
GigabitEthernet0/1 is up, line protocol is up
  Internet address is 172.168.1.2/29
  IGMP is disabled on interface
  Multicast routing is disabled on interface
  Multicast TTL threshold is 0
  No multicast groups joined by this system

Router2#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), 00:37:23/00:02:33, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Sparse, 00:29:37/00:02:33

次に、設定後の状態を確認してみましょう。

User1では「show igmp interface」、「show igmp groups」に「239.10.10.1」が追加されたことがわかります。

User1#show ip igmp interface
GigabitEthernet0/1 is up, line protocol is up
  Internet address is 172.168.1.2/29
  IGMP is enabled on interface
  Current IGMP host version is 1
  Current IGMP router version is 1
  IGMP query interval is 60 seconds
  IGMP configured query interval is 60 seconds
  Inbound IGMP access group is not set
  IGMP activity: 1 joins, 0 leaves
  Multicast routing is disabled on interface
  Multicast TTL threshold is 0
  Multicast groups joined by thissystem (number of users):
      239.10.10.1(1)
User1#show ip igmp groups
IGMP Connected Group Membership
Group Address    Interface                Uptime    Expires   Last Reporter   Group Accounted
239.10.10.1      GigabitEthernet0/1       00:00:35  never     172.168.1.2

Router2でも「239.10.10.1」が追加されていることがわかります。

Router2#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.10.10.1), 00:00:15/00:02:44, RP 10.0.0.1, flags: SJC
  Incoming interface: GigabitEthernet0/1, RPF nbr 192.168.1.1
  Outgoing interface list:
    GigabitEthernet0/3, Forward/Sparse, 00:00:15/00:02:44

(*, 224.0.1.40), 00:39:28/00:02:27, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Sparse, 00:31:41/00:02:27

では、この時のIGMPメンバーシップレポートの中身はどうなのか?

それをみていきましょう。

上記パケットの中身を見る宛先が「239.10.10.1」、送信元が「User1のアドレス」、Typeが「Membership Report」になっています。

動作②:マルチキャストグループへの参加維持

マルチキャストグループに参加後は、ルータからメンバに対しメンバーシップクエリーを送信します。

Ciscoの場合、送信間隔は「60秒」ごと、宛先が「224.0.0.1」となっています。

そして、ルータから送信されたメンバーシップクエリーに対し、メンバーシップレポートで応答することで参加を維持します。

グループ参加への維持については、特に設定は不要のため、メンバーシップクエリーとレポートの中身のみを見ていきます。

まずは送信間隔の確認です。

上記画像より60秒ごとに送信されていることがわかります。

次にメンバーシップクエリーの中身を見ていきます。

メンバーシップクエリーのTypeは「0x11」であり、宛先も「224.0.0.1」となっているため、想定通りです。

そのクエリーに対するレポートメッセージは以下の通りとなっています。

Typeが「0x12」となっているため、メンバーシップレポートであり、マルチキャストアドレス部分に「239.10.10.1」が追加されているため、グループへの参加を要望していることがわかります。

このやりとりを行い、マルチキャストグループへの参加維持を行っているのです。

Hulu

動作③:マルチキャストグループからの離脱

マルチキャストグループへの参加、維持の仕組みの理解後は、「マルチキャストグループからの離脱」について理解していきます。

維持同様、離脱は「メンバーシップクエリーに対し、3回応答しない」ことで自動離脱となります。(IGMPv1のみ)

この離脱の動作も維持と同じであり、特にメッセージを送信することなく、しれっと離脱します。

次はIGMPv2を理解しよう

IGMPv2は異なるバージョンのため、仕様の変更はありますが、基本は変わらないです。

まずはIGMPv1同様、パケットフォーマットを見ていきます。

フォーマット

プロトコル自体に変更はないため、プロトコル番号は「2」になります。

基本的にはIGMPv1と同様ですが、「未使用」に変わり「最大応答時間(8bit)」が追加されています。

この「最大応答時間」は名前の通り、「クエリー送信後のレポートメッセージが返ってくる許容時間」になります。

メッセージタイプには「メンバーシップクエリー(0x11)」「メンバーシップv1レポート(0x12)」「メンバーシップv2レポート(0x16)」「リーブグループ(0x17)」4種類があります。

動作①:マルチキャストグループの参加

IGMPv2のマルチキャストグループへの参加の動作は、基本IGMPv1と同じになります。

ただ、新しくメッセージタイプが追加された通り、メンバーシップレポートはIGMPv2用のタイプ(0x16)が利用されます。

上記より、IGMPv2、メッセージタイプが「0x16」とIGMPv2用のメンバーシップレポートだとわかります。

また、「最大許容時間であるMax Resp Time」が追加されています。

動作②:マルチキャストグループの維持

IGMPv2のマルチキャストグループへの参加の維持はIGMPv1同様、「224.0.0.1宛にメンバーシップクエリーを60秒ごとに送信し、メンバーシップレポートによる応答があれば維持」となります。

ただ、新たに「最大応答時間」が追加されているため、メンバーシップレポートをデフォルトで「10秒以内」に送り返す必要があります。

この値は設定で変更可能です

以下はグループ維持のために送信されたメンバーシップクエリーとレポートのやりとりです。

メンバーシップクエリーは、想定通り60秒ごとに送信され、中身をみると「最大許容時間が10秒」になっていることがわかります。

この送信時間と最大応答時間を少し変更した状態を見てみましょう。

まずは事前状態を見てみましょう。

デフォルト値のため、クエリー送信間隔が「60秒」、最大許容時間が「10秒」であることがわかると思います。(黄色の出力部分)

Router2#show running-config interface gigabitEthernet 0/3
interface GigabitEthernet0/3
 ip address 172.168.1.1 255.255.255.248
 ip pim sparse-mode
 duplex auto
 speed auto
 media-type rj45
end
Router2#show ip igmp interface gigabitEthernet 0/3
GigabitEthernet0/3 is up, line protocol is up
  Internet address is 172.168.1.1/29
  IGMP is enabled on interface
  Current IGMP host version is 2
  Current IGMP router version is 2
  IGMP query interval is 60 seconds
  IGMP configured query interval is 60 seconds
  IGMP querier timeout is 120 seconds
  IGMP configured querier timeout is 120 seconds
  IGMP max query response time is 10 seconds
  Last member query count is 2
  Last member query response interval is 1000 ms
  Inbound IGMP access group is not set
  IGMP activity: 1 joins, 0 leaves
  Multicast routing is enabled on interface
  Multicast TTL threshold is 0
  Multicast designated router (DR) is 172.168.1.1 (this system)
  IGMP querying router is 172.168.1.1 (this system)
  No multicast groups joined by this system

では、設定を変更してみましょう。

Router2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router2(config)#interface gigabitEthernet 0/3
Router2(config-if)#ip igmp query-interval 30
Router2(config-if)#ip igmp query-max-response-time 5
Router2(config-if)#end

上記コマンドによりクエリーの送信間隔が「30秒」、最大許容時間が「5秒」に変更されたはずです。

その上で、状態を確認してみると・・・

実際に変更されていることがわかります。

Router2#show running-config interface gigabitEthernet 0/3
Building configuration...

Current configuration : 200 bytes
!
interface GigabitEthernet0/3
 ip address 172.168.1.1 255.255.255.248
 ip pim sparse-mode
 ip igmp query-max-response-time 5
 ip igmp query-interval 30
 duplex auto
 speed auto
 media-type rj45
end
Router2#show ip igmp interface gigabitEthernet 0/3
GigabitEthernet0/3 is up, line protocol is up
  Internet address is 172.168.1.1/29
  IGMP is enabled on interface
  Current IGMP host version is 2
  Current IGMP router version is 2
  IGMP query interval is 30 seconds
  IGMP configured query interval is 30 seconds
  IGMP querier timeout is 60 seconds
  IGMP configured querier timeout is 60 seconds
  IGMP max query response time is 5 seconds
  Last member query count is 2
  Last member query response interval is 1000 ms
  Inbound IGMP access group is not set
  IGMP activity: 1 joins, 0 leaves
  Multicast routing is enabled on interface
  Multicast TTL threshold is 0
  Multicast designated router (DR) is 172.168.1.1 (this system)
  IGMP querying router is 172.168.1.1 (this system)
  No multicast groups joined by this system
Router2#

ここまでみたんだから、しっかりパケットの中身も見てみましょう。

動作③:マルチキャストグループからの離脱

IGMPv2によるマルチキャストグループ離脱は、リーブグループメッセージ(224.0.0.2宛)を受信者がルータに送信することで離脱となります。

IGMPv1は60秒×3回分の時間、応答がなければ離脱となるため、余分なメッセージのやりとりが発生します。

IGMPv2は、この余分なやり取りが発生しないため、帯域の有効活用につながります。(微々たるものですが) 

ここではメッセージのやり取りがなければ、離脱となるため、実機確認は割愛します。

最後に

今回は、マルチキャストの基本となるIGMPについて、まとめてみました。

次回は、PIM-SMやPIM-DMについてまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

目次