4.9. PIM Packet Formats (PIM パケット形式)
このセクションは PIM-SM メッセージのパケット形式について説明します。すべての PIM メッセージは IP プロトコル番号 103 を使用します。
PIM メッセージヘッダー形式
すべての PIM メッセージは共通ヘッダーを共有します:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- PIM Ver: PIM バージョン番号 (現在は 2)
- Type: メッセージタイプ
- Checksum: チェックサム, PIM メッセージ全体をカバー
PIM メッセージタイプ
| タイプ値 | メッセージタイプ | 用途 |
|---|---|---|
| 0 | Hello | ネイバー発見と維持 |
| 1 | Register | ソースの RP への登録 |
| 2 | Register-Stop | RP による登録停止 |
| 3 | Join/Prune | 配布ツリーの構築 |
| 4 | Bootstrap | BSR メカニズム |
| 5 | Assert | LAN 転送者選出 |
| 6 | Graft | PIM-DM 用 |
| 7 | Graft-Ack | PIM-DM 用 |
| 8 | Candidate-RP-Advertisement | RP 候補アドバタイズ |
4.9.1. Encoded Source and Group Address Formats (エンコードされたソースとグループアドレス形式)
PIM メッセージ内のアドレスは, 異なるアドレスファミリーとマスク長をサポートするためにエンコードされた形式を使用します。
エンコードされたアドレス形式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Addr Family | Encoding Type | Rsrvd |S|W|R| Mask Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source/Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Addr Family: アドレスファミリー (IPv4=1, IPv6=2)
- S bit: Sparse ビット
- W bit: WC (WildCard) ビット
- R bit: RPT (RP Tree) ビット
- Mask Len: マスク長
4.9.2. Hello Message Format (Hello メッセージ形式)
Hello メッセージは複数の TLV オプションを含みます:
基本構造:
- PIM 共通ヘッダー (Type=0)
- 複数の Hello オプション TLV
一般的な Hello オプション:
- Holdtime (タイプ 1): ネイバー保持時間
- LAN Prune Delay (タイプ 2): 伝播遅延設定
- DR Priority (タイプ 19): DR 優先度
- Generation ID (タイプ 20): 再起動検出
- Address List (タイプ 24): セカンダリアドレスリスト
4.9.3. Register Message Format (Register メッセージ形式)
Register メッセージはマルチキャストデータパケットをカプセル化し, RP にユニキャストします:
構造:
PIM Header (Type=1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2| Type=1 |Reserved |B|N| Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| カプセル化された IP パケット |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- B bit: Border ビット
- N bit: Null-Register ビット (探査用)
4.9.4. Register-Stop Message Format (Register-Stop メッセージ形式)
Register-Stop は RP によって Register を停止するために送信されます:
構造:
- PIM ヘッダー (Type=2)
- グループアドレス (エンコード形式)
- ソースアドレス (エンコード形式)
4.9.5. Join/Prune Message Format (Join/Prune メッセージ形式)
Join/Prune メッセージは複数のグループと複数のソースを運ぶことができます:
構造:
- PIM ヘッダー (Type=3)
- 上流ネイバーアドレス
- Holdtime
- グループ数
- 各グループについて:
- グループアドレス
- Join リスト (ソースアドレス)
- Prune リスト (ソースアドレス)
編成構造: メッセージはグループごとに編成され, 各グループは複数の Join および Prune のソースを持つことができます。
4.9.5.1. Group Set Source List Rules (グループセットソースリストルール)
Join/Prune メッセージ内のソースリストは特定のルールに従います:
- (*,G) Join/Prune は WC ビットを使用します
- (S,G) Join/Prune はソースを直接リストします
- (S,G,rpt) Prune は RPT ビットを使用します
4.9.5.2. Group Set Fragmentation (グループセットフラグメンテーション)
Join/Prune メッセージが大きすぎる場合, フラグメンテーションが必要です:
- MTU 制限内に保ちます
- 各フラグメントには完全なグループエントリが含まれます
- グループの途中でフラグメント化しません
4.9.6. Assert Message Format (Assert メッセージ形式)
Assert メッセージは LAN 転送者選出に使用されます:
構造:
- PIM ヘッダー (Type=5)
- グループアドレス
- ソースアドレス
- Assert メトリック:
- メトリック優先度
- ルートメトリック
- ルート優先度
注記
すべての PIM メッセージ形式の詳細なフィールド定義, エンコーディングルール, および例については, RFC 7761 のセクション 4.9 の完全な仕様を参照してください。パケット形式図とフィールドの正確なビット定義は元の文書で詳細に説明されています。