配置 MLD
了解 MLD
组播侦听器发现 (MLD) 协议管理组播组中主机和路由器的成员身份。IP 版本 6 (IPv6) 组播路由器使用 MLD 来了解其连接的每个物理网络哪些组具有感兴趣的侦听器。每个路由设备都维护一个主机组播地址列表,其中包含每个子网的侦听器,以及每个地址的计时器。但是,路由设备不需要知道每个侦听器的地址,只需要知道每个主机的地址。路由设备为其使用的组播路由协议提供地址,从而确保组播数据包传递到存在相关侦听器的所有子网。这样,MLD 被用作协议无关组播 (PIM) 协议的传输。
MLD 是 IPv6 不可或缺的一部分,必须在需要接收 IP 组播流量的所有 IPv6 路由设备和主机上启用。Junos OS 支持 MLD 版本 1 和 2。特定于源的组播 (SSM) 包含和排除模式支持版本 2。
在包含模式下,接收方指定要从中接收组播组流量的一个或多个源。排除模式的工作方式与包含模式相反。它允许接收方指定它不想从中接收组播组流量的一个或多个源。
对于每个连接的网络,组播路由设备可以是查询器,也可以是非查询器。查询器路由设备(通常每个子网一个)通过传输 MLD 查询来请求组成员身份信息。当主机向查询器路由设备报告它有感兴趣的侦听器时,查询器路由设备会通过接收方(主机)的指定路由器 (DR) 将成员身份信息转发到集合点 (RP) 路由设备。这将构建集合点树 (RPT),将主机与感兴趣的侦听器连接到 RP 路由设备。RPT 是发送方用于将信息传输到感兴趣的侦听器的初始路径。非查询器路由设备不会在子网上传输 MLD 查询,但如果查询器路由设备发生故障,则可以传输 MLD 查询。
所有 MLD 配置的路由设备都作为每个附加子网上的查询器路由设备启动(请参阅 图 1)。右侧的查询器路由设备是接收方的 DR。

为了选择查询器路由设备,路由设备将交换包含其 IPv6 源地址的查询消息。如果路由设备听到的查询消息的 IPv6 源地址在数值上低于其自己选择的地址,则该消息将变为非查询器。 在图 2 中,左侧路由设备的源地址在数值上低于右侧的源地址,因此成为查询器路由设备。
在 MLD 的实际应用中,子网上的多个路由设备是非查询器。如果选定的查询器路由设备发生故障,查询消息将在其余路由设备之间交换。具有最低 IPv6 源地址的路由设备将成为新的查询器路由设备。IPv6 邻居发现协议 (NDP) 实施会丢弃在目标链路层地址选项中具有广播或组播地址的传入邻居声明 (NA) 消息。RFC 2461 建议此行为。

查询器路由设备在 链路范围全节点 组播地址 FF02::1 上以较短的间隔向所有连接的子网发送常规 MLD 查询,以请求组成员身份信息(请参阅 图 3)。查询消息中是 最大响应延迟 值,指定主机使用报告消息响应的最大允许延迟。

如果感兴趣的侦听器连接到接收查询的主机,则主机会向路由设备发送包含主机 IPv6 地址的报告(请参阅 图 4)。如果报告的地址尚未在路由设备的具有相关侦听器的组播地址列表中,则该地址将添加到列表中,并为该地址设置计时器。如果地址已在列表中,则会重置计时器。主机的地址将传输到 PIM 域中的 RP。

如果主机没有感兴趣的组播侦听器,它将向查询器路由设备发送完成消息。收到后,查询器路由设备会向主机的组播地址发出特定于组播地址的查询,其中包含最后一个 侦听器查询间隔 值。如果路由设备未收到来自组播地址的报告,则会从列表中删除组播地址,并通知 PIM 域中的 RP 将其删除(请参阅 图 5)。

