IGMPv1
-
报文:普遍组查询与组成员报告报文
- 普遍组查询:启用了IGMP的路由器每隔60s往224.0.0.1发送普遍组查询
- 224.0.0.1代表本网段的所有路由器及其主机
- 响应:收到普遍组查询后,主机发送IGMP成员关系报告,表示希望加入组播组。回应的目标地址为加入的组播IP地址。
- 响应抑制机制
- 客户端向自己想加入的组回报告
- 回报告不会马上回报告,随机10秒内回,当客户端收到其他客户端的报告时,发现组和自己相同就不会再回
- 响应抑制机制
- 普遍组查询:启用了IGMP的路由器每隔60s往224.0.0.1发送普遍组查询
-
工作机制

RTA发送普遍组查询报文
- 网段内所有主机都接收到该直询报文,ClientA和ClientC是组播组G1成员,则在本地启动定时器Timer-G1.ClientB是组播组G2的成员,则在本地启动定时器TIimer-G2。定时器的范围为0~10s之间的随机值。定时器先超时的主机发送针对该组的成员报告报文。
- CientA上的Timer-G1首先超时,向该网段发送目的地址为G1的成员报告报文.CientB上Timer-G2超时,向该网段发送成员报告报文,目的地址为G2。
- Client C侦听到ClientA的成员报告报文,则停止定时器Timer-G1,不再发送针对G1的成灵报告报文。这就是响应抑制机制,可以减少网段上的协议流量。
-
IGMPv1成员加入
如果有新的客户端接入,则允许他主动的发送IGMP成员关系报告,表示想加入组播组
-
IGMP存在的问题
- 组成员的离开:没有离组机制
- 静默离开,如果在两倍的查询周期加10s最大响应时间没有收到响应,则认为该组不存在组播成员
- 查询器选举:没有查询器选举机制
- 查询器选举依赖于组播路由协议。在运行了IGMPv1的接口上还要运行PIM协议,PIM协议在接口上互相发送hello包,通过hello包选举出一台DR然后DR充当IGMP的查询器。
- 路由器无法控制成员的最大响应时间
- 组成员的离开:没有离组机制
IMGPv2
-
IGMPv2在IGMv1的基础上做出了改进
- 基本原理和IGMPv1相同
- 增加了离组报文,当组成员里组时,会主动发送离组报文,离组报文发送的目的IP为224.0.0.2,代表该网段的所有路由器接口。
- 增加了特定组查询报文,路由器收到离组报文,得知某个组有成员离开,就会发送特定组查询报文,DIP为成员离开的那个组地址
- 默认情况下,特点组查询,每隔1s连续发两次,在1*2的时间内,如果没有收到改组成员的关系报文,则认为该组研究没有成员,结束该组流量,不再继续向该网段发送,如果收到该组的成员关系报文,则继续下发该组的组播流量。
- 注意,特定组查询依然有成员关系抑制机制,抑制时间为1s,也就是1s内的随机等待时间,超时后回复报文,同组成员收到后不再发送报告报文
- 管理员可以配置发送特定组查询的时间以及发送的次数,间隔决定成员的响应时间,而间隔时间*次数决定路由器多久没收到报告认为不再有成员。
- IGMPv2有自身的查询器选举机制,接口IP地址小的路由器成为查询器,所有非查询器上都会自动一个定时器。如果在该定时器超时前收到了来自查询器的查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举。查询器默认为125s
- 其他IGMP查询器的存活时间=健壮系数(特定组查询的发送次数)*IGMP普遍查询报文发送间隔+(1/2)*最大查询响应时间
- 如果管理员配置则以管理员配置时间为主
-
IGMPv1和IGMPv2报文比较

IGMPv3
-
IGMPv1和IGMPv2的客户端是针对ASM组播开发的协议,在发送报告报文中仅携带组播IP,ASM比较消耗组播资源,IGMPv3的客户端是针对支持SSM组播模型开发的协议,成员可以对组播源和组播组进行选择,并且也支持ASM模型,但实际应用较少,因为客户端维护难度大。
-
工作机制
- IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
- 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
- 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。1GMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2..),表示只接收来自指定组播源S1、S...发往组G的数据;或(G,EXCLUDE,(S1、S...),表示接收除了组播源S1、S2....之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。
- 在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。
- IGMPv3不在设置组成员报告抑制机制
-
IGMP各版本间的差异
机制 IGMPv1 IGMPv2 IGMPv3 查询器选举 依赖其他协议 自己选举 自己选举 成员离开方式 静默离开 主动发送离开报文 主动发送离开报文 特定组查询 不支持 支持 支持 指定源、组 不支持 不支持 支持
IGMPSnooping机制
- 交换机通过IGMP监听,生成并维护一张组播转发表
- 包含三个信息:G地址/组播MAC地址(默认) VLAN 成员端口
- 交换机需要确定路由器端口(交换机连接组播路由器的端口)
- 交换机在收到pim协议的报文或者收到IGMP的查询报文的接口就认为是路由器端口
- 管理员手动配置路由器端口。
- 交换机需要确定哪些端口存在哪些组的成员,即成员端口。
- 监听成员发送报告的报文,报文中携带的组地址
- 管理员手动配置成员端口(有些哑终端)
- 工作机制
-
交换机在路由器端口上收到普通组查询报文,并向其他所有接口泛洪
-
主机收到查询报文后,回复成员报告报文,交换机收到报告高温后向路由器端口转发,不会泛洪,同时把该端口加入对应的组转发表中
-
注意:为什么报告报文只能从路由器端口转发?比较报告报文也是组播报文?
原因要让交换机知道某个组成员在自身的哪些接口存在,就必须要让该组所有成员都发送报告,所有要屏蔽要查询报文的抑制机制
-
-
主机离组发送离组报文,交换机收到离组报文不会立即删除该成员端口,离组报文向路由器端口转发。
- 路由器收到离组报文,发送特定组查询报文,交换机向成员端口泛红,如果该端口在2s内没有收到报告报文,则删除该成员端口,如果收到了成员报告,重置成员端口的老化时间。
- 为什么交换机收到离组报文不立即删除该成员端口?原因是该成员端口下,不一定只有应该成员。
-
IGMP配置
[R1]dis igmp interface g0/0/0
Interface information of VPN-Instance: public net
GigabitEthernet0/0/0(1.1.1.1): //接口IP
IGMP is enabled //IGMP已经启用
Current IGMP version is 2 //当前IGMP版本
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): -
Value of query interval for IGMP (configured): 60 s //普通组查询间隔
Value of other querier timeout for IGMP: 0 s //其他查询器失效时间
Value of maximum query response time for IGMP: 10 s //普通组查询最大相应时间
Querier for IGMP: 1.1.1.1 (this router) //查询器接口IP
<R1>dis igmp group
Interface group report information of VPN-Instance: public net
GigabitEthernet0/0/0(1.1.1.1):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
239.1.1.10 (报告组地址) 1.1.1.2 (成员地址) 00:00:48 00:01:22