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各版本之间的差异
-
-
全局开启组播路由功能
- mutilcast rou
-
连接组播源的接口使能PIM SM
-
连接组成员的接口 开启IGMP,再选择版本