はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、マルチキャストシリーズの続編である「MLD」についてまとめていきたいと思います。
前回までの記事についても、最後に記事一覧として載せているのでチェックしていただけると幸いです。
![](http://image.moshimo.com/af-img/5491/000000074386.png)
MLD(Multicast Listener Discovery)とは
MLD(Multicast Listener Discovery)とは、IPv6のマルチキャストで利用されるプロトコルであり、IPv4のIGMPに該当するものになります。
MLDには2つのバージョンがある
MLDには、2つのバージョンが存在します。
1つ目のMLDv1はIPv4のIGMPv2に該当し、2つ目のMLDv2はIPv4のIGMPv3に該当します。
バージョン | IPv4の該当プロトコル |
MLDv1 | IGMPv2に該当 |
MLDv2 | IGMPv3に該当 |
メッセージタイプ
メッセージタイプは全部で4つあります。
1つ目は、「受信者からのメッセージに対し、応答の役割を持つQueryメッセージ(タイプ131)」です。
2つ目は、「MLDv1で受信者がマルチキャストグループへの参加や離脱を通知する際に利用するReportメッセージ(タイプ132)」になります。
MLDv2では、MLDv2用のReportメッセージ(タイプ143)があります。
これは、Queryの応答に利用する「Current State」、グループへの参加・離脱の通知に利用する「State Change」の2パターンが存在します。
最後は、MLDv1の離脱時に利用されるDoneメッセージ(タイプ133)があります。
メッセージ | タイプ | 用途 |
Query | 131 | Reportメッセージに対する応答 |
Report | 132 | マルチキャストグループへの参加・維持に利用 |
Done | 133 | マルチキャストグループへの参加・維持に利用 |
MLDv2用のReport | 143 | マルチキャストグループへの参加・維持・離脱で利用(MLDv2限定) |
バージョンとメッセージタイプの次は「MLDの仕組み」!!
まずは、MLDv1の仕組みから
この章では、MLDv1のマルチキャストグループへの参加、維持、離脱の動作について説明します。
グループへの参加
グループへの参加は、参加したいグループのマルチキャストアドレスを宛先としReportメッセージを送信します。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv1_Join-1024x576.png)
グループ所属の維持
参加しているマルチキャストグループの維持は、ルータ側が宛先FF02::1に対しQueryメッセージを送信し、受信側がReportを送信することで参加の維持が継続されます。
この時、全てのルータ(全マルチキャストグループ)に対し送信するのが「General Query」と呼ばれ、特定のグループに対し送信するのが「Specific Query」と呼ばれます。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv1_Keep_Alive-1024x572.png)
グループからの離脱
グループからの離脱は、FF02::2宛にDoneメッセージを受信者からルータ宛に送信します。
Doneメッセージを受信したルータは、Queryメッセージで応答し維持されなくなることでグループからの離脱が確定します。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv1_Leave-1024x574.png)
![](http://image.moshimo.com/af-img/5518/000000074563.png)
MLDv2
次にMLDv2の参加、維持、離脱の仕組みについて記載していきます。
グループへの参加
グループへの参加は、MLDv1と基本的には同様ですが、送信するメッセージとその宛先が異なります。
送信メッセージは、MLDv2用のReportメッセージの「State Change Report」をFF02::16宛に送信します。
この時、送信者となるサーバなどの送信元アドレスを指定できる機能があります。
送信元アドレスを指定する場合は「ALLOW_NEW_RESOURCE」タイプを利用し、指定しない場合は「CHANGE_TO_EXCLUDE」タイプを利用します。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_Join-1024x570.png)
タイプ | 用途 |
ALLOW_NEW_RESOURCE | 送信者となる送信元アドレスを指定する場合のタイプ |
CHANGE_TO_EXCLUDE | 送信者となる送信元アドレスを指定しない場合のタイプ |
![](https://www14.a8.net/0.gif?a8mat=3THM1R+BYGF5E+50+4YOECX)
グループ参加維持
グループ参加の維持は、送信者がQueryメッセージを送信し、受信者がMLDv2用のReportメッセージの「Current State Report」を送信することでグループ参加維持を継続します。
このメッセージも参加時同様に、送信者の送信元アドレスの指定ができる「MODE_IS_INCLUDE」と未指定の「MODE_IS_EXCLUDE」の2つのタイプがあります。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_Keep-1024x574.png)
タイプ | 用途 |
MODE_IS_INCLUDE | 送信者の送信元アドレスを指定する場合 |
MODE_IS_EXCLUDE | 送信者となる送信元アドレスを指定しない場合 |
![](https://www14.a8.net/0.gif?a8mat=3YYD8O+37I44Y+3IB8+60WN5)
グループ離脱
グループからの離脱は、MLDv1のDoneメッセージとは異なり、MLDv2用のReportメッセージ(State Change)をFF02::16宛に送信します。
そして、ルータ側からQueryメッセージを送信し、受信者がいなことを確認し離脱となります。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_Leave-1024x577.png)
タイプ | 用途 |
BLOCK_IS_SOURCES | 送信者の送信元アドレスを指定する場合 |
CHANGE_TO_INCLUDE_MODE | 送信者となる送信元アドレスを指定しない場合 |
![](http://image.moshimo.com/af-img/4982/000000069390.jpg)
MLDv2の実装
実装では、MLDv2の送信元アドレス指定なしのパターンを確認してみました。
基本的にはRouter4配下にいるReceiver以外は設定が完了している状態から説明を始めます。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/01/Screen-Shot-2023-01-15-at-15.34.34-1024x502.png)
送信元アドレス指定なし
グループへの参加
グループへの参加は、Receiver3のIFに対し「ipv6 mld join-group ff08::1111」を追加し完了となります。
Receiver3の設定
Receiver4#conf t
Receiver4(config)#interface gigabitEthernet 0/0
Receiver4(config-if)#ipv6 mld join-group ff08::1111
Receiver4(config-if)#
上記設定の完了後、各ルータのDebugログには追加されたことを示すログが出力されています。
Router4の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
Recever3ーRouter4のキャプチャデータ
キャプチャデータの通り、宛先が「FF02::16」、メッセージタイプが「143」となっています。
また、デフォルトでのConfig投入のため、送信元アドレス未指定のため、Excludeとなっています。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/Screen-Shot-2023-02-10-at-14.52.14-1024x503.png)
グループ維持
グループ維持の際のキャプチャデータを見ていきます。
Receiver3とRouter4の間のパケットをとった結果、机上通りQueryメッセージの後にReportメッセージを受信していました。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_Keep-1-1024x503.png)
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_keep2-1024x501.png)
グループからの離脱
グループからの離脱は、「CHANGE_TO_INCLUDE」が利用されていることがわかり、机上通りの結果となった。
![](http://daimaru-tech-blog.com/wp-content/uploads/2023/02/MLDv2_Prune-1024x493.png)
ルータの設定(Router3を参考)
Router3#show running-config
Building configuration...
Current configuration : 4112 bytes
!
! Last configuration change at 04:28:20 UTC Fri Feb 10 2023 by cisco
!
version 15.9
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname Router3
!
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
ipv6 unicast-routing
ipv6 cef
ipv6 multicast-routing
!
multilink bundle-name authenticated
!
!
!
!
username cisco password 0 cisco
!
redundancy
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
ip address 10.1.0.3 255.255.255.255
ip pim sparse-mode
ipv6 address 2000:1000:10:FF::3/128
ipv6 ospf 10 area 0
ipv6 ospf network point-to-point
!
interface GigabitEthernet0/0
description Router2[GigE0/0]
ip address 192.168.1.2 255.255.255.0
ip pim sparse-mode
duplex auto
speed auto
media-type rj45
ipv6 address FE80::3 link-local
ipv6 ospf 10 area 0
!
interface GigabitEthernet0/1
description Sender[Gi0/0]
ip address 172.168.4.2 255.255.255.0
ip pim sparse-mode
duplex auto
speed auto
media-type rj45
ipv6 address 2000:1000:20:FF::1/126
ipv6 ospf 10 area 0
!
interface GigabitEthernet0/2
description L2SW[Gi0/0]
ip address 172.168.1.3 255.255.255.0
ip pim sparse-mode
ip igmp join-group 239.1.1.5
duplex auto
speed auto
media-type rj45
ipv6 address 2000:1000:30:FF::1/124
ipv6 mld join-group FF08::1111
ipv6 ospf 10 area 0
!
interface GigabitEthernet0/3
no ip address
shutdown
duplex auto
speed auto
media-type rj45
!
router ospfv3 10
router-id 10.1.0.3
!
address-family ipv6 unicast
passive-interface GigabitEthernet0/1
passive-interface GigabitEthernet0/2
exit-address-family
!
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 send-rp-announce Loopback0 scope 255
!
ipv6 pim rp-address 2000:1000:10:FF::2
ipv6 ioam timestamp
!
!
!
control-plane
!
banner exec ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS *
* education. IOSv is provided as-is and is not supported by Cisco's *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any *
* purposes is expressly prohibited except as otherwise authorized by *
* Cisco in writing. *
**************************************************************************^C
banner incoming ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS *
* education. IOSv is provided as-is and is not supported by Cisco's *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any *
* purposes is expressly prohibited except as otherwise authorized by *
* Cisco in writing. *
**************************************************************************^C
banner login ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS *
* education. IOSv is provided as-is and is not supported by Cisco's *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any *
* purposes is expressly prohibited except as otherwise authorized by *
* Cisco in writing. *
**************************************************************************^C
!
line con 0
line aux 0
line vty 0 4
login local
transport input telnet ssh
!
no scheduler allocate
!
end
![](https://www11.a8.net/0.gif?a8mat=3T06TU+5NM9O2+1OK+71K35)
最後に
今回は、IPv6マルチキャストの技術の1つである「MLD」についてまとめてみました。
マルチキャストシリーズは、一旦これで終了としたいと思いますが、今後勉強したプロトコル等でてきた場合は続編として投稿したいと思います。
また、今後読んでみたい本と記事一覧を載せておきます。もし読んだ方がいれば感想を教えていただけるとありがたいです。
コメント