MLD 機能説明書

$Date: 2021/03/30 08:21:01 $


1. はじめに

RTシリーズは、MLDv1、MLDv2、MLDプロキシの機能を提供します。 MLDv1とMLDv2については、ホスト側とルーター側の双方に対応し、インターフェースごとにホストとルーターの機能を使い分けることができます。 MLDv1はRFC2710、MLDv2はdraft-vida-mld-v2-07.txtに対応します。

MLDプロキシは、下流のインターフェースに存在するリスナーの情報を、上流のインターフェースに中継する機能であり、 draft-ietf-magma-igmp-proxy-04.txtに基づいて実装しています。

▲ 先頭に戻る

2. MLDについて

2.1. マルチキャストの仕組み

マルチキャストは、マルチキャストのルーティングに対応した特別な網で実現されます。マルチキャスト網を構成するルーターは、特定の端末が送信するマルチキャストパケットを複製して、複数の端末に配送します。マルチキャストパケットを送信する端末をソース(source)と呼び、それを受信する端末をリスナー(listener)と呼びます。以下の説明では、マルチキャストパケットを単にパケットと書きます。

ソースが送信するパケットは原則としてすべてのリスナーに届きます。しかし、リスナーによって受信するパケットを変えたければ、リスナーをグループに分けることができます。同じグループに属する端末は同じパケットを受信し、異なるグループに属する端末は異なるパケットを受信します。それぞれのグループには識別子として マルチキャストアドレスが割り当てられます。

パケットのIPヘッダーの終点アドレスには、グループに対応するマルチキャストアドレスが格納されます。網内のルーターは、このマルチキャストアドレスを見て、パケットの転送先のグループを確認します。網内のルーターはグループごとに編成された経路表を持っているので、その経路表にしたがってパケットを配布します。経路表は、通常、 PIM-SM、PIM-DM、DVMRPなどのルーティングプロトコルによって自動的に生成されます。

2.2. MLD

MLD(Multicast Listener Discovery)の目的は、端末がマルチキャスト網に対して、端末が参加するグループを通知することです。

網内のルーターは端末に対してクエリー(Query) というメッセージを送信します。クエリーを受信した端末は、ルーターに対してレポート(Report)というメッセージを返信します。レポートの中には、端末が参加するグループのマルチキャストアドレスを格納します。レポートを受信したルーターはその情報をルーティングに反映します。

MLDv2では、受信するパケットのソースを制限することができますが、この機能を実現するためにフィルターモード(Filter Mode)ソースリスト(Source List)を使用します。フィルターモードにはINCLUDEEXCLUDEがあり、 INCLUDEでは許可するソースを列挙し、 EXCLUDEでは許可しないソースを列挙します。例えば、次の場合には、 2001:x:x:x::1と2001:x:x:x::2をソースとするパケットだけが転送の対象になります。

2.3. MLDプロキシ

MLDのメッセージは原則としてルーターを超えることができません。そこで、端末とマルチキャスト網の間にルーターが介在する場合には、ルーターがMLDプロキシの機能を持つ必要があります。 MLDプロキシの機能を持つルーターは、LAN側に対してクエリーを送信し、 LAN側からレポートを受信します。また、そのレポートに含まれる情報をWAN側に転送します。

▲ 先頭に戻る

3. 制限事項

現在の実装には、下記の制限があります。

▲ 先頭に戻る

4. コマンド

次の3つのコマンドを使用します。

ipv6 INTERFACE mld TYPE [OPTION ...]
... インターフェースのMLDの動作を設定する。

[入力形式]
ipv6 INTERFACE mld TYPE [ OPTION ... ]
no ipv6 INTERFACE mld [ TYPE [ OPTION ... ]]
[パラメーター]
TYPE ... MLDの動作方式
  • off ... MLDは動作しない。
  • router ... MLDルーターとして動作する。
  • host ... MLDホストとして動作する。
OPTION ... オプション
  • version=VERSION ... MLDのバージョン
    • 1 ... MLDv1
    • 2 ... MLDv2
    • 1,2 ... MLDv1とMLDv2の両方に対応する。 (MLDv1互換モード)
  • syslog=SW ... 詳細な情報をsyslogに出力するか否か。
    • on ... 表示する
    • off ... 表示しない
  • robust-variable=VALUE (1 .. 10) ... MLDで規定されるRobust Variableの値を設定する。
  • report-link-local-group=SW ... リンクローカルスコープのグループを処理するか否か。
    • on ... MLDルーターとして動作しているとき、リンクローカルスコープのグループのレポート受信を有効にする。MLDホストとして動作しているとき、リンクローカルスコープのグループのレポート送信を有効にする。
    • off ... リンクローカルスコープのグループのレポートの送受信を無効にする。
