Anycast RPの目的

Anycast RPの目的は、PIM-SMにおいてRPの冗長化と負荷分散を実現することです。

あらためて、RPについて振り返ります。PIM-SMにおいて、マルチキャストグループごとにRPアドレスが必ず必要です。そして、特定のマルチキャストグループのRPアドレスはただ一つです。RPがダウンしてしまうと、ラストホップルータは共有ツリーを作成することができません。また、ファーストホップルータはPIM Registerメッセージを送信できなくなります。RPはPIM-SMのマルチキャストルーティングにおいて非常に重要な役割を果たしています。RPがダウンしてしまうと、PIM-SMではマルチキャストルーティングを正常に行うことができません。そのため、RPの冗長化を考えておくことが重要です。

なお、スイッチオーバーしてしまえば、RPがダウンしていてもマルチキャストパケットをルーティングし続けることができる場合はあります。

RPの冗長化

RPの冗長化は、Auto RP/BSRでRP候補を複数設定することで実現することができます。RPとして選ばれたルータがダウンしても、別のRP候補のルータがRPの役割を引き継ぐことができます。ただし、Auto RP/BSRでのRPの冗長化では、RPを切り替えるのに時間がかかります。

Auto RPでは、RP候補はRP-AnnounceメッセージをRP_ANNOUNCE_INTERVALの間隔で送信します。デフォルトでは、RP_ANNOUNCE_INTERVALは60秒です。そして、MAは定期的なRP-Announceメッセージを受信することで、RP候補が動作していることを確認しています。RP-Announceメッセージで通知されるRP候補の情報は、RP_ANNOUNCE_INTERVALの3倍の制限時間が設けられています。つまり、デフォルトで180秒です。そのため、現在アクティブなRP候補がダウンしてから、新しいRPに切り替えるまでに最大で3分間かかってしまうことになります。

Auto RPでRPの切り替えに要する時間を短くするためには、RP候補の設定のオプションでRP_ANNOUNCE_INTERVALを短く設定します。

Auto RP RP候補

(config)#ip pim send-rp-announce <interface> scope <ttl> [group-list <ACL>] [interval < sec >]

<interface> : RPアドレスとしてアドバタイズするインタフェース
<ttl> : RP AnnounceメッセージのTTL値
<ACL> : RPとするマルチキャストグループを特定するためのACL番号
< sec > : RP_ANNOUNCE_INTERVAL

BSRでも、同じような仕組みです。BSRでは、RP候補はC-RP通知メッセージをC-RP-ADV-PERIODの間隔で送信します。C-RP-ADV-PERIODのデフォルトは60秒です。C-RP通知メッセージのRPの情報は、C-RP-ADV-PERIODの2.5倍の制限時間が設けられています。デフォルトでは、150秒です。現在アクティブなRP候補がダウンしてから、新しいRPに切り替わるまで最大で150秒間の時間がかかります。

BSRでRPの切り替え時間を短くするには、RP候補の設定のオプションでC-RP-ADV-PERIODを短くします。

BSR RP候補

(config)#ip pim rp-candidate <interface> group-list <ACL> [interval < sec >]

<interface> : RPアドレスとしてアドバタイズするインタフェース
<ACL> : RPとするマルチキャストグループを特定するためのACL番号
< sec > : C-RP-ADV-PERIOD

Auto RP/BSRで複数のRP候補を設定して、RPを冗長化しても負荷分散を行うことはできません。RP候補を複数設定しても、アクティブなRPはひとつに決定されるからです。RPの冗長化だけではなく、正常時には複数のRPに負荷分散するためにはAnycast RPを利用します。

Anycastの概要

Anycastは、通信の方式で「1対近く(one-to-nearest)」の通信です。Anycastの通信を行うには、複数のインタフェースに同じアドレスを設定します。つまり、ひとつのアドレスを複数のインタフェースで共有します。この共有しているアドレスをAnycastアドレスと呼びます。

Anycastアドレスを送信先アドレスに指定してパケットを送信すると、送信元から最も近いインタフェースにルーティングされます。「近い」というのは、ネットワーク上で利用しているルーティングプロトコルのメトリックによって判断されます。

