MLD协议 ICMPv6协议

MLD(Multicast Listener Discovery,多播监听发现协议)是 IPv6 版本的 IGMP。

🧭 一、MLD 是什么?

  • 全称:Multicast Listener Discovery
  • 工作层次:网络层(在 ICMPv6 上实现)
  • 主要作用
    让本地链路上的路由器知道,哪些主机对哪些多播组感兴趣。 📌 对应关系:
IPv4IPv6
IGMP(Internet Group Management Protocol)MLD(Multicast Listener Discovery)

🧩 二、为什么需要 MLD?

在 IPv6 中,多播取代广播

  • IPv4 有广播(255.255.255.255)
  • IPv6 没有广播,全靠多播地址(ff00::/8) 因此必须有机制让:
  • 主机告诉路由器:我想听某个多播地址;
  • 路由器根据订阅情况,转发或停止某些组播流量。 👉 这就是 MLD 的作用。

🧱 三、MLD 的协议层位置

MLD 是基于 ICMPv6 的扩展:

IPv6 Header (Next Header = 58)
      ↓
ICMPv6 Header (Type = 130~132)
      ↓
MLD 消息体

MLD 使用的多播地址:

  • 所有 MLD 消息都发往 ff02::1(所有节点)或 ff02::16(所有 MLD 路由器)。

📦 四、MLD 报文类型(MLDv1)

ICMPv6 Type名称发送者作用
130Multicast Listener Query路由器询问有哪些组在使用
131Multicast Listener Report主机报告自己加入的组
132Multicast Listener Done主机告诉路由器自己退出组

🔄 五、MLD 工作流程(MLDv1)

以一个多播组为例,比如:ff15::1234

  1. 主机加入组播
    • 主机 A 向该多播组发送 ICMPv6 Report (Type 131)
    • 路由器收到后记录:“A 想接收 ff15::1234”。
  2. 路由器定期查询
    • 路由器定期发送 Query (Type 130)
    • 所有主机收到后会延迟一段随机时间再响应;
    • 若多个主机都在听,只有第一个响应的会发送,避免重复。
  3. 主机离开组播
    • 主机 A 发送 Done (Type 132)
    • 路由器再发 Group-Specific Query 确认是否还有其他主机在听;
    • 若没人响应,停止转发该组数据。

📘 小结:

MLDv1 = “谁在听哪个组” + “还在听吗” 的问答机制。

⚙️ 六、MLDv2(增强版本)

RFC 3810 定义了 MLDv2,对应 IPv4 的 IGMPv3

MLDv2 的核心概念:源过滤模式

MLDv2 的最大进步是——
主机不仅能声明“我要收某个组”,还能指定“我想/不想收哪个源发的内容”。

模式含义举例
INCLUDE 模式只接收来自指定源的流量“只听 2001:db8::1 发来的 ff15::abcd”
EXCLUDE 模式接收除指定源外的所有流量“听所有源发到 ff15::abcd,但不听 2001:db8::2”
这让 MLD 能支持:
  • ASM (Any Source Multicast):传统任意源;
  • SSM (Source Specific Multicast):单源精确匹配。

MLDv2 报文类型

MLDv2 只有两种报文:

ICMPv6 Type名称方向说明
130Multicast Listener Query路由器 → 主机询问某组或源是否还有监听者
143Multicast Listener Report主机 → 路由器主机通告自己监听哪些组及哪些源

MLDv2 的工作流程

  • 主机加入某组(带源过滤)
    • 发送 Report (Type 143);
    • 指定 INCLUDEEXCLUDE 模式;
    • 路由器记录状态。
  • 路由器定期发送 Query
    • 可以是普通(General)、组特定(Group-specific)、或源特定(Group-and-source-specific);
    • 主机在延迟时间内响应。
  • 主机更新源列表
    • 当用户改变接收源或退出某组时,发送“CHANGE_TO_…” 或 “BLOCK_OLD_SOURCES” 报文。
  • 超时删除
    • 路由器根据定时器清理不活跃的成员。

兼容性机制(MLDv2 ↔ MLDv1)

MLDv2 明确要求支持兼容模式:

  • 若路由器检测到 MLDv1 报文,则:
    • 降级为 MLDv1 模式(对该链路);
    • 不再使用源过滤;
    • 仅使用组成员信息。

📘 即:同一链路内,若存在旧主机,MLDv2 路由器会自动回退。

MLD 在实际网络中的应用

场景使用 MLDv2 的原因
IPv6 IPTV / 视频流精确订阅特定源,节省带宽
数据中心多播按源过滤,提高安全性
PIM-SSM (Protocol Independent Multicast - SSM)依赖 MLDv2 报告 (S,G) 关系
MLD Snooping二层交换机基于 MLDv2 做更细粒度转发