[説明]
インターフェースのMLDの動作を設定する。
[ノート]
report-link-local-groupオプションは、RTX1200のRev.10.01.71以降、NVR500のRev.11.00.35以降、RTX810のRev.11.01.28以降、FWX120のRev.11.03.22以降、RTX5000、RTX3500のRev.14.00.21以降、RTX1210のRev.14.01.16以降、NVR700WのRev.15.00.03以降、NVR510のRev.15.01.03以降、RTX830のRev.15.02.01以降で指定可および、Rev.15.02 系以降のすべてのファームウェアで指定可能。
[デフォルト値]
TYPE: off
OPTION: version=1,2, syslog=off, robust-variable=2, report-link-local-group=off

ipv6 INTERFACE mld static
... MLDの静的な設定を登録する。

[入力形式]
ipv6 INTERFACE mld static GROUP [ FILTER_MODE SOURCE ... ]
no ipv6 INTERFACE mld static GROUP [ FILTER_MODE SOURCE ... ]
[パラメーター]
GROUP ... グループのマルチキャストアドレス
FILTER_MODE ... フィルターモード
  • include ... MLDの"INCLUDE"モード
  • exclude ... MLDの"EXCLUDE"モード
SOURCE ... マルチキャストパケットの送信元のアドレス
[説明]
指定したグループについて、常にリスナーが存在するものとみなす。 このコマンドは、 MLDをサポートしていないリスナーがいる場合に設定する。 FILTER_MODEとSOURCEは、 マルチキャストパケットの送信元を限定するものである。 FILTER_MODEとしてincludeを指定したときには、 SOURCEとして受信したい送信元を列挙する。 FILTER_MODEとしてexcludeを指定したときには、 SOURCEとして受信したくない送信元を列挙する。
[ノート]
このコマンドで設定されたリスナーは、 ipv6 INTERFACE mld コマンドでhostを設定したインターフェースで通知される。もし、 このインターフェースがMLDv1を使う場合には、 FILTER_MODEやSOURCEの値は無視される。
[デフォルト値]
何も設定されない。

show status ipv6 mld
... MLDの状態を表示する。

[入力形式]
show status ipv6 mld
[パラメーター]
なし
[説明]
MLDが設定されたすべてのインターフェースについて、 MLDの状態を表示する。
[デフォルト値]
なし

▲ 先頭に戻る

5. 設定例

MLDプロキシを使う接続方法が一般的です。ネットワークの構成は次のようになります。

     マルチキャスト網
            | 2001:x:x:x::1
            |
            | LAN2
      +-----------+
      |  ルーター |
      +-----------+
            | LAN1
            |
      ------+--------+---------+----
                     |         |
                   ホスト    ホスト

この構成に対応する設定は次のようになります。

# ipv6 lan1 mld router version=2
# ipv6 lan2 mld host version=2

もし、LAN1に接続されているホストがMLDに対応していない場合には、次のように静的にリスナーを登録することができます。

# ipv6 lan1 mld static ff03::1 include 2001:x:x:x::1

▲ 先頭に戻る

6. 状態の表示

MLDの状態を表示するためには、show status ipv6 mldコマンドを実行します。このコマンドの表示例と意味を説明します。

# show status ipv6 mld

↓ルーターに共通な定数の値を表示します。(詳細はRFCなどを参照してください。)
VARIABLES
  Query Interval: 125.0, Query Response Interval: 10.0
  LLQI: 1.0, Unsolicited Report Interval: 1.0

↓インターフェースの名前、設定内容、定数、タイマーの値などを表示します。
↓ルーターの場合はQuerierかNon-Querierを表示します。
LAN1 (fe80::2a0:deff:fexx:xxxx)
  mode: router(querier), syslog: off, version: MLDv1 (config: 1)
  Robust Variable: 2, Startup Query Count: 2
  LLQC: 2, LLQT: 2.0, MALI: 260.0
  Other Querier Present Timeout: 255.0
  Older Version Host Present Timeout: 260.0
  Query Interval: 125.0, Startup Query Interval: 31.2
  Older Version Querier Present Timer: -.-
  last received QRV: 0, last received QQI: 0
  Query Timer: 119.9
  Other Querier Present Timer: -.-

  ↓リスナーが通知したグループについて、タイマーを表示します。
  ff02::1:ffxx:xxxx
    Compatibility Mode: MLDv1
    Older Version Host Present Timer: -.-
    MLDv1 Group Timer: 259.7

  ff02::2:35xx:xxxx
    Compatibility Mode: MLDv1
    Older Version Host Present Timer: -.-
    MLDv1 Group Timer: 259.7

