第144篇:组播基础:IGMP 与组播地址
关键词:组播、IGMPv1/v2/v3、组播地址、D类地址、组播范围、组播树、华为
一、引言
在网络通信中,存在三种基本的传输模式:单播(Unicast)、广播(Broadcast)和组播(Multicast)。单播是一对一通信,广播是一对全部通信,而组播是一对"一组"通信——发送者将数据发给一个组播地址,只有加入该组播组的接收者才能收到数据。
组播在视频会议、IPTV、实时数据分发、金融行情推送等场景中发挥着不可替代的作用。理解组播地址的分配规则和 IGMP(Internet Group Management Protocol)的工作原理,是深入学习和部署组播网络的基础。
二、核心概念
2.1 三种传输模式对比
| 模式 | 目的地址 | 接收者 | 带宽消耗 | 适用场景 |
|---|---|---|---|---|
| 单播 | 单播地址(A/B/C 类) | 1 个 | 发送者 × N 接收者 | 网页浏览、文件下载 |
| 广播 | 255.255.255.255 或广播地址 | 同一网段全部 | 发送者 × 1(但全网段收到) | ARP、DHCP 发现 |
| 组播 | D 类地址(224.0.0.0~239.255.255.255) | 组播组成员 | 发送者 × 1(仅组成员收到) | 视频会议、IPTV |
2.2 组播地址分类

| 地址范围 | 名称 | TTL 限制 | 说明 |
|---|---|---|---|
| 224.0.0.0/24 | 本地管理组播 | TTL=1(不跨路由器) | 协议保留地址 |
| 224.0.1.0 ~ 231.255.255.255 | 全局组播地址 | 无限制 | IANA 分配,可跨 Internet |
| 232.0.0.0/8 | SSM 地址范围 | 无限制 | 源特定组播,接收者指定源 |
| 233.0.0.0/8 | GLOP 地址 | 无限制 | 从 AS 号映射 |
| 239.0.0.0/8 | 管理局部组播 | 可配置 | 企业内部使用,类似私有地址 |
2.3 IGMP 版本演进
IGMP 是主机与其直接连接的路由器之间沟通组播组成员关系的协议。IGMP 运行在 IP 协议之上(协议号 2),封装在 IP 数据报中。
| 特性 | IGMPv1 | IGMPv2 | IGMPv3 |
|---|---|---|---|
| 加入组 | 成员主动发送 Report | 成员主动发送 Report | 成员主动发送 Report |
| 离开组 | 被动(超时) | Leave 消息 | Leave 消息 |
| 源过滤 | 不支持 | 不支持 | 支持(Include/Exclude) |
| 查询消息 | 通用查询 | 通用查询 + 特定组查询 | 通用 + 特定组 + 特定源 |
| 离开延迟 | 离开超时 120s | 0s(立即发送 Leave) | 0s(立即发送 Leave) |
| 路由器查询间隔 | 60s | 125s | 125s |
| 报文类型 | 0x11/0x12 | 0x11/0x12/0x16/0x17 | 0x22 |
三、技术细节
3.1 IGMP 报文类型

IGMPv2 报文格式
| 字段 | 长度 | 说明 |
|---|---|---|
| Type | 1 字节 | 0x11=Query, 0x12=Report, 0x17=Leave |
| Max Resp Code | 1 字节 | Query 中指定最大响应时间 |
| Checksum | 2 字节 | 校验和 |
| Group Address | 4 字节 | 组播组地址 |
3.2 IGMPv2 状态机

