目录
二层中组播数据转发存在的问题
IGMP Snooping
基本概念
IGMP Snooping Internet组播组管理协议窥探,是IPv4环境下在二层交换机上提供的一种组播机制,管理和控制IP组播流在Vlan内的精确转发,解决二层组播泛洪问题
- 通过侦听组播路由器和用户之间发送的IGMP报文,在交换机上创建二层组播转发表
- 当交换机转发部分组播报文时,按照此组播转发表进行转发(如果没有对应的组播转发表项,泛洪到所有端口)
二层组播转发表
包含三个信息:
组播地址/组播MAC地址、Vlan信息、端口(成员端口/路由器端口)
路由器端口(Router-port):
路由器端口会出现在所有组播组中,即路由端口是针对所有组播组来定义的
是二层组播设备上连接组播路由器(三层组播设备)的端口,用于接收组播数据
主要分为动态的和静态的接口
动态路由器端口: 端口老化时间300s
收到源地址不为0.0.0.0的IGMP Query / DVMRP / PIM Hello报文的接口,动态识别成路由连接口
IGMP Snooping协议需要开启动态学习路由端口
静态路由器端口:端口老化时间260s
手工配置为路由器端口的端口
成员端口:
成员端口只会出现在所加的组播组中,即成员端口是针对某个组播组来定义的
二层组播设备上连接组成员主机的端口,用于发送组播数据
主要分为静态的和动态的
动态成员端口:
收到IGMP Report报文的接口,动态识别为成员端口
IGMP Snooping协议需要开启动态学习成员端口
静态成员端口:
手工添加的成员端口
动态端口老化时间
只要是动态的端口,只要是端口上维持“动态”特性的协议报文(PIM或IGMP)在端口老化时间内未收到,端口就会从组播转发表中消失
动态成员端口
通过IGMP成员报告报文生成,130s老化时间
当交换机收到IGMP离开报文后,老化时间由130s变为2s(2s=健壮系数*特定组查询间隔)
动态路由器端口
通过PIM Hello报文生成的老化时间105s,通过IGMP 查询报文生成的老化时间180s
当端口收到IGMP报文或PIM Hello报文后,会刷新组播路由器中的路由器端口的老化时间
工作过程
IGMP Snooping 转发表建立
交换机在路由器端口上第一次收到普通组查询报文,会向其它所有端口泛洪,并将此接口标记为路由端口
主机收到查询报文后,回应成员报告报文
交换机收到报告报文后只向路由器端口转发,不会泛洪,同时将此接口标记为成员端口
此时交换机已经生成了相应的组播二层表项,后续该组播组的数据在经过交换机时不会泛洪,只会传到该组播组对应的成员端口
IGMP Snooping 删除成员端口
主机离组发送离组报文后,交换机收到此报文不会立刻删除该成员接口,会先转发给路由器端口
路由器收到离组报文后,发送特定组查询报文,向交换机的成员端口泛洪
该端口在2s内没有收到报告报文,则删除该成员端口,如果该成员端口收到了报告报文,重置成员端口老化时间
注意事项
1、当组播源和组成员之间为二层网络时,此时网络设备是不需要配置IGMP协议以及PIM协议的,如果此时在网络设备上配置了IGMP Snooping,则会出现以下问题(此时路由端口手动配置)
当组成员加入组播源之后,网络设备就会建立好二层组播转发表项
此时由于没有查询器来周期发送查询报文,导致组成员也就不会周期发送成员报告报文
此时会使得二层转发表项老化,造成组成员无法收到组播数据
此时就需要在二层设备上手动配置自己为查询器来定时发送IGMP查询报文,以此来刷新二层组播转发表项
2、无线组播场景下,可以在有线二层设备上开启IGMP Snooping,也可以在无线设备上开启IGMP Snooping(防止组播数据泛洪到其它STA)