诞生原因:
由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以这个过程它并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在以前学习的MAC地址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送接收到的组播报文,这样一来不但会造成带宽的极大浪费,而且影响网络安全。注意:对应224.xxx.xxx.xxx的报文时都直接回泛洪,因为只是协议报文。
IGMP Snooping ( Internet Group Management Protocol Snooping)是IPv4环境下,在二层交换机上提供的一种组播机制。通过侦听组播路由器和用户主机之间发送的IGMP协议报文,在交换机上创建二层组播转发表(组播组和该组播接收者的端口对应关系),当交换机转发组播报文时,报文按照交换机组播转发表转发。如果没有对应的组播转发表项,则泛洪到所有端口。否则,仅泛洪到有接收者的端口上去。
基本概念:
一、路由器端口:
路由器端口是指朝向组播路由器的端口,数据链路层组播设备从该端口接收组播报文。路由器端口分为如下两类:
二、组播组成员端口:
是指朝向组成员主机的端口,数据链路层组播设备从该端口发出组播报文。组播组成员端口简称为成员端口,分为如下两类:
出端口信息是二层组播转发表项中的一个重要信息,包括路由器端口和成员端口。总的来说,IGMP snooping将交换机的接口划分了路由器接口和组播组成员端口,并且都分为两种方式,第一种是静态,第二种是动态。
三、动态生成的组播转发表项(4部分内容):
包含路由器端口和组播转发表项,除此之外,每条表项还包括组播组地址和VLAN编号:
运行机制:
当交换机收到IGMP通用查询报文时,如果收到通用查询报文的端口原来就是路由器端口,以太网交换机就重置该端口的老化定时器;如果收到通用查询报文的端口原来不是路由器端口,则交换机启动对该端口的老化定时器(老化时间为180秒或PIM Hello报文携带的Holdtime值,其中Holdtime缺省为105秒)。
当以太网交换机收到IGMP报告报文时,首先判断该报文要加入的IP组播组对应的MAC组播组是否已经存在。
• 如果不存在则新建MAC组播组,并将接收报告报文的端口加入该MAC组播组中,同时启动该端口的老化定时器(健壮系数 × 普遍查询时间间隔 + 最大响应时间),将该端口所属VLAN下存在的所有路由器端口加入到此MAC组播转发表中,而且新建IP组播组,并将接收报告报文的端口加入到IP组播组中。
• 如果该报文对应的MAC组播组已经存在,但是接收报告报文的端口不在该MAC组播组中,则将接收报告报文的端口加入MAC组播组中并启动该端口的老化定时器,然后判断此报文对应的IP组播组是否存在:如果不存在,则新建IP组播组并把接收报告报文的端口加入到IP组播组中,如果存在则将接收报告报文的端口加入到IP组播组中。
• 如果该报文对应的MAC组播组已存在,并且接收报告报文的端口也已经存在于该MAC组播组,则仅重置接收报告报文的端口上的老化定时器(也可以理解为刷新)。
当以太网交换机收到对某IP组播组的离开报文,则会向接收此离开报文的端口发送所离开组的特定组查询报文,以确认此端口相连的主机中还有没有此组播组的其他成员,同时启动一个响应查询定时器(特定组查询消息发送时间间隔 × 健壮系数)。如果在该定时器超时的时候还没有收到该组播组的报告报文,则将该端口从相应MAC组播组中删去。如果MAC组播组没有组播成员端口时,交换机将通知组播路由器将该分支从组播树中删除。
快速离组机制:当一个交换设备的接口只连接一个设备的时候(access接口),当设备发送了离组报文的时候就会立刻关闭这个接口的相应流量转发,不会发送查询报文。
IGMP Snooping版本:
IGMP协议用于组成员关系管理,运行于三层组播设备和成员主机之间的网段,有v1、v2、v3三个版本(默认是版本2,只能处理IGMP版本1,2的报文,要对IGMPv3报文进行处理,只有配置版本3)。
在二层设备上配置IGMP Snooping版本,设备可以处理相应版本的IGMP报文。一般二层设备上配置和三层组播设备一致的版本。如果三层组播设备没有启用IGMP,则在二层设备上配置和成员主机相同或高于成员主机的版本。
同一VLAN内必须运行同一个版本的IGMP协议。如果VLAN内存在支持不同版本的主机,需要配置IGMP Snooping版本,使设备可以处理所有主机的报文。
华为设备相关配置:
一、快速离开配置:
[R1-vlan10]igmp-snooping prompt-leave //在对应vlan中进行配置,还可以在后面跟相应的策略,只针对对应的组播组进行控制,需要配置ACL进行配合。
二、IGMP snooping配置:
先配置全局,再配置相应的vlan。
三、配置对应版本:
概念:
配置IGMP Snooping功能后,交换机对上游IGMP查询者的Query报文和下游主机的Report和Leave报文都不修改地转发。当网络中存在大量用户主机时,过量的IGMP报文给上游设备带来处理压力。配置IGMP Snooping Proxy功能后,交换机可以代替组播路由器向下游发送IGMP Query报文给接收者主机,也可以代替大量下游接收者主机向上游路由器发送IGMP Report和IGMP Leave报文,有效节约上游三层设备和本设备之间的带宽。
配置了IGMP Snooping Proxy功能的设备称为IGMP Snooping代理,在其上游设备看来,它就相当于一台主机;在其下游设备看来,它相当于一台查询器。
运行机制:
IGMP普遍组查询报文:
交换机向本VLAN内除接收接口以外的所有接口发送IGMP普遍组查询报文;同时根据本地维护的组成员关系生成报告报文,向所有路由器端口发送,不需要再等到主机回复进行转发。
IGMP特定组查询报文/IGMP特定源组查询报文:
若该组对应的转发表项中还有成员端口,则向所有路由器端口回复该组的报告报文,没有的话就不会做任何回应。这里的话不用告诉下行的设备。
IGMP报告报文:
•若不存在该组对应的转发表项,则创建转发表项,将接收接口作为动态成员端口添加到出接口列表中,并启动其老化定时器,然后向所有路由器端口发送该组的报告报文;这里因为是新加入的组播组,所以要求必须转发到路由器,路由器才能下放流量。
•若已存在该组对应的转发表项,且其出接口列表中已包含该动态成员端口,则重置其老化定时器;不需要转发到路由器,因为路由器现在正常下放组播的流量。
•若已存在该组对应的转发表项,但其出接口列表中不包含该接收接口,则将该接口作为动态成员端口添加到出接口列表中,并启动其老化定时器;这里也不需要转发到路由器,因为流量是已经下发的,只需要多添加下放的接口即可。
•这里需要注意的是交换机开启了IGMP Snooping的交换机后,下游主机就不会互相抑制了。因为不会进行成员接口的信息的互相转发的。一个交换机组成员接口只会接收一个相同的组成员报告报文,也就是接收最后的报告报文,不同组的报告报文可以同时存在同一个接口。
IGMP离开报文(仅在IGMPv2中存在):向接收接口发送针对该组的特定组查询报文。只有当删除某组播组对应转发表项中的最后一个成员端口时,才会向所有路由器端口发送该组的离开报文。
华为设备配置:
注意:
概述:
在igmp snooping基础之上配置,目的是解决在trunk链路上对不同VLAN用户复制多份数据占用带宽的问题(只针对组播数据流量而言),trunk接口的路由器方向需要配置为多个子接口。路由器发送查询的报文按正常的vlan进行转发。
对于通用查询报文,会每个VLAN都发送,但是对于其他的被动的发出的查询报文( IGMP特定组查询报文/IGMP特定源组查询报文),会根据对方请求的vlan发送,在交换机上开启了组播vlan,也就是说交换机发送回来的组播信息都通过组播vlan,包括被动查询报文。
例如:上游路由器不必在每个用户VLAN(VLAN2和VLAN3)内都复制一份组播流(查询报文),而是数据流在组播VLAN(VLAN4)内复制一份后发送给二层设备(连接下层的接口PVID只要属于对于的组播VLAN,都会向下层进行发送)。这样就避免了组播流在上游设备的重复复制,不仅节省了网络带宽,又减轻了上游路由器的负担。
具体原因是,路由器接收到的报告报文都来自组播vlan的,所以路由器下放的所有组播流量都通过组播vlan进行下发。
对比普通二层组播:
华为设备相关配置:
一、首先配置用户VLAN:
二、配置用户VLAN绑定到组播VLAN
查看命令: 使用命令display multicast vlan mvlan [ vlan-id ],查看组播VLAN的信息。
参考资料:华为hedex文档