S交换机组播二三层混跑配置指导和常见问题
简介
现网中组播二三层混跑的场景较多,经常出现由于配置导致组播流量在二层网络广播,或者组播流量不通等问题。针对该问题,本文档给出了详细配置指导和常见问题分析,并对IGMP Snooping功能的使用给出了建议。
什么是组播二三层混跑
在很多情况下,组播报文要不可避免地经过一些二层交换设备。这种情况下,组播接收者和三层组播路由器之间,组播报文要经过二层交换机。当路由器将组播报文转发至交换机以后,交换机负责将组播报文转发给组播接收者。由于组播报文的目的地址为组播组地址,在二层设备上是学习不到这一类MAC表项的,因此组播报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播报文。这样不但浪费了网络带宽,而且影响了网络信息安全。
IGMP Snooping(Internet Group Management Protocol Snooping)有效地解决了这个问题。IGMP Snooping 是一种IPv4二层组播协议,通过侦听三层组播设备和用户主机之间组播协议报文(例如IGMP报文或者PIM Hello报文等)来维护组播报文的出接口信息,根据这些信息建立二层组播转发表项,从而管理和控制组播数据报文在数据链路层的转发,这样就防止了组播数据在二层网络中的广播。
如图1-1所示,在有些场景下,接入交换机(SwitchA)不是单纯的二层交换机,而是通过VLANIF接口同时配置三层组播功能,此时接入交换机默认在进行三层组播转发时,入接口和出接口为VLANIF接口,并没有精确的物理接口信息,此时组播流量会在VLAN内进行广播。这种场景下需要在对应VLAN内同时配置IGMP Snooping来使能二层组播功能,这样才能实现VLAN内的二层精确转发。这种场景通过三层组播功能将组播流量引导至接入交换机,再通过二层组播功能将组播流量精确转发至组播接收者,因此我们一般把这种场景叫做组播二三层混跑的场景。
如何配置组播二三层混跑
组网需求
如图1-2所示,组播源发出组播数据,经过组播路由器转发至接入交换机SwitchA,SwitchA上连接组播源的接口GE1/0/1属于VLAN10。网络中存在4个组播接收者,接收者A和接收者B属于VLAN10,接收者C和接收者D属于VLAN20。现在需要在接入交换机SwitchA上配置组播二三层组播功能,让4个接收者都能正确的接收到组播流量。
为了方便问题分析,这里假设业务流的组播地址为239.x.x.x网段(非SSM指定源网段),同时交换机上运行的IGMP版本为IGMPv2,默认情况下交换机上运行的IGMP版本就是IGMPv2。
配置思路
采用如下的思路配置组播二三层混跑业务的基本功能。
- 在SwitchA上全局使能组播路由功能。
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议。
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议和IGMP协议。
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能。
配置步骤
采用如下步骤配置组播二三层混跑业务的基本功能,本文仅给出组播二三层混跑的关键配置。
- 在SwitchA上全局使能组播路由功能。
<SwitchA> system-view [SwitchA] multicast routing-enable
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议和IGMP协议。
[SwitchA] interface vlanif 10 [SwitchA-Vlanif10] pim sm [SwitchA-Vlanif10] igmp enable [SwitchA-Vlanif10] quit
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议和IGMP协议。
[SwitchA] interface vlanif 20 [SwitchA-Vlanif20] pim sm [SwitchA-Vlanif20] igmp enable [SwitchA-Vlanif20] quit
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能。
[SwitchA] igmp-snooping enable [SwitchA]] vlan 10 [SwitchA-vlan10] igmp-snooping enable [SwitchA-Vlanif10] quit [SwitchA] vlan 20 [SwitchA-vlan20] igmp-snooping enable [SwitchA-vlan20] quit
如果是业务流的组播地址为232.x.x.x网段,请在上述配置基础上,在VLANIF视图下配置igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3,具体原因请参见典型场景下组播二三层混跑配置总结。
组播二三层混跑常见问题(IGMPv2)
本小节基于如何配置组播二三层混跑描述的组网需求及配置,介绍组播二三层混跑的常见问题,如图1-3所示。
- 常见问题一:如果VLAN20没有使能IGMP Snooping功能,则会出现以下问题:
VLAN20的用户继续可以收到组播流量,但是组播报文会在VLAN20内广播,VLAN 20内的所有物理端口均能收到该组播流量,不能按照物理接口精确转发。
- 常见问题二:如果VLAN10没有使能IGMP Snooping功能,则会出现以下问题:
VLAN10内的用户无法接收到组播流量。具体原因如下:
在这个场景中,组播源和VLAN10内的用户属于同一个VLAN,同时VLANIF10接口视图下配置了pim sm。239.x.x.x网段的组播组为ASM(任意源)范围的组播组,此时在VLANIF10接口下配置pim sm的情况下收到组播流会触发三层的(S,G)表项,设备会强制组播数据流必须匹配二层或三层表项才能转发。
对于三层组播,由于三层组播只关心三层接口,而协议规定出接口和入接口不能相同,即组播报文不能从VLANIF10进入,再从VLANIF10转发出去,所以此时SwitchA不会生成VLANIF 10的三层组播出接口,组播数据报文到达SwitchA后由于没有出接口而终止。
对于二层组播,由于没有在SwitchA的VLAN10内配置IGMP Snooping功能,因此交换机上不会生成二层转发表项,因此组播数据流到达SwitchA以后也无法匹配二层转发表项进行转发。
当然,如果在接口VLANIF10视图下关闭pim sm,则组播数据流到达SwitchA以后会在VLAN10内广播,此时VLAN10内的用户可以收到组播数据流。但是这种情况下会同时影响其他VLAN的三层组播功能,因此也不推荐这样配置。
组播二三层混跑常见问题(IGMPv3)
本小节继续基于如何配置组播二三层混跑描述的组网需求及配置,介绍IGMPv3组播二三层混跑的常见问题,如图1-4所示。
假设基于如何配置组播二三层混跑描述的组网需求及配置,做如下3点修改:
- 将业务流的组播地址为232.x.x.x网段(SSM指定源默认网段地址)。
- 在VLANIF10视图下通过igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3(缺省情况下,接口上运行IGMPv2)。
- 在VLAN10视图下关闭IGMP Snooping功能。
其他配置不变,则此时VLAN10内的用户可以收到组播流量(广播过来的),原因如下。
232.x.x.x网段的组播组为SSM(指定源)范围的组播组,此时在VLANIF10接口下pim sm的情况下收到组播流量,不会触发三层的(S,G)表项,依赖于用户侧发送IGMPv3指定源的report报文生成三层(S,G)表项。此时,会有如下几种情况:
- 如果有三层(S,G)表项,则按照三层(S,G)表项指导组播报文转发,VLAN10内的用户可以收到组播数据流。
- 如果没有三层(S,G)表项,则组播数据流到达SwitchA以后会在VLAN10内广播,VLAN10内的用户也可以收到组播数据流。
- 如果在VLAN10视图下开启IGMP Snooping功能,则会按照二层表项的出接口进行精确转发,VLAN10内的用户也可以收到组播数据流。
典型场景下组播二三层混跑配置总结
IGMP Snooping不仅可于监听IGMP报文,还可以监听PIM Hello报文。在组播业务中,IGMP Snooping通常有两种用法:
- 用法一:单独在VLAN内使能,作为交换机二层组播的功能使用,可以不依赖于三层的IGMP使能。
- 用法二:组播二三层混跑场景中,配置IGMP Snooping功能可以实现三层组播的精确转发。
不管三层是否开启IGMP功能,IGMP Snooping都会单独对IGMP报文进行处理。只不过在二三层组播混跑时设备内部二层组播会和三层组播进行一次交互,将二层组播侦听的物理端口信息传递给三层组播,从而避免三层组播在VLAN内广播。
组播二三层混跑场景中,需要保证二三层同时能够生成表项和出接口信息,否则可能会出现组播业务不通的情况。对于不同的组播组地址段,结合IGMP的版本不同,会出现多种组合情况,在一些组合的场景下不能生成IGMP Snooping表项,详细如下表所示。实际应用中请根据IGMP版本情况规划合适的组播组地址段。下面结合这6中场景,给出关键的配置方法。
组播组地址段 |
IGMPv2版本 |
IGMPv3版本 指定源地址 |
IGMPv3版本 不指定源地址 |
---|---|---|---|
非232的组播组 (默认为ASM组播组) |
场景一 可以生成IGMP Snooping表项 |
场景三 不能生成IGMP Snooping表项 |
场景五 可以生成IGMP Snooping表项 |
232的组播组 (默认为SSM组播组) |
场景二 不能生成IGMP Snooping表项 |
场景四 可以生成IGMP Snooping表项 |
场景六 不能生成IGMP Snooping表项 |
下面结合这6中场景,基于图1-5所示的网络拓扑,给出关键的配置方法。
场景一:IGMPv2、非232组播组
这种场景是典型场景,确定一下设备当前确实运行在IGMPv2版本即可。
详细配置过程如下:
- 在SwitchA上全局使能组播路由功能。
<SwitchA> system-view [SwitchA] multicast routing-enable
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议,如果VLANIF 10内也存在接收者时,则同时需要配置IGMP协议。
[SwitchA] interface vlanif 10 [SwitchA-Vlanif10] pim sm [SwitchA-Vlanif10] igmp enable [SwitchA-Vlanif10] quit
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议和IGMP协议。
[SwitchA] interface vlanif 20 [SwitchA-Vlanif20] pim sm [SwitchA-Vlanif20] igmp enable [SwitchA-Vlanif20] quit
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能。
[SwitchA] igmp-snooping enable [SwitchA]] vlan 10 [SwitchA-vlan10] igmp-snooping enable [SwitchA-Vlanif10] quit [SwitchA] vlan 20 [SwitchA-vlan20] igmp-snooping enable [SwitchA-vlan20] quit
场景二:IGMPv2、232组播组
这种场景需要注意的是:
由于232的组播组默认为SSM指定源组播组,在默认运行IGMPv2的情况下不能生成IGMP Snooping表项,因此需要将232的组播组放入ASM范围,配置三层组播的ssm-policy和二层组播igmp-snooping ssm-policy。
详细配置过程如下:
- 在SwitchA上全局使能组播路由功能。
<SwitchA> system-view [SwitchA] multicast routing-enable
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议,如果VLANIF 10内也存在接收者时,则同时需要配置IGMP协议。
[SwitchA] interface vlanif 10 [SwitchA-Vlanif10] pim sm [SwitchA-Vlanif10] igmp enable [SwitchA-Vlanif10] quit
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议IGMP协议。
[SwitchA] interface vlanif 20 [SwitchA-Vlanif20] pim sm [SwitchA-Vlanif20] igmp enable [SwitchA-Vlanif20] quit
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能。
[SwitchA] igmp-snooping enable [SwitchA]] vlan 10 [SwitchA-vlan10] igmp-snooping enable [SwitchA-Vlanif10] quit [SwitchA] vlan 20 [SwitchA-vlan20] igmp-snooping enable [SwitchA-vlan20] quit
- 将232的组播组放入ASM范围,配置三层组播的ssm-policy和二层组播igmp-snooping ssm-policy。
[SwitchA] acl number 2000 //配置ACL,指定组播组地址段。 [SwitchA-acl-basic-2000] //这里如果需要将232的组播组放入ASM范围,则ACL里面不配置任何地址,保持为空即可。 [SwitchA-acl-basic-2000] quit [SwitchA] pim [SwitchA-pim] ssm-policy 2000 //配置三层组播ssm-policy [SwitchA-pim] quit [SwitchA]] vlan 10 [SwitchA]-vlan10] igmp-snooping ssm-policy 2000 //配置二层组播igmp-snooping ssm-policy [SwitchA]] vlan 20 [SwitchA]-vlan20] igmp-snooping ssm-policy 2000 //配置二层组播igmp-snooping ssm-policy [SwitchA]-vlan20] quit
场景三:IGMPv3、非232组播组、指定源地址
这种场景下需要特别注意如下两点:
- 默认情况下交换机上运行的IGMP版本是IGMPv2,因此需要在VLANIF视图下配置igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3,同时在VLAN视图配置igmp-snooping version 3命令,将VLAN内运行的IGMP Snooping版本修改为IGMPv3。
- 由于非232的组播组默认为ASM组播组,在运行IGMPv3指定源的情况下不能生成IGMP Snooping表项,因此需要将非232的组播组放入SSM范围,也是要配置三层组播的ssm-policy和二层组播igmp-snooping ssm-policy。
详细配置过程如下:
- 在SwitchA上全局使能组播路由功能。
<SwitchA> system-view [SwitchA] multicast routing-enable
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议,如果VLANIF 10内也存在接收者时,则同时需要配置IGMP协议。
[SwitchA] interface vlanif 10 [SwitchA-Vlanif10] pim sm [SwitchA-Vlanif10] igmp enable [SwitchA-Vlanif10] igmp version 3 //配置IGMP的运行版本为IGMPv3 [SwitchA-Vlanif10] quit
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议IGMP协议,并且配置IGMP的运行版本为IGMPv3。
[SwitchA] interface vlanif 20 [SwitchA-Vlanif20] pim sm [SwitchA-Vlanif20] igmp enable [SwitchA-Vlanif20] igmp version 3 //配置IGMP的运行版本为IGMPv3 [SwitchA-Vlanif20] quit
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能,并且将VLAN内运行的IGMP Snooping版本修改为IGMPv3。
[SwitchA] igmp-snooping enable [SwitchA]] vlan 10 [SwitchA-vlan10] igmp-snooping enable [SwitchA-vlan10] igmp-snooping version 3 //将VLAN内运行的IGMP Snooping版本修改为IGMPv3 [SwitchA-Vlanif10] quit [SwitchA] vlan 20 [SwitchA-vlan20] igmp-snooping enable [SwitchA-vlan20] igmp-snooping version 3 //将VLAN内运行的IGMP Snooping版本修改为IGMPv3 [SwitchA-vlan20] quit
- 将非232的组播组放入SSM范围,配置三层组播的ssm-policy和二层组播igmp-snooping ssm-policy。
[SwitchA] acl number 2000 //配置ACL,指定组播组地址段。 [SwitchA-acl-basic-2000] rule permit source 239.1.1.0 0.0.0.255 //这里假设业务数据流的组播组网段为239.1.1.0/24。 [SwitchA-acl-basic-2000] quit [SwitchA] pim [SwitchA-pim] ssm-policy 2000 //配置三层组播ssm-policy [SwitchA-pim] quit [SwitchA]] vlan 10 [SwitchA]-vlan10] igmp-snooping ssm-policy 2000 //配置二层组播igmp-snooping ssm-policy [SwitchA]] vlan 20 [SwitchA]-vlan20] igmp-snooping ssm-policy 2000 //配置二层组播igmp-snooping ssm-policy [SwitchA-vlan20] quit
场景四:IGMPv3、232组播组、指定源地址
这种场景需要注意的是:
默认情况下交换机上运行的IGMP版本是IGMPv2,因此需要在VLANIF视图下配置igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3,同时在VLAN视图配置igmp-snooping version 3命令,将VLAN内运行的IGMP Snooping版本修改为IGMPv3。
详细配置过程如下:
- 在SwitchA上全局使能组播路由功能。
<SwitchA> system-view [SwitchA] multicast routing-enable
- 将SwitchA的上行接口VLANIF10(连接路由器的接口)使能PIM协议,如果VLANIF 10内也存在接收者时,则同时需要配置IGMP协议。
[SwitchA] interface vlanif 10 [SwitchA-Vlanif10] pim sm [SwitchA-Vlanif10] igmp enable [SwitchA-Vlanif10] igmp version 3 //配置IGMP的运行版本为IGMPv3 [SwitchA-Vlanif10] quit
- 将SwitchA的下行接口VLANIF20(连接接收者的接口)使能PIM协议IGMP协议,并且配置IGMP的运行版本为IGMPv3。
[SwitchA] interface vlanif 20 [SwitchA-Vlanif20] pim sm [SwitchA-Vlanif20] igmp enable [SwitchA-Vlanif20] igmp version 3 //配置IGMP的运行版本为IGMPv3 [SwitchA-Vlanif20] quit
- 在SwitchA上全局使能IGMP Snooping功能,VLAN10和VLAN20均使能IGMP Snooping功能,并且将VLAN内运行的IGMP Snooping版本修改为IGMPv3。
[SwitchA] igmp-snooping enable [SwitchA]] vlan 10 [SwitchA-vlan10] igmp-snooping enable [SwitchA-vlan10] igmp-snooping version 3 //将VLAN内运行的IGMP Snooping版本修改为IGMPv3 [SwitchA-Vlanif10] quit [SwitchA] vlan 20 [SwitchA-vlan20] igmp-snooping enable [SwitchA-vlan20] igmp-snooping version 3 //将VLAN内运行的IGMP Snooping版本修改为IGMPv3 [SwitchA-vlan20] quit
场景五:IGMPv3、非232组播组、不指定源地址
该场景的配置方法和场景一类似,只需要在VLANIF视图下配置igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3,同时在VLAN视图同时配置igmp-snooping version 3
将VLAN内运行的IGMP Snooping版本修改为IGMPv3即可
场景六:IGMPv3、232组播组、不指定源地址
该场景的配置方法和场景二类似,只需要在VLANIF视图下配置igmp version 3命令将接口上运行的IGMP版本修改为IGMPv3,同时在VLAN视图同时配置igmp-snooping version 3
将VLAN内运行的IGMP Snooping版本修改为IGMPv3即可。