1.协议的概述
- 组播侦听发现协议MLD用于IPv6组播中的组成员管理,其基本原理和功能与IGMP相似。MLD的目的是使能每个IPv6路由器发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在,并且能明确发现这些邻居节点所感兴趣的组播地址。然后提供这些消息给路由器所使用的组播路由协议,以确保组播数据转发至存在接收者的所有链接,IGMP是专门服务区IPV4的,并不支持拓展,所以开发出来了一个新的组播协议MLD专门服务于IPV6
- 组播协议是运行于组播模型中最后一跳路由器和接收者之间的,用于建立和维护组播组成员之间的关系
- 如果路由器有不止一个接口在同一网络上,它只需要在其中一个接口上运行此协议。另一方面,对侦听者来说,则必须在所有接口运行此协议以便上层协议从接口接收所需要的组播数据
- MLD有两个版本,分别是V1和V2版本,并且所有的版本都适用于ASM模型,V2版本可以直接应用于SSM模型,但是V1版本的话则需要SSM-Mapping
2.MLD的用途
- 组播侦听发现协议MLD用于IPv6路由器在其直连网段上发现组播侦听者
- 路由器通过MLD协议,可以了解到在自己的直连网段上是否有组播组的侦听者,并在数据库里做相应记录。同时,路由器还维护与这些组播地址相联系的定时器信息
- 配置MLD的路由器使用IPv6单播链路本地地址作为源地址发送MLD报文
- MLD使用ICMP来携带消息所有的MLD报文被限制在本地链路上,跳数为1
3.MLDv1
1.类型(type):MLD消息共有三种
- 组播侦听查询(类型值=130),可分为两种子类型
- 普遍查询:用于获得在所连网络上具有侦听者的组播地址
- 特定组播地址查询:用于获得在所连网络上对一特定组播地址是否存在侦听者
2.代码(Code):
- 发送时设置为1;接收时忽略
3.校验和(Checksum):
- 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部
4.最大响应延迟(Maximum Response Delay):
- 最大响应延迟值只在查询报文消息中有意义,它指定了发送响应报文的最大允许时间延迟,单位为毫秒。在其他报文消息中,发送时设置为零,接收时忽略,比如说普遍组查询报文的最大响应为10s,特定组查询报文最大响应为1s
5.保留(Reserved):
- 发送者设为零;接收者忽略
6.组播地址(Multicast Address):
- 在查询报文中,当发送普遍查询时,组播地址值设为零
- 当发送特定组查询时,设为特定的IPv6组播地址
- 在报告或离开报文中,组播地址值分别设为报文发送者要侦听或者停止侦听的特定IPv6组播地址
3.1查询器选举机制
- 所有MLD路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送MLD普遍组查询报文(目的地址为 FF02::1)
- 本地网段中的其它MLD路由器在收到该报文后,将报文的源IPv6地址与自己的接口地址作比较。通过比较,IPv6地址最小的路由器将成为查询器,其它路由器成为非查询器
- 所有非查询器上都会启动一个定时器,在定 时器超时前,如果收到了来自查询器的 MLD 查询报文,则重置该定时器;否则,就认为原查询器失效, 并发起新的查询器选举过程
为什么需要选举查询器呢?
因为如果当组播网络中有多台组播路由器的时候,那么这时候这些路由器都会发送组播报文,所以PC就会收到多个重复的组播报文,因此需要从多台路由器中选举出一台路由器当查询器,组播报文将由他来发送
3.2 组成员加组过程
- MLD查询器周期性地向共享网段上的所有本地链路主机以组播方式(目的地址为FF02::1)发送普遍查询消息
- 网段上的所有主机都接收到该普遍查询消息。如果主机Host B和Host C希望加入某组播组G1,则设置定时器延时来响应
- 希望加入的主机在定时器超时后以组播方式向网段上的所有主机和路由器发送报告消息来响应查询,此消息包含组播组G1的地址信息
- 网段上的所有主机和路由器接收到此报告消息后,也就获得了关于G1的组播信息。此时网段中其他也希望加入组播组G1的主机将不再发送相同的报告消息,这个就是成员关系抑制机制,因为交换机本身具有的泛洪的工作机制,即当其他主机想要加入这个组的时候,自己也能收到其他主机想要加入这个组的消息,如果两者想要加入同一个组的话则就产生了抑制报文,另外的组就不需要在发送想要加入这个组的报文了,其中一台主机发送即可,从而减少了组播报文的数量减少带宽以及设备性能的损耗,就类似于两个人在同一个饭桌上吃饭,对方点过的菜你就不需要重复点了,你一样可以吃到,就是这个道理,如果主机Host A希望加入另一个组播组G2,就会发送包含组播组G2地址的报告消息以响应普遍查询消息来加入G2
- 在查询/报告过程后,MLD查询器可以了解到在自己的直连网段上是否有组播组G1的接收者,生成形式为(*, G1)组播路由项,*表示任意的组播源
- 通过组播路由机制,MLD查询器接收到组播源发来的组播信息。如果直连网段上有接收者,就在网段上转发此数据,加入组播组的主机接收该数据
3.3 组成员离开租的过程
- 当主机想离开组播组,就以组播地址(目的地址是FF02::2)向链路上发送一个离开消息(Done Message),并且在其组播地址域携带要停止侦听的地址
- 当查询器收到该报文后,向该主机所声明要离开的那个IPv6组播组发送特定组查询报文
- 如果该网段内还有该IPv6组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间内发送成员关系报告报文
- 如果在最大响应时间内收到了该IPv6组播组其它成员发送的成员关系报告报文,查询器就会继续维护该IPv6组播组的成员关系;否则,查询器将认为该网段内已无该IPv6组播组的成员,于是不再维护这个IPv6组播组的成员关系
4. MLDv2
4.1 查询消息报文格式
大致上和v1版本一致,差别就是增加了Number of Sources和Source Address
- Number of Sources:源数目,普遍查询或指定组播组查询中,此字段设置为0,指定组播源-组查询中,此字段表示查询消息中包含的源地址个数
- Source Address:指定查询的组播源地址
4.2 报告消息报文格式
- Number of Multicast Address Records:组播地址记录的个数
- Multicast Address Records:表示主机在接口上侦听到的每个组播地址信息,包括记录类型、组播地址、源地址等
4.3 指定组播源-组查询
G: FF0E:1::1表示加入FF0E:1::1这个组
IN:2001:1::1:表示指定接收2001:1::1这个组播源发送过来的组播数据
2001:2::1:表示指定接收2001:2::1这个组播源发送过来的组播数据
G:FF0E:1::1表示加入FF0E:1::1这个组
EX: null表示接收任意组播源发送过来的组播数据,不拒绝任何指定源发送过来的数据
G:FF0E:1::1表示加入FF0E:1::1这个组
EX:2001:1::1表示除了不接受2001:1::1这个组播源发送过来的数据,其他的都接收
G:FF0E:2::2:表示加入FF0E:2::2这个组
IN:2001:2::1表示指定接收2001:2::1这个组播源发送过来的组播数据
5. MLD SSM Mapping
SSM称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。 如果成员主机上运行MLDv2,可以在MLDv2 报告报文中直接指定组播源地址。但是某些情况下,用户主机只能 运行MLDv1,为了使其也能够使用 SSM 服务,路由器上需要提供MLD SSM Mapping 功能
5.1 MLD SSM Mapping的配置
文章来源:https://www.toymoban.com/news/detail-478866.html
文章来源地址https://www.toymoban.com/news/detail-478866.html
到了这里,关于MLD(组播侦听发现协议)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!