↓このインターフェースはホストとして設定されています。
LAN2 (fe80::2a0:deff:fexx:xxxx)
  mode: host, syslog: on, version: MLDv2 (config: 1,2)
  Robust Variable: 2, Startup Query Count: 2
  LLQC: 2, LLQT: 2.0, MALI: 260.0
  Other Querier Present Timeout: 255.0
  Older Version Host Present Timeout: 260.0
  Query Interval: 125.0, Startup Query Interval: 31.2
  Older Version Querier Present Timer: -.-
  Report Timer: 0.4, Interface Timer: -.-

  ↓このインターフェースが通知すべきリスナーのグループです。
  ff02::1:ffxx:xxxx
    listener state:
      EXCLUDE [] (dynamic)
      INCLUDE [2001:x:x:x::1] (static)
    ↓複数のlistener state(↑)を集約したものを表示します。
    listener state (aggregation):
      EXCLUDE []
    Filter Mode Retrans Count: 2, Multicast Address Timer: -.-
    retrans source list: []

  ff02::2:35xx:xxxx
    listener state:
      EXCLUDE [] (dynamic)
      INCLUDE [2001:x:x:x::1] (static)
    listener state (aggregation):
      EXCLUDE []
    Filter Mode Retrans Count: 1, Multicast Address Timer: -.-
    retrans source list: []

  ff03::1
    listener state:
      INCLUDE [2001:x:x:x::1, 2001:x:x:x::2] (static)
    listener state (aggregation):
      INCLUDE [2001:x:x:x::1, 2001:x:x:x::2]
    Filter Mode Retrans Count: 0, Multicast Address Timer: -.-
    retrans source list: []

↓MLDプロキシの情報です。左から順にDynamic/Static、LAN側のインターフェース、
↓グループ、フィルターモード、ソースリスト、WAN側のインターフェースを表します。
PROXY INFORMATION
  D LAN1    ff02::1:ffxx:xxxx    EXCLUDE []                   LAN2
  D LAN1    ff02::2:35xx:xxxx    EXCLUDE []                   LAN2
  S LAN1    ff03::1              INCLUDE [2001:x:x:x::1, 2001:x:x:x::2]   LAN2

↓ルーティングの情報です。WAN側のインターフェースのそれぞれのグループと
↓ソースについて、転送先のLAN側のインターフェースが表示されます。
↓アスタリスク「*」はデフォルトの経路を示します。
FORWARDING
  LAN2
    ff02::1:ffxx:xxxx
      * : LAN1
    ff02::2:35xx:xxxx
      * : LAN1
    ff03::1
      2001:x:x:x::1: LAN1
      2001:x:x:x::2: LAN1

▲ 先頭に戻る

7. syslog

MLDに関係するsyslogを下記の表にまとめます。種別欄に★がついているものは、 INFOレベルのsyslogで、それ以外はすべてDEBUGレベルのsyslogです。また、種別欄に▲がついているものは、インターフェースごとに出力が制御されており、 ipv6 INTERFACE mldコマンドのsyslogオプションでonを設定したときだけ表示されます。このオプションはデフォルトではoffになっています。

表中の記号IGFSはそれぞれ、インターフェース、グループ、フィルターモード、ソースのリストを表しています。また、Lはリスナーの識別子であり、 staticdynamicのいずれかを表示します。 staticはipv6 INTERFACE mld staticコマンドの設定に対応し、 dynamicは下流のインターフェースのリスナーから受信したReportに対応します。

IP-SAは、パケットの始点IPアドレスを表します。また、TIMERは、MLDの各種のタイマーの名前を示します。タイマーについては、8.タイマーを参照してください。

