目录
[1. IGMPv1](#1. IGMPv1)
[1.1 IGMPv1 报⽂类型](#1.1 IGMPv1 报⽂类型)
[1.2 IGMPv1 工作机制](#1.2 IGMPv1 工作机制)
[1.3 成员加入](#1.3 成员加入)
[1.4 离组机制](#1.4 离组机制)
[2. IGMPv2](#2. IGMPv2)
[2.1 IGMPv2 报文](#2.1 IGMPv2 报文)
[2.3 查询器选举 & 维护](#2.3 查询器选举 & 维护)
[2.4 成员加入](#2.4 成员加入)
[2.4 离组机制](#2.4 离组机制)
[3. IGMPv3](#3. IGMPv3)
[3.1 IGMPv3 vs. IGMPv2](#3.1 IGMPv3 vs. IGMPv2)
[3.2 IGMPv3 报文](#3.2 IGMPv3 报文)
[3.3 IGMPv3 工作机制](#3.3 IGMPv3 工作机制)
[4. IGMP Proxy](#4. IGMP Proxy)
[5. IGMP Snooping](#5. IGMP Snooping)
[5.1 IGMP Snooping 工作机制](#5.1 IGMP Snooping 工作机制)
组管理协议,工作在网络层之上,在成员端 DR 之间(最后一跳路由器)与组播接收者之间建立和维护组播组成员关系。
一共有三个版本都支持 ASM,IGPMv1、IGPMv2、IGPMv3 向前兼容。

1. IGMPv1
1.1 IGMPv1 报⽂类型

|--------------------------------|---------|-------------------------|-------------------|
| 类型 | 发送者 | 目的IP | 作用 |
| General Query 0x11 普遍组查询报文 | 查询器 | 224.0.0.1 共享⽹络上所有主机和路由器 | 查询哪些组存在成员 |
| Report 0x12 成员关系报告报文 | 主机 | 224.0.0.1组播路由器 | 申请加⼊某个组播组或者应答查询报⽂ |
1.2 IGMPv1 工作机制
路由器周期性地发送查询报文,主机收到后若已加入/申请加入某组播组,则发送报告报文进行应答,以建立或维持 (*,G) 组播转发状态。
1)选举查询器 - IGMPv1 中 PIM DR 充当查询器 (优先级比大 ---> IP 地址比大)
2)查询器每 60s 向下发送查询报文,其组播组地址为空(普遍组查询),目的地址为 224.0.0.1。
3)主机收到查询报文后,随机启动一个最大响应时间 MRT(0~10s)。
4)第一个响应时间超时的主机,向查询器回复一个成员关系报告报文。报告报文的组地址&目的地址为想要加入的组播组。
*其他主机也能收到该报告报文,并且抑制自己报告报文的发送
5)查询器收到报告报文后,在本地生成一个(* G)表项,且将接收到该报文的接口加入(* G) OIL。
1.3 成员加入
⽹段上新接⼊⼀个主机 PC4,想加⼊组播组 G3:
1)不等待普遍组查询报文,⽴即发送针对 G3 的报告报⽂。
2)路由器收到报告报⽂后,⽣成组播转发表项 (*,G3),开启了 IGMP Snooping 的交换机更新 Snooping 转发表。
1.4 离组机制
IGMPv1 没有专⻔定义离组报⽂:查询器每 60s 发送查询报文,发送两次查询报文后,任然没有得到任何回应,就会将该接口从(*, G)表中的 OIF 接口删除。
所以 IGMPv1 离组,要经过130s(60+10+60)
2. IGMPv2
IGMPv2 增加了离组机制和查询器选举。
2.1 IGMPv2 报文

Max Response Time:表示主机响应查询返回报告的最大时间,IGMPv1 中永远为 10。
- 普遍组查询最大响应时间默认为10秒
- 特定组查询最大响应时间默认为1秒
2.2 IGMPv2 报文类型
- 普遍组查询报文/特定组查询报文 - 0x11
- 成员关系报文报文- 0x12 v1 /0x16 v2
- V2 离组报文 0x17 (224.0.0.2)
IGMPv2 对普遍组查询报⽂格式做了改进,添加了MRT字段。在组成员查询报文中⽤于控制成员的响应速度,其它消息中为 0。MRT 可配置,以十分之一秒为增量来计算,默认为 10s 最大 25s。
2.3 查询器选举 & 维护
1)所有 IGMPv2 路由器初始时认为⾃⼰是查询器,向本地⽹段内的所有主机和路由器( **224.0.0.1)**发送普遍组查询报⽂。
2)其他路由器收到该报⽂后,将报⽂的源 IP 与⾃⼰的接⼝地址作⽐较。IP地址最⼩的为查询器,其他路由器为非查询器。
维护: 所有⾮查询器上都会启动⼀个定时器Other Querier Present Timer,默认120s。定时器超时前收到来⾃查询器的查询报⽂,重置该定时器;否则认为原查询器失效并发起新的查询器选举。
2.4 成员加入
1)IGMPv2 中,组播接收者主动通过发送未应答的 Membership Report(类型 0x16)加入目标组播组 G,该报文的目的地址即为组播组地址 G3。
2)网络交换机在启用 IGMP Snooping 时,会侦听并更新端口的组播成员列表,只将后续的 G3 数据流转发到有成员的端口上。
3)最后一跳路由器(Last‐Hop DR)在收到 Membership Report 后,会在其组播转发表中创建一个 (*,G 条目,并向 RP 发起 PIM (*,G Join,以便在共享树上为 G3 构建分发路径。
4)当 G3 流量到达时,路由器会将数据沿最短路径树(SPT)或共享树(RPT)转发至接收者,确保 PC4 能收到组播数据。
2.4 离组机制
1)成员离组会向 224.0.0.2 发送离组报文,组地址为想要离开的组。
2)查询器收到离组报文,向 224.0.0.1 发送**特定组查询报文(**查看该组播组是否还存在其他主机),组地址 & 目的地址为查寻的组播组。每1s 发送一次,当发送两次未得到回应,将该接口从(* G)中的 OIL 表删除。
IGMPv2 中成员离组要经过 2s;但是如果组播组内的最后一个主机异常离线,则发送不了离组报文,那么仍然需要130s 来判定是否需要在转发数据到当前网段。
*思科设备是只要有成员离组就会发特定组查询,其它厂商设备有可能是只有查询器记录的 Last Reporter 离组,才会发送特定组查询报文。
3. IGMPv3
3.1 IGMPv3 vs. IGMPv2
IGMPv3 大部分工作机制与 IGMPv2 类似:
-
**查询器选举机制:**IP 地址越小越优先,
-
**成员加组:**周期性普遍组查询报文确认是否有成员加组
-
特定组查询报文:确认组播成员存活。
不同:
-
新增特定源组查询( Group-and-Source-Specific Query**):**主机只对指定源发来的流量作出响应。
-
成员关系报告报文 v3(Type 0x22):还携带"源组列表",指明接收/拒绝哪些源的数据。
-
无成员离组报文 :++离组通过包含空源列表或特定源列表的成员报告报文来通知(++ 通过block_old_sources来完成++)++。
-
无成员关系报告报文机制
3.2 IGMPv3报文
查询报文 0x11 -****- 普遍组查询/ 特定组查询/ *特定源组查询报⽂

成员关系报告报文 0x22

3.3 IGMPv3 工作机制
IGMPv3 为了配合 PIM SSM 的实现,跳过了 PIM-SM 模式中的共享树和RP过程,直接创建(S, G)。
4. IGMP Proxy
IGMP proxy 同时执行查询者和接收者的功能。用于在网络中传递组播数据的简化机制,常见于家庭网关、企业路由器和小型局域网。它的主要作用是实现组播流量在不同网络之间的转发,而不需要复杂的PIM路由协议。
IGMP Proxy主要依赖IGMP协议,它的工作过程包括以下几个步骤:
1 )成员报告(Membership Report )
- 主机向本地路由器发送IGMP Membership Report消息,表示要加入一个特定的组播组。
- 路由器会记录哪些主机对哪些组播组感兴趣。
2 )查询过程(Query Process )
- IGMP Proxy设备会定期发送IGMP Membership Query消息,检查哪些设备仍然需要组播数据。
- 收到应答后,更新组播组成员列表。
3 )数据转发
- IGMP Proxy将收到的组播数据转发到加入了该组播组的网络。
- 这种转发是单向的,只需要少量状态信息,因此效率较高。
5. IGMP Snooping
开启 IGMP Snooping 之后,交换机通过侦听路由器和主机之间 IGMP 报文,建立二层组播转发表项。
IGMP Snooping 的功能分为转发层面和控制层面:控制层面由 CPU 根据报文来生成对应的转发表项;转发层面由硬件根据已经建立好了组播转发表项来转发报文。
5.1 IGMP Snooping 工作机制
1)交换机从路由器收到 IGMP query 后,交换机学习到有路由器连接在 x/y 接口(收到 PIM hello的端口状态也会被置为 router port)。
IGMP snooping 表增加条目:x/y 为 mrouter port
Switch#show ip igmp snooping mrouter
Vlan ports
---- -----
12 Gix/y(dynamic)
2)交换机从主机收到 IGMP query 后,创建 snooping 表。
Switch#show ip igmp snooping groups
Vlan Group Type Version Port List
----------------------------------------------
12 224.64.7.7 igmp v2 Gix/z