datacom-MLD

MLD

  • 概述
    • 前言
      • MLD(Multicast Listener Discovery) 组播侦听发现协议,是IPv6路由器所使用的一种协议,用以发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在,并且能明确发现这些邻居节点所感兴趣的组播组地址。
      • 本章介绍不同版本MLD协议的基本原理及相关配置命令。
    • 目标
      • 了解MLD的作用及基本原理
      • 了解MLDv1, v2之间的区别
      • 了解SSM Mapping的作用
      • 掌握MLD的基本配置命令
    • MLD协议概述
      • MLD协议概述
        • MLD(Multicast Listener Discovery)组播侦听发现协议,用于IPv6组播中组成员管理。
          • 组播侦听发现协议MLD(Multicast Listener Discovery)用于IPv6组播中的组成员管理
          • 其基本原理和功能与IGMP相似。
          • MLD的目的是使能每个IPv6路由器发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在
          • 并且能明确发现这些邻居节点所感兴趣的组播地址。
          • 然后提供这些消息给路由器所使用的组播路由协议
          • 以确保组播数据转发至存在接收者的所有链接。
          • MLD是非对称协议
          • 明确了组播侦听者与路由器的不同行为。
          • 对路由器本身正在侦听的组播地址来说,路由器扮演协议的两种角色,包括对自己的消息作出回应
          • 如果路由器有不止一个接口在同一网络上,它只需要在其中一个接口上运行此协议。
          • 对侦听者来说,则必须在所有接口运行此协议以便上层协议从接口接收所需要的组播数据。
          • 所有MLD版本都支持ASM (Any-Source Multicast)模型。
          • MLDv2可以直接应用于SSM (Source-Specific Multicast) 模型
          • 而 MLDv1 则需要 SSM-Mapping 技术的支持。
        • MLD有两个版本
          • MLDv1 版本(由 RFC 2710 定义),对应 IGMPv2。
          • MLDv2 版本(由 RFC 3810 定义),对应 IGMPv3。
        • MLDv1主要基于查询和响应机制完成对IPv6组播组成员的管理。
        • MLDv2的原理与 MLDv1基本相同,并新增了以下特性
          • 对 IPv6 组播源的过滤;
          • IPv6 组播组状态跟踪;
          • 接收者主机的状态侦听。
        • MLD协议用途
          • 组播侦听发现协议MLD用于IPv6路由器在其直连网段上发现组播侦听者。
          • 路由器通过MLD协议,可以了解到在自己的直连网段上是否有组播组的侦听者,并在数据库里做相应记录。同时,路由器还维护与这些组播地址相联系的定时器信息。
          • 配置MLD的路由器使用IPv6单播链路本地地址作为源地址发送MLD报文。
          • MLD使用ICMP来携带消息所有的MLD报文被限制在本地链路上,跳数为1。
          • 组播侦听者是希望接收组播数据的主机节点。
        • MLDv1
          • MLDv1报文格式

 

  • 类型(Type)
    • 组播侦听查询(类型值=130),可分为两种子类型:
      • 普遍查询:用于获得在所连网络上具有侦听者的组播地址。
      • 特定组播地址查询:用于获得在所连网络上对一特定组播地址是否存在侦听者。
    • 组播侦听报告(类型值=131)
    • 组播侦听离开( MulticastListener Done)(类型值=132)
  • 代码(Code)
    • 发送时设置为1;接收时忽略。
  • 校验和(Checksum)
    • 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。
  • 最大响应延迟(Maximum Response Delay)
    • 最大响应延迟值只在查询报文消息中有意义,它指定了发送响应报文的最大允许时间延迟,单位为毫秒。
    • 在其他报文消息中,发送时设置为零,接收时忽略。
  • 保留(Reserved)
    • 发送者设为零
    • 接收者忽略。
  • 组播地址(Multicast Address)
    • 在查询报文中,当发送普遍查询时,组播地址值设为零;
    • 当发送特定组查询时,设为特定的IPv6组播地址。
    • 在报告或离开报文中,组播地址值分别设为报文发送者要侦听或者停止侦听的特定IPv6组播地址。
  • 查询器选举机制

 

  • 所有MLD路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送MLD普遍组查询(GeneralQuery)报文(目的地址为 FF02::1)。
  • 本地网段中的其它MLD路由器在收到该报文后,将报文的源IPv6地址与自己的接口地址作比较。通过比较,IPv6地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier)。
  • 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器 OtherQuerierPresent Timer)。在定 时器超时前,如果收到了来自查询器的 MLD查询报文,则重置该定时器;否则,就认为原查询器失效, 并发起新的查询器选举过程。
  • 组成员加入过程

 

  • VRP遵循RFC2710来实现MLDv1。MLDv1基于查询/响应(Query/Response)机制完成组播组成员的管理。
  • MLDv1有两种类型的查询消息(QueryMessage):
    • 普遍查询(GeneralQuery):查询直连链路上是否有组播组的侦听者。
    • 指定组播组查询(Multicast-address-specificQuery):查询直连链路上是否有某个指定组播地址的侦听者。
  • 如果共享网段上存在配置MLD的多个组播路由器,将触发查询路由器(Querier)选举机制,由网段上IPv6地址最小的路由器充当查询器(也称MLD查询器),其他路由器充当非查询器(Non-Querier)。
  • 以普遍查询为例,主机加入组播组的基本过程是:
    • 1、MLD查询器周期性地向共享网段上的所有本地链路主机以组播方式(目的地址为FF02::1)发送普遍查询消息。
    • 2、网段上的所有主机都接收到该普遍查询消息。如果主机HostB和HostC希望加入某组播组G1,则设置定时器延时来响应。
    • 3、希望加入的主机在定时器超时后以组播方式向网段上的所有主机和路由器发送报告消息(ReportMessage)来响应查询,此消息包含组播组G1的地址信息。
    • 4、网段上的所有主机和路由器接收到此报告消息后,也就获得了关于G1的组播信息。此时网段中其他也希望加入组播组G1的主机将不再发送相同的报告消息,如果主机HostA希望加入另一个组播组G2,就会发送包含组播组G2地址的报告消息以响应普遍查询消息来加入G2。
    • 5、在查询/报告过程后,MLD查询器可以了解到在自己的直连网段上是否有组播组G1的接收者,生成形式为(*,G1)组播路由项,*表示任意的组播源。
    • 6、通过组播路由机制,MLD查询器接收到组播源发来的组播信息。如果直连网段上有接收者,就在网段上转发此数据,加入组播组的主机接收该数据。
  • 组成员离开过程

 

  • 当主机想离开组播组,就以组播地址(目的地址是FF02::2)向链路上发送一个离开消息(DoneMessage),并且在其组播地址域携带要停止侦听的地址。
  • 当查询器从链路上收到离开消息时,如果要离开的组播报文地址在此链路上查询器的侦听者地址列表中,查询器就会发送LastListener Query Count次组播地址特定查询,每次间隔时间为LastListener Query Interval。组播地址特定查询一般将LastListener Query Interval设定为MaximumResponse Delay,如果最后查询的响应延迟时间过后,没有此组播地址的报告在此链路上发送给查询器,因此此地址就从侦听者列表中删除。
  • MLDv2
    • MLDv2消息报文格式
      • MLDv2查询消息报文格式

 

  • 头192bits部分是和MLDv1的消息格式相同的部分。
  • 标志位S(SuppressRouter-side Processing):
    • 表示路由器接收到查询消息后是否对定时器更新进行抑制。
  • 查询器的健壮性变量QRV(Querier’sRobustness Variable):
    • 健壮性变量值QRV是最后侦听者查询次数的缺省值,也就是路由器在确定没有剩余侦听者存在之前而发送的特定组播地址查询的次数。
  • 查询器发送普遍查询消息的查询间隔QQIC(Querier’sQuery Interval Code)。
  • 源数目(Numberof Sources):
    • 普遍查询或指定组播组查询中,此字段设置为0。
    • 指定组播源-组查询中,此字段表示查询消息中包含的源地址个数。
  • 源地址(SourceAddress):
    • 指定查询的组播源地址。
  • MLDv2报告消息报文格式

 

  • 主机通过发送MLD报告消息来汇报当前的组播侦听状态。
  • 类型(Type):
    • Type=143
  • 保留(Reserved):
    • 发送时设置为0;接收时忽略。
  • 校验和(Checksum):
    • 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。
  • 组播地址记录的个数(Number of Multicast Address Records )
  • 组播地址记录(Multicast Address Records ):
    • 表示主机在接口上侦听到的每个组播地址信息,包括记录类型、组播地址、源地址等。
  • 指定组播源-组查询

 

  • MLDv2兼容MLDv1,原理与MLDv1相同。MLDv2支持源列表和过滤模式,可以指定源地址加入,用于实现SSM。
  • 对IPv6 组播源的过滤:MLDv2是在指定组播组查询的基础上增加关于组播源的过滤模式:Include或Exclude。
    • 如果主机加入组播组时,只要求接收某些指定源如S1、S2、……发来的组播组报文,MLD报告消息中可以设置为IncludeSources (S1, S2, …)。
    • 如果主机加入组播组时,拒绝接收某些指定源如S1、S2、……发来的组播报文,则可以设置从指定源外的源地址接收组播组报文,MLD报告消息中可以设置为ExcludeSources (S1, S2, …)。
  • IPv6组播组状态跟踪:运行MLDv2协议的组播路由器按每条直连链路上的组播地址(permulticast address per attached link)来保持组播组的状态。组播组状态包括:
    • 过滤模式:保持对Include或Exclude的状态跟踪。
    • 源列表:保持对新增或删除组播源的跟踪。
    • 定时器:例如表示组播地址超时后切换到Include模式的过滤定时器、关于源记录的源定时器等。
  • 接收者主机的状态侦听:运行MLDv2协议的组播路由器通过侦听接收者主机的状态,记录和维护网段上加入到源-组的主机的信息。
  • MLD配置实例
    • 举例

 

  • 接收者通过组播方式接收视频点播信息,不同组织的接收者组成末梢网络,每个末梢网络中都存在一到多台接收者Host。
  • HostA和HostC为两个末梢网络中的组播信息接收者。PIM网络中的RouterA通过GE1/0/0接口连接末梢网络N1,通过POS2/0/0接口连接PIM网络中的其它设备;RouterB和RouterC路由器通过各自的GE1/0/0接口连接末梢网络N2,分别通过POS2/0/0接口连接PIM网络中的其它设备。
  • RouterA和末梢网络N1之间运行MLDv1。
  • RouterB、RouterC和末梢网络N2之间运行MLDv2。
  • 配置
    • 配置RA

 

  • system-view /进入系统视图
  • multicast ipv6 routing-enable /使能IP组播路由
  • interface interface-type interface-number /进入接口视图
  • mld enable /使能MLD
    • 配置了MLD的路由器必须在接口上使能MLD来侦听所有的IPv6组播地址。
    • 在需要建立和维持组播组成员关系的接口上使能MLD。
    • 查询器在直连网段上周期性发送MLD查询消息来维持组播侦听者的信息。当接收到组成员报告消息时,组播路由器刷新相关的组成员信息。
  • mld /进入MLD视图
  • version { 1| 2} /配置全局性MLD版本
  • interface interface-type interface-number /进入接口视图
  • mld version { 1| 2} /配置接口级IGMP版本
    • MLD版本号的配置是可选的。缺省情况下,使用MLDv2版本。
    • 当接口下没有配置新值时,缺省采用MLD视图下配置的值;假如接口下配置了新值,则接口视图下的取值优先被选择。
  • 配置RB

 

  • 缺省情况下使用MLDv2。
  • RouterC的配置与RouterB类似。
  • 在这样一个网络上需要选举查询器,那一台路由器将被选举成查询器呢?
  • 查看查询器
    • 可以看到,Router B是查询器,这是因为同一网段上组播路由器Router B的GE1/0/0的IPv6地址较小

 

  • SSMMapping
    • 概述

 

  • SSM(Source-Specific Multicast)称为指定源组播
  • 要求路由器能了解成员主机加入组播组时所指定的组播源。
  • 如果成员主机上运行MLDv2,可以在MLDv2 报告报文中直接指定组播源地址。
  • 但是某些情况下,用户主机只能 运行MLDv1,为了使其也能够使用 SSM 服务,路由器上需要提供MLD SSM Mapping 功能。
  • 配置完成后,当 RouterA 收到来自主机的 MLDv1 报告报文时,首先检查该报文中所携带的 IPv6 组播组地址 G, 然后根据检查结果的不同分别进行处理
    • 如果G 不在IPv6 SSM 组地址范围内,则提供ASM 组播服务。
    • 如果G 在IPv6 SSM 组地址范围内:
    • 若RouterA上没有 G对应的 MLDSSM Mapping 规则,则无法提供 SSM组播服务,丢弃该报文;
    • 若 RouterA上有 G对应的 MLDSSM Mapping 规则,则依据规则将报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2…))信息,可以提供SSM 组播服务。SSM映射功能使采用MLDv1版本的主机无须升级MLD版本就能顺利接收SSM的数据报文。此功能不影响采用MLDv2的主机
  • 映射策略可以多次配置,实现同一个组到多个源的映射。
  • 在一台路由器上,转发且仅转发映射表中的指定源-组报文。
  • 配置MLD SSM Mapping
    • 在配置SSM Mapping之前,需完成以下任务
      • 配置某单播路由协议,使整个组播域连通
      • 使能IPv6组播路由
    • 数据准备

 

  • 在配置SSM Mapping之前,需准备数据。
  • 执行命令
    • 执行命令system-view,进入系统视图。
    • 执行命令interfaceinterface-type interface-number,进入接口视图。
    • 执行命令mldenable,使能MLD功能。
    • 执行命令mldversion 2,配置MLD版本号为2。为保证该网段内运行任意版本MLD的用户主机都能得到SSM服务,建议在路由器接口上运行MLDv2。
    • 执行命令mldssm-mappingenable,使能SSMMapping功能。
    • 执行命令system-view,进入系统视图。
    • 执行命令mld,进入MLD视图。
    • 执行命令ssm-mappingipv6-group-address ipv6-group-mask-length ipv6-source-address,配置组到源的映射。多次执行该命令,可以实现同一个组到多个源的映射。
  • 配置MLD SSM Mapping实例

 

  • 使能组播功能,并在主机侧接口上使能MLD功能。
  • 在RouterA上使能组播功能,并在GE1/0/0接口上使能MLD功能,配置MLD版本为1。
  • 思考题
    • MLD的主要功能是什么?
      • 组播侦听发现协议MLD(Multicast Listener Discovery)用于IPv6组播中的组成员管理,其基本原理和功能与IGMP相似。
      • MLD的目的是使能每个IPv6路由器发现在其直连网络上的组播侦听者(即希望接收组播数据的节点)的存在,并且能明确发现这些邻居节点所感兴趣的组播地址。
      • 然后提供这些消息给路由器所使用的组播路由协议,以确保组播数据转发至存在接收者的所有链接。
    • MLDv2和MLDv1有哪些主要区别?
      • MLDv2兼容MLDv1,原理与MLDv1相同。
      • MLDv2支持源列表和过滤模式,可以指定源地址加入,用于实现SSM。
    • SSMMapping的主要作用是什么?
      • 发送MLDv1格式的报告消息的主机,不能接收到SSM组范围内的数据报文。
      • SSM映射功能使采用MLDv1版本的主机无须升级MLD版本就能顺利接收SSM的数据报文。
      • 此功能不影响采用MLDv2的主机
    • 总结
      • MLD的用途
      • MLDv1的工作原理
      • MLDv2的改进
      • SSMMapping的作用

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注