如果查询器路由设备未收到已完成消息,则查询器路由设备将继续发送组播地址特定的查询。如果收到上次报告时为地址设置的计时器过期,则查询器路由设备会假定该子网上不再有感兴趣的侦听器,从列表中删除组播地址,并通知 PIM 域中的 RP 将其删除(请参阅 图 6)。

参见
配置 MLD
要配置组播侦听器发现 (MLD) 协议,请包含以下 mld
语句:
mld { accounting; interface interface-name { disable; (accounting | no-accounting); group-policy [ policy-names ]; immediate-leave; oif-map [ map-names ]; passive; ssm-map ssm-map-name; static { group multicast-group-address { exclude; group-count number; group-increment increment; source ip-address { source-count number; source-increment increment; } } } version version; } maximum-transmit-rate packets-per-second; query-interval seconds; query-last-member-interval seconds; query-response-interval seconds; robust-count number; }
您可以在以下层次结构级别包含此语句:
[edit protocols]
[edit logical-systems logical-system-name protocols]
默认情况下,当您配置协议无关组播 (PIM) 或距离矢量组播路由协议 (DVMRP) 时,将在所有广播接口上启用 MLD。
启用 MLD
组播侦听器发现 (MLD) 协议通过在子网上建立、维护和删除组来管理组播组。组播路由设备使用 MLD 来了解哪些组在其连接的每个物理网络上都有成员。必须启用 MLD,路由器才能接收 IPv6 组播数据包。只有 IPv6 网络才需要 MLD,因为在 IPv4 网络中处理组播的方式不同。配置 PIM 时,将在配置 PIM 的所有 IPv6 接口和所有 IPv6 广播接口上启用 MLD。
MLD 为组播侦听器和路由器指定不同的行为。当路由器也是侦听器时,路由器会响应自己的消息。如果路由器对同一链路具有多个接口,则只需对其中一个接口执行路由器行为。另一方面,侦听器必须在连接到潜在组播流量接收方的所有接口上执行侦听器行为。
如果 MLD 未在接口上运行(因为接口上未配置 PIM 和 DVMRP),或者因为接口上显式禁用了 MLD),则可以显式启用 MLD。
要显式启用 MLD,请执行以下操作:
参见
修改 MLD 版本
默认情况下,路由器支持 MLD 版本 1 (MLDv1)。要使路由器仅将 MLD 版本 2 (MLDv2) 用于特定于源的组播 (SSM),请包含该 version 2
语句。
如果在单个接口层次结构级别配置 MLD 版本设置,它将覆盖使用该语句配置 interface all
IGMP 版本。
如果在静态配置的组播组中指定了源地址,则必须将版本设置为 MLDv2。
要将 MLD 接口更改为版本 2:
参见
修改 MLD 主机-查询消息间隔
MLD 的目标是使路由器与整个子网的 IPv6 组成员身份保持最新状态。路由器不需要知道所有成员是谁,只需要知道成员存在。每个主机都会跟踪订阅了哪些组播组。在每个链路上,一个路由器被选为查询器。MLD 查询器路由器定期在每个连接的网络上发送常规主机查询消息以请求成员信息。这些消息请求组成员身份信息,并发送到 链路范围全节点 地址 FF02::1。常规主机查询消息具有最长响应时间,您可以通过配置查询响应间隔来设置该响应时间。
查询响应超时、查询间隔和稳健性变量是相关的,因为它们都是用于计算组播侦听器间隔的变量。组播侦听器间隔是组播路由器确定子网上不再存在主机组成员之前必须经过的秒数。组播侦听间隔计算为 (稳健性变量 x 查询间隔) + (1 x 查询-响应-间隔)。如果在组播侦听器间隔到期之前未收到特定组的报告,路由设备将停止将该组的远程组播数据包转发到连接的网络上。
默认情况下,主机查询消息每 125 秒发送一次。您可以更改此间隔以更改子网上发送的 MLD 消息数。
修改查询间隔:
参见
修改 MLD 查询响应间隔
查询响应间隔是从查询器路由器发送主机查询消息和收到来自主机的响应之间可以经过的最长时间。您可以更改此间隔来调整子网上 MLD 消息的突发峰值。设置较大的间隔以使流量的突发性降低。
查询响应超时、查询间隔和稳健性变量是相关的,因为它们都是用于计算组播侦听器间隔的变量。组播侦听器间隔是组播路由器确定子网上不再存在主机组成员之前必须经过的秒数。组播侦听间隔计算为 (稳健性变量 x 查询间隔) + (1 x 查询-响应-间隔)。如果在组播侦听器间隔到期之前未收到特定组的报告,路由设备将停止将该组的远程组播数据包转发到连接的网络上。
默认查询响应间隔为 10 秒。您可以在小数点右侧配置最多一位的亚秒间隔。可配置范围为 0.1 到 0.9,然后以 1 秒为间隔 1 到 999,999。
修改查询响应间隔:
参见
修改 MLD 最后成员查询间隔
最后一个成员查询间隔(也称为最后一个侦听器查询间隔)是特定于组的查询消息之间的最长时间量,包括为响应 在链路范围所有路由器 地址 FF02::2 上发送的已完成消息而发送的消息。您可以降低此间隔,以减少路由器检测组最后一个成员丢失所需的时间。
当用作查询器的路由设备收到来自主机的离开组(完成)消息时,路由设备会向该组发送多个特定于组的查询。查询器发送特定数量的此类查询,并以特定间隔发送这些查询。发送的查询数称为最后一个侦听器查询计数。发送查询的时间间隔称为上次侦听器查询间隔。这两个设置都是可配置的,因此允许您调整离开延迟。IGMP 离开延迟是请求离开组播组和收到组播组的最后一个数据字节之间的时间。
最后一个侦听器查询计数 x(次)最后一个侦听器查询间隔 =(等于)路由设备确定组中最后一个成员是否已离开组并停止转发组流量所需的时间。
默认的最后一个侦听器查询间隔为 1 秒。您可以在小数点右侧配置最多一位的亚秒间隔。可配置范围为 0.1 到 0.9,然后以 1 秒为间隔 1 到 999,999。
要修改此间隔:
您可以通过配置可靠性变量来配置最后一个成员查询计数。两者始终相等。
参见
为 MLD 指定立即离开主机移除
立即休假设置对于最小化 MLD 成员资格的休假延迟非常有用。启用此设置后,路由设备会在最后一个主机离开组播组后立即离开组播组。
立即离开设置启用主机跟踪,这意味着设备会跟踪发送加入消息的主机。这允许 MLD 确定最后一个主机何时为组播组发送留言。
启用立即离开设置后,设备将从转发表条目中删除接口,而无需先向接口发送特定于 MLD 组的查询。将从 MLD 留下消息中指定的组播组的组播树中修剪接口。立即离开设置可确保对交换网络上的主机进行最佳带宽管理,即使同时使用多个组播组也是如此。
当禁用立即休假并且一台主机发送离开组消息时,路由设备首先发送组查询以确定另一个接收方是否响应。如果没有接收方响应,路由设备将从组播组中删除接口上的所有主机。默认情况下,MLD 版本 1 和 MLD 版本 2 的立即休假都是禁用的。
尽管在启用立即离开时为 IGMPv2 和 MLDv1 启用了主机跟踪,但仅当接口上有一个主机时,才对这些版本使用立即保留。原因是 IGMPv2 和 MLDv1 使用报告抑制机制,即接口上只有一个主机发送组加入报告以响应成员查询。其他感兴趣的主机禁止显示其报告。此机制的目的是避免同一组的大量报告。但它也会干扰主机跟踪,因为路由器只知道一个感兴趣的主机,而不知道其他主机。
要启用立即休假:
在 MLD 接口级别过滤不需要的 MLD 报告
假设您需要限制可以加入特定多播组的子网。该 group-policy
语句使您能够在接口级别过滤不需要的 MLD 报告。
group-policy
在路由器上启用语句后,路由器收到 MLD 报告后,会将组与指定的组策略进行比较,并执行该策略中配置的操作(例如,如果策略与定义的地址或网络匹配,则拒绝报告)。
通过使用策略的route-filter
语句匹配组地址,可以定义策略以仅匹配 MLD 组地址(对于 MLDv1)。通过使用策略的语句匹配组地址,并使用策略的route-filter
source-address-filter
语句匹配源地址,定义策略以匹配 MLD(源、组)地址(对于 MLDv2)。
要过滤不需要的 MLD 报告:
参见
示例:修改 MLD 鲁棒性变量
此示例说明如何在组播域中配置和验证 MLD 稳健性变量。
要求
准备工作:
配置路由器接口。
配置内部网关协议或静态路由。请参阅 Junos OS 路由协议库了解路由设备。
启用 IPv6 单播路由。请参阅 Junos OS 路由协议库了解路由设备。
启用 PIM。请参阅 PIM 概述。
概述
可以微调 MLD 稳健性变量,以允许子网上的预期数据包丢失。增加可靠计数允许更多的数据包丢失,但会增加子网的离开延迟。
稳健性变量的值用于计算以下 MLD 消息间隔:
组成员间隔 — 组播路由器确定网络上不再有组成员之前必须经过的时间量。此区间的计算方法如下:(稳健性变量 x 查询间隔)+ (1 x 查询响应区间)。
其他查询器存在间隔 — 组播路由器确定不再有其他组播路由器作为查询器之前必须经过的时间量。此区间的计算方法如下:(稳健性变量 x 查询区间)+(0.5 x 查询-响应区间)。
最后一个成员查询计数 — 在路由器假定组中没有本地成员之前发送的特定于组的查询数。默认数字是稳健性变量的值。
默认情况下,稳健性变量设置为 2。该数字可以从 2 到 10。如果预计子网会丢失数据包,则可能需要增加此值。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set protocols mld robust-count 5
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要更改稳健性变量的值,请执行以下操作:
验证
要验证配置是否正常工作,请检查 show mld interfaces 命令输出中的 MLD 稳健性计数字段。
限制最大 MLD 消息速率
您可以更改路由器在 1 秒内传输的最大 MLD 数据包数的限制。
在具有大量接口参与 MLD 的路由器上,增加每秒传输的最大 MLD 数据包数可能很有用。
要更改路由器在 1 秒内可以传输的最大 MLD 数据包数的限制,请包含 maximum-transmit-rate
该语句并指定每秒要传输的最大数据包数。
启用 MLD 静态组成员资格
创建 MLD 静态组成员
您可以创建 MLD 静态组成员身份,以在没有接收方主机的情况下测试组播转发。启用 MLD 静态组成员身份时,数据将转发到接口,该接口不会从下游主机接收成员资格报告。
MLD 静态组成员身份不支持服务等级 (CoS) 调整。
在要接收组播流量的接口上配置静态组时,可以指定要自动创建的静态组的数量。
在此示例中,您将创建静态组 ff0e::1:ff05:1a8d。
自动创建静态组
创建 MLD 静态组成员资格以在要接收组播流量的接口上测试组播转发时,可以指定自动创建多个静态组。当您想要测试转发到多个接收器而不必单独配置每个接收器时,这很有用。
在此示例中,您将创建三个组。
自动递增群组地址
在要接收组播流量的接口上配置静态组并指定要自动创建的静态组数量时,您还可以将组地址配置为自动递增一定数量的地址。
在此示例中,您将创建三个组,并为每个组增加组地址 2。
指定组播源地址(在 SSM 模式下)
在要接收组播流量的接口上配置静态组,并且网络在特定于源的组播 (SSM) 模式下运行时,您可以指定要接受的组播源地址。
如果在 SSM 范围内指定组地址,则还必须指定源。
如果在静态配置的组播组中指定了源地址,则必须在接口上将 MLD 版本设置为 MLDv2。MLDv1 是默认值。
在此示例中,您将创建组 ff0e::1:ff05:1a8d 并接受 IPv6 地址 fe80::2e0:81ff:fe05:1a8d 作为唯一源。
自动指定组播源
在要接收组播流量的接口上配置静态组时,可以指定要自动接受的组播源数量。
在此示例中,您将创建静态组 ff0e::1:ff05:1a8d 并接受 fe80::2e0:81ff:fe05:1a8d、fe80::2e0:81ff:fe05:1a8e 和 fe80::2e0:81ff:fe05:1a8f 作为源地址。
自动递增源地址
在要接收组播流量的接口上配置静态组并指定要自动接受的组播源数量时,您还可以指定接受的每个源的地址递增数量。
在此示例中,您将创建静态组 ff0e::1:ff05:1a8d 并接受 fe80::2e0:81ff:fe05:1a8d、fe80::2e0:81ff:fe05:1a8f 和 fe80::2e0:81ff:fe05:1a91 作为源。
排除组播源地址(在 SSM 模式下)
在要接收组播流量的接口上配置静态组,并且您的网络在特定于源的组播 (SSM) 模式下运行时,您可以指定排除某些组播源地址。
默认情况下,在静态组中配置的组播源地址在包含模式下运行。在包含模式下,从配置的源地址接受组的组播流量。您还可以将静态组配置为在排除模式下运行。在排除模式下,接受来自配置的源地址以外的任何地址的组播流量。
如果在静态配置的组播组中指定了源地址,则必须在接口上将 MLD 版本设置为 MLDv2。MLDv1 是默认值。
在此示例中,您排除了地址 fe80::2e0:81ff:fe05:1a8d 作为组 ff0e::1:ff05:1a8d 的源。
类似的配置也可用于使用 IGMP 协议的 IPv4 组播流量。
示例:记录 MLD 加入和离开事件
此示例说明如何通过配置路由设备来记录 MLD 加入和离开事件,来确定网络中是否需要 MLD 调谐。
要求
准备工作:
配置路由器接口。
配置内部网关协议或静态路由。请参阅 Junos OS 路由协议库了解路由设备。
启用 IPv6 单播路由。请参阅 Junos OS 路由协议库了解路由设备。
启用 PIM。请参阅 PIM 概述。
概述
表 1 描述了可记录的 MLD 加入和离开事件。
ERRMSG 标签 |
定义 |
---|---|
RPD_MLD_JOIN |
记录 MLD 加入事件。 |
RPD_MLD_LEAVE |
记录 MLD 离开事件。 |
RPD_MLD_ACCOUNTING_ON |
记录在 MLD 接口上启用 MLD 记帐的时间。 |
RPD_MLD_ACCOUNTING_OFF |
记录在 MLD 接口上禁用 MLD 记帐的时间。 |
RPD_MLD_MEMBERSHIP_TIMEOUT |
记录 MLD 成员资格超时事件。 |
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set protocols mld interface fe-0/1/0.2 accounting set system syslog file mld-events any info set system syslog file mld-events match ".*RPD_MLD_JOIN.* | .*RPD_MLD_LEAVE.* | .*RPD_MLD_ACCOUNTING.* | .*RPD_MLD_MEMBERSHIP_TIMEOUT.*" set system syslog file mld-events archive size 100000 set system syslog file mld-events archive files 3 set system syslog file mld-events archive transfer-interval 1440 set system syslog file mld-events archive archive-sites "ftp://user@host1//var/tmp" password "anonymous" set system syslog file mld-events archive archive-sites "ftp://user@host2//var/tmp" password "test"
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要配置 MLD 加入和离开事件的记录:
全局或在 MLD 接口上启用计费。此示例显示了接口配置。
[edit protocols mld] user@host# set interface fe–0/1/0.2 accounting
配置要记录的事件,并将事件过滤到具有描述性文件名的系统日志文件中,例如 mld-events。
[edit system syslog file mld-events] user@host# set any info [edit system syslog file mld-events] user@host# set match “.*RPD_MLD_JOIN.* | .*RPD_MLD_LEAVE.* | .*RPD_MLD_ACCOUNTING.* | .*RPD_MLD_MEMBERSHIP_TIMEOUT.*”
定期存档日志文件。
本示例在文件达到 100 KB 时每 24 小时(1440 分钟)轮换一次文件,并保留三个文件。
[edit system syslog file mld-events] user@host# set archive size 100000 [edit system syslog file mld-events] user@host# set archive files 3 [edit system syslog file mld-events] user@host# set archive archive-sites “ftp://user@host1//var/tmp” password “anonymous” [edit system syslog file mld-events] user@host# set archive archive-sites “ftp://user@host2//var/tmp” password “test” [edit system syslog file mld-events] user@host# set archive transfer-interval 1440 [edit system syslog file mld-events] user@host# set archive start-time 2011–01–07:12:30
如果完成设备配置,请提交配置。
[edit system syslog file mld-events]] user@host# commit
验证
您可以通过运行 file show 命令来查看系统日志文件。
user@host> file show mld-events
通过运行 监视器启动 和 监视器停止 命令,可以在将条目添加到文件中时监视系统日志文件。
user@host> monitor start mld-events
*** mld-events *** Apr 16 13:08:23 host mgd[16416]: UI_CMDLINE_READ_LINE: User 'user', command 'run monitor start mld-events ' monitor
配置逻辑接口上的 MLD 组播组连接数量
通过该 group-limit
语句,您可以限制逻辑接口的 MLD 组播组联接数量。在运行 MLD 版本 2 的路由器上启用此语句时,将在收到组报告时应用限制。一旦达到组限制,后续的加入请求将被拒绝。
为 MLD 组播组配置限制时,请记住以下几点:
每个任意源组 (*,G) 计为一个组计入限制。
每个特定于源的组 (S,G) 计为一个组,达到限制。
MLDv2 排除模式下的组计入限制。
多个特定于源的群组分别计入群组限制,即使它们适用于同一群组也是如此。例如,(S1, G1) 和 (S2, G1) 将计为配置限制的两个组。
任意源组和特定于源的组的组合单独计入组限制,即使它们用于同一组也是如此。例如,(*, G1) 和 (S, G1) 将计为配置限制的两个组。
在网络上配置和提交低于网络上现有限制的组限制会导致从配置中删除所有组。然后,组必须请求重新加入网络(最多不超过新配置的组限制)。
您可以使用动态配置文件动态限制 MLD 逻辑接口上的组播组。有关创建动态配置文件的详细信息,请参阅 Junos OS 订阅者管理和服务库 。
从 Junos OS 12.2 开始,您可以选择为逻辑接口上接收的 MLD 组播组加入配置系统日志警告阈值。查看系统日志消息以进行故障排除并检测接口上是否收到过多的 MLD 组播组联接很有帮助。这些日志消息传达何时超过配置的组限制、何时超过配置的阈值以及组数何时降至配置的阈值以下。
通过该 group-threshold
语句,可以配置记录警告消息的阈值。范围为 1% 到 100%。警告阈值是组限制的百分比,因此您必须配置语句以 group-limit
配置警告阈值。例如,当组数超过配置的警告阈值,但仍低于配置的组限制时,组播组将继续被接受,并且设备会记录警告消息。此外,当组数降至配置的警告阈值以下时,设备会记录警告消息。您可以通过配置语句进一步 log-interval
指定日志消息之间的时间量(以秒为单位)。范围为 6 到 32,767 秒。
您可以考虑限制日志消息,因为在配置的阈值之后添加的每个条目和在配置的限制之后拒绝的每个条目都会导致记录警告消息。通过配置日志间隔,您可以限制为 MLD 组播组加入生成的系统日志警告消息的数量。
要限制 MLD 逻辑接口上的组播组联接,请执行以下操作:
要确认您的配置,请使用 show protocols mld
命令。要验证接口上 MLD 的操作(包括配置的组限制以及可选的警告阈值和日志消息之间的间隔),请使用 show mld interface
命令。
禁用 MLD
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。