IGMP Snooping
1.1 组播
由于传统通讯网络中的单播和广播两种形式存在一定局限,组播就应用而生了。组播又称为多目标广播、多播,是一种IPv6的包传送方式,它允许把所发消息传送给所有可能目的地中的一个经过选择的子集,即向明确指出的多种地址输送信息,是一种在一个发送者和多个接收者之间进行通信的方法,这种方式提高了数据传送效率,减少了骨干网络出现拥塞的可能性。组播在CDPD技术中的无线数据网络中也可以使用。
1.2 IGMP Snooping概述
IGMP Snooping,是Internet Group Management Protocol Snooping(互联网组管理协议窥探)的简称。IGMP Snooping为组播应用服务,监听网络上的IGMP包,实现IP组播MAC地址的动态学习。从而实现在二层交换机对组播报文的限制管理。
1.3 IGMP Snooping原理
运行IGMP Snooping的二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。
当二层设备没有运行IGMP Snooping时,组播数据在二层被广播;当二层设备运行了IGMP Snooping后,已知组播组的组播数据不会在二层被广播,而在二层被组播给指定的接收者。
IGMP Snooping和IGMP协议一样,两者都用于组播组的管理和控制,它们都使用IGMP报文。IGMP协议运行在网络层,而IGMP Snooping则运行在链路层,当二层以太网交换机收到主机和路由器之间传递的IGMP报文时,IGMP Snooping分析IGMP报文所带的信息,在二层建立和维护MAC表,以后从路由器下发的组播报文就根据MAC表进行转发。
IGMP Snooping只有在收到某一端口的IGMP离开报文或者某一端口的老化时间定时器超时的时候才会主动向端口发IGMP特定组查询报文,除此之外,它不会向端口发任何IGMP报文。
1.4 IGMP Snooping技术优势
传统的网络在一个子网内组播数据包当作广播处理,这样容易使网络流量大,造成网络拥塞。当交换机上实现了IGMP SNOOPING后,IGMP SNOOPING可以动态学习IP组播MAC地址,维护IP组播MAC地址的输出端口列表,使组播数据流只往输出端口发送,这样可以减少网络的流量。
1.5 IGMP Snooping应用
IGMP Snooping,就是监听IGMP协议包,提取相应的信息,形成组播成员关系表,然后对组播业务按照组成员关系进行转发,保证组成员收到正确的的组播业务,而其余主机无法收到。
IGMP Snooping相对于路由器和主机是透明的,它仅仅监听两者之间的IGMP报文,来建立自己的组播成员关系表。
1.5.1 基本概念
1.5.1.1 路由器端口
路由器端口(Router Port):交换机上朝向三层组播设备(DR或IGMP查询器)一侧的端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
1.5.1.2 成员端口
成员端口(Member Port):又称组播组成员端口,表示交换机上朝向组播组成员一侧的端口。交换机将本设备上的所有成员端口都记录在IGMP Snooping转发表中。
1.5.1.3 端口快速离开
端口快速离开:是指当交换机从某端口收到主机发送的离开某组播组的IGMP离开组报文时,直接把该端口从对应转发表项的出端口列表中删除。此后,当交换机收到对该组播组的IGMP特定组查询报文时,交换机将不再向该端口转发。在交换机的端口上,可以通过启用端口快速离开功能来节约带宽和资源。
1.5.1.4 加入一个组
当一个主机想加入一个组播组时,主机会发一个IGMP REPORT包,在此包中指定主机要加入的组播组。当交换机收到一个IGMP QUERY包时,交换机会把该包转发给同一个VLAN的所有其它端口,当端口下的想加入组播组的主机收到IGMP QUERY包后会回送一个IGMP REPORT包。当交换机收到一个IGMP REPORT包后,会建立一个二层组播条目,收到IGMP QUERY包的端口和IGMP REPORT包的端口会加入到该二层组播条目,成为它的输出端口。
图1-1
如上图所有的设备在一个子网内,假设该子网的VLAN是2。路由器运行IGMPv2协议,定时发送IGMP QUERY包。主机1想加入组播组224.1.1.1。交换机从1/3端口收到IGMP QUERY包后会记录此端口并把该包转发给端口1/1和1/2。主机1收到IGMP QUERY包后回送一个IGMP REPORT包,主机2因为不想加入组播组,不发IGMP REPORT包。交换机从端口1/1收到IGMP REPORT包后会把该包从查询端口1/3转发出去并且创建一个二层组播条目(假定该条目不存在),该二层组播条目包括以下几项:
表1-1
二层组播地址 | VLAN ID | 输出端口列表 |
01:00:5e:01:01:01 | 2 | 端口1,端口3 |
图1-2
如上图的条件与图1一样,主机1已经加入了组播组224.1.1.1,现在主机2想加入组播组224.1.1.1。当主机2收到IGMP QUERY包后回送一个IGMP REPORT包,交换机从端口1/2收到IGMP REPORT后会把该包从查询端口1/3转发出去并且会包端口1/2加入到二层组播条目中,该二层组播条目变为:
表1-2
二层组播地址 | VLAN ID | 输出端口列表 |
01:00:5e:01:01:01 | 2 | 端口1,端口2,端口3 |
1.5.1.5 离开一个组
为了能够组成一个稳定的组播环境,运行IGMP的设备(如路由器)会每隔一定的时间发送一个IGMP QUERY包给所有的主机。已经加入组播组或想加入组播组的主机收到该IGMP QUERY后会回送一个IGMP REPORT。
如果主机想离开一个组播组,可以有两种方式:主动离开和被动离开。主动离开就是主机发送一个IGMP LEAVE包给路由器,被动离开就是当主机收到路由器发来的IGMP QUERY后不回送IGMP REPORT。
与主机离开组播组的方式对应,在交换机上端口脱离二层组播条目的方式也有两种:超时离开和收到IGMP LEAVE包离开。
当交换机超过一定的时间没有从一个端口收到一个组播组的IGMP REPORT包时,该端口要从对应的二层组播条目中清除,如果该二层组播条目没有了端口,则删除二层组播条目。
当交换机的fast-leave配置为ENABLE时,如果某个端口收到一个组播组的IGMP LEAVE包时,该端口从对应的二层组播条目中清除,如果该二层组播条目没有了端口,则删除此二层组播条目。
1.5.1.6 MVR介绍
组播局域网注册(MVR)功能解决接收者处于不同VLAN时的泛洪问题,它使用一个专用的、手工配置的VLAN--组播VLAN,在二层网络中去转发组播流量,它同时能与IGMP Snooping 协同使用。
在二层设备上配置了组播VLAN后,三层设备只需把组播数据在组播VLAN内复制一份发送给二层设备,而不必在每个用户VLAN内都复制一份,从而节省了网络带宽,也减轻了三层设备的负担。
实现模式——基于子VLAN的组播VLAN:
多个接收者主机处于不用的用户VLAN,配置上行VLAN为组播VLAN,将所有的用户VLAN配置为上行VLAN的子VLAN,并在组播VLAN内使能IGMP Snooping。
图1-3
配置完毕后,IGMP Snooping将在组播VLAN中对路由器端口进行维护,而在各子VLAN中对成员端口进行维护。于是,RouterA只需发送一份组播报文给SwitchA即可,由SwitchA分发给组播VLAN有接收者的子VLAN。
1.6 IGMP Snooping工作机制
1.6.1 普遍组查询
IGMP查询器定期向本地网段内的所有主机与路由器(224.0.0.1)发送IGMP普遍组查询报文,以查询该网段有哪些组播组的成员。
在收到IGMP普遍组查询报文时,交换机将其通过VLAN内除接收端口以外的其它所有端口转发出去,并对该报文的接收端口做如下处理:
l 如果在路由器端口列表中已包含该动态路由器端口,则重置其老化定时器。
l 如果在路由器端口列表中尚未包含该动态路由器端口,则将其添加到路由器端口列表中,并启动其老化定时器。
1.6.2 报告成员关系
以下情况,主机会向IGMP查询器发送IGMP成员关系报告报文:
l 当组播组的成员主机收到IGMP查询报文后,会回复IGMP成员关系报告报文。
l 如果主机要加入某个组播组,它会主动向IGMP查询器发送IGMP成员关系报告报文以声明加入该组播组。
在收到IGMP成员关系报告报文时,交换机将其通过VLAN内的所有路由器端口转发出去,从该报文中解析出主机要加入的组播组地址,并对该报文的接收端口做如下处理:
l 如果不存在该组播组所对应的转发表项,则创建转发表项,将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
l 如果已存在该组播组所对应的转发表项,但其出端口列表中不包含该端口,则将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
l 如果已存在该组播组所对应的转发表项,且其出端口列表中已包含该动态成员端口,则重置其老化定时器。
说明:交换机不会将IGMP成员关系报告报文通过非路由器端口转发出去,因为根据主机上的IGMP成员关系报告抑制机制,如果非路由器端口下还有该组播组的成员主机,则这些 主机在收到该报告报文后便抑制了自身的报告,从而使交换机无法获知这些端口下还有该组播组的成员主机。
1.6.3 离开组播组
运行IGMPv1的主机离开组播组时不会发送IGMP离开组报文,因此交换机无法立即获知主机离开的信息。但是,由于主机离开组播组后不会再发送IGMP成员关系报告报文,因此当其对应的动态成员端口的老化定时器超时后,交换机就会将该端口对应的转发表项从转发表中删除。
运行IGMPv2或IGMPv3的主机离开组播组时,会通过发送IGMP离开组报文,以通知组播路由器自己离开了某个组播组。当交换机从某动态成员端口上收到IGMP离开组报文时,首先判断要离开的组播组所对应的转发表项是否存在,以及该组播组所对应转发表项的出端口列表中是否包含该接收端口:
l 如果不存在该组播组对应的转发表项,或者该组播组对应转发表项的出端口列表中不包含该端口,交换机不会向任何端口转发该报文,而将其直接丢弃;
l 如果存在该组播组对应的转发表项,且该组播组对应转发表项的出端口列表中包含该端口,交换机会将该报文通过VLAN内的所有路由器端口转发出去。同时,由于并不知道该接收端口下是否还有该组播组的其它成员,所以交换机不会立刻把该端口从该组播组所对应转发表项的出端口列表中删除,而是重置其老化定时器。
当IGMP查询器收到IGMP离开组报文后,从中解析出主机要离开的组播组的地址,并通过接收端口向该组播组发送IGMP特定组查询报文。交换机在收到IGMP特定组查询报文后,将其通过VLAN内的所有路由器端口和该组播组的所有成员端口转发出去。对于IGMP离开组报文的接收端口(假定为动态成员端口),交换机在其老化时间内:
l 如果从该端口收到了主机响应该特定组查询的IGMP成员关系报告报文,则表示该端口下还有该组播组的成员,于是重置其老化定时器;
l 如果没有从该端口收到主机响应特定组查询的IGMP成员关系报告报文,则表示该端口下已没有该组播组的成员,则在其老化时间超时后,将其从该组播组所对应转发表项的出端口列表中删除。
1.6.4 IGMP Snooping Proxying
通过在边缘设备上配置IGMP Snooping Proxying(IGMP Snooping代理)功能,可以减少其上游设备收到的IGMP报告报文和离开报文的数量,有效提高其上游设备的整体性能。配置了IGMP Snooping Proxying功能的设备(称为IGMP Snooping代理设备),在其上游设备看来,相当于一台主机;而在其下游主机看来,则相当于一台查询器。
说明:尽管在其上游设备看来,IGMP Snooping代理设备相当于一台主机,但主机上的IGMP成员关系报告抑制机制在IGMP Snooping代理设备上并不会生效。
1.6.5 交换机对组播协议报文的特殊处理规则
支持IGMP Snooping功能的交换机使能了三层组播路由后,在不同的情况下对各种组播协议报文的处理有所差异。具体规则如下:
(1)如果交换机上只使能了IGMP,或同时使能了IGMP和PIM,进行常规处理。
(2)如果交换机上只使能了PIM:
l 对于IGMP报文,将其当作未知报文在VLAN内进行广播;
l 对于PIM Hello报文,则会为其维护相应的动态路由器端口。
(3)在交换机上关闭IGMP时:
l 如果未使能PIM,则删除所有动态成员端口和动态路由器端口;
l 如果已使能PIM,则删除动态成员端口,只保留动态路由器端口。
(4)在交换机上关闭PIM时:
l 如果未使能IGMP,则删除动态路由器端口;
l 如果已使能IGMP,则保留所有动态成员端口和动态路由器端口。
1.7 IGMP Snooping WEB页面操作
1.7.1 全局设置
(1)在导航栏选择“交换管理>组播>全局设置”,进入组播全局设置界面。如图1-1所示;
(2)在全局设置界面设置全局使能或禁用,点击<应用>按钮完成操作。
图1-4 组播“全局设置”界面
1.7.2 VLAN设置
(1)在导航栏选择“交换管理>组播>VLAN设置”,进入组播VLAN设置界面。如图4-21所示;
(2)在VLAN设置界面, 配置VLAN内IGMP Snooping功能的信息,详细配置如表4-5所示。
(3) 单击<确定>按钮完成操作。
图1-5 组播VLAN设置界面
表1-3 VLAN内IGMP Snooping的详细配置
配置项 | 说明 |
VLAN ID | 当前要配置的VLAN的ID |
使能 | 设置在该VLAN内使能/禁止IGMP Snooping,只有在此项勾选“启用”时,才能进行后面配置项的设置。 |
快速离开 | 设置在该VLAN上启用或禁用快速离开功能 Ø 禁止 Ø 使能:使能后组播组成员可以快速离开组播组,当有组播成员发起离开时,不需要等待老化时间的到来,快速离开。 |
查询器 | 设置在该VLAN上启用或者禁用查询器功能 Ø 禁止 Ø 使能:如果使能了查询器,则需要设置相应的查询器间隔和查询源IP。 |
未知组播丢弃 | 设置在该VLAN上启用或禁用丢弃未知组播数据报文功能 (未知组播数据报文是指在IGMP Snooping转发表中不存在对应转发表项的那些组播数据报文): Ø 使能:交换机将丢弃所有收到的未知组播数据报文 Ø 禁止:交换机将在未知组播数据报文所属的VLAN内广播该报文 |
组播VLAN | 使能组播vlan功能 |
组播侦听版本 | 设置IGMP Snooping的版本,即设置IGMP Snooping可以处理的IGMP报文的版本 Ø V1/V2:IGMP Snooping能够对IGMPv1和IGMPv2的报文进行处理,对IGMPv3的报文则不进行处理,而是在VLAN内将其广播 Ø V3时,IGMP Snooping能够对IGMPv1、IGMPv2和IGMPv3的报文进行处理 |
组播数学习限制 | 设置允许端口加入的组播组最大数量 |
路由端口老化时间 | 设置路由端口的老化时间 |
主机端口老化时间 | 设置主机端口的老化时间 |
最大响应时间 | 设置最大响应时间 如果在最大响应时间内没有从该端口收到主机响应特定组查询的IGMP成员报文,将其从该组播组所对应转发表项的出端口列表中删除。 |
查询间隔时间 | 设置发送IGMP普遍组查询报文的时间间隔 |
查询源IP | 设置查询器发出的查询报文的源IP地址,有效的单播地址 |
用户VLAN | 设置绑定的用户VLAN。配置时组播vlan需要与用户vlan相同的方式加入用户口 |
1.7.3 接口设置
在导航栏选择“交换管理>组播>接口设置”,进入组播“接口设置表”界面如图4-22所示。
(1)在界面上,可以查看所有端口的配置情况。界面的右上角可以设置每页显示的条目,右下角可以通过箭头按钮进行翻页查看。
图1-6 “接口设置表”界面
(2)点击<编辑>按钮,进入编辑接口界面,如图4-23所示;
(3)设置端口是否开启“快速离开”功能;
(4)点击<应用>按钮完成操作。
图1-7 编辑接口界面
表1-4 组播接口设置参数说明
配置项 | 说明 |
接口 | 设置要进行配置的端口,包括以太网端口和二层聚合端口 |
快速离开 | 设置在指定端口上启用或禁用快速离开功能 |
1.7.4 组播转发表
(1)在导航栏上选择“交换管理>组播>组播转发表”,进入组播转发表界面,如图4-23所示。在界面可以查询到包括静态和动态的所有组播转发条目,表项详细信息如表4-7所示
图1-8 组播转发表
表1-5 组播转发表详细说明
标题项 | 说明 |
VLAN ID | 组播表项所属VLAN的ID |
IP组播组地址 | 组播组地址 |
类型 | 组播的类型 Ø 动态通过学习到的组播条目 Ø 通过手动添加的组播条目 |
成员端口 | 所有成员端口 |
(2)添加静态组播
①点击<添加>按钮,进入添加静态组播地址界面,如图4-24所示
②编辑输入配置参数,参数说明见表4-7.
③点击<应用>完成操作。
图1-9 添加静态组播界面
1.8 IGMP Snooping CLI命令行操作
1.8.1 IGMP SNOOPING缺省配置
l IGMP SNOOPING缺省是关闭的。
l Fast-leave缺省是关闭的。
l 路由端口老化时间缺省为105秒。
l 主机端口老化时间缺省为260秒。
l 查询器的省缺为关闭的。
1.8.2 IGMP SNOOPING通用配置
打开IGMP SNOOPING协议全局打开也可以单独打开部分VLAN;只有全局打开IGMP SNOOPING,某个VLAN的IGMP SNOOPING打开或关闭才能生效。
命令 | 说明 | 命令模式 |
[no] igmp-snooping | 关闭/使能IGMP Snooping | 全局配置模式/VLAN模式 |
[no] multicast unknown-drop | 未知组播策略配置 | VLAN模式 |
[no] debugging igmp snooping ( pkt | ipc | timer | event) | 禁止/使能IGMP SNOOPING的debugging | 全局配置模式 |
clear igmp snooping statistic | 清除IGMP SNOOPING报文统计 | 全局模式 |
[no] igmp snooping max-groups | 恢复/配置组播组个数限制 | VLAN模式 |
igmp snooping version (v1/2 | v3) | 配置IGMP Snooping版本 | VLAN模式 |
1.8.3 配置生存时间
命令 | 说明 | 命令模式 |
[no] igmp snooping router-aging-time | 恢复/配置路由端口老化时间 | VLAN模式 |
[no] igmp snooping host-aging-time | 恢复/配置成员端口老化时间 | VLAN模式 |
1.8.4 配置 fast-leave
命令 | 说明 | 命令模式 |
[no] igmp snooping fastleave | 禁止/使能快速离开模式 | 虚接口配置模式 |
[no] igmp snooping fastleave | 关闭/使能快速离开模式 | VLAN模式 |
1.8.5 配置静态路由
命令 | 说明 | 命令模式 |
[no] multicast static-router-port vlan | 取消/配置静态路由端口 | 虚接口配置模式 |
[no] multicast static-router-port | 取消/配置静态路由端口 | VLAN模式 |
[no] multicast static-groupvlan | 取消/配置静态成员端口 | 端口模式 |
[no] multicast static-groupinterface | 删除/配置静态成员端口 | VLAN模式 |
1.8.6 配置查询器
命令 | 说明 | 命令模式 |
igmp snooping (querier | proxy) | 配置工作模式 | VLAN模式 |
[no] igmp snooping general-query source-ip | 恢复/配置查询报文的源IP地址 | VLAN模式 |
[no] igmp snooping max response-time | 恢复/配置最大响应时间 | VLAN模式 |
[no] igmp snooping general-query interval | 恢复/配置查询器查询时间 | VLAN模式 |
1.8.7 显示信息
命令 | 说明 | 命令模式 |
show igmp snooping vlan (all |) | 显示VLAN的IGMP SNOOPING状态 | 全局模式 |
show igmp group | 显示IGMP SNOOPING配置 | 全局模式 |
show igmp snooping statistic | 显示IGMP SNOOPING统计信息 | 全局模式 |
1.8.8 MVR通用配置
命令 | 说明 | 命令模式 |
[no] multicast-vlan enable | 使能组播VLAN功能 | VLAN模式 |
[no] multicast-vlan user-vlan [ to] | 绑定用户VLAN | VLAN模式 |
1.9 IGMP SNOOPING配置示例
1.9.1 配置任务简介
配置任务 | 说明 |
使能IGMP Snooping | 必选 |
未知组播策略 | 必选 |
配置查询报文的源IP地址 | 可选 |
配置工作模式 | 可选 |
静态成员/路由端口 | 可选 |
定时器配置 | 可选 |
组播组个数限制 | 可选 |
清除IGMP SNOOPING报文统计 | 可选 |
1.9.2 示例配置
1.9.2.1 组网需求
● Switch对组播报文进行监控。
● Switch对组播组vlan 1、200、300进行监控。
● 成员1、成员2、成员3能够加入/离开组播组。
组网拓扑图
图1-10
1.9.2.2 配置思路
● 创建vlan 1、100、200,端口2配置pvid为100、端口3配置pvid为200、端口4为trunk且允许所有vlan。
● 使能igmp snooping并关联vlan1、100、200。
● 配置igmp snooping vlan1、100、200的快速离开模式使能。
1.9.2.3 配置步骤
(1)创建vlan与配置端口vlan设置
SWITCH# configure terminal
SWITCH(config)# vlan 100,200
SWITCH(config)# interface gigabitethernet 1/0/2
SWITCH(config-ge1/0/2)# switchport access vlan 100
SWITCH(config-ge1/0/2)# interface gigabitethernet 1/0/3
SWITCH(config-ge1/0/3)# switchport access vlan 200
SWITCH(config-ge1/0/3)# interface gigabitethernet 1/0/4
SWITCH(config-ge1/0/4)# switchport mode trunk
SWITCH(config-ge1/0/4)# switchport trunk permit all
(2)使能igmp snooping与关联vlan
SWITCH(config)# igmp snooping
SWITCH(config)# vlan 1
SWITCH(Vlan1)# igmp snooping
SWITCH(Vlan1)# vlan 100
SWITCH(Vlan100)# igmp snooping
WITCH(Vlan100)# vlan 200
SWITCH(Vlan100)# igmp snooping
(3)igmp snooping vlan1、100、200配置快速离开模式
SWITCH(Vlan1)# igmp snooping fastleave
SWITCH(Vlan1)# vlan 100
SWITCH(Vlan100)# igmp snooping fastleave
SWITCH(Vlan100)# vlan 200
SWITCH(Vlan200)# igmp snooping fastleave
4.验证配置
#查看igmp snooping配置:
SWITCH(config)# show igmp snooping vlan all
SWITCH(config)# show igmp snooping vlan all
vlan 1
igmp snooping
igmp snooping fastleave
vlan 100
igmp snooping
igmp snooping fastleave
vlan 200
igmp snooping
igmp snooping fastleave