3. Protocol Description (协议描述)
3. 协议描述 (Protocol Description)
注意, 计时器值的默认值在本文档后面描述。计时器和计数器名称出现在方括号中。
组播路由器使用 IGMP 了解每个连接的物理网络上哪些组有成员。组播路由器为每个连接的网络维护一个组播组成员资格列表, 以及每个成员资格的计时器。"组播组成员资格"意味着给定连接网络上至少有一个组播组成员, 而不是所有成员的列表。
对于每个连接的网络, 组播路由器可以承担两种角色之一: 查询者 (Querier) 或非查询者 (Non-Querier)。每个物理网络通常只有一个查询者。所有组播路由器在每个连接的网络上作为查询者启动。如果组播路由器听到来自 IP 地址较低的路由器的查询消息, 它必须 (MUST) 在该网络上成为非查询者。如果路由器在 [其他查询者存在间隔] 内没有听到来自另一个路由器的查询消息, 它将恢复查询者角色。
路由器定期 [查询间隔] 在每个连接的网络上发送通用查询 (此路由器是查询者的网络), 以征求成员资格信息。启动时, 路由器应该 (SHOULD) 发送 [启动查询计数] 个紧密间隔 [启动查询间隔] 的通用查询, 以便快速可靠地确定成员资格信息。通用查询发送到全系统组播组 (224.0.0.1), 组地址字段为 0, 最大响应时间为 [查询响应间隔]。
当主机收到通用查询时, 它为从收到查询的接口上所属的每个组 (不包括全系统组) 设置延迟计时器。每个计时器设置为不同的随机值, 使用主机上可用的最高时钟粒度, 从范围 (0, 最大响应时间] 中选择, 最大响应时间如查询数据包中指定的那样。
当主机加入组播组时, 它应该立即为该组传输未经请求的第 2 版成员资格报告, 以防它是网络上该组的第一个成员。为了覆盖初始成员资格报告丢失或损坏的可能性, 建议在短暂延迟 [未经请求的报告间隔] 后重复一两次。
当主机离开组播组时, 如果它是最后一个用成员资格报告回复查询的主机, 它应该 (SHOULD) 向全路由器组播组 (224.0.0.2) 发送离开组消息。如果它不是最后一个回复查询的主机, 它可以 (MAY) 什么都不发送, 因为子网上必定还有另一个成员。
当查询者收到某个组的离开组消息, 且该组在接收接口上有组成员时, 它每隔 [最后成员查询间隔] 向正在离开的组发送 [最后成员查询计数] 个组特定查询。这些组特定查询的最大响应时间设置为 [最后成员查询间隔]。如果在最后一个查询的响应时间到期后没有收到报告, 路由器假设该组没有本地成员。
非查询者必须 (MUST) 忽略离开组消息, 查询者应该 (SHOULD) 忽略接收接口上没有组成员的组的离开组消息。