3.3 IGMPv3 源过滤机制
IGMPv3 的核心创新是支持源过滤,接收者可以指定"只接收某几个源的组播"或"排除某几个源的组播"。
| 过滤模式 | 说明 | 报文标志 | 适用场景 |
|---|---|---|---|
| Include | 只接收列表中的源 | S 标志 | SSM 模式,指定确切源 |
| Exclude | 接收除列表外所有源 | 无 S 标志 | 排除不可信源 |
3.4 组播路由基础
组播路由的核心概念是组播树(Multicast Tree),分为两种:
| 类型 | 说明 | 特点 |
|---|---|---|
| 源树(SPT, Shortest Path Tree) | 以组播源为根,到每个接收者的最短路径 | 最优路径,但路由表项多 |
| 共享树(RPT, Rendezvous Point Tree) | 以 RP(汇集点)为根,源和接收者都向 RP 注册 | 路由表项少,但路径可能非最优 |
四、实战配置/案例分析
4.1 IGMPv2 配置
# ========== 组播路由器配置 ==========
[HUAWEI] sysname MR-01
# 全局使能组播路由
[MR-01] multicast routing-enable
# 在接口上使能 IGMP
[MR-01] interface Vlanif 10
[MR-01-Vlanif10] igmp enable
[MR-01-Vlanif10] igmp version 2
[MR-01-Vlanif10] ip address 10.1.10.1 255.255.255.0
# 配置 IGMP 查询间隔
[MR-01-Vlanif10] igmp timer query 60 # 通用查询间隔 60s
[MR-01-Vlanif10] igmp timer max-response 10 # 最大响应时间 10s
# 配置静态组播组成员(用于测试)
[MR-01-Vlanif10] igmp static-group 239.1.1.1
# 限制 IGMP 加入的组播组
[MR-01] acl basic 2000
[MR-01-acl-basic-2000] rule 10 permit source 239.1.0.0 0.0.255.255
[MR-01-acl-basic-2000] rule 20 deny
[MR-01] interface Vlanif 10
[MR-01-Vlanif10] igmp filter-policy 2000
4.2 IGMPv3 配置(源过滤)
# ========== IGMPv3 配置 ==========
[MR-01] interface Vlanif 20
[MR-01-Vlanif20] igmp enable
[MR-01-Vlanif20] igmp version 3
[MR-01-Vlanif20] ip address 10.1.20.1 255.255.255.0
# 在主机侧,Windows/Linux 可以通过命令行加入特定源的组播
# Windows: netsh interface ipv4 join-group group=239.1.1.1 source=10.1.20.100
# Linux: ip maddr add 239.1.1.1 dev eth0
4.3 验证命令
# 查看 IGMP 组信息
[MR-01] display igmp group
# IGMP group reporting interface: Vlanif10
# TVID Address Type Interface Expires Reporter
# --- ----------- ------ ----------- ------- --------
# 0 239.1.1.1 (S,G) Vlanif10 00:01:30 10.1.10.100
# 0 239.1.1.2 (*,G) Vlanif10 00:01:15 10.1.10.101
# 查看 IGMP 接口信息
[MR-01] display igmp interface
# Interface IP Address State Version Querier Querier Addr
# Vlanif10 10.1.10.1 Up v2 Yes 10.1.10.1
# 查看 IGMP 统计信息
[MR-01] display igmp statistics
4.4 故障案例:IGMP 查询器选举冲突
场景:在 VLAN 10 中部署了两台三层交换机(SW-01 和 SW-02),均配置了 IGMP。用户反映组播流量不稳定,时断时续。
排查过程:
# 在 SW-01 上检查
[SW-01] display igmp interface Vlanif 10
# Querier: Yes, Querter Address: 10.1.10.1
# 在 SW-02 上检查
[SW-02] display igmp interface Vlanif 10
# Querier: Yes, Querter Address: 10.1.10.2
# ← 两个设备都认为自己是查询器!
# 使用抓包确认
[SW-01] packet-capture buffer igmp-capture
[SW-01] packet-capture active
# 观察到两台设备同时发送 IGMP Query
根因:IGMPv2 查询器选举规则是 IP 地址小的成为查询器。但初始阶段两台设备都认为自己是查询器(网络中没有其他查询器时,每个路由器都假定自己为查询器),当收到比自己 IP 大的 Query 后才退让。如果两台设备的 IGMP 版本不一致或启动顺序异常,可能造成长期的查询器冲突。
解决方案:
# 方案一:统一 IGMP 版本并确认查询器选举
[SW-01] interface Vlanif 10
[SW-01-Vlanif10] igmp version 2
[SW-02] interface Vlanif 10
[SW-02-Vlanif10] igmp version 2
# SW-01 IP: 10.1.10.1 (较小) → 查询器
# SW-02 IP: 10.1.10.2 (较大) → 非查询器
# 方案二:在不需要做组播查询的设备上关闭 IGMP
[SW-02] interface Vlanif 10
[SW-02-Vlanif10] undo igmp enable
# SW-02 不做 IGMP 查询器,仅做组播路由
4.5 故障案例:组播地址冲突
场景:公司 A 使用 239.1.1.0/24 地址段做内部视频会议组播。公司 B 通过专线与公司 A 互联,同时也使用了 239.1.1.0/24 做内部 IPTV。两公司的组播流量互相串扰。
排查过程:
# 检查组播路由表
[MR-01] display multicast routing-table
# Mrib items: 4
# (S, G) IncomingIF Age/Refresh OutgoingIF List
# 10.1.1.100 239.1.1.1 Vlanif10 00:15:30 Vlanif20
# Vlanif30
# 10.2.1.100 239.1.1.1 Vlanif40 00:10:20 Vlanif10 ← 来自公司B的流!
根因:239.0.0.0/8 是管理局部组播地址段,没有全局唯一性保障。当两个独立的管理域互联时,使用相同的管理局部组播地址必然产生冲突。
解决方案:
# 方案一:分配独立的组播地址段
# 公司A: 239.1.0.0/16(视频会议)
# 公司B: 239.2.0.0/16(IPTV)
# 方案二:在互联链路上过滤组播地址
[MR-01] acl advanced 3000
[MR-01-acl-adv-3000] rule 10 deny ip destination 239.2.0.0 0.0.255.255
[MR-01-acl-adv-3000] rule 20 permit ip
[MR-01] interface Vlanif 100
[MR-01-Vlanif100] packet-filter 3000 inbound
五、总结
| 项目 | 说明 |
|---|---|
| 组播地址 | D 类地址 224.0.0.0 ~ 239.255.255.255 |
| 本地管理 | 224.0.0.0/24,TTL=1,不跨路由器 |
| 管理局部 | 239.0.0.0/8,企业内部使用,非全局唯一 |
| SSM 地址 | 232.0.0.0/8,源特定组播 |
| IGMPv2 | 支持 Leave 消息,离开延迟 0s |
| IGMPv3 | 支持源过滤(Include/Exclude),支持 SSM |
| 查询器选举 | IGMPv2 中 IP 地址小的设备成为查询器 |
| 冲突预防 | 不同管理域使用独立组播地址段 |
思考
-
239.0.0.0/8 管理局部组播地址类似于私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),但它们之间有什么本质区别?为什么组播需要"管理局部"这个概念?
-
IGMPv2 的 Leave 消息是主机主动发送的,但如果主机异常掉电,就无法发送 Leave。这种情况下路由器如何得知主机已离开组播组?
-
IGMPv3 支持 Include 和 Exclude 两种过滤模式。如果一个接收者想接收组播组 239.1.1.1 的所有源,但排除源 10.1.1.100,应该使用哪种模式?如果后续又想排除源 10.1.1.101,如何更新过滤列表?
下篇预告:第145篇:IGMP Snooping:交换机如何感知组播