问题描述
当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的 DST-MAC-Address 为 Multicast MAC Address,默认情况 交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。
为什么交换机不会学习 Multicast-MAC-Address?由于组播报文的目的地址为组播组地址,通过映射得到 Multicast-MAC-Address 的,在二层设备上多个接口会出现相同的 MAC Address,这与单播 MAC Address 学习机制冲突。如果增加对这类 MAC Address 学习,会增加设备研发的技术难度(一个问题通常有很多方案,但是历史的总总原因选择了我们现在看到的决断。无需过于纠结,只要知道现在这个东西是这个样子的就好了)。因此组播报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播报文。
这样不但浪费了网络带宽,而且影响了网络信息安全。
解决方案
IGMP Snooping 功能可以控制组播流量在以太网的泛洪范围,实现组播数据在数据链路层的转发和控制,避免不同组的组播流量被别组成员接收。
原理简述
当配置 IGMP Snooping 特性后,二层组播设备可以侦听和分析组播用户和上游路由器间的 IGMP 报文,根据这些信息建立二层组播转发表(L2-Multicast-Forward-Table),控制组播数据报文转发,这样就防止了组播数据在二层网络中的广播。
组播转发表(L2-Multicast Forward-Table)
二层组播转发表项中存在两类接口:
1)路由器端口(Router Port):二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。
2)成员端口(Member Port):又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。
<Huawei>display igmp-snooping port-info vlan 1 ----------------------------------------------------------------------- (Source, Group) Port Flag Flag: S:Static D:Dynamic M: Ssm-mapping ----------------------------------------------------------------------- VLAN 1, 2 Entry(s) (*, 239.1.1.1) GE0/0/3 -D- 1 port(s) (*, 239.2.2.2) GE0/0/2 -D- 1 port(s) ----------------------------------------------------------------------- <Huawei>display igmp-snooping router-port vlan 1 Port Name UpTime Expires Flags --------------------------------------------------------------------- VLAN 1, 1 router-port(s) GE0/0/1 00:00:18 00:02:54 DYNAMIC
路由器端口的生成过程:
1)动态路由器端口,由协议生成的路由器端口。收到源地址不为 0.0.0.0 的 IGMP General Query 报文或 PIM Hello 报文(三层组播设备的PIM接口向外发送的用于发现并维持邻居关系的报文)的接口都将被视为动态路由器端口。
2)静态路由器端口,由手工配置的路由器端口。
成员端口的生成过程:
1)动态成员端口,由协议生成的成员端口。收到 IGMP Membership Report 报文的接口,二层组播设备会将其标识为动态成员端口。
2)静态成员端口,由手工配置的成员端口。
形成转发表项
1)组成员加组机制,Multicast Router 将发送 Query 报文,Multicast Receiver 将响应 Report 报文;
2)接收 Query 报文,则该接口为 Router Port,并启动老化计时器(默认180s),当 Router Port 收到新的 Query 后刷新该计时器。
3)接收 Report 报文,则该接口为 Member Port,并启动老化计时器(默认180s),当 Router Port 收到新的 Report 后刷新该计时器。
关于 Membership Report 抑制:
为了能够检测到接口下是否有存活设备,同组组成员间的 Membership Report 不再相互抑制,即交换机不再向 Membership Receiver 泛洪 Membership Report 报文,而直接从 Router Port 发送出去。
维护转发表项
IGMP Snooping 设备通过监听 IGMP 离开报文,IGMP 成员关系报告报文决定特定端口是否还需要发送特定组播,具体过程如下:
1)Multicast Receiver 发送离开报文,并由 Switch 将离开报文从 Router Port 发出
2)IGMP Querier 将发送 Query 报文,并由 Switch 转发给所有 Member Port;
3)此时,Switch 将等待 Member Port 的 Report 报文
收到IGMP离开报文后,成员端口的老化定时器 = 健壮系数(默认 2)* 特定组查询间隔(默认1s)
Q:为什么收到离开报文后,Switch 没有直接从转发表中删除表项?
A:因为该接口下可能通过其他交换机接入多台其他设备,所以不能直接删除。
配置使用
[Huawei] igmp-snooping enable [vlan] igmp-snooping enable