MLDv2 如何根据 RFC 3810 和 4606 工作?

网络工程 协议理论 ipv6 多播 射频卡 igmp
2021-07-31 08:14:47

IPv6 无状态地址自动配置发生时,接口/节点必须在形成“暂定”链路本地地址之后和在重复地址检测过程中发送邻居请求之前加入所有节点多播地址和请求节点多播地址(RFC 4862 - 第 5.4.2 节。)。

节点通过发送多播侦听器发现 (MLD) 报告消息(MLDv1MLDv2)(RFC 4862 - 第 5.4.2 节加入多播地址

双方MLDv1MLDv2包括诸如在其中一个节点发送未经请求的报告的情景:

  • MLDv1 - RFC 2710 - 4. 协议描述
    ...当节点开始侦听接口上的多播地址时,它应该立即在该接口上传输该地址的主动报告,以防它是链路上的第一个侦听器.

  • MLDv2 - RFC 3810 - 2.2。在查询器和侦听节点之间交换消息
    ...如果节点的侦听状态发生变化,该节点会立即通过状态更改报告消息报告这些变化。

MLDv2 协议的第 8 节(与 MLDv1 的互操作)中,与 MLDv1 的互操作规定如下:

  • 对于路由器:
    为了与 MLDv1 主机兼容,MLDv2 路由器必须在版本 1 兼容模式下运行。... 多播地址的兼容模式由多播地址兼容模式变量确定,该变量可以处于以下两种状态之一:MLDv1 或 MLDv2。

  • 对于主机:
    为了与 MLDv1 路由器兼容,MLDv2 主机必须在版本 1 兼容模式下运行。... 主机的兼容模式由主机兼容模式变量确定,该变量可以处于以下两种状态之一:MLDv1 或 MLDv2。

如果我的假设是正确的,那意味着路由器和主机的兼容模式变量必须最初设置为MLDv1,因此路由器的定期发送查询和主机发送的报告消息都不是 MLDv2 消息。

MLDv2 由RFC 4606更新,它不会修改上述行为:

RFC 4606 - 第 2.2.1 节。
根据 [IGMPv3、MLDv2] 运行的 SSM 感知主机可以在“旧版本兼容模式”下运行时为 SSM 地址发送 IGMPv1、IGMPv2 或 MLDv1 报告。这是一种异常(错误)情况,表明路由器无法提供 SSM 所需的 SFGMP 支持,并且当主机进入 SSM 地址的兼容模式时会记录错误,如下所述。

RFC 4606 - 第 3.5 节。
非 SSM 感知主机可以发送针对特定源范围内地址的 IGMPv1/v2 或 MLDv1 报告。路由器应该忽略所有这些报告,特别是不应该使用它们来建立 IP 转发状态。这是对 [IGMPv3, MLDv2] 的修改。

总结:根据 RFC 3810 (MLDv2) 主机必须在版本 1 兼容模式下运行,这意味着发送加入所有节点多播地址和请求节点多播地址的报告消息是 MLDv1 消息。根据 RFC 4606,MLDv2 路由器将完全忽略该报告,这意味着 MLD 根本不起作用!


问题:

  1. 我的假设是否正确,初始兼容模式版本 1 意味着主机和路由器将发送 MLDv1 消息吗?
    如果不是,那么兼容模式版本 1是什么意思?

  2. 如果我的假设是正确的,那么 RFC 4606 不会修改该行为的假设是否正确?
    如果不是,那么主机不会发送 MLDv1 消息的确切内容是在哪里写的?

1个回答

1. 如果不是,那么兼容模式版本 1 是什么意思?

根据RFC 3810 的作者Rolland Vida 先生的说法路由器/主机必须在版本 1 兼容模式下运行,这意味着主机/路由器应该启用版本兼容性。如果在路由器/主机中实现了 MLDv2,它们将在兼容模式 MLDv2 下启动(因此兼容模式变量设置为 MLDv2)

2. 如果不是,那么主机不会发送 MLDv1 消息到底写在哪里?

由于路由器和主机以兼容模式 MLDv2 启动,主机将发送 MLDv2 消息(更具体地说是 MDLv2 报告消息)。