IGMP 侦听概述
互联网组管理协议 (IGMP) 侦听可限制设备上 VLAN 上的 IPv4 组播流量泛洪。启用 IGMP 侦听后,设备将监控网络上的 IGMP 流量,并使用它学习到的内容将组播流量仅转发到连接到相关接收器的下游接口。设备仅向连接到想要接收流量的设备的接口发送组播流量,而不是将流量泛洪到 VLAN 中的所有下游接口,从而节省带宽。
IGMP 侦听的优势
Optimized bandwidth utilization—IGMP 侦听的主要好处是减少数据包泛洪。设备会有选择地将 IPv4 组播数据转发到想要接收数据的端口列表,而不是将其泛洪到 VLAN 中的所有端口。
Improved security—防止来自未知来源的拒绝服务攻击。
IGMP 侦听的工作原理
设备通常通过检查它们接收的帧的源地址字段来学习单播 MAC 地址,然后将该单播地址的任何流量仅发送到相应的接口。但是,组播 MAC 地址永远不能是数据包的源地址。因此,当设备收到组播目标地址的流量时,它会淹没相关 VLAN 上的流量,从而发送大量流量,而这些流量不一定有感兴趣的接收方。
IGMP 侦听可防止这种泛洪。启用 IGMP 侦听时,设备将监控接收方和组播路由器之间的 IGMP 数据包,并使用数据包的内容构建组播转发表 — 组播组的数据库和连接到组成员的接口。当设备收到组播数据包时,它会使用组播转发表有选择地将流量仅转发到连接到相应组播组成员的接口。
在不支持增强型第 2 层软件 (ELS) 配置样式的 EX 系列和 QFX 系列交换机上,IGMP 侦听默认在所有 VLAN 上启用(或仅在某些设备上的默认 VLAN 上启用),您可以在一个或多个 VLAN 上有选择地禁用它。在所有其他设备上,您必须在 VLAN 或桥接域中显式配置 IGMP 侦听才能启用它。
您无法在辅助(专用)VLAN (PVLAN) 上配置 IGMP 侦听。但是,从 EX4300 交换机和 EX4300 虚拟机箱上的 Junos OS 18.3R1 版以及 EX4300 多千兆交换机上的 Junos OS 19.2R1 版开始,在主 VLAN 上启用 IGMP 侦听时,也会在为该主 VLAN 定义的任何辅助 VLAN 上隐式启用它。有关详细信息,请参阅 专用 VLAN (PVLAN) 上的 IGMP 侦听 。
IGMP 侦听如何与路由 VLAN 接口配合使用
设备可以使用路由 VLAN 接口 (RVI) 在其配置中的 VLAN 之间转发流量。IGMP 侦听与第 2 层接口和 RVI 配合使用,以转发交换网络中的组播流量。
当设备收到组播数据包时,其数据包转发引擎会对数据包执行组播查找,以确定如何将数据包转发到其本地接口。从查找结果中,每个数据包转发引擎提取具有数据包转发引擎本地端口的第 3 层接口列表。如果列表包含 RVI,设备将向数据包转发引擎提供 RVI 的网桥组播组 ID。
对于包含组播接收器的 VLAN,网桥组播 ID 包括一个子下一跃点 ID,用于标识 VLAN 中有兴趣接收组播流的第 2 层接口。然后,数据包转发引擎将组播流量转发到具有给定组播组的组播接收器的桥接组播 ID。
IGMP 消息类型
组播路由器使用 IGMP 了解哪些组的每个连接的物理网络都有感兴趣的侦听器。在任何给定子网中,一个组播路由器充当 IGMP 查询器。IGMP 查询器向主机发送以下类型的查询:
常规查询 - 询问是否有主持人正在侦听任何组。
特定于组的查询 -(仅限 IGMPv2 和 IGMPv3)询问是否有任何主机正在侦听特定的多播组。发送此查询是为了响应离开组播组的主机,并允许路由器快速确定是否有任何剩余主机对该组感兴趣。
特定于组和源的查询 -(仅限 IGMPv3)询问是否有主机正在侦听来自特定组播源的组组播流量。发送此查询是为了响应主机,该主机指示它不再对从组播源接收组组播流量感兴趣,并允许路由器快速确定任何剩余主机有兴趣从该源接收组组播流量。
作为多播侦听器的主机发送以下类型的消息:
成员身份报告 - 指示主机想要加入特定组播组。
离开报告 -(仅限 IGMPv2 和 IGMPv3)指示主机想要退出特定多播组。
主持人如何加入和离开多播群组
主持人可以通过两种方式加入多播组:
通过向指定主机要加入的 IP 组播组的组播路由器发送未经请求的 IGMP 加入消息。
通过发送 IGMP 加入消息来响应来自组播路由器的常规查询。
组播路由器会继续将组播流量转发到 VLAN,前提是该 VLAN 上至少有一台主机响应定期常规 IGMP 查询。要使主机保持为多播组的成员,它必须继续响应定期的常规 IGMP 查询。
主持人可以通过以下两种方式之一离开多播组:
在特定时间间隔内不响应定期查询,这被视为“静默休假”。这是 IGMPv1 主机的唯一离开方法。
通过发送休假报告。此方法可由 IGMPv2 和 IGMPv3 主机使用。
支持 IGMPv3 组播源
在 IGMPv3 中,主机可以发送包含源地址列表的成员资格报告。当主机以 INCLUDE 模式发送成员资格报告时,主机仅对来自源地址列表中那些源的组组播流量感兴趣。如果主机在排除模式下发送成员资格报告,则主机对来自源地址列表中源 以外的 任何源的组组播流量感兴趣。主机还可以发送源列表参数为空的 EXCLUDE 报告,这称为 EXCLUDE NULL 报告。EXCLUDE NULL 报告指示主机希望加入组播组并从所有源接收数据包。
支持 IGMPv3 的设备会处理 INCLUDE 和 EXCLUDE 成员资格报告,并且大多数设备仅相应地将请求的源特定组播 (SSM) 流量转发到订阅的接收器。但是,您可能会看到,在某些配置中,设备不会严格转发每个源的组播流量,例如:
不使用增强型第 2 层软件 (ELS) 配置样式的 EX 系列和 QFX 系列交换机
运行 Junos OS 18.1R2 之前的 EX2300 和 EX3400 交换机
运行的 Junos OS 版本低于 18.2R1、18.1R2、17.4R2、17.3R3、17.2R3 和 14.1X53-D47 的 Junos OS 版本的 EX4300 交换机
SRX 系列服务网关
在这些情况下,设备可能会将其在 VLAN 上收到的指定组的所有 INCLUDE 和 EXCLUSION 模式报告整合到一个路由中,该路由包含该组的所有组播源,下一跃点表示具有该组相关接收方的所有接口。因此,VLAN 上感兴趣的接收方可以从他们未包含在 INCLUDE 报告中的源或来自他们在 EXCLUDE 报告中排除的源接收流量。例如,如果主机 1 需要来自源 A 的 G 流量,而主机 2 需要来自源 B 的组 G 流量,则无论 A 还是 B 发送流量,它们都会接收组 G 的流量。
IGMP 侦听和转发接口
要确定如何转发组播流量,启用了 IGMP 侦听的设备会在其组播转发表中维护有关以下接口的信息:
组播路由器接口 — 这些接口通向组播路由器或 IGMP 查询器。
组成员接口 — 这些接口指向属于组播组成员的主机。
设备通过监控 IGMP 流量来了解这些接口。如果接口收到 IGMP 查询或协议无关组播 (PIM) 更新,设备会将该接口作为组播路由器接口添加到其组播转发表中。如果接口收到组播组的成员资格报告,设备会将该接口作为组成员接口添加到其组播转发表。
学习的接口表条目在一段时间后会老化。例如,如果获知的组播路由器接口在特定时间间隔内未收到 IGMP 查询或 PIM hellos,则设备将从其组播转发表中删除该接口的条目。
要使设备学习组播路由器接口和组成员接口,网络必须包含 IGMP 查询器。这通常在组播路由器中,但如果本地网络上没有组播路由器,则可以将设备本身配置为 IGMP 查询器。
您可以将接口静态配置为组播路由器接口或组成员接口。设备无需了解接口即可将静态接口添加到其组播转发表,并且表中的条目不会老化。设备可以混合使用静态配置和动态学习的接口。
通用转发规则
启用了 IGMP 侦听的 VLAN 中的接口接收组播流量并根据以下规则进行转发。
IGMP 流量:
将组播路由器接口上收到的 IGMP 常规查询转发到 VLAN 中的所有其他接口。
将组播路由器接口上收到的特定于 IGMP 组的查询仅转发到 VLAN 中属于该组成员的接口。
将主机接口上收到的 IGMP 报告转发到同一 VLAN 中的组播路由器接口,但不转发到 VLAN 中的其他主机接口。
不是 IGMP 流量的组播流量:
将目标地址为 233.252.0.0/24 的组播数据包泛洪到 VLAN 上的所有其他接口。
将未注册的组播数据包(没有当前成员的组的数据包)转发到 VLAN 中的所有组播路由器接口。
将注册的组播数据包转发到 VLAN 中属于组播组的主机接口以及 VLAN 中的所有组播路由器接口。
将设备用作 IGMP 查询器
通过在纯第 2 层本地网络上使用 IGMP 侦听(即网络上未启用第 3 层),如果网络不包含组播路由器,则可能无法通过网络正确转发组播流量。如果本地网络配置为必须在设备之间转发组播流量才能到达组播接收器,则可能会遇到此问题。在这种情况下,上游设备不会将组播流量转发到下游设备(因此也不会转发到连接到下游设备的组播接收器),因为下游设备不会将 IGMP 报告转发到上游设备。您可以通过将其中一个设备配置为 IGMP 查询器来解决此问题。IGMP 查询器设备定期向网络中的所有设备发送常规查询数据包,确保侦听成员资格表得到更新并防止组播流量丢失。
如果将多个设备配置为 IGMP 查询器,则具有最低(最小)IGMP 查询器源地址的设备优先并充当查询器。具有较高 IGMP 查询器源地址的设备将停止发送 IGMP 查询,除非它们在 255 秒内未收到 IGMP 查询。如果具有较高 IGMP 查询器源地址的设备在此期间未收到任何 IGMP 查询,它将再次开始发送查询。
Junos OS 14.1X53-D15 版中的 QFabric 系统支持该 igmp-querier 语句,但在 Junos OS 15.1 中不支持此语句。
要将设备配置为充当 IGMP 查询器,请输入以下内容:
[edit protocols] user@host# set igmp-snooping vlan vlan-name l2-querier source-address source address
要将 QFabric 节点设备交换机配置为充当 IGMP 查询器,请输入以下内容:
[edit protocols] user@host# set igmp-snooping vlan vlan-name igmp-querier source-address source address
专用 VLAN (PVLAN) 上的 IGMP 侦听
PVLAN 由在主 VLAN 中配置的辅助隔离 VLAN 和社区 VLAN 组成。如果辅助 VLAN 不支持 IGMP 侦听,则主 VLAN 上收到的组播流将泛洪到辅助 VLAN。
从 Junos OS 18.3R1 版开始,EX4300 交换机和 EX4300 虚拟机箱支持 PVLAN 的 IGMP 侦听。从 Junos OS 19.2R1 版开始,EX4300 多千兆型号交换机支持 PVLAN 的 IGMP 侦听。在主 VLAN 上启用 IGMP 侦听时,您也在所有辅助 VLAN 上隐式启用了它。设备学习并存储主 VLAN 上的组播组信息,还会在主 VLAN 的上下文中学习辅助 VLAN 上的组播组信息。因此,该设备会进一步将组播流限制为仅发送辅助 VLAN 上感兴趣的接收方,而不会淹没所有辅助 VLAN 中的流量。
CLI 可防止您在辅助隔离或公共组 VLAN 上显式配置 IGMP 侦听。您只需在定义辅助 VLAN 的主 VLAN 上配置 IGMP 侦听。例如,对于具有辅助隔离 VLAN vlan-iso 和辅助公共组 VLAN vlan-comm 的主 VLAN vlan-pri:
set vlans vlan-pri vlan-id 100 set vlans vlan-pri isolated-vlan vlan-iso set vlans vlan-pri community-vlans vlan-comm set vlans vlan-iso vlan-id 300 set vlans vlan-iso private-vlan isolated set vlans vlan-comm vlan-id 200 set vlans vlan-comm private-vlan community set protocols igmp-snooping vlan vlan-pri
在辅助 VLAN 端口上收到的 IGMP 报告和离开消息是在主 VLAN 的上下文中学习的。混合中继端口或交换机间链路充当 PVLAN 的组播路由器接口,接收来自组播源的传入组播数据流,并仅将其转发到具有获知组播组条目的辅助 VLAN 端口。
此功能不支持辅助 VLAN 端口作为组播路由器接口。CLI 不会严格阻止您将公共组 VLAN 上的接口静态配置为组播路由器端口,但 IGMP 侦听在具有此配置的 PVLAN 上无法正常工作。在 PVLAN 上配置 IGMP 侦听时,交换机还会自动禁用任何隔离或社区 VLAN 接口上的动态组播路由器端口学习。使用 PVLAN 的 IGMP 侦听也不支持在隔离或公共组 VLAN 接口上使用 IGMP 查询器的配置。
有关配置 PVLAN 的详细信息,请参阅了解专用 VLAN 和创建支持 ELS 的跨多个 EX 系列交换机的专用 VLAN(CLI 过程)。
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。
igmp-querier 语句,但在 Junos OS 15.1 中不支持此语句。