【ネットワーク入門】マルチキャスト(MLD)について

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

はじめに

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

今回は、マルチキャストシリーズの続編である「MLD」についてまとめていきたいと思います。

前回までの記事についても、最後に記事一覧として載せているのでチェックしていただけると幸いです。

MLD(Multicast Listener Discovery)とは

MLD(Multicast Listener Discovery)とは、IPv6のマルチキャストで利用されるプロトコルであり、IPv4のIGMPに該当するものになります。

MLDには2つのバージョンがある

MLDには、2つのバージョンが存在します。

1つ目のMLDv1はIPv4のIGMPv2に該当し、2つ目のMLDv2はIPv4のIGMPv3に該当します。

バージョンIPv4の該当プロトコル
MLDv1IGMPv2に該当
MLDv2IGMPv3に該当

メッセージタイプ

メッセージタイプは全部で4つあります。

1つ目は、「受信者からのメッセージに対し、応答の役割を持つQueryメッセージ(タイプ131)」です。

2つ目は、「MLDv1で受信者がマルチキャストグループへの参加や離脱を通知する際に利用するReportメッセージ(タイプ132)」になります。

MLDv2では、MLDv2用のReportメッセージ(タイプ143)があります。

これは、Queryの応答に利用する「Current State」、グループへの参加・離脱の通知に利用する「State Change」の2パターンが存在します。

最後は、MLDv1の離脱時に利用されるDoneメッセージ(タイプ133)があります。

メッセージタイプ用途
Query131Reportメッセージに対する応答
Report132マルチキャストグループへの参加・維持に利用
Done133マルチキャストグループへの参加・維持に利用
MLDv2用のReport143マルチキャストグループへの参加・維持・離脱で利用(MLDv2限定)
20代理系就職・転職【UZUZ】

バージョンとメッセージタイプの次は「MLDの仕組み」!!

まずは、MLDv1の仕組みから

この章では、MLDv1のマルチキャストグループへの参加、維持、離脱の動作について説明します。

グループへの参加

グループへの参加は、参加したいグループのマルチキャストアドレスを宛先としReportメッセージを送信します。

グループ所属の維持

参加しているマルチキャストグループの維持は、ルータ側が宛先FF02::1に対しQueryメッセージを送信し、受信側がReportを送信することで参加の維持が継続されます。

この時、全てのルータ(全マルチキャストグループ)に対し送信するのが「General Query」と呼ばれ、特定のグループに対し送信するのが「Specific Query」と呼ばれます。

グループからの離脱

グループからの離脱は、FF02::2宛にDoneメッセージを受信者からルータ宛に送信します。

Doneメッセージを受信したルータは、Queryメッセージで応答し維持されなくなることでグループからの離脱が確定します。

MLDv2

次にMLDv2の参加、維持、離脱の仕組みについて記載していきます。

グループへの参加

グループへの参加は、MLDv1と基本的には同様ですが、送信するメッセージとその宛先が異なります。

送信メッセージは、MLDv2用のReportメッセージの「State Change Report」をFF02::16宛に送信します。

この時、送信者となるサーバなどの送信元アドレスを指定できる機能があります。

送信元アドレスを指定する場合は「ALLOW_NEW_RESOURCE」タイプを利用し、指定しない場合は「CHANGE_TO_EXCLUDE」タイプを利用します。

タイプ用途
ALLOW_NEW_RESOURCE送信者となる送信元アドレスを指定する場合のタイプ
CHANGE_TO_EXCLUDE送信者となる送信元アドレスを指定しない場合のタイプ

グループ参加維持

グループ参加の維持は、送信者がQueryメッセージを送信し、受信者がMLDv2用のReportメッセージの「Current State Report」を送信することでグループ参加維持を継続します。

このメッセージも参加時同様に、送信者の送信元アドレスの指定ができる「MODE_IS_INCLUDE」未指定の「MODE_IS_EXCLUDEの2つのタイプがあります。

タイプ用途
MODE_IS_INCLUDE送信者の送信元アドレスを指定する場合
MODE_IS_EXCLUDE送信者となる送信元アドレスを指定しない場合

グループ離脱

グループからの離脱は、MLDv1のDoneメッセージとは異なり、MLDv2用のReportメッセージ(State Change)をFF02::16宛に送信します。

そして、ルータ側からQueryメッセージを送信し、受信者がいなことを確認し離脱となります。

タイプ用途
BLOCK_IS_SOURCES送信者の送信元アドレスを指定する場合
CHANGE_TO_INCLUDE_MODE送信者となる送信元アドレスを指定しない場合

MLDv2の実装

実装では、MLDv2の送信元アドレス指定なしのパターンを確認してみました。

基本的にはRouter4配下にいるReceiver以外は設定が完了している状態から説明を始めます。

今回利用した構成

送信元アドレス指定なし

グループへの参加

グループへの参加は、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となっています。

グループ維持

グループ維持の際のキャプチャデータを見ていきます。

Receiver3とRouter4の間のパケットをとった結果、机上通りQueryメッセージの後にReportメッセージを受信していました。

Queryメッセージ
Reportメッセージ

グループからの離脱

グループからの離脱は、「CHANGE_TO_INCLUDE」が利用されていることがわかり、机上通りの結果となった。

ルータの設定(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

最後に

今回は、IPv6マルチキャストの技術の1つである「MLD」についてまとめてみました。

マルチキャストシリーズは、一旦これで終了としたいと思いますが、今後勉強したプロトコル等でてきた場合は続編として投稿したいと思います。

また、今後読んでみたい本と記事一覧を載せておきます。もし読んだ方がいれば感想を教えていただけるとありがたいです。

記事一覧

  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次