【概要・入門】マルチキャストやIGMPとは?

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

はじめに

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

今回は、マルチキャストシリーズの第一弾として、「マルチキャストとは何か?」、「IGMPとは何か?」をまとめていきたいと思います。

マルチキャストとは

マルチキャストとは「1つのIPアドレスを受信側の複数ユーザや複数端末で1つのグループとして共有し、送信側端末から複数の受信端末にデータを送信すること」です。

一般的に映像配信や音声通話などで効率的な通信を可能にするために利用されています。

通常のトラフィック(ユニキャスト)の場合、各ユーザや各端末ごとにトラフィックを流しますが、映像配信などのサービスの場合、各宛先に複製されたデータを流すことになり、通信帯域の圧迫につながる恐れがあります。

下の図は、映像配信サーバから4つの受信側端末映像配信の動作を表しています。

ユニキャスト送信の場合、4つのトラフィックフローが発生します。

もし、ルータ間の通信帯域が1Gbps、1つのトラフィックフローが400Mbpsだった場合、受信端末が3つあるルータ間で輻輳が発生します。

こういった問題を発生させない、解消する目的で使われるのがマルチキャストとなります。

映像配信サーバ
映像配信サーバ
映像受信端末
映像受信端末
ユニキャストの場合
→宛先ごとにデータを配信
ユニキャストの場合→宛先ごとにデータを配信…
Text is not SVG – cannot display

マルチキャストを利用した場合、ユニキャスト利用時の4フローから1フローに減少し、輻輳も発生しづらくなります。

映像配信サーバ
映像配信サーバ
映像受信端末
映像受信端末
マルチキャストの場合
→グループごとにデータを配信

マルチキャストの場合→グループごとにデータを配信…
フロー複製
フロー複製
フロー複製
フロー複製
Text is not SVG – cannot display

ここまでマルチキャストの概要について説明しました。

ここからはマルチキャストのデータ送信が開始されるまでのフローについて説明したいと思います。

マルチキャストは、以下に記載している3つのステップでデータ送信が開始されます。

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

IGMPプロトコルを利用し、受信端末の存在をマルチキャスト送信者側に通知

STEP
参加要望の通知を受信した際にルータ間での情報交換

効率的な送信のために利用されるディストリビューションツリーへの対象追加

※PIM-SMがよく使われるプロトコルの1つ

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

Step1とStep2のやり取り完了後にマルチキャスト送信開始

IGMPv1とIGMPv2とは?

IGMPには、「Version1からVersion3までの3つ」が存在します。

今回は「IGMPv1」と「IGMPv2」の2つについて説明していきたいと思います。

IGMPの基本!!IGMPv1について

最初にIGMPv1のパケットフォーマットから説明したいと思います。

フォーマット(IGMPv1)

IGMPv1のパケットはIPでカプセル化され、プロトコル番号が「2」になります。

また、IGMPv1のヘッダは「バージョン(4bit)、タイプ(4bit)、未使用(8bit)、チェックサム(16bit)、グループアドレス(32bit)」の5つから構成されます。

バージョンは「1」タイプ部分は「メッセージ種別の定義」で利用されます。

※メンバーシップクエリ(0x1)、メンバーシップレポート(0x2)

IGMPv1によるマルチキャストグループへの参加方法

マルチキャストグループへの参加は、メンバーシップレポートメッセージ(別名:Joinメッセージ)を送信することでグループに追加され、「show ip igmp groups」により受信者のアドレスが表示されるようになります。

IGMPv1によるマルチキャストグループの維持と離脱

マルチキャストルータからメンバに対しメンバシップクエリを、60秒ごとに宛先が「224.0.0.1」に送信します。

このメッセージに対し、マルチキャストグループへの参加に利用したメンバシップレポートで応答することでグループ参加を維持することができます。

グループからの離脱は、60秒×3回のメンバシップレポートの応答がない場合、自動的に離脱となります。

IGMPv1の次はIGMPv2を理解しよう

IGMPv2もIGMPv1と基本的な動作は同じになります。

フォーマット

プロトコル番号はIGMPv1と同様の「2」となり、IGMPヘッダにはIGMPv1とは異なり4つのフィールドが存在します。

そのフィールドは、タイプ(8bit)、最大応答時間(8bit)、チェックサム(16bit)、グループアドレス(32bit)の4つになります。

タイプは、メンバシップクエリ(0x11)、メンバシップv1レポート(0x12)、メンバしーっぷv2レポート(0x16)、リーブグループ(0x17)の4つのタイプが存在します。

また、最大応答時間は「クエリを受信後にレポートを返すまでの最大許容時間」となります。

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

IGMPv2のマルチキャストグループへの参加はIGMPv1と同様のため、このセクションでの説明は割愛します。

マルチキャストグループの維持・離脱 

マルチキャストグループの維持は60秒ごとに224.0.0.1宛に送信し、メンバシップレポートにより応答する動作はIGMPv1と同様になります。

一方、IGMPv1と異なる点はデフォルトで10秒以内に応答する必要があります。

この値は最大応答時間を変更することで調整可能となります。


