2. IP多播地址与组管理基础
多播通信的第一道门槛,是“地址”。单播地址标识一台主机,而多播地址标识的是一组主机——发送者只发一份数据,网络负责把它复制给所有加入该组、且位于转发路径上的接收者。理解 IPv4 D 类地址、IPv6 多播地址格式、多播 MAC 地址映射,以及 IGMP/MLD 的组管理作用,是后续路由协议(PIM、MSDP 等)能够工作的前提。
IPv4 D 类地址结构
IPv4 地址共 32 位,按最高几位划分为 A、B、C、D、E 五类。多播使用 D 类地址:最高 4 位固定为 1110,因此第一个字节的取值范围是 224~239,即 224.0.0.0/4。剩余 28 位为多播组标识(Group ID),可表示约 2.68 亿个组地址。
D 类地址内部还有若干约定范围,工程中必须记住:
- 224.0.0.0/24:本地链路控制块,TTL=1,路由器不转发。例如
224.0.0.1所有主机、224.0.0.2所有路由器、224.0.0.5/6OSPF、224.0.0.9RIPv2、224.0.0.13PIM。 - 224.0.1.0~238.255.255.255:可路由的组播地址,供应用使用,如
239.1.1.1。 - 239.0.0.0/8:管理范围地址(Administratively Scoped),类似私网地址,常用于企业内网,边界路由器不向外转发。
需要特别注意:多播地址只能作为目的地址,不能作为源地址;且一个多播地址可以对应任意数量的接收者,接收者位置对发送者完全透明。
IPv6 多播地址格式
IPv6 取消了广播,多播承担了更多职责。IPv6 多播地址固定以 FF00::/8 开头,格式为:
| 8 bit | 4 bit | 4 bit | 112 bit |
|11111111| Flags | Scope | Group ID |
FF flgs scop
其中 Flags 字段目前常用低两位:0 表示永久分配(知名)地址,1 表示临时地址;最高位为 1 时表示基于单播前缀的嵌入 RP 地址。 Scope 字段定义作用范围,常见取值:1 节点本地、2 链路本地、5 站点本地、8 组织本地、E 全局。例如 FF02::1 是所有节点(链路本地),FF02::2 是所有路由器,FF05::1:3 是站点内所有 DHCP 服务器。
多播 MAC 地址映射
以太网需要把 IP 多播地址映射为 MAC 地址,才能让网卡在链路层过滤帧。IPv4 的映射规则是:取多播 IP 的低 23 位,放入固定前缀 01:00:5E 之后,形成 48 位 MAC 地址:
01:00:5E | 0 | IP低23位
例如 239.1.1.1
IP 二进制低23位: 0000001 00000001 00000001
MAC = 01:00:5E:01:01:01
由于 IP 多播有 28 位组标识,而 MAC 只映射 23 位,因此存在 32:1 的地址重叠:多个不同多播 IP 会映射到同一 MAC。网卡会接收这些帧,但主机协议栈仍需按 IP 层目的地址做二次过滤,丢弃不属于自己加入的组。IPv6 则使用 33:33 前缀加低 32 位组 ID 映射,重叠概率更低。
组播组、永久组与临时组
“组”是一个逻辑概念:一组希望接收同一数据流的主机集合。组地址是共享的,成员关系是动态的。按分配方式可分为两类:
- 永久组(知名组):由 IANA 统一分配,地址固定,不随成员加入/离开而消失。典型如
224.0.0.1(所有主机)、224.0.0.2(所有路由器)、FF02::1。它们用于协议自身的发现与协商,通常限定在本地链路。 - 临时组:由应用或管理员按需创建,成员全部离开后组即失效。例如视频会议临时使用
239.10.10.10,会议结束后该组不再有意义。临时组地址可重复使用,但同一时刻同一域内应避免冲突。
工程中建议:企业内网优先使用 239.0.0.0/8 管理范围地址,并按业务划分子网段,例如 239.1.0.0/16 给视频、239.2.0.0/16 给数据分发,便于 ACL 和边界控制。
IGMP 与 MLD 的作用与报文类型
主机要接收多播,必须告诉本地路由器“我要加入哪个组”。IPv4 使用 IGMP(Internet Group Management Protocol),IPv6 使用 MLD(Multicast Listener Discovery)。两者都运行在主机与直连路由器之间,属于链路本地协议,不负责跨网段路由——跨网段转发由 PIM 等路由协议完成。
IGMPv2 的主要报文类型:
| 报文类型 | 方向 | 作用 |
|---|---|---|
| 成员报告(Membership Report) | 主机 → 路由器 | 声明加入某组,或响应查询 |
| 离开组(Leave Group) | 主机 → 路由器 | 声明退出某组,触发特定组查询 |
| 通用查询(General Query) | 路由器 → 主机 | 周期性询问所有组是否仍有成员 |
| 特定组查询(Group-Specific Query) | 路由器 → 主机 | 收到离开后确认该组是否还有成员 |
IGMPv3 增加了“特定源查询”和源过滤能力,主机可以只接收来自指定源的多播流量(SSM 的基础)。MLDv1 对应 IGMPv2,MLDv2 对应 IGMPv3,报文封装在 ICMPv6 中,类型分别为 130(查询)、131(报告)、132(离开)、143(v2 报告)。
show ip igmp groups 中该组是否存在、接口是否正确;再检查多播 MAC 是否被交换机正确转发(IGMP Snooping 是否开启);最后确认上游 PIM 是否已建立(show ip mroute 中 (S,G) 或 (*,G) 表项)。
总结来看,多播地址解决“发给谁”,MAC 映射解决“链路层怎么收”,IGMP/MLD 解决“路由器怎么知道谁要收”。三者环环相扣,缺一不可。