6. 组播路由器的协议描述
IGMP 的目的是使每个组播路由器能够了解其每个直接连接的网络上哪些组播地址有侦听者. IGMPv3 还允许组播路由器了解侦听者感兴趣的源.
6.1. 查询者选举的条件
IGMPv3 与 IGMPv2 一致认为每个网络应该只有一个查询者 (Querier). 但是, IGMPv3 查询者和 IGMPv2 查询者可以在同一网络上共存. 选举协议与 IGMPv2 中相同:
- 最初, 每个组播路由器在其每个连接的网络上都作为查询者启动.
- 如果组播路由器听到来自具有较低 IP 地址的路由器的查询消息, 它必须在该网络上成为非查询者 (Non-Querier).
- 如果组播路由器在 [Other Querier Present Interval] 内未听到来自具有较低 IP 地址的路由器的查询消息, 它将恢复查询者的角色.
6.2. 查询者接收查询时的操作
当查询者接收到查询消息时, 它检查查询的源 IP 地址.
- 如果源 IP 地址低于其自己的 IP 地址, 路由器成为非查询者.
- 如果源 IP 地址大于其自己的 IP 地址, 路由器继续作为查询者.
- 如果源 IP 地址等于其自己的 IP 地址, 则忽略查询 (这是反射或环回).
6.3. 查询的发送
查询者定期发送通用查询以征求成员信息. 当它接收到某些类型的状态变更报告时, 它还发送组特定查询或组和源特定查询.
6.3.1. 通用查询
查询者定期向全系统组播地址 (224.0.0.1) 发送通用查询. 默认 [Query Interval] 为 125 秒.
通用查询用于刷新所有组和源的成员信息.
6.3.2. 组特定查询
当查询者接收到指示系统已离开组的状态变更报告 (例如, 过滤模式从 EXCLUDE 更改为 INCLUDE, 或源列表更改阻止了某个源) 时, 它向组地址发送组特定查询.
此查询用于确定是否有任何剩余系统对该组感兴趣.
6.3.3. 组和源特定查询
当查询者接收到指示系统不再对组的特定源感兴趣的状态变更报告 (例如, 阻止特定源) 时, 它发送组和源特定查询.
此查询用于确定是否有任何剩余系统对这些特定源感兴趣.
6.4. 报告的接收
组播路由器根据它们接收到的报告记录每个组和源的接收状态. 该状态按接口维护.
6.4.1. 当前状态记录的接收
当路由器接收到当前状态记录时, 它更新其组/源定时器.
- 如果记录是 MODE_IS_INCLUDE, 路由器刷新列出的源的定时器.
- 如果记录是 MODE_IS_EXCLUDE, 路由器刷新组定时器和排除的源 (如果有) 的定时器.
6.4.2. 过滤模式变更记录的接收
当路由器接收到过滤模式变更记录时, 它更新过滤模式和定时器.
- CHANGE_TO_INCLUDE_MODE: 如果路由器尚未处于 INCLUDE 模式, 则切换到 INCLUDE 模式, 并更新源定时器.
- CHANGE_TO_EXCLUDE_MODE: 路由器切换到 EXCLUDE 模式并更新组定时器.
6.4.3. 源列表变更记录的接收
当路由器接收到源列表变更记录时, 它更新源定时器.
- ALLOW_NEW_SOURCES: 路由器将新源添加到其列表并启动它们的定时器.
- BLOCK_OLD_SOURCES: 路由器可能会查询以查看其他系统是否仍然需要这些源, 然后再删除它们.
6.5. 切换路由器过滤模式
路由器对组的过滤模式根据组定时器和源定时器的状态在 INCLUDE 和 EXCLUDE 之间转换.
- 如果组定时器正在运行, 过滤模式为 EXCLUDE.
- 如果组定时器到期, 过滤模式切换到 INCLUDE.
6.6. 接收组离开消息 (IGMPv2) 时的操作
如果路由器接收到 IGMPv2 离开组 (Leave Group) 消息, 它就像接收到状态变更报告一样操作, 该报告指示离开消息中指定的组更改为 INCLUDE 模式 (有效地离开组). 这允许 IGMPv3 路由器与 IGMPv2 主机互操作.