MLD(Multicast Listener Discovery,多播监听发现协议)是 IPv6 版本的 IGMP。
🧭 一、MLD 是什么?
- 全称:Multicast Listener Discovery
- 工作层次:网络层(在 ICMPv6 上实现)
- 主要作用:
让本地链路上的路由器知道,哪些主机对哪些多播组感兴趣。 📌 对应关系:
| IPv4 | IPv6 |
|---|---|
| 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 | 名称 | 发送者 | 作用 |
|---|---|---|---|
| 130 | Multicast Listener Query | 路由器 | 询问有哪些组在使用 |
| 131 | Multicast Listener Report | 主机 | 报告自己加入的组 |
| 132 | Multicast Listener Done | 主机 | 告诉路由器自己退出组 |
🔄 五、MLD 工作流程(MLDv1)
以一个多播组为例,比如:ff15::1234
- 主机加入组播
- 主机 A 向该多播组发送 ICMPv6 Report (Type 131);
- 路由器收到后记录:“A 想接收 ff15::1234”。
- 路由器定期查询
- 路由器定期发送 Query (Type 130);
- 所有主机收到后会延迟一段随机时间再响应;
- 若多个主机都在听,只有第一个响应的会发送,避免重复。
- 主机离开组播
- 主机 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 | 名称 | 方向 | 说明 |
|---|---|---|---|
| 130 | Multicast Listener Query | 路由器 → 主机 | 询问某组或源是否还有监听者 |
| 143 | Multicast Listener Report | 主机 → 路由器 | 主机通告自己监听哪些组及哪些源 |
MLDv2 的工作流程
- 主机加入某组(带源过滤)
- 发送 Report (Type 143);
- 指定
INCLUDE或EXCLUDE模式; - 路由器记录状态。
- 路由器定期发送 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 做更细粒度转发 |