【ネットワーク入門】マルチキャストの代表的なプロトコル(PIM-SM)について

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

はじめに

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

前回の記事ではマルチキャストの基本となる「IGMP」について、説明しました。

今回は、マルチキャストの根幹となる「PIM-SM」と呼ばれるプロトコルについて説明したいと思います。

PIM-SMとはなんだ?

マルチキャストを学ぶ上で避けては通れない「PIM-DM」と「PIM-SM」。

今回は、その1つである「PIM-SM」について、理解していきましょう

PIM-SMとは?

PIM-SMとは、「Sparseモードのマルチキャストルーティングプロトコル」になります。

Sparseモードとは、「送信元ツリーと共有ツリーで構成され、WAN向けに利用される」

共有ツリーが出てきたのがPIM-DMとの違いの1つだよ!

このPIM-SMでは、送信元ツリーを共有ツリーに根(Root)となるRP(ランデブーポイント)までの経路で利用し、その後の通信は共有ツリーを利用します。

このRP(ランデブーポイント)は、デフォルトでは静的(Static)で決定します。

この方法により、PIM-DMとは違い、1本ツリーのみで経路制御できるため、ルータの負荷軽減や帯域に余裕を持たせるメリットが生まれます。

最短経路ではないため、遅延が増大するデメリットもあります

PIM-DMとの違いは?

先程、共有ツリーがPIM-DMとの違いの1つと触れましたが、もう1つ大きな違いあります。

PIM-DMでは「FloodとPrune」による参加や維持を確認する動作がありましたが、PIM-SMでは明示的に意思表示をしないと参加できない特徴があります。

Explicit Join(明示的な参加)と呼ばれ、ユースケースとなるWANに配慮した機能になります。

マルチキャストの経路制御で重要なRPFとは?

RPF(Reverse Path Forwarding)とは、「マルチキャストの経路を制御し、ネットワークループを発生させないための重要な機能」になります。

RPFの動作は、送信元IPアドレスをルーティングテーブルで確認し、マルチキャストパケットを受信したインターフェースが正しいのかどうかをチェックします。(具体的には以下のフローで説明します)

STEP
送信元IPアドレスをルーティングテーブルで確認

マルチキャストパケットの送信元IPアドレスをユニキャストルーティングテーブルからチェックします。

STEP
受信インターフェースが正しいか判断

Step1でチェックした結果から、送信元IPアドレスにパケットを送る場合、どのインターフェースから送信するのが正しいのかチェックします。

STEP
RPFのチェック

Step1/Step2でチェックしたインターフェースとマルチキャストを受信したインターフェースが一致すれば、最短経路で受け取っていると判断され、OIL(Outgoing Interface List)を参照し、他のルータに送信されます。

RPFチェックのイメージ

実機で確認してみよう!

PIM-SMの概要を理解した後は、実機で設定方法と動作確認を行なっていきます。

今回の確認項目と検証構成は以下の通りとなっています。

確認項目

今回の動作確認では、以下の3項目について確認してみます。

No項目目的
1PIM-SMの基本設定PIM-SM設定方法の確認
2ネイバー状態の確認設定時のPIMネイバーの確立動作を確認
3送信元ツリー/共有ツリーの確認各種ツリーの状態やRPFやOILを確認

今回の検証構成

今回の動作確認では、以下の構成で検証を行います。

Router1からRouter6のアンダーレイはOSPFを設定しており、各ルータのLoopbackは「10.0.X.1/32 *X:ルータ番号」としています。

また、OSPFコストは全区間「1」と指定しています。

項目①:PIM-SMの基本設定

ここでは、PIM-SMの基本設定を確認していきます。

基本的な設定内容

PIM-SMの場合、マルチキャストを有効にする「ip multicast-routing」とPIM-SMを有効にしいインターフェースに「ip pim sparse-mode」を設定する必要があります。

(config)# ip multicast-routing
(config-if)# ip pim sparse-mode

そして、PIM-DMとは異なり、RPを指定するConfigが必要となります。

(config)# ip pim rp-address <RPとするルータのアドレス>

実機への投入・状態確認

実際にConfigを投入し、前後の状態を確認してみましょう。