Anycastの通信では正常時に、Anycastアドレスを共有しているインタフェースで負荷分散を行います。Anycastアドレスを共有しているインタフェースのひとつに障害が発生すると、ユニキャストルーティングプロトコルによってAnycastアドレスへ到達するためのルート情報が変更されます。つまり、Anycastアドレスを共有している別のインタフェースへ切り替えることができます。

図 Anycastの概要
図 Anycastの概要

Anycast RPの仕組み

このようなAnycastの仕組みをRPの冗長化と負荷分散に応用した機能がAnycast RPです。複数のRPにAnycastアドレスを設定します。つまり、同じIPアドレスを複数のRPに設定します。その他のルータには、複数のRPに設定したAnycastアドレスをRPアドレスとして設定します。RPアドレスの設定は、スタティックでもAuto RP/BSRのダイナミックでもどちらでも構いません。

Anycast RPの概要を示したのが次の図です。

図 Anycast RPの概要
図 Anycast RPの概要

RP1とRP2で1.1.1.1というIPアドレスを共有しています。1.1.1.1がAnycastアドレスです。マルチキャストネットワーク内のルータは1.1.1.1をRPアドレスとして設定します。ソースに直接接続されているFHRは、ソースからのマルチキャストパケットをRP1へPIM Registerメッセージでカプセル化して転送します。FHRから1.1.1.1のAnycastアドレスの最も近いインタフェースはRP1だからです。そして、レシーバが現れるとLHRはPIM JoinメッセージをRP2の方向へ送信して、共有ツリーを作成します。LHRから1.1.1.1の最も近いインタフェースはRP2になるためです。このようにして、RP1とRP2でRPの役割を負荷分散することができます。

MSDP

Anycast RPでマルチキャストパケットのルーティングを考えると、問題があります。それは、通常のPIM-SMの仕組みでは複数のRP間でマルチキャストパケットを転送することができないことです。

そこで、複数のRP間でマルチキャストパケットを転送するために、MSDP(Multicast Source Discovery Protocol)を利用します。MSDPは、本来、
異なるAS間でマルチキャストパケットを転送するためのプロトコルです。異なるASのRP間でMSDPピアを確立します。マルチキャストパケットを別のASに転送するときには、MSDPピアである転送先のASのRPへマルチキャストソースの情報を通知します。そのためのメッセージがSA(Source Active)メッセージです。また、マルチキャストパケットをSAメッセージにカプセル化して、別のASのRPへ転送することもできます。

Anycast RPでは、MSDPのSAメッセージを利用して複数のRP間でマルチキャストパケットを転送できるようにします。そのため、複数のRP間でMSDPピアの設定を行います。

図 MSDP
図 MSDP

Anycast RPでのマルチキャストパケットの転送の様子を表したのが次の図です。

図 Anycast RPでのマルチキャストパケットの転送 1
図 Anycast RPでのマルチキャストパケットの転送 1

この図では、すでに送信元ツリーや共有ツリーは作成されているものとしています。ソースから送信されたマルチキャストパケットは、送信元ツリーにしたがってRP1までマルチキャストパケットのままルーティングされていきます。RP1では、マルチキャストパケットをMSDP SAメッセージでカプセル化してRP2へ転送します。RP2は、SAメッセージのカプセル化を解除して、マルチキャストパケットを共有ツリーにしたがってレシーバまでルーティングします。

SAメッセージに毎回マルチキャストパケットをカプセル化すると大きな負荷がかかります。そのため、SAメッセージにカプセル化するのは1つ目のマルチキャストパケットだけです。マルチキャストパケットのままルーティングできるようにSAメッセージを受信したRP2は送信元ツリーに参加します。SAメッセージによってソースのIPアドレスがわかるので、PIM(S,G)Joinメッセージを送信して送信元ツリーに参加します。

RP2が送信元ツリーに参加すれば、マルチキャストパケットのままソースからレシーバまでルーティングができるようになります。

図 5 Anycast RPでのマルチキャストパケットの転送 2
図 Anycast RPでのマルチキャストパケットの転送 2


IPマルチキャストの仕組み