组播 MAC 地址的映射规则

地址基础

IP 组播要在以太网上传输,必须映射到一个二层组播地址,否则交换机不知道该怎么处理。这套映射规则是固定算法,不需要任何协议协商,理解它能解释很多抓包中看到的奇怪地址。

判断组播的依据

第一字节的最低位为 1 就是组播。写成十六进制,看第一字节是奇数还是偶数即可。完整的标志位含义见读懂 MAC 地址第一字节。

IPv4 的映射:01:00:5E 开头

IPv4 组播地址范围是 224.0.0.0/4。映射规则是:

  • 前 25 位固定为 01:00:5E 加一个 0 位
  • 后 23 位直接取 IPv4 组播地址的低 23 位

举例,224.0.0.1(所有主机)映射为 01:00:5E:00:00:01。239.255.255.250(SSDP 使用)映射为 01:00:5E:7F:FF:FA。

这里有个必须知道的缺陷。IPv4 组播地址有 28 位可变部分,但只有 23 位被映射进 MAC 地址,5 位信息被丢弃。结果是 32 个不同的 IPv4 组播组共享同一个 MAC 地址。224.1.1.1 和 225.1.1.1 的低 23 位相同,二层地址完全一致。

实际影响是网卡会收到自己没订阅的组播帧,由内核在三层过滤掉。流量不大时无所谓,在组播密集的网络里会造成可观的无效中断开销。

IPv6 的映射:33:33 开头

IPv6 组播地址以 ff00::/8 开头,映射规则更简单:

  • 前 16 位固定为 33:33
  • 后 32 位直接取 IPv6 地址的最后 32 位

例如 ff02::1(链路本地所有节点)映射为 33:33:00:00:00:01。

IPv6 保留了 32 位,重叠概率远低于 IPv4,但仍然不是一一对应。33:33 这个前缀的来历常被认为与 Xerox 在帕洛阿尔托的地址门牌号有关。

常见的固定组播地址

MAC 地址用途
01:00:5E:00:00:01IPv4 所有主机(224.0.0.1)
01:00:5E:00:00:02IPv4 所有路由器(224.0.0.2)
33:33:00:00:00:01IPv6 所有节点(ff02::1)
33:33:00:00:00:02IPv6 所有路由器(ff02::2)
01:80:C2:00:00:00生成树协议 BPDU
01:80:C2:00:00:0ELLDP 邻居发现
01:1B:19:00:00:00PTP 精确时间协议

看到 01:80:C2 开头的帧不用在查询页查厂商,那是 IEEE 保留给桥接协议的范围。

广播是组播的一个特例,与它相关的保留地址见广播地址与特殊 MAC 地址。

IGMP Snooping:避免组播变广播

交换机默认把组播帧当广播处理,向 VLAN 内所有端口泛洪。在有 IPTV 或视频监控的网络里,这会让所有端口都承受组播流量。

IGMP Snooping 让交换机偷看 IGMP 的加入和离开报文,只向真正订阅了该组的端口转发。这在部署组播业务时是必备配置,IPv6 环境对应的是 MLD Snooping。

有一个例外要注意:224.0.0.0/24 范围内的地址(对应 01:00:5E:00:00:xx)是链路本地控制流量,IGMP Snooping 通常不做抑制,始终泛洪。

相关文章
关于作者 · Lin

7n4.cn 技术编辑,负责数据链路层与 IP 层主题。文章以协议规范和抓包行为为基础,把容易混淆的字段与流程拆开解释。

← 返回博客列表