事前状態
Router6#show ip multicast
  Multicast Routing: enabled
  Multicast Multipath: disabled
  Multicast Route limit: No limit
  Multicast Fallback group mode: Dense
  Number of multicast boundaries configured with filter-autorp option: 0
  MoFRR: Disabled

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

上記の状態では、マルチキャストは有効化されているが、ルーティングテーブルは何もないことがわかります。

Config投入
Router6#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router6(config)#interface gigabitEthernet 0/3
Router6(config-if)#ip pim sparse-mode
Router6(config)#interface gigabitEthernet 0/1
Router6(config-if)#ip pim sparse-mode
Router6(config)#ip pim rp-address 10.0.1.1
Router6(config)#end

投入後の状態を確認してみると?

事後状態
Router6#show ip multicast
  Multicast Routing: enabled
  Multicast Multipath: disabled
  Multicast Route limit: No limit
  Multicast Fallback group mode: Sparse
  Number of multicast boundaries configured with filter-autorp option: 0
  MoFRR: Disabled
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), 00:00:59/00:02:35, RP 10.0.1.1, flags: SJPCL
  Incoming interface: GigabitEthernet0/3, RPF nbr 10.6.0.1
  Outgoing interface list: Null

しっかり追加されたことがわかりますね!

項目②:PIMネイバーの確認

この項目では、「項目①:基本設定」で確率されるネイバーの状態を確認していきます。

事前状態
Router6#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
      L - DR Load-balancing Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode

ここにPIM-SMの設定を入れた後の設定がどうなっているか確認してみます。

しっかりPIMネイバーが確立され、モードもSparseになっていることがわかります。

事後状態
Router6#show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
      L - DR Load-balancing Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
10.6.0.1          GigabitEthernet0/3       00:04:02/00:01:37 v2    1 / S P G
Router6#

Config投入直後のデバッグログ

次にデバッグログを見てみましょう。

しっかり構築されていることがわかりますね。

Debug
Router6#
*Sep 10 00:53:06.832: %PIM-5-NBRCHG: neighbor 10.6.0.1 UP on interface GigabitEthernet0/3
*Sep 10 00:53:08.014: PIM(0): Check DR after interface: GigabitEthernet0/3 came up!
*Sep 10 00:53:08.014: PIM(0): Changing DR for GigabitEthernet0/3, from 0.0.0.0 to 10.6.0.2 (this system)
*Sep 10 00:53:08.014: %PIM-5-DRCHG: DR change from neighbor 0.0.0.0 to 10.6.0.2 on interface GigabitEthernet0/3
*Sep 10 00:53:13.964: PIM(0): Check DR after interface: GigabitEthernet0/1 came up!
*Sep 10 00:53:13.964: PIM(0): Changing DR for GigabitEthernet0/1, from 0.0.0.0 to 10.9.0.1 (this system)
*Sep 10 00:53:13.964: %PIM-5-DRCHG: DR change from neighbor 0.0.0.0 to 10.9.0.1 on interface GigabitEthernet0/1
*Sep 10 00:53:18.483: PIM(0): Initiating register encapsulation tunnel creation for RP 10.0.1.1
*Sep 10 00:53:18.484: PIM(0): Initial register tunnel creation succeeded for RP 10.0.1.1
*Sep 10 00:53:18.484: PIM(0): Check RP 10.0.1.1 into the (*, 224.0.1.40) entry
*Sep 10 00:53:18.495: PIM(0): pim_reg_tun_comingup Tunnel0 RP 10.0.1.1 previous event 0
*Sep 10 00:53:18.495: PIM(0): pim_ipv4_reg_tun_event_set Tunnel0 RP 10.0.1.1 previous event 0 new event 2
*Sep 10 00:53:18.498: PIM(0): Building Triggered (*,G) Join / (S,G,RP-bit) Prune message for 224.0.1.40
*Sep 10 00:53:18.498: PIM(0): Upstream mode for (*, 224.0.1.40) changed from 0 to 1
*Sep 10 00:53:18.498: PIM(0): Insert (*,224.0.1.40) join in nbr 10.6.0.1's queue
*Sep 10 00:53:18.499: PIM(0): Building Join/Prune packet for nbr 10.6.0.1
*Sep 10 00:53:18.499: PIM(0):  Adding v2 (10.0.1.1/32, 224.0.1.40), WC-bit, RPT-bit, S-bit Join
*Sep 10 00:53:18.499: PIM(0): Send v2 join/prune to 10.6.0.1 (GigabitEthernet0/3)

