Skip to main content

7. 与 IGMPv1 和 IGMPv2 的互操作

IGMPv3 主机和路由器与尚未升级到 IGMPv3 的主机和路由器互操作. 这种兼容性通过查询者组播的周期性成员查询消息以及旧主机组播的第1版和第2版成员报告消息来维持.

7.1. IGMPv3 主机操作

IGMPv3 主机的行为取决于网络上的查询者使用的是 IGMPv3、IGMPv2 还是 IGMPv1.

7.1.1. 查询版本区分

成员查询消息的 IGMP 版本按如下方式确定:

  1. IGMPv1 查询: 长度 = 8 字节, Max Resp Code = 0.
  2. IGMPv2 查询: 长度 = 8 字节, Max Resp Code > 0.
  3. IGMPv3 查询: 长度 >= 12 字节.

7.1.2. 存在旧查询者时的行为

IGMPv3 主机可能被放置在查询者尚未升级到 IGMPv3 的网络上. 主机必须考虑这种可能性.

  • 存在 IGMPv1 查询者: 如果 IGMPv3 主机接收到 IGMPv1 查询, 它必须以 IGMPv1 报告响应. 不支持源过滤.
  • 存在 IGMPv2 查询者: 如果 IGMPv3 主机接收到 IGMPv2 查询, 它必须以 IGMPv2 报告响应. 不支持源过滤.
  • 存在 IGMPv3 查询者: 如果 IGMPv3 主机接收到 IGMPv3 查询, 它以 IGMPv3 报告响应. 支持源过滤.

主机为每个接口维护一个兼容性模式变量, 该变量在接收到查询时更新. 如果接收到旧查询, 主机切换到相应的兼容性模式并设置定时器. 当定时器到期时, 主机切换回 IGMPv3 模式.

7.2. IGMPv3 路由器操作

IGMPv3 路由器的行为取决于网络上是否存在旧主机或路由器.

7.2.1. 存在旧主机

IGMPv3 路由器可能从旧主机接收 IGMPv1 或 IGMPv2 报告.

  • 接收到 IGMPv1 报告: 路由器就像接收到该组的 IGMPv3 IS_EX({}) 报告一样操作. 它还必须忽略该组的任何离开组消息 (因为 IGMPv1 没有离开消息).
  • 接收到 IGMPv2 报告: 路由器就像接收到该组的 IGMPv3 IS_EX({}) 报告一样操作.

当存在旧主机时, 路由器可能需要抑制受影响组的 IGMPv3 特定处理 (如源特定查询) 以确保兼容性.

7.2.2. 存在旧路由器

如果 IGMPv3 路由器与旧路由器在同一网络上, 查询者选举过程 (第 6.1 节) 确定哪个路由器成为查询者.

  • 如果 IGMPv1 路由器存在并成为查询者, 所有路由器 (包括 IGMPv3 路由器) 必须作为 IGMPv1 路由器操作.
  • 如果 IGMPv2 路由器存在并成为查询者, 所有路由器必须作为 IGMPv2 路由器操作.
  • 如果 IGMPv3 路由器成为查询者, 它发送 IGMPv3 查询. 旧路由器会将这些视为无效的 IGMPv1/v2 查询 (或者如果它们部分兼容则处理它们), 但通常, 如果 IGMPv3 路由器必须与无法处理 IGMPv3 数据包的旧路由器共存, 则应配置为在 IGMPv1 或 IGMPv2 模式下运行.

7.3. 混合第1、2和3版主机

同一网络上可能有 IGMPv1、IGMPv2 和 IGMPv3 主机的混合.

  • 如果查询者是 IGMPv3, 它发送 IGMPv3 查询.
  • IGMPv3 主机以 IGMPv3 报告响应.
  • IGMPv2 主机以 IGMPv2 报告响应.
  • IGMPv1 主机以 IGMPv1 报告响应.

IGMPv3 路由器必须处理所有这些报告类型. 对于具有 IGMPv1 或 IGMPv2 成员的组, 路由器必须有效地将该组视为处于 EXCLUDE 模式且源列表为空 (即, "为此组发送所有内容"), 因为旧主机无法指定源过滤器.