园区网络如何部署组播特性系列:IGMP Snooping
介绍
本章节主要介绍如何在一个交换网络内部署IGMP Snooping。缺省未部署IGMP Snooping时,一个LAN交换机在收到组播报文后会在广播域内泛洪。如果有很多组播服务器向该网络发送组播流,会导致大量带宽浪费。
前置条件
本章节主要介绍如何在华为S系列交换机配置IGMP Snooping。不同产品不同版本的命令行可能会有差异,详细配置情况请参考具体产品指定版本的配置文档。
为什么要部署IGMP Snooping
在园区二层网络中,未部署IGMP Snooping功能前,组播流通过广播发送。因为交换机通过MAC表实现按端口精确转发,MAC表中学习到的是报文的源MAC地址;而组播MAC地址只会是组播报文的目的MAC地址,所以MAC表中肯定不会有组播MAC地址表项,组播报文在交换机中只能作为未知流进行广播。这样会导致二层网络带宽浪费,尤其是大量组播流需要在网络转发的情况下,容易发生网络拥塞。
为了解决这个问题,现在有两种方式可供选择。
- 第一种是在交换机中配置静态组播MAC地址表项,将组播MAC地址与端口进行绑定。但是这种方式灵活性差,每条组播地址表项都需要进行配置。配置命令行如下:
mac-address multicast mac-address interface { interface-type interface-number1 [ to interface-type interface-number2 ] } &<1-10> vlan vlan-id
- 第二种是配置二层组播协议IGMP Snooping,通过交换机端口侦听IGMP报文,动态生成二层组播转发表项。有关IGMP Snooping基本功能的支持情况和配置情况,请参考组播S系列交换机支持矩阵。
组播地址
IPv4组播地址
IPv4组播地址一般作为目标地址来用于组播源和组播组成员通信。IANA(Internet Assigned Numbers Authority,互联网编号分配委员会)将D类地址空间分配给IPv4组播使用。IPv4地址一共32位,D类地址最高4位为1110,因此IPv4组播地址范围为224.0.0.0~239.255.255.255,具体分类及含义如下:
- 224.0.0.0~224.0.0.255:久组地址。IANA为路由协议预留的IP地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议、拓扑查找等使用,不用于组播转发。
- 224.0.1.0~231.255.255.255、233.0.0.0~238.255.255.255:ASM组播地址,全网范围内有效。
- 232.0.0.0~232.255.255.255:缺省情况下的SSM组播地址,全网范围内有效。
- 239.0.0.0~239.255.255.255:本地管理组地址,仅在本地管理域内有效。在不同的管理域内重复使用相同的本地管理组地址不会导致冲突。
组播MAC地址映射
IANA规定,IPv4组播MAC地址的高24位为0x01005E,第25位为0,低23位为IPv4组播地址的低23位。例如:
- 224.0.1.1对应的组播MAC地址为01-00-5E-00-01-01
- 225.0.1.1对应的组播MAC地址为01-00-5E-00-01-01
由示例可以看出,不同IPv4组播地址可能会映射到同一个组播MAC地址。因为IPv4组播地址的前4位是固定的1110,后28位中只有23位被映射到MAC地址,丢失了5位地址信息,直接结果是有32个IPv4组播地址可以映射到同一MAC地址上。这样,如果二层组播在按组播MAC地址转发时,可能会出现没有某组播组请求的成员主机也能接收到该组播组的数据。
IGMP(Internet Group Management Protocol,互联网组管理协议)
IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的三层网络设备能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。IGMP就是用来在接收者主机和与其所在网段相连的三层网络设备之间建立、维护组播组成员关系的协议。
IGMP有3个版本。IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。
IGMPv1
IGMPv1报文的格式如图1-1所示,其中各个字段的说明见表1-1。
字段 |
说明 |
---|---|
Version |
IGMP版本,值为1。 |
Type |
报文类型。该字段有以下两种取值:
|
Unused |
IGMPv1中,该字段在发送时被设为0,并在接收时被忽略。 |
Checksum |
IGMP报文的校验和。 |
Group Address |
组播组地址。在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。 |
IGMPv1工作机制:IGMP查询器会周期性发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文。每个组播组的成员主机需要发送成员报告报文,否则超过一定时间如果IGMP查询器接口没有收到该组播组任一主机的响应,三层网络设备将停止向该组播组转发组播数据。因为三层网络设备会为每个组播源创建组播转发表项,而每条表项的出接口列表就是根据IGMP报告报文来生成的,超过一定时间出接口没有收到IGMP报文报文,该出接口将会从出接口列表删除。
IGMPv2
IGMPv2报文的格式如图1-2所示,其中各个字段的说明见表1-2。
字段 |
说明 |
---|---|
Type |
报文类型。该字段有以下四种取值:
|
Max Response Time |
最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。该字段仅在IGMP查询报文中有效。 |
Checksum |
IGMP报文的校验和。 |
Group Address |
组播组地址。
|
与IGMPv1相比,IGMPv2的变化如下:
除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:
成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。
特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。
IGMPv3
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
IGMPv3报文包含两大类:查询报文和成员报告报文。由于报文中需要包含组播源地址,报文定义的字段更多,IGMPv3的工作机制也更加复杂,详细的信息可参考《配置指南 - IP组播配置》中的“IGMP配置 - IGMP原理描述 - IGMPv3的变化”。
IGMPv1和IGMPv2之间的兼容性
IGMPv2兼容IGMPv1。在运行IGMPv1、IGMPv2的每个网段中,只能有一个三层设备发送查询报文,这个三层设备被称为IGMP查询器。在IGMPv1版本,IGMP查询器依靠组播路由协议PIM选举;在IGMPv2版本,IP地址最小的三层设备被选举为IGMP查询器。
在一些可能会碰到的场景中,三层设备和下游主机间如何进行IGMP协议交互如下:
- 三层设备运行IGMPv1,下游既有IGMPv1主机,又有IGMPv2主机
三层设备无法解析IGMPv2报告报文,因此所有主机只能发送IGMPv1报告报文。
- 三层设备运行IGMPv2,下游既有IGMPv1主机,又有IGMPv2主机
IGMPv1主机无法解析IGMPv2普遍组查询报文和指定组查询报文,因此三层设备只能用IGMPv1协议,基于指定组查询的快速离开机制也被中止。
- 单个网段中同时接入了IGMPv1三层设备和IGMPv2三层设备
IGMPv1三层设备无法监听到IGMPv2三层设备,因此IGMPv2三层设备必须配置为IGMPv1版本。否则,IGMP查询器可能选举不出来。
IGMPv1/IGMPv2和IGMPv3之间的兼容性
IGMPv3兼容IGMPv1/IGMPv2。在运行所有IGMP版本的每个网段中,也只能有一个三层设备(即IGMP查询器)发送查询报文。在IGMPv1版本,IGMP查询器依靠组播路由协议PIM选举;在IGMPv2、IGMPv3版本,IP地址最小的三层设备被选举为IGMP查询器。
在一些可能会碰到的场景中,三层设备和下游主机间如何进行IGMP协议交互如下:
- 三层设备运行IGMPv1/IGMPv2,下游既有IGMPv1/IGMPv2主机,又有IGMPv3主机
三层设备无法解析IGMPv3报告报文,因此所有主机只能发送IGMPv1/IGMPv2报告报文。
- 三层设备运行IGMPv3,下游既有IGMPv1/IGMPv2主机,又有IGMPv3主机
- IGMPv1/IGMPv2主机无法解析IGMPv3普遍组查询报文和成员关系查询报文,三层设备必须运行当前网段中主机运行的最低版本。如果同时有IGMPv2主机和IGMPv3主机,三层设备必须使用IGMPv2版本;如果同时有IGMPv1主机、IGMPv2主机和IGMPv3 ,三层设备必须使用IGMPv1版本。
- 单个网段中同时接入了所有IGMP版本的三层设备
运行低版本三层设备无法监听到运行高版本三层设备的协议报文,因此所有三层设备必须配置一致的IGMP版本,而且配置的版本必须是当前所有三层设备上运行的最低版本。
S交换机上如何配置IGMP
如图1-3所示,网络中的不同用户群组成N1和N2两个末梢网络。PIM网络中的SwitchA连接用户网段N1,SwitchB和SwitchC连接用户网段N2。该PIM网络中传播视频信息使用的组播组地址为225.1.1.1~225.1.1.5。N1中的HostA和N2中的HostC都希望通过组播方式接收视频信息。
配置步骤如下:
- 配置各交换机接口的IP地址和单播路由协议,确保交换机间网络层能互通。有关协议配置的命令行略。
- 在各交换机使能IP组播路由功能。
multicast routing-enable
- 配置组播路由协议PIM。以常用的PIM-SM协议为例。
- 在各交换机的接口使能PIM-SM。
pim sm
- 将网络中汇聚设备的接口配置为RP接口(如SwitchD的VLANIF40)。以手工静态配置方式举例,在PIM视图下配置。
static-rp 192.168.4.1
- 在各交换机的接口使能PIM-SM。
- 在连接成员主机网段的接口使能IGMP功能,配置IGMP版本。
igmp enable igmp version { 1 | 2 | 3 } //S交换机默认配置的版本为IGMPv2
以SwitchA为例,配置文件如下:
# sysname SwitchA # vlan batch 10 to 11 # multicast routing-enable # interface Vlanif10 ip address 10.110.1.1 255.255.255.0 pim sm igmp enable # interface Vlanif11 ip address 192.168.1.1 255.255.255.0 pim sm # port hybrid pvid vlan 10 port hybrid untagged vlan 10 # port trunk allow-pass vlan 11 # ospf 1 area 0.0.0.0 network 10.110.1.0 0.0.0.255 network 192.168.1.0 0.0.0.255 # pim static-rp 192.168.4.1 #通过display igmp interface命令可以查看各交换机接口上IGMP的配置和运行情况:
display igmp interface vlanif 10 Interface information Vlanif10(10.110.1.1): IGMP is enabled //IGMP功能已使能 IGMP group policy: - IGMP limit: - Value of query interval for IGMP (negotiated): - Value of query interval for IGMP (configured): 60 s Value of other querier timeout for IGMP: 0 s Value of maximum query response time for IGMP: 10 s Querier for IGMP: 10.110.1.1 (this router)
display pim routing-table VPN-Instance: public net Total 1 (*, G) entry; 1 (S, G) entry (*, 225.1.1.1) RP: 192.168.4.1 Protocol: pim-sm, Flag: WC UpTime: 00:21:35 Upstream interface: Vlanif11 Upstream neighbor: 192.168.1.2 RPF prime neighbor: 192.168.1.2 Downstream interface(s) information: Total number of downstreams: 1 1: Vlanif10 Protocol: igmp, UpTime: 00:21:35, Expires: - (10.3.5.2, 225.1.1.1) //组播源地址为10.3.5.2,组播组地址为225.1.1.1的组播路由表项已生成 RP: 192.168.4.1 Protocol: pim-sm, Flag: SPT ACT UpTime: 00:42:46 Upstream interface: Vlanif11 Upstream neighbor: 192.168.1.2 RPF prime neighbor: 192.168.1.2 Downstream interface(s) information: Total number of downstreams: 1 1: Vlanif10 //连接成员主机的IGMP查询器接口在组播路由表项的出接口列表里
IGMP Snooping
IGMP Snooping是二层组播的基本功能,可以实现组播数据在数据链路层的转发和控制。当主机和上游三层设备之间传递的IGMP协议报文通过二层设备时,在使能IGMP Snooping功能后,二层设备会侦听主机和上游三层设备之间交互的IGMP报文,通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
IGMP Snooping中不同端口角色介绍
如图1-4所示,三层设备Router从组播源接收数据并向下游转发,在二层组播设备SwitchA和SwitchB上分别运行IGMP Snooping,HostA、HostB和HostC为接收者主机(即组播组成员)。
结合图1-4,表1-3中介绍了IGMP Snooping中相关端口的概念。
端口角色 |
作用 |
如何生成 |
---|---|---|
路由器端口(Router Port) 如SwitchA和SwitchB上蓝色圆圈表示的接口。 |
二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。 |
|
成员端口(Member Port) 如SwitchA和SwitchB上黄色方框表示的接口。 |
又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。 |
|
路由器端口和成员端口,是二层组播转发表项中的一个重要信息:出接口。其中路由器端口相当于上游接口,成员端口相当于下游接口。通过协议报文学习到的端口,对应的为动态表项;而手工配置的端口,对应的为静态表项。
IGMP Snooping代理功能
配置了IGMP Snooping Proxy功能的设备称为IGMP Snooping代理,在其上游设备看来,它就相当于一台主机;在其下游设备看来,它相当于一台查询器。配置命令行为igmp-snooping proxy。主要由如下两种应用场景:
- 当三层设备没有启用IGMP时,例如只配置了静态组播组,网络中就不会有IGMP查询器来维护组成员关系。通过在二层设备上配置IGMP Snooping Proxy功能,可以使其发送Query报文,充当IGMP查询器。这个场景功能也可以通过配置igmp-snooping querier enable实现。
- 当网络中运行了IGMP时,为了减少上游三层设备收到的IGMP Report报文和Leave报文的数量,可以在二层设备上部署IGMP Snooping Proxy功能,使其能够代理下游主机来向上游设备发送成员关系报告报文。这个场景功能也可以通过配置igmp-snooping report-suppress实现。
未知组播流
二层设备配置了IGMP Snooping功能后,如果没有用户请求,组播流量属于未知组播流。未知组播流,是指不存在对应二层组播转发表项或者对应表项的出接口为空的组播报文,也就是用户还没有点播的流量。而S交换机对未知组播流默认的处理方式与IGMP Snooping使能情况、转发模式等因素有关:
- 未使能IGMP Snooping时,S交换机对未知组播流均采用广播方式。
- 使能IGMP Snooping后,S交换机对未知组播的处理方式如表4:
表1-4 使能IGMP Snooping后未知组播流的处理方式
版本
处理方式
V200R011及以前版本
- 对于S2700SI、S2710SI、S2720EI、S2750EI、S3700SI、S5700LI、S5700S-LI、S5700-C-LI、S5700-X-LI、S5720LI、S5720S-LI、S5700SI、S6720LI、S6720S-LI、S5720SI、S5720I-SI、S5720S-SI、S5730SI、S5730S-EI、S6720SI和S6720S-SI,未知组播流都会在VLAN内广播。
- 对于其他交换机,如果当前二层组播转发模式为按MAC转发,未知组播流会在VLAN内广播;如果当前二层组播转发模式为按IP转发,设备在接收到未知组播流后会将其丢弃。
V200R012C00及以后版本
- 对于S2720EI、S2750EI、S5700S-LI、S5700LI和S5710-X-LI,未知组播流都会在VLAN内广播。
- 对于其他交换机,如果当前二层组播转发模式为按MAC转发,未知组播流会在VLAN内广播;如果当前二层组播转发模式为按IP转发,设备在接收到未知组播流后会将其丢弃。
如果二层设备通过igmp-snooping version { 1 | 2 | 3 }配置的是侦听低版本IGMP报文,而下游主机运行的是高版本IGMP协议,那么二层设备将因为无法解析高版本IGMP协议报文,从而无法生成二层组播表项。此时,上游发送过来的组播也会被当做未知组播流处理。
S交换机上如何配置IGMP Snooping
如图1-5所示组播网络中,路由器Router通过二层设备Switch连接用户网络,Router上运行IGMPv2版本。组播源Source向组播组225.1.1.1~225.1.1.3发送数据,网络中有HostA、HostB、HostC三个接收者。
配置步骤如下:
- 在Switch上创建VLAN并将接口加入VLAN。配置命令行略。
- 使能全局和VLAN的IGMP Snooping功能。
[Switch] igmp-snooping enable [Switch] vlan 10 [Switch-vlan10] igmp-snooping enable
配置文件如下:
sysname Switch # vlan batch 10 # igmp-snooping enable # vlan 10 igmp-snooping enable # interface GigabitEthernet0/0/1 port hybrid pvid vlan 10 port hybrid untagged vlan 10 # interface GigabitEthernet0/0/2 port hybrid pvid vlan 10 port hybrid untagged vlan 10 # interface GigabitEthernet0/0/3 port hybrid pvid vlan 10 port hybrid untagged vlan 10 #
查看Switch上二层组播转发表:
[Switch] display l2-multicast forwarding-table vlan 10 VLAN ID : 10, Forwarding Mode : IP Total Group(s) : 5 ------------------------------------------------------------------------ (Source, Group) Interface Out-Vlan ------------------------------------------------------------------------ the router-port GigabitEthernet0/0/3 10 (*, 225.1.1.1) GigabitEthernet0/0/1 10 GigabitEthernet0/0/2 10 GigabitEthernet0/0/3 10 (*, 225.1.1.2) GigabitEthernet0/0/1 10 GigabitEthernet0/0/2 10 GigabitEthernet0/0/3 10 (*, 225.1.1.3) GigabitEthernet0/0/1 10 GigabitEthernet0/0/2 10 GigabitEthernet0/0/3 10 ------------------------------------------------------------------------
相关信息
- 华为S系列交换机配置指南 - IP组播
- 组播S系列交换机支持矩阵