はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
前回まではマルチキャストの「一般編」や「PIM-SM」についてまとめてきました。
今回は、マルチキャストシリーズの続編である「MLD」についてまとめていきたいと思います。
MLD(Multicast Listener Discovery)とは
まずはじめに、MLD(Multicast Listener Discovery)とは何か?を説明したいと思います。
MLDとは、「IPv6 マルチキャストで利用するIPv4のIGMP該当するプロトコル」になります。
MLDv1とMLDv2の2つのバージョン
このMLDには、「MLDv1」と「MLDv2」の2つのバージョンが存在します。
これら2つのバージョンの違いは、MLDv1はIGMPv2、MLDv2はIGMPv3に該当するような違いがあるためです。
バージョン | IPv4の該当プロトコル |
MLDv1 | IGMPv2に該当 |
MLDv2 | IGMPv3に該当 |
MLDを構成する4つのメッセージ
MLDには、4つのメッセージがあります。
長々と文章に書いてもわかりづらくなると思うので、メッセージ各種の説明は以下の表にまとめます。
メッセージ | タイプ | 用途 |
Query | 131 | Reportメッセージに対する応答 |
Report | 132 | マルチキャストグループへの参加・維持を要望する |
Done | 133 | マルチキャストグループからの離脱時に利用 |
Report(MLDv2限定) | 143 | ・Current State:Queryの応答に利用する状態 ・State Change:グループへの参加・離脱を通知する状態 | マルチキャストグループへの参加・維持・離脱で利用
ここからはMLDの仕組みを理解しよう!
Step1:MLDv1の仕組み
この章では、MLDv1のマルチキャストグループへの参加、維持、離脱の動作について説明します。
Step1-1:マルチキャストグループへの参加
マルチキャストグループへの参加は、「参加したいグループのマルチキャストアドレスを宛先としReportメッセージを送信」します。
Step1-2:マルチキャストグループ参加維持
マルチキャストグループの参加維持は、ラストホップルータが宛先FF02::1のQueryメッセージを送信し、受信者がReportメッセージを応答することで参加が維持されます。
この時、マルチキャストグループに所属する全ルータに対し送信する「General Query」とマルチキャストグループの中の特定ルータに対し送信する「Specific Query」の2種類があります。
Step1-3:マルチキャストグループからの離脱
マルチキャストグループから離脱するためには、「FF02::2宛のDoneメッセージを受信者からラストホップルータに送信」します。
このDoneメッセージを受信したルータは、「参加維持のためにラストホップルータが送信するQueryメッセージに対する応答がなくなることでグループの離脱が確定」します。
Step2:MLDv2の仕組み
次にMLDv2の参加、維持、離脱の仕組みについて記載していきます。
Step2-1:マルチキャストグループへの参加
マルチキャストグループに関する仕組みは、基本的にMLDv1と同様になりますが、メッセージの宛先が異なります。
その宛先は「FF02::16」になり、先程の表の一番下にあった「State Change Report」として送信します。
このメッセージの送信には、送信元アドレスを指定できる「ALLOW_NEW_RESOURCE」というタイプがあります。
送信元の指定がない場合は、「CHANGE_TO_EXCLUDE」というタイプを利用し送信することになります。
タイプ | 用途 |
ALLOW_NEW_RESOURCE | 送信者となる送信元アドレスを指定する |
CHANGE_TO_EXCLUDE | 送信者となる送信元アドレスを指定しない |
Step2-2:マルチキャストグループ参加の維持
マルチキャストグループ参加維持は、ラストホップルータ(LHR)から受信者に対しQueryメッセージを送信し、応答としてReportメッセージの「Current State Report」を送信することでマルチキャストグループへの参加を維持します。
このメッセージにも送信元アドレスの指定ができる「MODE_IS_INCLUDE」と未指定の「MODE_IS_EXCLUDE」の2種類があります。
タイプ | 用途 |
MODE_IS_INCLUDE | 送信者の送信元アドレスを指定する場合 |
MODE_IS_EXCLUDE | 送信者となる送信元アドレスを指定しない場合 |
Step2-3:マルチキャストグループからの離脱
マルチキャストグループからの離脱は、MLDv1とは異なり、MLDv2のReportメッセージ(State Change)を「FF02::16」宛に送信し、ラストホップルータ(LHR)がQueryメッセージを送信し、応答がないことで離脱となります。
タイプ | 用途 |
BLOCK_IS_SOURCES | 送信者の送信元アドレスを指定する場合 |
CHANGE_TO_INCLUDE_MODE | 送信者となる送信元アドレスを指定しない場合 |
動作確認を実機でしてみよう!
今回の動作確認では、MLDv2の送信元アドレスの指定がないパターンで確認しました。
また、動作確認を実施した構成は、以下の図の通りとなります。
動作確認①:マルチキャストグループへの参加
MLDによるマルチキャストグループへの参加は、Receiver3のInterface設定配下に以下の設定が必要となります。
(config-if)# ipv6 mld join-group <マルチキャストグループアドレス>
今回は、Receiver4に設定した際の動作を確認します。
Receiver4#conf t
Receiver4(config)#interface gigabitEthernet 0/0
Receiver4(config-if)#ipv6 mld join-group ff08::1111
設定後のDebug Logを見てみるとしっかり参加していることがわかります。
*Feb 10 11:40:20.383: IPv6 PIM: (*,FF08::1111) Processing Periodic Join-Prune timer
*Feb 10 11:40:20.383: IPv6 PIM: (*,FF08::1111) J/P processing
*Feb 10 11:40:20.383: IPv6 PIM: (*,FF08::1111) Periodic J/P scheduled in 60 secs. Exact schedule time including jitter is: 59502 msec
*Feb 10 11:40:20.383: IPv6 PIM: (*,FF08::1111) J/P adding Join on GigabitEthernet0/0
*Feb 10 11:40:20.383: IPv6 PIM: Sending J/P message for neighbor FE80::2 on GigabitEthernet0/0 for 1 groups
*Feb 10 11:40:38.183: IPv6 PIM: Supressing multicast packets on loopback interface
この時のパケットの中身を見てみましょう。
想定通り、「FF02::16」を宛先としたメッセージがタイプ143で(Exclude)で送信していることがわかります。
動作確認②:マルチキャストグループ参加維持
マルチキャストグループ参加維持のために送信されるReportメッセージとQueryメッセージを見てみます。
動作確認③:マルチキャストグループからの離脱
マルチキャストグループからの離脱時のパケットを見ていきましょう。
この時も「CHANGE_TO_INCLUDE」がしっかりと利用されていることがわかります。
最後に
今回は、IPv6マルチキャストの技術の1つである「MLD」についてまとめてみました。
マルチキャストシリーズは、一旦これで終了としたいと思いますが、今後勉強したプロトコル等でてきた場合は続編として投稿したいと思います。
また、今後読んでみたい本と記事一覧を載せておきます。もし読んだ方がいれば感想を教えていただけるとありがたいです。
コメント