項目③:送信元・共有ツリーの状態確認

今回の検証環境は、以下の図の通りのため、「ルータ1」、「ルータ2」、「ルータ5」で状態確認を行います。

確認するにあたり、「送信者」から「239.1.1.1」宛にPingを送り続ける状態で確認します。

ルータ1の状態

ルータ1の状態を確認すると、(*,239.1.1.1)が共有ツリー、(192.168.10.2,239.1.1.1)が送信元ツリーになっていることがわかります。

また、このルータは、RP(ランデブーポイント)に指定しているため、共有ツリーのIncoming Interfaceに何もないことがわかります。

マルチキャストのルーティング状態
Router1#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), 23:38:31/00:03:19, RP 10.0.1.1, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Sparse, 23:36:22/00:02:34
    GigabitEthernet0/1, Forward/Sparse, 23:38:31/00:03:19

(192.168.10.2, 239.1.1.1), 00:06:17/00:01:20, flags: PT
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.1.0.2
  Outgoing interface list: Null

(*, 224.0.1.40), 2w0d/00:03:26, RP 10.0.1.1, flags: SJCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Sparse, 2w0d/00:03:19
    GigabitEthernet0/1, Forward/Sparse, 2w0d/00:03:26

ルータ2の状態

一方、ルータ1の配下にある「ルータ2」はどうでしょう?

共有ツリー(*,239.1.1.1)は、RP(ランデブーポイント)がルータ1になっているため、Incoming Interfaceがルータ1向けになっていることがわかります。

送信元ツリー(192.168.10.2,239.1.1.1)は、送信元であるGi0/4がIncoming、それ以外にInterfaceがOutgoingに属しているのがわかります。

マルチキャストのルーティング状態
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.1.1.1), 2w0d/00:02:37, RP 10.0.1.1, flags: SJCF
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.1.0.1
  Outgoing interface list:
    GigabitEthernet0/3, Forward/Sparse, 2w0d/00:02:37
    GigabitEthernet0/2, Forward/Sparse, 2w0d/stopped
    GigabitEthernet0/4, Forward/Sparse, 2w0d/stopped

(192.168.10.2, 239.1.1.1), 00:11:38/00:02:29, flags: FT
  Incoming interface: GigabitEthernet0/4, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Sparse, 00:11:38/00:02:38
    GigabitEthernet0/3, Forward/Sparse, 00:11:38/00:02:41

(*, 224.0.1.40), 2w0d/00:02:36, RP 10.0.1.1, flags: SJCL
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.1.0.1
  Outgoing interface list:
    GigabitEthernet0/3, Forward/Sparse, 2w0d/00:02:36
    GigabitEthernet0/2, Forward/Sparse, 2w0d/stopped

ルータ5の状態

最後にルータ5の状態を見ていきましょう。

以下の状態から分かる通り、(*,239.1.1.1)が共有ツリー、(192.168.10.2,239.1.1.1)が送信元ツリーになります。

ルータ5では、上位のルータが「ルータ2」と「ルータ3」の2台につながっているため、共有ツリーのIncoming interfaceはルータ3向けの「Gi0/1」、送信元ツリーのIncoming interfaceはルータ2向けの「Gi0/2」になっています。

マルチキャストのルーティング状態
Router5#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), 23:30:12/stopped, RP 10.0.1.1, flags: SJC
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.5.0.1
  Outgoing interface list:
    GigabitEthernet0/3, Forward/Sparse, 23:30:12/00:02:46

(192.168.10.2, 239.1.1.1), 00:00:11/00:02:48, flags: J
  Incoming interface: GigabitEthernet0/2, RPF nbr 10.4.0.1
  Outgoing interface list:
    GigabitEthernet0/3, Forward/Sparse, 00:00:11/00:02:48

(*, 224.0.1.40), 2w0d/00:02:09, RP 10.0.1.1, flags: SJCL
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.5.0.1
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Sparse, 2w0d/stopped

最後に

今回は、マルチキャストのプロトコルの1つである「PIM-SM」についてまとめました。

次回は、「PIM-SM」のスイッチオーバ機能やAuto-RP、MLDについてまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

目次