示例:配置 IGMP 侦听
了解组播侦听
路由器等网络设备主要在数据包级别或第 3 层运行。桥接或 LAN 交换机等其他网络设备主要在帧级别或第 2 层运行。组播功能主要在第 3 层数据包级别,但有一种方法是将第 3 层 IP 组播组地址映射到帧级别的第 2 层 MAC 组播组地址。
路由器可以处理第 2 层和第 3 层寻址信息,因为必须处理帧及其地址才能访问内部封装的数据包。路由器可以运行 PIM 或 IGMP 等第 3 层组播协议,并确定转发组播内容的位置,或者当接口上的主机加入或离开组时。但是,网桥和 LAN 交换机作为第 2 层设备,不应访问其帧携带的数据包内的组播信息。
网桥和其他第 2 层设备如何确定接口上的设备何时加入或离开组播树,或者附加 LAN 上的主机是否想要接收特定组播组的内容?
答案是让第 2 层设备实施组播侦听。组播侦听是一个通用术语,适用于第 2 层设备在第 3 层数据包内容处“侦听”的过程,用于确定采取哪些操作来处理或转发帧。有更具体的侦听形式,如 IGMP 侦听或 PIM 侦听。在所有情况下,侦听都涉及配置为在 2 层运行的设备,能够访问通常“禁止”的第 3 层(数据包)信息。侦听可提高这些设备的组播效率。
另请参阅
了解 IGMP 侦听
对于第 2 层设备(例如,瞻博网络 MX 系列以太网服务路由器)而言,侦听是一种通用方式,对第 3 层数据包内容实施一系列“侦听”程序,以确定将采取哪些操作来处理或转发帧。更具体形式的侦听,如互联网组成员协议 (IGMP) 侦听或协议无关组播 (PIM) 侦听,用于组播。
第 2 层设备(LAN 交换机或网桥)处理组播数据包,其中包含这些数据包的帧与第 3 层设备(路由器)处理广播的方式相同。因此,第 2 层交换机通过将数据包(帧)的副本转发到交换机的其他网络接口上,处于转发状态,来处理具有组播目标媒体接入控制 (MAC) 地址的到达帧。
但是,这种方法(设备可以在任何位置发送组播帧)并不是最有效地使用网络带宽,特别是对于 IPTV 应用。IGMP 侦听功能通过对交换机接口接收的 IGMP 数据包进行“侦听”,并构建类似于组播路由器在第 3 层网络中构建的组播数据库。使用此数据库,交换机只能将组播流量转发到具有相关接收器的下游接口,而且该技术可以更有效地利用网络带宽。
您可以为路由器上的每个网桥配置 IGMP 侦听。没有合格学习的桥接实例只有一个学习域。对于具有合格学习功能的网桥实例,侦听将在桥接中的每个学习域中单独运行。也就是说,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 组计时器期间没有此组的报告),则该接口将作为该组的接口被删除。
离开 — 桥接任何接口上收到的 IGMP 留线消息将被转发到网桥上的其他组播路由器接口。当主机组中不再存在任何成员时,离开组消息减少了组播路由器停止转发组播流量所需的时间。
代理侦听减少了发送到 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 所有 情况。在其他情况下,有一个特定的桥接域配置,用于确定 IGMP 侦听的特定于 VLAN 的配置。
另请参阅
配置 IGMP 侦听
要配置互联网组管理协议 (IGMP) 侦听,请添加 igmp-侦听 语句:
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-domain-name 协议]
[编辑路由实例 routing-instance-name 桥接域 bridge-domain-name 协议]
默认情况下,未启用 IGMP 侦听。在 VLAN 级别配置的语句仅适用于该特定 VLAN。
另请参阅
配置 VLAN 特定的 IGMP 侦听参数
在 VLAN 级别,使用 igmp-snooping
同一语句配置的所有 IGMP 侦听语句(语句除外 traceoptions
)都可以使用同一语句进行限定。要配置 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 层设备
开始之前:
配置接口。请参阅 安全设备的接口用户指南。
配置内部网关协议。请参阅 路由设备的 Junos OS 路由协议库。
配置组播协议。此功能适用于以下组播协议:
DVMRP
PIM-DM
PIM-SM
PIM-SSM
概述和拓扑
IGMP 侦听控制交换网络中的组播流量。如果未启用 IGMP 侦听,则第 2 层设备也会从其所有端口广播组播流量,即使网络上的主机不希望有组播流量。启用 IGMP 侦听后,第 2 层设备将监控 IGMP 加入,并将从每个连接的主机发送到组播路由器的消息保留。这使得第 2 层设备能够跟踪组播组和关联成员端口。第 2 层设备使用这些信息做出智能决策,并将组播流量仅转发到预期的目标主机。
此示例包含以下语句:
代理 — 使第 2 层设备能够主动过滤 IGMP 数据包,以减少组播路由器上的负载。将过滤向组播路由器上游的加入和离开标题,这样,无论有多少活动侦听器加入组,组播路由器都有该组的单个条目。当侦听者离开组,而其他侦听器保留在组中时,将过滤离开消息,因为组播路由器不需要此信息。从路由器的角度来看,组的状态保持不变。
即时离开 — 当仅连接一个 IGMP 主机时,语句
immediate-leave
使组播路由器能够立即从接口中移除组成员资格,并抑制为组播组发送任何组特定的查询。在 IGMPv2 接口上配置此功能时,请确保 IGMP 接口仅连接了一个 IGMP 主机。如果多个 IGMPv2 主机通过同一接口连接到一个 LAN,并且有一个主机发送一条保留消息,则路由器将从组播组中移除该接口上的所有主机。在它们发送加入请求以响应来自路由器的下一个常规组播侦听查询之前,路由器会与正确保留在组播组中的主机失去联系。
当在运行 IGMP 版本 3 (IGMPv3) 侦听的路由器上启用 IGMP 侦听后,路由器收到类型为 BLOCK_OLD_SOURCES 的报告后,路由器会抑制发送组和源查询,但依靠 Junos OS 主机跟踪机制决定是否从接口中移除特定的源组成员身份。
查询间隔 — 您可以通过配置 IGMP 查询器路由器发送常规主机查询消息以请求成员身份信息的间隔来更改子网上发送的 IGMP 消息数。
默认情况下,查询间隔为 125 秒。您可以配置 1 到 1024 秒范围内的任意值。
查询上一成员间隔 — 允许您更改设备检测丢失组最后一个成员所需的时间。
最后成员查询间隔是特定于组的查询消息之间的最大时间量,包括响应留组消息而发送的查询消息。
默认情况下,最后一个成员查询间隔为 1 秒。您可以配置 0.1 到 0.9 秒范围内的任意值,然后配置 1 秒到 1024 秒的间隔。
查询响应间隔 — 配置路由器等待多长时间才能从其主机查询消息接收响应。
默认情况下,查询响应间隔为 10 秒。您可以配置 1 到 1024 秒范围内的任意值。此间隔应小于语句中设置的
query-interval
间隔。稳健计数 — 提供微调,以允许子网上发生预期的数据包丢失。它基本上就是在超时一个组之前要等待的间隔数。如果子网数据包丢失较高且 IGMP 报告消息可能丢失,您可以等待更多间隔。
默认情况下,稳健计数为 2。您可以配置 2 到 10 范围内的任意值。
组限制 — 为可加入接口的组播组(或 IGMPv3 中的 [S,G] 通道)配置限制。达到此限制后,新报告将被忽略,所有相关流将被丢弃,不会泛洪。
默认情况下,可以加入接口的组数量没有限制。您可以配置 0 到 32 位编号范围内的限制。
仅主机接口 — 将 IGMP 侦听接口配置为主机端专用接口。在主机端接口上,接收的 IGMP 查询将被删除。
默认情况下,接口可以面对其他组播路由器或主机。
组播路由器接口 — 将 IGMP 侦听接口配置为面向路由器的专用接口。
默认情况下,接口可以面对其他组播路由器或主机。
静态 — 使用组播组静态配置 IGMP 侦听接口。
默认情况下,路由器会动态了解接口上的组播组。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层级的 [edit]
CLI 中,然后从配置模式进入 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 侦听:
配置网桥域。
[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; } } } }
验证
要验证配置,请运行以下命令:
show igmp 侦听接口
show igmp 侦听成员资格
显示 igmp 侦听统计信息
配置 IGMP 侦听跟踪操作
跟踪操作会记录有关路由协议操作的详细消息,例如发送和接收的各类路由协议数据包以及路由策略操作。您可以通过包含特定跟踪标记来指定记录哪些跟踪操作。下表介绍了您可以包括的标志。
国旗 |
描述 |
---|---|
所有 |
跟踪所有操作。 |
客户端通知 |
跟踪通知。 |
一般 |
追踪常规流。 |
组 |
跟踪组操作。 |
主机通知 |
跟踪主机通知。 |
离开 |
跟踪离开组消息(仅限 IGMPv2)。 |
正常 |
追踪正常事件。 |
包 |
跟踪所有 IGMP 数据包。 |
政策 |
跟踪策略处理。 |
查询 |
跟踪 IGMP 成员资格查询消息。 |
报告 |
跟踪成员报告消息。 |
路线 |
追踪路由信息。 |
状态 |
跟踪状态转换。 |
任务 |
跟踪路由协议任务处理。 |
计时 器 |
追踪计时器处理。 |
您可以为全局或路由实例中的 IGMP 侦听配置跟踪操作。以下示例显示了全局配置。
要为 IGMP 侦听配置跟踪操作,