示例:配置 IGMP 侦听
了解组播侦听
网络设备(如路由器)主要在数据包级别或第 3 层运行。其他网络设备(如网桥或 LAN 交换机)主要在帧级别或第 2 层运行。组播功能主要在数据包级别(第 3 层)进行,但有一种方法可以在帧级别将第 3 层 IP 组播组地址映射到第 2 层 MAC 组播组地址。
路由器可以处理第 2 层和第 3 层寻址信息,因为必须处理帧及其地址才能访问内部封装的数据包。路由器可以运行第 3 层组播协议(如 PIM 或 IGMP),并确定将组播内容转发到何处,或者确定接口上的主机何时加入或离开组。但是,作为第 2 层设备,网桥和 LAN 交换机不应访问其帧承载的数据包内的组播信息。
那么,网桥和其他第 2 层设备如何确定接口上的设备何时加入或离开组播树,或者连接的 LAN 上的主机是否希望接收特定组播组的内容?
答案是让第 2 层设备实现组播侦听。组播侦听是一个通用术语,适用于第 2 层设备对第 3 层数据包内容进行“侦听”的过程,以确定采取哪些操作来处理或转发帧。还有更具体形式的窥探,例如 IGMP 窥探或 PIM 窥探。在所有情况下,窥探都涉及配置为在第 2 层运行的设备,该设备可以访问通常“禁止的”第 3 层(数据包)信息。窥探使这些设备中的多播更加高效。
另请参阅
了解 IGMP 侦听
侦听是第 2 层设备(如瞻博网络 MX 系列以太网服务路由器)实施一系列过程以“侦听”第 3 层数据包内容以确定要采取哪些操作来处理或转发帧的通用方法。组播使用更具体形式的侦听,例如 Internet 组成员身份协议 (IGMP) 侦听或协议无关组播 (PIM) 侦听。
第 2 层设备(LAN 交换机或网桥)处理组播数据包和包含这些数据包的帧的方式与第 3 层设备(路由器)处理广播的方式非常相似。因此,第 2 层交换机通过将数据包(帧)的副本转发到处于转发状态的交换机的每个其他网络接口上,来处理具有组播目标媒体访问控制 (MAC) 地址的到达帧。
但是,这种方法(在设备可以发送的任何地方发送多播帧)并不是对网络带宽的最有效利用,特别是对于 IPTV 应用程序。IGMP 侦听功能是“侦听”交换机接口接收的 IGMP 数据包,并构建类似于组播路由器在第 3 层网络中构建的组播数据库。使用此数据库,交换机只能将组播流量转发到具有相关接收器的下游接口上,并且该技术可以更有效地使用网络带宽。
您可以为路由器上的每个网桥配置 IGMP 侦听。没有合格学习的 bridge 实例只有一个学习域。对于具有合格学习的 bridge 实例,窥探将在 bridge 的每个学习域中单独运行。也就是说,IGMP 侦听和组播转发将在网桥的每个学习域中独立进行。
本讨论重点介绍没有合格学习的桥接实例(在设备上形成一个学习域的实例)。因此,提到的所有接口都是网桥或 VPLS 实例的逻辑接口。
在讨论 IGMP 窥探时,几个相关概念很重要:
网桥或 VPLS 实例接口是多播路由器接口或主机端接口。
IGMP 侦听支持代理模式或无代理模式。
使用集成路由和桥接 (IRB) 时,如果路由器是 IGMP 查询器,则在任何第 2 层接口上收到的任何离开消息都将导致所有第 2 层接口上出现特定于组的查询(由于这种做法,可能会在所有第 2 层接口上收到一些相应的报告)。但是,如果某些第 2 层接口也是路由器(第 3 层)接口,则来自其他第 2 层接口的报告和离开将不会在这些接口上转发。
如果 IRB 接口用作组播转发缓存条目中的传出接口(由路由进程确定),则输出接口列表将扩展为相应网桥中第 2 层接口的子集。该子集基于侦听的组播成员身份信息,根据网桥的侦听进程安装的组播转发缓存条目。
如果未配置侦听,则 IRB 输出接口列表将扩展到网桥中的所有第 2 层接口。
Junos OS 不支持虚拟交换机上 VPLS 配置中的 IGMP 窥探。CLI 中不允许使用此配置。
另请参阅
IGMP 侦听接口和转发
IGMP 侦听将设备接口分为组播路由器接口和主机端接口。组播路由器接口是组播路由器方向的接口。如果桥接上的接口至少满足以下条件之一,则将其视为组播路由器接口:
它在桥接实例中静态配置为组播路由器接口。
接口上正在接收 IGMP 查询。
不是多播路由器接口的所有其他接口都被视为主机端接口。
在配置了 IGMP 侦听的桥接接口上接收的任何组播流量都将根据以下规则进行转发:
任何 IGMP 数据包都会发送至路由引擎进行侦听处理。
目标地址为 224.0.0/24 的其他组播流量将泛洪到网桥的所有其他接口上。
其他组播流量将发送至所有组播路由器接口,但仅发送至具有有兴趣接收该组播组的主机的主机端接口。
另请参阅
IGMP 侦听和代理
如果没有代理安排,IGMP 窥探不会生成或引入查询和报告。它只会“监听”从其所有接口(包括多播路由器接口)收到的报告,以构建其状态和组 (S,G) 数据库。
如果没有代理,IGMP 消息将按如下方式处理:
查询 — 在组播路由器接口上收到的所有常规和组特定的 IGMP 查询消息都将转发到网桥上的所有其他接口(组播路由器接口和主机端接口)。
报告 — 在网桥的任何接口上收到的 IGMP 报告将转发至其他组播路由器接口。如果该组存在组播路由条目,则接收接口将添加为该组的接口。此外,还为该接口上的组设置了组计时器。如果此计时器过期(即,在 IGMP 组计时器期间没有此组的报告),则该接口将作为该组的接口删除。
Leave — 在网桥的任何接口上收到的 IGMP 离开消息将转发至网桥上的其他组播路由器接口。Leave Group 消息可缩短当主机组中不再有任何成员时多播路由器停止转发多播流量所需的时间。
代理侦听可减少发送到 IGMP 路由器的 IGMP 报告数量。
配置代理侦听后,IGMP 路由器无法执行主机跟踪。
作为其主机端接口的代理,代理模式下的 IGMP 侦听会回复从组播路由器接口上的 IGMP 路由器接收的查询。在主机端接口上,代理模式下的 IGMP 侦听行为类似于 IGMP 路由器,并在这些接口上发送常规查询和特定于组的查询。
IGMP 侦听仅直接生成特定于组的查询。从多播路由器接口接收的常规查询将泛洪到主机端接口。
IGMP 窥探生成的所有查询都使用 0.0.0.0 作为源地址发送。此外,IGMP 侦听生成的所有报告都以 0.0.0.0 作为源地址发送,除非有配置的源地址可供使用。
代理模式在多播路由器接口上的工作方式与在主机端接口上不同。
另请参阅
组播路由器接口和 IGMP 侦听代理模式
在多播路由器接口上,为了响应 IGMP 查询,代理模式下的 IGMP 侦听会发送报告,其中包含有关在网桥的所有主机端接口上学习的组的聚合信息。
除了回复查询外,代理模式下的 IGMP 侦听还会将组播路由器接口上收到的所有查询、报告和叶子转发到其他组播路由器接口。IGMP 侦听会保留在此接口上学习的成员资格信息,但不会针对此接口上收到的离开消息发送特定于组的查询。如果在计时器持续时间内没有同一组的报告,则它只会超时在此接口上学习的组。
对于所有组播路由器接口上的主机,生成常规查询和特定于组的查询的是 IGMP 路由器,而不是 IGMP 侦听代理。
另请参阅
主机端接口和 IGMP 侦听代理模式
代理模式下的 IGMP 侦听不会在主机端接口上发送报告。IGMP 侦听处理在这些接口上收到的报告,并在接口上收到离开消息时将特定于组的查询发送到主机端接口。主机端接口不会生成定期常规查询,但会转发或泛洪从组播路由器接口接收的常规查询。
如果从主机端接口中删除某个组,并且这是该组的最后一个主机端接口,则会向组播路由器接口发送离开。如果在主机端接口上收到组报告,并且这是该组的第一个主机端接口,则会向所有组播路由器接口发送报告。
另请参阅
IGMP 侦听和网桥域
VLAN 上的 IGMP 侦听仅允许用于传统 vlan-id all 情况。在其他情况下,有一个特定的桥接域配置,用于确定 IGMP 侦听的 VLAN 特定配置。
另请参阅
配置 IGMP 侦听
要配置 Internet 组管理协议 (IGMP) 侦听,请包括 igmp-snooping 语句:
igmp-snooping { immediate-leave; interface interface-name { group-limit limit; host-only-interface; immediate-leave; multicast-router-interface; static { group ip-address { source ip-address; } } } proxy { source-address ip-address; } query-interval seconds; query-last-member-interval seconds; query-response-interval seconds; robust-count number; vlan vlan-id { immediate-leave; interface interface-name { group-limit limit; host-only-interface; immediate-leave; multicast-router-interface; static { group ip-address { source ip-address; } } } proxy { source-address ip-address; } query-interval seconds; query-last-member-interval seconds; query-response-interval seconds; robust-count number; } }
您可以在以下层次结构级别中包含此语句:
[编辑 bridge-domains bridge-domain-name 协议]
[编辑 routing-instances routing-instance-name bridge-domains bridge-domain-name 协议]
默认情况下,IGMP 侦听未启用。在 VLAN 级别配置的语句仅适用于该特定 VLAN。
另请参阅
配置特定于 VLAN 的 IGMP 侦听参数
使用该 igmp-snooping
语句配置的所有 IGMP 侦听语句(语句除外 traceoptions
)都可以在 VLAN 级别使用相同的语句进行限定。要在 VLAN 级别配置 IGMP 侦听参数,请包含以下 vlan
语句:
vlan vlan-id; immediate-leave; interface interface-name { group-limit limit; host-only-interface; multicast-router-interface; static { group ip-address { source ip-address; } } } proxy { source-address ip-address; } query-interval seconds; query-last-member-interval seconds; query-response-interval seconds; robust-count number; }
您可以在以下层次结构级别中包含此语句:
[edit bridge-domains bridge-domain-name protocols igmp-snooping]
[edit routing-instances routing-instance-name bridge-domains bridge-domain-name protocols igmp-snooping]
另请参阅
示例:配置 IGMP 侦听
此示例说明如何配置 IGMP 侦听。IGMP 侦听可以减少来自 IP 组播应用程序的不必要流量。
要求
此示例使用以下硬件组件:
一个 MX 系列路由器
一台用作组播路由器的第 3 层设备
准备工作:
配置接口。请参阅 安全设备的 Interfaces 用户指南。
配置内部网关协议。请参阅 路由设备的 Junos OS 路由协议库。
配置组播协议。此功能适用于以下多播协议:
DVMRP
PIM-DM 系列
PIM-SM 系列
PIM-SSM
概述和拓扑
IGMP 侦听控制交换网络中的组播流量。未启用 IGMP 侦听时,第 2 层设备会从其所有端口广播组播流量,即使网络上的主机不需要组播流量。启用 IGMP 侦听后,第 2 层设备会监控 IGMP 加入,并将从每个连接的主机发送的消息保留到组播路由器。这使第 2 层设备能够跟踪组播组和关联的成员端口。第 2 层设备使用此信息做出智能决策,并仅将组播流量转发至预期的目标主机。
此示例包括以下语句:
proxy— 使第 2 层设备能够主动过滤 IGMP 数据包,以减少组播路由器上的负载。对组播路由器上游的加入和离开进行过滤,以便组播路由器具有该组的单个条目,而不管有多少个活动侦听器已加入该组。当侦听器离开组,但其他侦听器仍保留在组中时,将过滤离开消息,因为组播路由器不需要此信息。从路由器的角度来看,组的状态保持不变。
immediate-leave—当仅连接一个 IGMP 主机时,该
immediate-leave
语句使组播路由器能够立即从接口中删除组成员资格,并禁止为组播组发送任何特定于组的查询。在 IGMPv2 接口上配置此功能时,请确保 IGMP 接口仅连接一个 IGMP 主机。如果多个 IGMPv2 主机通过同一接口连接到 LAN,并且一台主机发送离开消息,则路由器将从组播组中删除接口上的所有主机。路由器将与正确保留在组播组中的主机失去联系,直到它们发送加入请求以响应来自路由器的下一个常规组播侦听器查询。
在运行 IGMP 版本 3 (IGMPv3) 侦听的路由器上启用 IGMP 侦听时,路由器收到类型为 BLOCK_OLD_SOURCES 的报告后,路由器会抑制发送组和源查询,但依赖 Junos OS 主机跟踪机制来确定是否从接口中删除特定源组成员资格。
query-interval— 允许您通过配置 IGMP 查询器路由器发送常规主机查询消息以请求成员资格信息的间隔来更改子网上发送的 IGMP 消息的数量。
默认情况下,查询间隔为 125 秒。您可以配置 1 到 1024 秒范围内的任何值。
query-last-member-interval— 用于更改设备检测组最后一个成员丢失所需的时间。
last-member 查询间隔是特定于组的查询消息(包括为响应离开组消息而发送的查询消息)之间的最长时间。
默认情况下,last-member 查询间隔为 1 秒。您可以配置 0.1 到 0.9 秒范围内的任何值,然后配置从 1 到 1024 秒的 1 秒间隔。
query-response-interval— 配置路由器等待接收来自其主机查询消息的响应的时间。
默认情况下,查询响应间隔为 10 秒。您可以配置 1 到 1024 秒范围内的任何值。此间隔应小于语句中设置的
query-interval
间隔。robust-count — 提供微调以允许子网上预期的数据包丢失。它基本上是在使组超时之前要等待的间隔数。如果子网数据包丢失率较高,并且 IGMP 报告消息可能会丢失,则可以等待更多间隔。
默认情况下,稳健计数为 2。您可以配置 2 到 10 个间隔范围内的任何值。
group-limit—为可加入接口的组播组(或 IGMPv3 中的 [S,G] 通道)的数量配置限制。达到此限制后,将忽略新报告,并丢弃所有相关流,而不是泛洪。
默认情况下,可以加入接口的组数没有限制。您可以在 0 到 32 位数字范围内配置限制。
host-only-interface—将 IGMP 侦听接口配置为专用主机端接口。在主机端接口上,收到的 IGMP 查询将被丢弃。
默认情况下,接口可以面向其他组播路由器或主机。
multicast-router-interface— 将 IGMP 侦听接口配置为专门面向路由器的接口。
默认情况下,接口可以面向其他组播路由器或主机。
static—使用组播组静态配置 IGMP 侦听接口。
默认情况下,路由器会动态了解接口上的组播组。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set bridge-domains domain1 domain-type bridge set bridge-domains domain1 interface ge-0/0/1.1 set bridge-domains domain1 interface ge-0/0/2.1 set bridge-domains domain1 interface ge-0/0/3.1 set bridge-domains domain1 protocols igmp-snooping query-interval 200 set bridge-domains domain1 protocols igmp-snooping query-response-interval 0.4 set bridge-domains domain1 protocols igmp-snooping query-last-member-interval 0.1 set bridge-domains domain1 protocols igmp-snooping robust-count 4 set bridge-domains domain1 protocols igmp-snooping immediate-leave set bridge-domains domain1 protocols igmp-snooping proxy set bridge-domains domain1 protocols igmp-snooping interface ge-0/0/1.1 host-only-interface set bridge-domains domain1 protocols igmp-snooping interface ge-0/0/1.1 group-limit 50 set bridge-domains domain1 protocols igmp-snooping interface ge-0/0/3.1 static group 225.100.100.100 set bridge-domains domain1 protocols igmp-snooping interface ge-0/0/2.1 multicast-router-interface
逐步过程
以下示例要求您在配置层次结构中导航各个级别。有关导航 CLI 的信息,请参阅 Junos OS CLI 用户指南 中的在配置模式下使用 CLI 编辑器。
要配置 IGMP 侦听:
配置 bridge 域。
[edit bridge-domains domain1] user@host# set domain-type bridge user@host# set interface ge-0/0/1.1 user@host# set interface ge-0/0/2.1 user@host# set interface ge-0/0/3.1
启用 IGMP 侦听并将路由器配置为代理。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping proxy
将 ge-0/0/1.1 接口上允许的组播组数量限制为 50。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping interface ge-0/0/1.1group-limit 50
将路由器配置为在从接口收到离开消息时立即从接口中删除组成员身份,而无需等待交换任何其他 IGMP 消息。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping immediate-leave
在端口上静态配置 IGMP 组成员资格。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping interface ge-0/0/3.1 static group 225.100.100.100
将接口配置为专门面向路由器的接口(以接收组播流量)。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping interface ge-0/0/2.1 multicast-router-interface
将接口配置为专门面向主机的接口(以丢弃 IGMP 查询消息)。
[edit bridge-domains domain1] user@host# set protocols igmp-snooping interface ge-0/0/1.1 host-only-interface
配置 IGMP 消息间隔和稳健性计数。
[edit bridge-domains domain1] user@host# set protocols igmp-snoopingrobust-count 4 user@host# set protocols igmp-snooping query-last-member-interval 0.1 user@host# set protocols igmp-snooping query-interval 200 user@host# set protocols igmp-snooping query-response-interval 0.4
如果已完成设备配置,请提交配置。
user@host# commit
结果
输入 show bridge-domains
命令以确认您的配置。
user@host# show bridge-domains domain1 { domain-type bridge; interface ge-0/0/1.1; interface ge-0/0/2.1; interface ge-0/0/3.1; protocols { igmp-snooping { query-interval 200; query-response-interval 0.4; query-last-member-interval 0.1; robust-count 4; immediate-leave; proxy; interface ge-0/0/1.1 { host-only-interface; group-limit 50; } interface ge-0/0/3.1 { static { group 225.100.100.100; } } interface ge-0/0/2.1 { multicast-router-interface; } } } }
验证
要验证配置,请运行以下命令:
显示 IGMP 侦听接口
显示 IGMP 窥探成员资格
显示 IGMP 侦听统计信息
配置 IGMP 侦听追踪操作
跟踪操作记录有关路由协议操作的详细消息,例如发送和接收的各种类型的路由协议数据包以及路由策略操作。您可以通过包含特定的跟踪标志来指定要记录的跟踪操作。
在层次结构下igmp-snooping
启用 traceoptions 将启用 igmp-snooping。相应地,禁用层次结构下的 igmp-snooping
traceoptions 会禁用 igmp-snooping。
下表描述了您可以包含的标志。
旗 |
描述 |
---|---|
都 |
跟踪所有操作。 |
客户端通知 |
跟踪通知。 |
常规 |
跟踪常规流程。 |
群 |
跟踪组操作。 |
主机通知 |
跟踪主机通知。 |
离开 |
跟踪离开组消息(仅限 IGMPv2)。 |
正常 |
跟踪正常事件。 |
包 |
跟踪所有 IGMP 数据包。 |
政策 |
跟踪策略处理。 |
查询 |
跟踪 IGMP 成员资格查询消息。 |
报告 |
跟踪成员身份报告消息。 |
路线 |
跟踪路由信息。 |
州 |
跟踪状态转换。 |
任务 |
跟踪路由协议任务处理。 |
定时器 |
跟踪计时器处理。 |
您可以为全局或路由实例中的 IGMP 侦听配置跟踪操作。以下示例显示了全局配置。
要为 IGMP 侦听配置跟踪操作:
另请参阅
配置 IGMP 或 MLD 侦听版本
概述
根据 RFC 4541,默认情况下,在 IGMPv3 模式下,在属于 VLAN 或桥接域的接口上启用窥探。MLD 窥探默认为 MLDv2。当连接到 CPE 的路由器发送 IGMPv3 或 MLDv2 常规查询以刷新 IGMP 组信息时,根据 RFC 工作的标准 CPE 或终端主机应该能够处理和响应 IGMP v2/v3 或 MLDv1/v2 查询。
不符合 RFC 4541 的终端主机或 CPE 设备不会响应从启用窥探的 L2 设备发送的 IGMPv3 或 MLDv2 查询。此版本不匹配可能会导致流量中断。
您可以为与 L2 组播关联的 VLAN 或桥接域显式指定 IGMP 或 MLD 侦听版本。这可确保路由器使用 IGMP 或 MLD 侦听的配置版本发送 IGMP 或 MLD 启动查询或定期常规查询(配置为 L2 查询器时)。这反过来又可确保不合规的 CPE 设备使用 IGMP 或 MLD 组/报告信息进行响应。这有助于使组播流与无法响应更高版本的 IGMP 或 MLD 查询的主机和 CPE 保持活动状态。
IGMP 或 MLD 侦听版本在 VLAN 或桥接域上配置,适用于该 VLAN 或桥接域下的所有接口 (IFL)。
VLAN 或桥接域的 IGMP/MLD 侦听版本配置可以通过两种方式完成:默认路由实例(全局实例)或特定路由实例。
使用版本配置,MCSNOOPD(允许从第 2 层设备进行第 3 层检查的组播侦听过程)使用以下方式刷新来自主机的报告:
-
启动查询:这是在 VLAN 或网桥域中启用侦听时发送的常规 IGMP 查询。当 MCSNOOPD 首次构建 VLAN 或桥接域成员的接口状态时,或者当 VLAN 或桥接域的接口(IFL 或 IFD)摆动时,将发送此查询。
-
L2 查询器:这是一项定期功能,可以在为窥探启用的特定 VLAN 或桥接域中显式启用。
-
Proxy:IGMP 或 MLD 代理报告从远程查询器接收 IGMP 或 MLD 查询数据包。
在 EVPN 部署中,此侦听版本配置仅适用于面向访问的接口。
非代理模式
如果没有代理安排,IGMP 窥探不会生成或引入查询和报告。它只会监听从其所有接口(包括多播路由器接口)收到的报告,以构建其状态和组 (S,G) 数据库。
-
当接口摆动或添加 VLAN 或桥接域的新成员时,将生成启动查询。启动查询是常规 IGMP 或 MLD 查询消息(源 IP 地址 = 0.0.0.0),将通过具有已配置版本的接口发送,或者默认为 IGMPv3 或 MLD v2。
-
如果为 VLAN 或网桥域启用了 L2 查询器功能,则会生成定期查询(默认计时器为 125 秒)并将其发送到具有配置版本的所有 VLAN 或网桥域成员,或者默认为 IGMPv3 或 MLDv2 查询。
代理模式
在此模式下,代理侦听会减少发送到 IGMP 路由器的 IGMP 报告数量。
-
启动查询的行为方式与非代理模式相同。
-
启用 L2 查询器后,它的行为方式与非代理模式下的行为相同。
-
用于响应从对等体接收的常规查询而生成的 IGMP 报告的版本基于主机兼容模式,并按以下方式决定:
-
如果没有版本配置,则在收到较低版本的查询时,模式将设置为最低版本,并启动相应的查询器存在计时器。在 queryer-present 计时器到期时,版本将更改为 IGMPv3 或 MLDv2,具体取决于接口正在运行的协议。
-
使用版本配置,在收到较低版本的查询时,模式将设置为最低版本,并启动相应的查询器存在计时器。例如,在 queryier-present 计时器到期时,版本将根据 config 语句
set routing-instance <routing-instance-name> protocols igmp-snooping version <version>
设置的版本更新到配置的版本。
-
-
为响应离开而生成的组特定查询基于 IGMP 或 MLD 报告的最低版本和配置的接口版本。如果配置的接口版本较低,则该版本用于组兼容性。