表示するメッセージ 意味 種別
initialize interface I mode: MODE インターフェースを初期化しました。 MODEには、 host(ホスト)かrouter(ルーター)を表示します。
listen multicast (I, G, F, S, L) ホストのインターフェースで、新しいリスナーを登録しました。
receive v1 report, stop v1 report timer (I, G) ホストのインターフェースで、MLDv1のReportを受信しました。
link-local address changed, initialize I インターフェースのリンクローカルアドレスが変化したため、 インターフェースを初期化しました。
discard message from I, IP-SA MLDメッセージを破棄しました。(場合によっては、 このメッセージの後に破棄した理由が表示されます。)
receive unknown message from I, IP-SA MLDのHop-by-Hopオプションが指定されているものの、 ICMPヘッダのTypeフィールドが不明でした。
discard invalid {query, report, done} from I, IP-SA 不正な内容の{Query, Report, Done} を受信しました。 (場合によっては、このメッセージの後に破棄した理由が表示されます。)
receive {v1, v2} {query, report, done} {MLDv1, MLDv2}の{Query, Report, Done}を受信しました。
send {v1, v2} {query, report, done} {MLDv1, MLDv2}の{Query, Report, Done}を送信しました。 (MLDv2 Reportの場合は、Current State ReportとState Change Reportの 違いも表示されます。)
change compatibility mode (I) to {MLDv1, MLDv2} インターフェースの互換モードを{MLDv1, MLDv2}に変更しました。
change state (I) from querier to non-querier, new querier: IP-SA ルーターのインターフェースの状態が QuerierからNon-Querierに変化しました。 新しいQuerierはIP-SAです。
change state (I) from non-querier to querier ルーターのインターフェースの状態が Non-QuerierからQuerierに変化しました。
change filter mode (I, G) to INCLUDE S グループのフィルターモードがEXCLUDEからINCLUDEに変化しました。 すなわち、EXCLUDEモードのリスナーが存在しなくなったことを示します。
change listener state (I, G): F, S -> F, S ホストのインターフェースで、グループの状態が変化しました。
schedule report R S Reportの送信をスケジュールしました。 Rは送信するReportのレコードの種別を示しています。
set TIMER ... MLDのタイマーを設定しました。TIMERの部分には、 タイマーの名前が表示されます。
TIMER expired MLDのタイマーが満了しました。 TIMERの部分には、タイマーの名前が表示されます。
select delay (I) ... MLDで規定された各種の遅延を決定します。この種のsyslogは、 取り得る値の範囲と、実際に乱数で選択された値を示すものです。
interface timer < delay, don't send report 乱数で選択した値がInterface Timerよりも小さいために、Reportの 送信を抑制しました。
remove source (S) from include list (I, G) ルーターのインターフェースで、 include listからソースSを取り除きました。
move source (S) from requested list to exclude list (I, G) ルーターのインターフェースで、 ソースSをrequested listからexclude listへ移しました。
can't select source address for query (I) 始点アドレスを選択できず、Queryを送信できません。 例えば、回線が接続されていないときに表示されます。

▲ 先頭に戻る

8. タイマー

タイマーの名前は、RFCやInternet-Draftの表現に基づいていますが、特に名前が定義されていない場合には、独自の名前を採用しています。

名前 役割 ルーター/ホスト MLDのバージョン
Report Timer 状態が変化してからState Change Reportを送信するまでの遅延を計ります。 ホスト MLDv2
Interface Timer General Queryを受信してから Current State Reportを送信するまでの遅延を計ります。 ホスト MLDv2
Multicast Address Timer MAS/MASS Queryを受信してから Current State Reportを送信するまでの遅延を計ります。 ホスト MLDv2
V1 Report Timer Queryを受信してからReportを送信するまでの遅延を計ります。 ホスト MLDv1
Query Timer 定期的なQueryの送信間隔を計ります。 ルーター MLDv1/MLDv2
MAS/MASS Query Timer MAS/MASS Queryの再送間隔を計ります。 ルーター MLDv2
Source Timer リスナーから受信したソースの有効時間を計ります。 このタイマーが満了したら、ソースは無効になります。 ルーター MLDv2
Filter Timer EXCLUDEのフィルターモードの有効時間を計ります。 このタイマーが満了したら、 フィルターモードはINCLUDEになります。 ルーター MLDv2
Other Querier Present Timer より優先度の高いルーター(Querier)が存在することを示します。 このタイマーが満了したら、自分自身がQuerierになります。 ルーター MLDv1/MLDv2
Older Version Host Present Timer 古いバージョンのホストが存在することを示します。 このタイマーが満了したら、互換モードをMLDv2に戻します。 ルーター MLDv2
V1 Group Timer リスナーから受信したグループの有効時間を計ります。 このタイマーが満了したら、グループは無効になります。 ルーター MLDv1
V1 Query Timer MAS Queryの再送間隔を測ります。 ルーター MLDv1
Older Version Querier Present Timer 古いバージョンのルーター(Querier)が存在することを示します。 このタイマーが満了したら、互換モードをMLDv2に戻します。 ホスト/ルーター MLDv2

▲ 先頭に戻る

9. 参考資料

▲ 先頭に戻る

Copyright © 2004 YAMAHA CORPORATION. All rights reserved.