6. Host State Diagram (ホスト状態遷移図)
6. Host State Diagram (ホスト状態遷移図)
ホストの動作は、以下の状態遷移図によってより正式に規定されます。ホストは、単一のネットワークインターフェース上の単一の IP マルチキャストグループに関して、以下の 3 つの可能な状態のいずれかになります:
-
"Non-Member" (非メンバー) 状態、ホストがインターフェース上のグループに属していない場合。これは、すべてのネットワークインターフェース上のすべてのメンバーシップの初期状態です。ホストにストレージを必要としません。
-
"Delaying Member" (遅延メンバー) 状態、ホストがインターフェース上のグループに属しており、そのメンバーシップに対してレポート遅延タイマーが実行されている場合。
-
"Idle Member" (アイドルメンバー) 状態、ホストがインターフェース上のグループに属しており、そのメンバーシップに対してレポート遅延タイマーが実行されていない場合。
IGMP 状態遷移を引き起こす可能性のある 5 つの重要なイベントがあります:
-
"join group" (グループ参加) は、ホストがインターフェース上のグループに参加することを決定したときに発生します。これは Non-Member 状態で発生する可能性があります。
-
"leave group" (グループ脱退) は、ホストがインターフェース上のグループを脱退することを決定したときに発生します。これは Delaying Member および Idle Member 状態で発生する可能性があります。
-
"query received" (クエリ受信) は、ホストが有効な General Membership Query メッセージ、または有効な Group-Specific Membership Query メッセージを受信したときに発生します。有効であるためには、Query メッセージは少なくとも 8 オクテット長で、正しい IGMP チェックサムを持っていなければなりません。IGMP ヘッダーのグループアドレスは、ゼロ (General Query) または有効なマルチキャストグループアドレス (Group-Specific Query) のいずれかでなければなりません。General Query は、Query が受信されたインターフェース上のすべてのメンバーシップに適用されます。Group-Specific Query は、Query が受信されたインターフェース上の単一のグループのメンバーシップに適用されます。Non-Member 状態のメンバーシップに対するクエリは無視されます。
-
"report received" (レポート受信) は、ホストが有効な IGMP Membership Report メッセージ (バージョン 1 またはバージョン 2) を受信したときに発生します。有効であるためには、Report メッセージは少なくとも 8 オクテット長で、正しい IGMP チェックサムを持っていなければなりません。Membership Report は、Membership Report が受信されたインターフェース上の、Membership Report によって識別されるグループのメンバーシップにのみ適用されます。Non-Member または Idle Member 状態のメンバーシップに対しては無視されます。
-
"timer expired" (タイマー満了) は、インターフェース上のグループのレポート遅延タイマーが満了したときに発生します。これは Delaying Member 状態で発生する可能性があります。
その他のすべてのイベント (無効な IGMP メッセージの受信、または Query や Report 以外の IGMP メッセージなど) は、すべての状態で無視されます。
上記のイベントに応答して実行される可能性のある 7 つのアクションがあります:
-
"send report" (レポート送信)、インターフェース上のグループに対して。レポートのタイプはインターフェースの状態によって決定されます。Report Message は報告されるグループに送信されます。
-
"send leave" (脱退送信)、インターフェース上のグループに対して。インターフェースの状態が Querier が IGMPv1 を実行していることを示している場合、このアクションはスキップされるべきです (SHOULD)。私たちが最後に報告したホストであるというフラグがクリアされている場合、このアクションはスキップされるかもしれません (MAY)。Leave Message は ALL-ROUTERS グループ (224.0.0.2) に送信されます。
-
"set flag" (フラグ設定)、私たちがこのグループに対してレポートを送信した最後のホストであったことを示します。
-
"clear flag" (フラグクリア)、私たちがこのグループに対してレポートを送信した最後のホストではなかったため。
-
"start timer" (タイマー開始)、インターフェース上のグループに対して、(0, Max Response Time] の間隔から均一に選択された遅延値を使用します。ここで、Max Response Time は Query で指定されています。これが非要請 Report の場合、タイマーは (0, [Unsolicited Report Interval] ] の間隔から均一に選択された遅延値に設定されます。
-
"reset timer" (タイマーリセット)、インターフェース上のグループに対して新しい値にリセットします。"start timer" で説明されているように、(0, Max Response Time] の間隔から均一に選択された遅延値を使用します。
-
"stop timer" (タイマー停止)、インターフェース上のグループに対して。
以下のすべての状態図において、各状態遷移アークには遷移を引き起こすイベントがラベル付けされており、括弧内には遷移中に実行されるアクションが記載されています。遷移は常にイベントによってトリガーされることに注意してください。アクションが条件付きであっても、遷移は発生します。
________________
| |
| |
| |
| |
--------->| Non-Member |<---------
| | | |
| | | |
| | | |
| |________________| |
| | |
| leave group | join group | leave group
| (stop timer, |(send report, | (send leave
| send leave if | set flag, | if flag set)
| flag set) | start timer) |
________|________ | ________|________
| |<--------- | |
| | | |
| |<-------------------| |
| | query received | |
| Delaying Member | (start timer) | Idle Member |
---->| |------------------->| |
| | | report received | |
| | | (stop timer, | |
| | | clear flag) | |
| |_________________|------------------->|_________________|
| query received | timer expired
| (reset timer if | (send report,
| Max Resp Time | set flag)
| < current timer) |
-------------------
全システムグループ (アドレス 224.0.0.1) は特別なケースとして扱われます。ホストは、すべてのインターフェースでそのグループに対して Idle Member 状態で開始し、決して他の状態に遷移せず、そのグループに対してレポートを送信しません。
さらに、ホストは、単一のネットワークインターフェースに関して、次の 2 つの可能な状態のいずれかになります:
-
"No IGMPv1 Router Present" (IGMPv1 ルーターなし)、ホストが [Version 1 Router Present Timeout] の間 IGMPv1 スタイルのクエリを聞いていない場合。これが初期状態です。
-
"IGMPv1 Router Present" (IGMPv1 ルーターあり)、ホストが [Version 1 Router Present Timeout] 以内に IGMPv1 スタイルのクエリを聞いた場合。
状態遷移を引き起こす可能性のある 2 つのイベントがあります:
-
"IGMPv1 query received" (IGMPv1 クエリ受信)、ホストが Max Response Time フィールドが 0 に設定されたクエリを受信したとき。
-
"timer expires" (タイマー満了)、IGMPv1 ルーターの存在を記録するために設定されたタイマーが満了したとき。
そして、イベントによってトリガーされる可能性のある単一のアクション:
- "set timer" (タイマー設定)、タイマーを最大値 [Version 1 Router Present Timeout] に設定し、(再) 開始します。
________________
| |
| |
| No IGMPv1 |
| Router |
| Present |
| |
---->| |----
| | | |
| |________________| |
timer expires | | IGMPv1 query
| ________________ | received
| | | | (set timer)
| | | |
| | | |
-----| IGMPv1 |<---
| Router |
| Present |
| |
---->| |----
| |________________| |
| |
| IGMPv1 query received |
| (set timer) |
---------------------------