IGMP Snooping 1
定义:igmp snooping运行在数据链路层,是二层以太网交换机上的组播约束机制,用于管理和控制组播组。
当二层以太网交换机收到主机和路由器之间传递的igmp报文时,igmp snooping分析igmp报文所带的信息。当监听到主机发出的igmp主机报告报文时,交换机就将该主机加入到相应的组播表中;当监听到主机发出的igmp离开报文时,交换机就将删除与该主机对应的组播表项。通过不断地监听igmp报文,交换机就可以在二层建立和维护mac组播地址表。之后,交换机就可以根据mac组播地址表转发从路由器下发的组播报文。
没有运行igmp snooping时,组播报文将在二层广播,如图3-1所示。
运行igmp snooping后,报文将不再在二层广播,而是进行二层组播,如图3-2所示.
1、igmpv3 snooping简介
s9500交换机支持igmpv1、 igmpv2、igmpv3协议。igmpv3协议是在igmpv2报文的基础上的扩充。igmpv3允许主机指定接收某些网络发送的某些组播组,相比以前的版本,增加了主机的控制能力,不仅可以指定组播组,还能指定组播的源。
igmp查询报文分通用查询报文、特定组查询报文,下文着重介绍igmpv3新增的报文。
1.1 查询报文
igmpv3新增特定源组查询报文格式如下,从图中可以分辨igmpv2、igmpv3查询报文的格式的不同:
对于通用查询报文,igmpv2报文长度为8字节,igmpv3长度为12字节。
对于特定组查询报文,igmpv2报文长度为8字节,igmpv3长度大于等于12字节。
设备收到igmpv3查询报文时,立即在vlan内透传该报文,然后再转换为igmpv2查询报文,进行后续处理。
1.2 成员关系报告报文
从图中可以分辨igmpv2、igmpv3查询报文的格式的不同:
igmpv2成员关系报文类型为0x16;
igmpv3新增igmpv3成员关系报告报文,igmpv2协议不能识别该报文。
收到igmpv3 report报文时,立即在vlan内透传该报文,然后再转换为igmpv2 report报文,进行后续处理。
igmpv3 report报文只支持include模式,即除了include { null } 报文转换为igmpv2 leave报文外,其它类型的报文都解析为igmpv2 report报文
1.3 igmp snooping的实现
1.3.1 与igmp snooping相关的概念
为描述方便,先介绍一下以太网交换机上与igmp snooping相关的概念。
路由器端口(router port):交换机上连接组播路由器的端口,而不是指路由器设备上的端口。
组播成员端口:以太网交换机上与组播组成员相连的端口。此处的组播组成员是加入某个组播组的主机。
mac组播组:以太网交换机维护的以mac组播地址标识的组播组。
路由器端口老化时间:路由器端口老化定时器设置的时间,如果在此定时器超时后还没有收到igmp通用查询报文,交换机就认为这个端口不再是一个路由器端口。
组播组成员端口老化时间:当一个端口加入ip组播组的同时,启动该端口的老化定时器,组播组端口成员老化时间就是该定时器设置的时间。如果在此定时器超时后还没有收到igmp报告报文,那么以太网交换机就向该端口发送igmp特定组查询报文,如果还是接收不到igmp报告报文,则交换机就认为此端口不再是该组播组成员端口。
最大响应查询时间:当向组播成员端口发送igmp特定组查询报文的同时,以太网交换机会启动一个响应查询定时器,最大响应查询时间就是该定时器设置的时间。如果在最大响应查询时间之内没有收到igmp报告报文,以太网交换机就把该端口从组播成员端口中删去。
1.3.2. 利用igmp snooping实现二层组播
以太网交换机通过运行igmp snooping实现对igmp报文的侦测,并为主机及其对应端口与相应的组播组地址建立映射关系。为实现igmp snooping,二层以太网交换机对各种igmp报文的处理过程如图3-5所示。
igmp通用查询报文:igmp通用查询报文是组播路由器向组播组成员发送的报文,用于查询哪些组播组存在成员。当收到igmp通用查询报文时,如果收到通用查询报文的端口原来就是路由器端口,以太网交换机就重置该端口的老化定时器;如果收到通用查询报文的端口原来不是路由器端口,则交换机启动对该端口的老化定时器。
igmp特定组查询报文:igmp特定组查询报文是组播路由器向组播组成员发送的报文,用于查询特定组播组是否存在成员。当以太网交换机收到igmp特定组查询报文时,只向被查询的ip组播组发特定组查询。
igmp报告报文:igmp报告报文是主机向组播路由器发送的报告报文,用于申请加入某个组播组或者应答igmp查询报文。当以太网交换机收到igmp报告报文时,首先判断该报文要加入的ip组播组对应的mac组播组是否已经存在。
如果对应的mac组播组不存在,不只是通知路由器有成员加入某个组播组,还会新建mac组播组,并将接收报告报文的端口加入该mac组播组中,同时启动该端口的老化定时器,将该端口所属vlan下存在的所有路由器端口加入到此mac组播转发表中,而且新建ip组播组,并将接收报告报文的端口加入到ip组播组中。
如果该报文对应的mac组播组已经存在,但是接收报告报文的端口不在该mac组播组中,则将接收报告报文的端口加入mac组播组中并启动该端口的老化定时器,然后判断此报文对应的ip组播组是否存在:如果不存在,则新建ip组播组并把接收报告报文的端口加入到ip组播组中,如果存在则将接收报告报文的端口加入到ip组播组中。
如果该报文对应的mac组播组已存在,并且接收报告报文的端口也已经存在于该mac组播组,则仅重置接收报告报文的端口上的老化定时器。
igmp离开报文:igmp离开报文是组播组成员向组播路由器发送的报文,用于告知路由器主机离开了某个组播组。当以太网交换机收到对某ip组播组的离开报文,则会向接收此离开报文的端口发送所离开组的特定组查询报文,以确认此端口相连的主机中还有没有此组播组的其他成员,同时启动一个响应查询定时器。如果在该定时器超时的时候还没有收到该组播组的报告报文,则将该端口从相应mac组播组中删去。如果mac组播组没有组播成员端口时,交换机将通知组播路由器将该分支从组播树中删除。
可以通过将二层交换机的某个端口配置为组播组成员来响应组播路由器的igmp查询报文,从而避免组播路由器认为当前网段没有组播组的成员而取消相应的路径。具体配置原理及配置过程可参见“6.3.10 配置路由器加入指定组播组”。
缺省情况下,二层交换机端口不加入任何组播组。
指定的端口必须属于该vlan,且该vlan使能了igmp snooping协议,否则配置不会起作用。