IGMP原理与配置
IGMP:因特网组管理协议
-
IGMP:运行在最后一跳组播路由和组播组成员之间,用于最后一跳路由器维护组成员关系,用于接收者请求加入想要加入的组播组,或者离开想要离开的组播组
-
组播网络感知组播组成员的方式:
- 手工静态配置:
- 在接口视图下配置:
- 工作量大,灵活性差,但是稳定,一旦创建,永不老化
- 动态感知:运行IGMP协议
- 灵活性高,配置简单(常用)
- 手工静态配置:
-
IGMP:封装在IP之上,协议号2
-
最后一跳组播路由器与组播组成员之间通过交互IGMP报文,生成IGMP组表项和IGMP路由表项
-
IGMP组表项
- 用于记录和维护组成员和组播关系,由组成员发送成员关系报告报文触发创建,表项老化时间130s
-
IGMP路由表项
- 用来扩展组播路由表项的下游接口
-
组播路由表项
- 最后一跳路由器的组播路由基于IGMP组表项和IGMP路由表项的信息生成,用于指导组播流量转发
-
查询表项的命令
-
dis igmp group---------查看IGMP组表项 dis igmp routing-------查看IGMP路由表项 dis multi rou--------查看组播路由表项
-
-
-
IGMP版本
IGMPv1
-
只有两种报文类型
- 普遍组查询报文
- 目的IP地址为224.0.0.1(所有节点)都接收
- 由查询器(最后一跳)周期发送(60s一次)
- 用于检查是否存在组成员和维护组成员关系(IGMP组表项)
- 成员关系报告报文(report):
- 目的IP地址为想要加入的或者所处的组播组地址
- 当PC想要加入某个组播组时,主动组播发送report报文,请求加入该组播组;
- 当PC接收到不变的查询报文,回复report报文
查询器:负责发送普遍组查询报文
- IGMPv1不支持查询器的选举,有其他组播路由协议选举的DR成为查询器
- 普遍组查询报文
-
报文参数:两种报文的格式一致
- version:4bit,版本号,此处为1
- type:报文的类型
- 0x11:普遍组查询报文
- 0x12:成员关系报告报文
- unsed:8bit,保留字段
- checksum:2B,校验和
- group address:4B,组地址
- 在qurey(查询报文)中为0.0.0.0
- 在report报文中为想要加入的组播组地址
-
响应抑制机制:
- 作用:减少重复协议报文泛滥,减轻查询器的负担
- 工作机制
- 当组播组成员接收到query报文时,启动最大响应时间计时器,时间为0~10s之间的随机值,如果该组存在其他多个组成员,计时器先超时的先发送report报文,该组中其他组成员接收到该report报文,关闭计时器,不在发送report报文
- last-reporter:最后一个通告者,谁先发送report谁就是last report
- 当组播组成员接收到query报文时,启动最大响应时间计时器,时间为0~10s之间的随机值,如果该组存在其他多个组成员,计时器先超时的先发送report报文,该组中其他组成员接收到该report报文,关闭计时器,不在发送report报文
-
缺陷:最大响应时间不能修改,颗粒度太大
-
静默离开
- 接收者离开组播组,不发送任何报文通知查询器,当接收到查询器发送的query报文时,也不会响应,当查询器在130s后还没有接收到该组的report报文,则认为该组播组不存在组成员,则将对应的组播组从表项中删除
-
总结
- IGMPv1的缺陷:
- 没有查询器的选举机制,需要依赖其他组播路由协议选举
- 最大响应时间10s,不能修改,颗粒度太大
- 静默离开在130s内查询器还会不断向该接口发送组播流量,从而造成资源浪费
- IGMPv1的缺陷:
IGMPv2
- IGMPv2兼容IGMPv1
- IGMPv2对IGMPv1的改进
- 成员离组的改进
- 当IGMPv2的主机想要离开某个组播组时,直接发送离组报文(leave),目的IP地址为224.0.0.2,leave报文中携带组播组地址为想要离开的组播组地址
- 当查询器接收到leave报文后:
- 如果该报文是last reporter发送的,则发送2个特定组查询报文,时间间隔缺省为1s,目的IP地址为接收者想要离开的组播组地址
- 如果不是last reporter发送的,则不触发特定组查询报文,不清除IGMP组表项
- 新增了两种报文
- leave报文:离组报文,组成员朝查询器发送离组报文
- 特定组查询报文:查询器朝组成员发送的,目的地址为组成员想要离开的组播组地址
- 组表项老化方式:
- 130s内没有接收到report报文,则自动老化
- last reporter发送leave报文,触发特定组查询报文,2s后清除IGMP表项
- 报文参数的变化
- 去掉了version;华为默认IGMP为2
- type:IGMPv2的报文类型,1B
- 0x11:普遍组查询报文/特定组查询报文
- 0x12:IGMPv1成员关系报告报文
- 0x16:IGMPv2成员关系报告报文
- 0x17:成员离开报文(leave报文)
- MAX response time:最大的响应时间,IB
- 普遍查询报文:默认10.0s,单位0.1s,最大可以修改为25.0s
- 特定组查询报文:默认1.0s
- checksum:校验和
- group address:4B,组地址
- 普遍查询报文中,为0.0.0.0
- 特定组查询报文中,为想要查询的组播组地址
- 成员关系报告报文中,为想要加入的组播组地址
- leave报文中,为想要离开的组播组地址
- 查询器的选举机制的改进
- 作用:为了避免网络中重复的组播流量的发送,建立和维护IGMP组表项,转发组播流
- IGMPv2依靠自身支持选举查询器:
- 当多路访问网络中存在多个网关设备时,初期都认为主机是查询器,互相发送普遍组查询报文(224.0.0.1),当设备接收到其他路由器发送的查询报文后,开始查询器的选举,IP地址小的成为查询器,后续该网络中的组播流量以及查询报文都由查询器负责转发
- IGMPv2的不足:在IGMPv1与IGMPv2报文中无法携带组播源信息,无法支持SSM模型
- 成员离组的改进
IGMPv3
-
IGMPv3可以兼容IGMPv1和IGMPv2
-
与IGMPv2比较:
- 查询器选举机制一致
- 查询报文分为三种
- 普遍组查询报文:与V1、v2作用一样
- 特定组查询报文:与V2作用一样
- 特定源组查询报文:新增的报文,查询该组成员是否愿意接受特定源发送的组播流量
- 没有报告响应抑制
- 因为加入同一个组播组的组成员可能期望接收的组播源不同
- 没有专门的离组报文,但是可以使用特殊的成员关系报告报文(6种)实现离组
- include
- exclude
- changge to include mode
- change to exclude mode
- allow new source
- block old source
-
IGMPv3的报文参数
-
查询报文
- type:IGMPv3的报文类型
- 0x11:普遍组查询报文/特定组查询报文/特定源组查询报文
- max response time:最大响应时间,默认10.0s
- checksum:校验和
- group address:
- 普遍查询报文中,为0.0.0.0
- 特定组查询报文中,为想要查询的组播组地址
- 特定组和特定源组查询报文种,为想要查询的组播组地址
- number of source:携带的组播源地址数量
- source address:组播源地址
- type:IGMPv3的报文类型
-
成员关系报告报文
-
作用:除了报告组播组和组成员的关系,还通告组成员希望接收的组播源地址
-
目的IP地址为224.0.0.22
-
通告组播源的模式
- include:表示接收指定组播源发送的组播流量
- exclude:表示拒绝接收指定组播源发送的组播流量
-
报文参数:
-
type:0x22,IGMPv3成员关系报告报文
-
保留字段
-
checksum:头部校验和
-
number of group record:组记录的数量
-
group record(n):组记录列表,记录组播组和组播源的关系
-
组记录的参数
-
record type:
当前状态报告
-
mode is include:接收源地址列表中包含的组播源发往组播地址的组播数据,如果指定源地址列表为空,则该消息为无效消息
-
mode is exclude:不接收源地址列表中包含的源发往组播地址的组播流量过滤模式改变报文
-
change to include:
- 模式由exclude切换到include,接收源地址列表种包含的新组播源发送到组播组地址的数据,如果指定地址列表为空,则认为主机离开该组
-
change to exclude
- 模式由include切换到exclude,拒绝接收源地址列表中组播源发往组的组播流量
源列表改变
-
allow new source
- 表示在现有的基础上,需要接收某个源地址发送到该组播组的组播流量
-
-
-
-
-
如果当前关系为include,则向现有的源地址列表中添加该组播源地址
- 如果当前关系为exclude,则从现有的源地址列表中删除该组播源地址
-
block old source
- 表示在现有的基础上,不再接受从某个源地址发送到该组播组的组播流量
-
如果当前关系为include,则从现有的源地址列表中删除该组播源地址
- 如果当前关系为exclude,则从现有的源地址列表中添加该组播源地址
-
number of source:组播源列表中源地址的数量
-
group addess:加入的组播组地址
-
source addess(n):跟组播组地址相关联的组播源地址列表
-
-
IGMP各版本之间的差异
-
机制 IGMPv1 IGMPv2 IGMPv3 查询器选举 依靠其他协议 自己选举(选择IP地址小的) 自己选举(选择IP地址小的) 成员离开方式 静默离开 主动发送leave报文 主动发送离开报文(特别的成员关系报告报文) 特定组查询 不支持 支持 支持 特定源组查询 不支持 不支持 支持 兼容性 IGMPv1 IGMPv1和IGMPv2 -
配置顺序
-
- 全局开启组播路由功能 - mutilcast rou - 连接组播源的接口使能PIM SM - 连接组成员的接口 开启IGMP,再选择版本
-
IGMP snooping
-
作用:解决组播数据在二层网络中泛洪,导致链路带宽浪费以及网络安全等问题
-
原理:通过在二层交换机上开启IGMPsnooping功能,侦听IGMP协议报文,建立相应的二层组播转发表项,当组播流量进入交换机,交换机根据二层组播转发表转发组播数据报文,控制组播流量在二层网络中的泛洪范围,保证组播流量的安全性和有偿性
-
二层组播转发表项的接口类型
- 路由器端口:连接查询器的接口,接收到IGMP查询报文或者pim的hello报文的接口成为路由器端口
- 当交换机接收到成员关系报告报文或者离组报文时,查二层组播转发表,朝路由器端口转发
- 成员端口:连接组成员的接口,接收到成员关系报告报文的接口
- 当交换机接收到查询报文,朝所有成员接口转发;
- 当接收到组播流量时,查看二层组播转发表项,朝组对应的成员端口转发
- 路由器端口:连接查询器的接口,接收到IGMP查询报文或者pim的hello报文的接口成为路由器端口
-
注意:开启IGMP snooping后,报告报文的响应抑制,机制失效
-
配置步骤
-
1.全局视图下使能IGMP snooping功能 [huawei]igmp-snooping enable 2.在对应vlan视图中使能IGMP snooping [huawei-vlanx]igmp-snooping enable 3.如果需要侦听IGMPv3的报文,则需要配置: [huawei-vlanx]igmp-snooping version 3 4.配置完成后,交换机可以侦听IGMP协议报文,动态创建二层组播转发表项
-
除了可以动态学习,还可以静态指定路由器端口和成员端口,命令如下
-
静态指定路由器端口: [huewei-gig0/0/1]igmp-snooping static- vlan x 静态指定成员端口 [huawei-gig0/0/2]l2-multicast static-group source-addess x.x.x.x group-addess 组播组地址 vlan x 组播组地址可以指定单个组播组地址,也可以指定一个范围 [huawei-gig0/0/2]l2-multicast static-group source-addess x.x.x.x group-addess 组播组地址起 to 组播组地址末 vlan x
-
-
查看命令:
-
1.查看路由器端口命令 dis igmp-snooping router-port vlan x 2.查看成员端口信息 dis igmp-snooping port-info vlan x 3.查看二层组播转发表项 dis l2-multicast forearding-table vlan x
-
-
IGMP ssm mapping
-
应用场景:主机不支持IGMPv3时,又想得到SSM的服务,可以在查询器上配置SSM-mapping
-
作用:通过在查询器上手工配置静态组播组地址和组播源的映射关系,使不支持IGMPv3的主机也可以享受SSM服务
-
配置生效条件
- PIM使用PIM SM模式
- 组播组地址必须是SSM地址(232.0.0.0~232.255.255.255)
- 查询器需要支持IGMPv3
-
配置步骤:在查询器上配置
-
1.在系统视图下,进入IGMP视图 igmp 2.在IGMP视图中配置SSM-mapping · [huwei-igmp]ssm-mapping 232.0.0.2 32 192.168.1.1 [huwei-igmp]ssm-mapping 232.0.0.2 32 192.168.1.2 //SSM组播地址+掩码+组播源地址,表项可以配置多个 3.在接口上使能IGMPv3 [huawei-g0/0/1]igmp enable [huawei-g0/0/1]igmp version3 4.在接口上使能IGMP ssm-mapping [huawei-g0/0/1]igmp ssm-mapping enable
-
-
查询命令:
-
dis igmp group-------------------查看igmp组播表项 dis igmp routing-table-----------查看igmp路由表项,只能在V2和V3,接口上没有使能PIM路由协议时才能查看到 dis igmp ssm-mspping group-------查看igmp ssm-mapping静态源组表项 dis igmp group static------------查看igmp静态加组
-
IGMP代理:IGMP proxy
- 背景:
- IGMP查询器需要处理的成员关系报告报文和离组报文激增,负担过大
- 需要管理大量的组成员
- 开启了IGMP snooping,导致响应抑制机制失效
- 开启IGMPv3,导致响应抑制机制失效
- IGMP查询器需要处理的成员关系报告报文和离组报文激增,负担过大
- 作用:降低了IGMP查询器的负担
- 两种端口类型
- 路由器端口:
- 面向组成员的接口,发送查询报文,处理成员关系报告报文和离组报文
- 主机端口
- 面向IGMP查询器的接口,用来朝查询器发送成员关系报告报文和离组报文
- 路由器端口:
- 加组过程
- 当IGMP代理设备的路由器端口接收到repoet报文时;
- 如果代理设备上不存在对应的组表项,则创建对应的组表项,并将成员关系报告报文从主机端口发送给IGMP查询器
- 如果代理设备上存在对应的组表项,则不讲report报文从主机端口发送给IGMP查询器
- 当IGMP代理设备的路由器端口接收到repoet报文时;
- 离组过程
- 当IGMP代理设备的路由器端口接收到leave报文时,从路由器端口回复特定组查询报文
- 如果接收到了对应组播组的report报文,则表明该组还存在其他组成员,再不会从主机端口朝IGMP查询器发送leave报文
- 如果2s后还没有接收到对应组播组的report报文,则表明该组不存在其他成员,则从主机接口朝IGMP查询器发送leave报文,IGMP查询器接收到leave报文后,清除掉对应的组表项
- 当IGMP代理设备的路由器端口接收到leave报文时,从路由器端口回复特定组查询报文