跳到主要内容

7. Router State Diagram (路由器状态图)

7. 路由器状态图 (Router State Diagram)​

路由器行为由下面的状态转换图更正式地规定.

对于任何单个连接的网络, 路由器可能处于两种状态之一:

  • "Querier": 当此路由器被指定在此网络上传输 IGMP Membership Query 时.

  • "Non-Querier": 当有另一个路由器被指定在此网络上传输 IGMP Membership Query 时.

以下三个事件可以导致路由器改变状态:

  • "query timer expired": 当为查询传输设置的计时器到期时发生.

  • "query received from a router with a lower IP address": 当从同一网络上 IP 地址较低的路由器收到 IGMP Membership Query 时发生.

  • "other querier present timer expired": 当为记录网络上存在另一个 IP 地址较低的 Querier 而设置的计时器到期时发生.

针对上述事件, 可以采取三种动作:

  • "start general query timer": 针对连接的网络启动 general query timer.

  • "start other querier present timer": 针对连接的网络启动 other querier present timer [Other Querier Present Interval].

  • "send general query": 在连接的网络上发送 general query. General Query 发送到 all-systems 组 (224.0.0.1), 其 Max Response Time 为 [Query Response Interval].

                                      --------------------------------
_______|________ gen. query timer |
--------- | | expired |
| Initial |---------------->| | (send general query, |
--------- (send gen. q., | | set gen. q. timer) |
set initial gen. q. | |<----------------------
timer) | Querier |
| |
-----| |<---
| | | |
| |________________| |
query received from a | | other querier
router with a lower | | present timer
IP address | | expired
(set other querier | ________________ | (send general
present timer) | | | | query,set gen.
| | | | q. timer)
| | | |
---->| Non |----
| Querier |
| |
| |
---->| |----
| |________________| |
| query received from a |
| router with a lower IP |
| address |
| (set other querier |
| present timer) |
---------------------------

路由器应该在所有连接的网络上从 Initial 状态开始, 并立即转入 Querier 状态.

此外, 为了跟踪哪些组有成员, 对于任何单个连接网络上的任何单个 IP 组播组, 路由器可能处于四种状态之一:

  • "No Members Present" 状态: 网络上没有主机曾为此组播组发送报告时. 这是路由器上所有组的初始状态; 它不要求路由器保存任何存储状态.

  • "Members Present" 状态: 网络上有主机曾为此组播组发送 Membership Report 时.

  • "Version 1 Members Present" 状态: 网络上有 IGMPv1 主机曾为此组播组发送 Version 1 Membership Report 时.

  • "Checking Membership" 状态: 路由器已经收到 Leave Group 消息, 但尚未听到该组播组的 Membership Report 时.

有六个重要事件可以导致路由器状态转换:

  • "v2 report received": 路由器在接口上收到该组的 Version 2 Membership Report 时发生. 为了有效, Report 消息必须至少为 8 个八位字节长, 并且必须具有正确的 IGMP 校验和.

  • "v1 report received": 路由器在接口上收到该组的 Version 1 Membership Report 时发生. 同样的有效性要求适用.

  • "leave received": 路由器在接口上收到该组的 IGMP Group Leave 消息时发生. 为了有效, Leave 消息必须至少为 8 个八位字节长, 并且必须具有正确的 IGMP 校验和.

  • "timer expired": 为组成员资格设置的计时器到期时发生.

  • "retransmit timer expired": 为重传组特定 Membership Query 而设置的计时器到期时发生.

  • "v1 host timer expired": 为记录存在作为组成员的 version 1 主机而设置的计时器到期时发生.

针对上述事件, 可以采取六种动作:

  • "start timer": 针对接口上的组成员资格启动计时器. 如果该计时器当前正在运行, 也会将其重置为初始值 [Group Membership Interval].

  • "start timer*": 针对接口上的组成员资格执行此替代动作. 如果此路由器是 Querier, 此动作将计时器设置为 [Last Member Query Interval] * [Last Member Query Count]; 如果此路由器是 Non-Querier, 则设置为数据包中的 [Max Response Time] * [Last Member Query Count].

  • "start retransmit timer": 针对接口上的组成员资格启动 retransmit timer [Last Member Query Interval].

  • "start v1 host timer": 针对接口上的组成员资格启动 v1 host timer. 如果该计时器当前正在运行, 也会将其重置为初始值 [Group Membership Interval].

  • "send group-specific query": 针对连接网络上的该组发送 group-specific query. Group-Specific Query 发送到被查询的组, 其 Max Response Time 为 [Last Member Query Interval].

  • "notify routing +": 通知路由协议, 此连接网络上存在该组的成员.

  • "notify routing -": 通知路由协议, 此连接网络上不再存在该组的任何成员.

处于 Querier 状态的路由器的状态图如下:

                              ________________
 ----------------------------|                |<-----------------------
|                            |                |timer expired           |
|               timer expired|                |(notify routing -,      |
|          (notify routing -)|   No Members   |clear rxmt tmr)         |
|                    ------->|    Present     |<-------                |
|                   |        |                |       |                |
|v1 report rec'd    |        |                |       |  ------------  |
|(notify routing +, |        |________________|       | | rexmt timer| |
| start timer,      |                    |            | |  expired   | |
| start v1 host     |  v2 report received|            | | (send g-s  | |
|  timer)           |  (notify routing +,|            | |  query,    | |
|                   |        start timer)|            | |  st rxmt   | |
|         __________|______              |       _____|_|______  tmr)| |
|        |                 |<------------       |              |     | |
|        |                 |                    |              |<----- |
|        |                 | v2 report received |              |       |
|        |                 | (start timer)      |              |       |
|        | Members Present |<-------------------|    Checking  |       |
|  ----->|                 | leave received     |   Membership |       |
| |      |                 | (start timer*,     |              |       |
| |      |                 |  start rexmt timer,|              |       |
| |      |                 |  send g-s query)   |              |       |
| |  --->|                 |------------------->|              |       |
| | |    |_________________|                    |______________|       |
| | |v2 report rec'd |  |                          |                   |
| | |(start timer)   |  |v1 report rec'd           |v1 report rec'd    |
| |  ----------------   |(start timer,             |(start timer,      |
| |v1 host              | start v1 host timer)     | start v1 host     |
| |tmr    ______________V__                        | timer)            |
| |exp'd |                 |<----------------------                    |
|  ------|                 |                                           |
|        |    Version 1    |timer expired                              |
|        | Members Present |(notify routing -)                         |
|        |                 |-------------------------------------------
|        |                 |<--------------------
 ------->|_________________| v1 report rec'd     |
| v2 report rec'd |   |   (start timer,          |
| (start timer)   |   |    start v1 host timer)  |
 -----------------     --------------------------

处于 Non-Querier 状态的路由器的状态图类似, 但 Non-Querier 不发送任何消息, 只由消息接收驱动. 注意, Non-Querier 不关心 Membership Report 消息是 Version 1 还是 Version 2.

                              ________________
| |
| |
timer expired| |timer expired
(notify routing -)| No Members |(notify routing -)
--------->| Present |<---------
| | | |
| | | |
| | | |
| |________________| |
| | |
| |report received |
| |(notify routing +,|
| | start timer) |
________|________ | ________|________
| |<--------- | |
| | report received | |
| | (start timer) | |
| Members Present |<-------------------| Checking |
| | g-s query rec'd | Membership |
| | (start timer*) | |
---->| |------------------->| |
| |_________________| |_________________|
| report received |
| (start timer) |
-----------------