マルチキャストグループ離脱の動作は、リーブグループメッセージ(224.0.0.2宛)を受信者がルータに送信し通知します。(IGMPv1は60秒×3応答がなければ離脱)

この動作では即座に離脱通知を行うため、余分なメッセージを伝送路上に送信する必要がありません。
 

IGMPv2からグループスペシフィッククエリが定義され、「224.0.0.1」宛に送信されていたクエリがそれぞれのグループ宛に送信することができるようになりました。

概要を理解したところで実機ログを見てみよう!!

今回、CMLで確認するのは「IGMPv2」の動作についてです。

主にマルチキャストグループへの参加、維持、離脱について確認していきたいと思います。

その前に、今回構築した構成図とルータ、受信側の設定について説明します。

今回利用した構成と設定

今回のCMLの構成は、以下の通りとなっております。

一番上のルータが「RP(ランデブーポイント)」のルータとし、受信側はPCのアイコンを張っておりますが、今回はIOSのルータで代用しています。

次に、各ルータの設定について説明していきたいと思います。

ルータの基本的な設定は、マルチキャストの有効化、PIM-SMの有効化(他の記事で説明)、RPの指定、Receiverが接続されている場合は、IGMPv2の設定をしております。

以下の設定は、図のルータ2の設定を記載しております。

version 15.9
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
!
boot-start-marker
boot-end-marker
!
!
enable password cisco
!
no aaa new-model
!
!
!
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
!
ip multicast-routing #マルチキャストの有効化
ip cef
no ipv6 cef
!
multilink bundle-name authenticated

!
username cisco password 0 cisco
!
redundancy
!
!
interface Loopback0
 ip address 10.1.0.3 255.255.255.255
!
interface GigabitEthernet0/0
 ip address 192.168.1.2 255.255.255.0
 ip pim sparse-mode #PIM-SM Sparseモードの有効化
 duplex auto
 speed auto
 media-type rj45
!
interface GigabitEthernet0/1
 ip address 172.168.4.2 255.255.255.0
 ip pim sparse-mode #PIM-SM Sparseモードの有効化
 ip igmp join-group 239.1.1.5 source 172.168.4.1 #IGMPのJoin設定
 duplex auto
 speed auto
 media-type rj45
!
interface GigabitEthernet0/2
 ip address 172.168.1.3 255.255.255.0
 ip pim sparse-mode #PIM-SM Sparseモードの有効化
 ip igmp join-group 239.1.1.5 #IGMPのJoin設定
 duplex auto
 speed auto
 media-type rj45
!
interface GigabitEthernet0/3
 no ip address
 shutdown
 duplex auto
 speed auto
 media-type rj45
!
router ospf 100
 passive-interface GigabitEthernet0/1
 passive-interface GigabitEthernet0/2
 network 10.1.0.3 0.0.0.0 area 0
 network 172.168.0.0 0.0.255.255 area 0
 network 192.168.0.0 0.0.255.255 area 0
!
ip forward-protocol nd
!
!
no ip http server
no ip http secure-server
ip pim rp-address 10.1.0.2 10 #RP(ランデブーポイント)の指定とACLの指定
!
ipv6 ioam timestamp
!
!
access-list 10 permit 239.1.1.5
!
control-plane
!

次に、受信側のルータに設定した内容を以下に記載します。

ここで記載しているIGMPの設定を投入することで受信側のルータがマルチキャストグループに参加できるようになります。

version 15.9
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
boot-start-marker
boot-end-marker
!
enable password cisco
!
no aaa new-model
!
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
!
ip cef
no ipv6 cef
!
multilink bundle-name authenticated
!
redundancy
!
interface GigabitEthernet0/0
 ip address 172.168.1.1 255.255.255.0
 ip igmp join-group 239.1.1.5 #IGMPのJOIN設定
 duplex auto
 speed auto
 media-type rj45
!
ip forward-protocol nd
!
!
no ip http server
no ip http secure-server
ip route 0.0.0.0 0.0.0.0 172.168.1.3
!
ipv6 ioam timestamp
!
!
!
control-plane
!
end

設定後のパケットキャプチャ・状態確認

受信側にIGMPの設定を入れた直後のパケットキャプチャを見ていきます。

ここでは、パケットの流れがわかりやすいようにReceiver3とルータ3の間でキャプチャしています。

下の画像にもある通り、設定直後にIGMPv2によるメンバシップレポートが239.1.1.5宛に送信されています。

 

それでは、このパケットの詳細を見ていきましょう。

最初の方で触れたフォーマット通りIGMP部分には、タイプがメンバシップレポート(0x16)として定義されており、最大応答時間はデフォルト、マルチキャストアドレスが239.1.1.5に設定されていることがわかります。

設定後にSenderからマルチキャストグループ(239.1.1.5)宛にPingを送信した結果が以下の通りです。
設定した各ルータからEcho replyがあることがわかります。

最後に

今回は、マルチキャストの前段階であるIGMPとその設定やパケットに関してCMLを利用しまとめました。

やっと、実機を利用し、詳細を理解しながらまとめることができました。

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

  • URLをコピーしました!

この記事を書いた人

目次