📖 网际组管理协议 IGMP
🎯 课程摘要:本节介绍网际组管理协议 IGMP 的三种报文类型、封装方式,以及加入多播组、监视成员变化、退出多播组的工作过程。
📝 详细笔记
1. IGMP 报文类型
IGMP(网际组管理协议)目前最新版本是 2002 年 10 月公布的 IGMPv3,有三种报文类型:
| 报文类型 | 方向 | 说明 |
|---|---|---|
| 成员报告报文 | 主机 → 多播路由器 | 主机声明加入某多播组 |
| 成员查询报文 | 多播路由器 → 主机 | 查询本网络中是否存在某多播组成员 |
| 离开组报文 | 主机 → 多播路由器 | 主机声明退出某多播组(IGMPv2 新增) |
2. IGMP 报文的封装
IGMP 报文被封装在 IP 数据报中传送:
- IP 首部中协议字段 = 2,表示数据载荷部分是 IGMP 报文。
- 目的地址字段:根据所封装的 IGMP 报文类型各有不同,但都属于 IP 多播地址(封装 IGMP 报文的 IP 数据报都是 IP 多播数据报)。
- 生存时间 TTL = 1:避免封装有 IGMP 报文的 IP 多播数据报被路由器转发到其他网络。
- ⚠️ 重点/考点:IGMP 报文封装在 IP 多播数据报中,TTL = 1,协议字段 = 2。
3. 加入多播组
以主机 A、B 加入多播组 226.0.9.26 为例(该地址与主机 C 所在的 226.128.9.26 映射到同一多播 MAC 地址):
关键机制:
- IGMP 成员报告报文内容主要是所希望加入的多播组的 IP 多播地址。
- 多播路由器 R1 只关心自己直连网络中有哪些多播组存在,不关心每个多播组的成员数量及具体成员,因此无需记录成员自身的 IP 地址。
- 多播组只要还有一个成员,这个多播组就存在。
- ⚠️ 重点/考点:同一多播组中只要有一个主机发送了成员报告报文,其他成员收到后会取消自己的报告,避免重复响应。
4. 监视多播组的成员变化
4.1 周期性查询
- 多播路由器默认每隔 125 秒向其直连网络发送一个 IGMP 成员查询报文。
- 查询报文内容主要是全零的 IP 地址,表示查询网络中的全部多播组。
- 封装该报文的 IP 多播数据报目的地址为 224.0.0.1(特殊 IP 多播地址,本网络中所有参加多播的主机和路由器都会接受)。
4.2 随机延时响应
- 随机延时的目的:每个多播组只需有一个成员响应即可,减少对多播路由器的不必要重复响应。
- 收到成员报告报文后,多播路由器更新多播组列表中对该多播组的相关计时。
4.3 成员全部离开
- 若多播路由器长时间收不到某多播组成员的响应,则将其从多播组列表中删除。
4.4 特定多播组查询
- 多播路由器还可给特定多播组(而非全部多播组)发送 IGMP 成员查询报文。
- 此时查询报文内容和 IP 多播数据报的目的地址都是该特定多播组的多播 IP 地址。
5. 退出多播组(IGMPv2)
- IGMPv2 在 IGMPv1 基础上增加离开组报文:主机退出多播组时可主动发送,不必等待路由器周期性查询,使路由器更快发现成员离开。
- 离开组报文内容主要是主机要退出的多播组的地址。
- 封装该报文的 IP 多播数据报目的地址为 224.0.0.2(特殊 IP 多播地址,本网络中所有多播路由器都会接受)。
- 路由器收到离开组报文后暂时不删除该组,而是立即发送针对该组的特定 IGMP 成员查询报文,探测是否还有其他成员;若无响应则删除。
6. 查询路由器的选择
- 同一网络中的多播路由器可能不止一个,但没有必要每个都周期性发送查询报文。
- 选一个作为查询路由器,由它发送 IGMP 成员查询报文,其他多播路由器仅被动接收响应并更新自己的多播组列表。
- 选择方法:每个多播路由器若监听到源 IP 地址比自己小的 IGMP 成员查询报文,则退出竞选;最终 IP 地址最小的多播路由器成为查询路由器。
💡 核心总结
- IGMP 有三种报文:成员报告(加入)、成员查询(监视)、离开组(退出,IGMPv2 新增),均封装在 TTL=1、协议字段=2 的 IP 多播数据报中。
- 加入多播组时主机发成员报告报文,同组成员收到后取消自己的报告;路由器只关心组是否存在,不关心成员数量。
- 路由器每 125 秒发送查询报文(目的 224.0.0.1),主机随机延时响应以减少重复响应;长期无响应则删除该组。
- 退出多播组时主机发离开组报文(目的 224.0.0.2),路由器发特定查询探测是否还有成员。
- 多个多播路由器共存时,IP 地址最小者成为查询路由器。
❓ 课后思考 / 经典考题
- IGMP 有哪三种报文类型?分别由谁发送?IGMP 报文封装在 IP 数据报中时,协议字段和 TTL 分别是多少?为什么 TTL 设为 1?
- 主机加入多播组时,为什么同组的其他主机收到成员报告报文后会取消自己准备发送的报告?
- 多播路由器周期性查询的目的地址 224.0.0.1 和离开组报文的目的地址 224.0.0.2 各有什么特殊含义?
- 主机退出多播组后,路由器为什么不立即从多播组列表中删除该组?会做什么操作?
- 同一网络中有多个多播路由器时,如何确定查询路由器?