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/6 OSPF、224.0.0.9 RIPv2、224.0.0.13 PIM。
  • 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 映射,重叠概率更低。

IPv4 多播地址 → MAC 地址映射与组管理信号链 IPv4 D 类地址 1110 | 28 位组标识 224.0.0.0/4 MAC 映射规则 01:00:5E + 低 23 位 32:1 地址重叠 以太网帧目的 MAC 01:00:5E:01:01:01 网卡硬件过滤 组管理协议:IGMP(IPv4)与 MLD(IPv6) 接收主机 加入 239.1.1.1 多播路由器 维护组成员表 IGMP 报文类型 成员报告 / 离开组 / 通用查询 特定组查询 / 特定源查询 主机通过 IGMP/MLD 报告加入组 → 路由器记录成员 → 查询维持状态 → 无响应则剪枝 IPv6 对应 MLDv1/v2,报文封装在 ICMPv6 中,类型 130/131/132/143

组播组、永久组与临时组

“组”是一个逻辑概念:一组希望接收同一数据流的主机集合。组地址是共享的,成员关系是动态的。按分配方式可分为两类:

  • 永久组(知名组):由 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 解决“路由器怎么知道谁要收”。三者环环相扣,缺一不可。