4.1. PIM Protocol State (PIM-Protokollzustand)
Dieser Abschnitt spezifiziert den gesamten Protokollzustand, den eine PIM-Implementierung aufrechterhalten sollte, um korrekt zu funktionieren. Wir bezeichnen diesen Zustand als Bauminformationsbasis (Tree Information Base, TIB), da sie den Zustand aller Multicast-Verteilungsbäume auf diesem Router enthält.
Obwohl wir den zu behaltenden Zustand präzise spezifizieren, bedeutet dies nicht, dass eine Implementierung von PIM-SM den Zustand in dieser Form halten muss. Dies ist tatsächlich eine abstrakte Zustandsdefinition, die erforderlich ist, um das Verhalten des Routers präzise zu spezifizieren.
Wir teilen den TIB-Zustand in drei Abschnitte:
(*,G) Zustand: Zustand, der den RP-Baum für G aufrechterhält.
(S,G) Zustand: Zustand, der einen quellenspezifischen Baum für Quelle S und Gruppe G aufrechterhält.
(S,G,rpt) Zustand: Zustand, der quellenspezifische Informationen über Quelle S auf dem RP-Baum für G aufrechterhält.
4.1.1. General-Purpose State (Allzweckzustand)
Für jede Schnittstelle hält ein Router folgenden Zustand:
Zustand pro Schnittstelle:
- Hello-Timer (Hello Timer, HT): Wird verwendet, um das Senden der nächsten Hello-Nachricht auszulösen
- Nachbarzustand: Für jeden Nachbarn werden Nachbaradresse, Generations-ID, Hello-Haltezeit und andere Informationen gepflegt
Für detaillierte Zustandsfelddefinitionen, Timer-Werte und Zustandsmaschinenübergänge siehe Abschnitt 4.1.1 der RFC 7761 für die vollständige Spezifikation.
4.1.2. (,G) State ((,G) Zustand)
Für jede Gruppe G hält ein Router folgenden Zustand:
Zustand pro Schnittstelle:
- Lokale Mitgliedschaft (Local Membership): Zustand ist "NoInfo" oder "Include"
- PIM (*,G) Join/Prune-Zustand: Umfasst Zustand (NoInfo, Join, Prune-Pending), Prune-Pending-Timer und Join/Prune-Ablauf-Timer
- (*,G) Assert Winner-Zustand: Umfasst Zustand (NoInfo, I lost Assert, I won Assert), Assert-Timer und Gewinnerinformationen
Nicht schnittstellenspezifischer Zustand:
- Upstream-(*,G) Join/Prune-Zustand: Zustand ist "NotJoined(,G)" oder "Joined(,G)"
- Upstream-Join/Prune-Timer (JT)
- Zuletzt verwendeter RP
- Zuletzt verwendeter RPF-Nachbar zum RP
Für detaillierte Zustandsfelddefinitionen, Zustandsübergangsregeln und Makrodefinitionen siehe Abschnitt 4.1.2 der RFC 7761 für die vollständige Spezifikation.
4.1.3. (S,G) State ((S,G) Zustand)
Für jedes Quell-/Gruppenpaar (S,G) hält ein Router folgenden Zustand:
Zustand pro Schnittstelle:
- Lokale Mitgliedschaft: Zustand ist "NoInfo" oder "Include"
- PIM (S,G) Join/Prune-Zustand: Umfasst Zustand und Timer
- (S,G) Assert Winner-Zustand: Umfasst Zustand, Timer und Gewinnerinformationen
Nicht schnittstellenspezifischer Zustand:
- Upstream-(S,G) Join/Prune-Zustand
- Upstream-(S,G) Join/Prune-Timer
- Zuletzt verwendeter RPF-Nachbar zu S
- SPTbit: Zeigt an, ob (S,G)-Zustand aktiv ist
- (S,G) Keepalive-Timer (KAT)
Zusätzlicher (S,G)-Zustand am DR:
- Register-Zustand: Join, Prune, Join-Pending oder NoInfo
- Register-Stop-Timer (RST)
Für detaillierte Zustandsfelddefinitionen, SPTbit-Verwendung und Keepalive-Timer-Funktionen siehe Abschnitt 4.1.3 der RFC 7761 für die vollständige Spezifikation.
4.1.4. (S,G,rpt) State ((S,G,rpt) Zustand)
Für jedes Quell-/Gruppenpaar (S,G), für das der Router auch (*,G)-Zustand hat, hält er auch folgenden Zustand:
Zustand pro Schnittstelle:
- Lokale Mitgliedschaft: Zustand ist "NoInfo" oder "Exclude"
- PIM (S,G,rpt) Join/Prune-Zustand: Umfasst Zustand (NoInfo, Pruned, Prune-Pending) und Timer
Nicht schnittstellenspezifischer Zustand:
- Upstream-(S,G,rpt) Join/Prune-Zustand: RPTNotJoined(G), NotPruned(S,G,rpt) oder Pruned(S,G,rpt)
- Überschreiben-Timer (Override Timer, OT)
Für detaillierte Zustandsfelddefinitionen und Zustandsmaschinenverhalten siehe Abschnitt 4.1.4 der RFC 7761 für die vollständige Spezifikation.
4.1.5. State Summarization Macros (Zustandszusammenfassungsmakros)
Die PIM-Spezifikation verwendet eine Reihe von Makros, um den Zustand für die Bestimmung des Weiterleitungsverhaltens und der Nachrichtengenerierung zusammenzufassen. Diese Makros umfassen:
- immediate_olist(*,G): Sofortige ausgehende Schnittstellenliste
- inherited_olist(S,G): Geerbte ausgehende Schnittstellenliste
- joins(*,G): Ob Join-Zustand (*,G) auf einer Schnittstelle existiert
- pim_include(*,G): Ob eine Schnittstelle lokale Mitgliedschaft hat
- lost_assert(*,G): Ob ein Assert auf einer Schnittstelle verloren wurde
- Und andere Makros zur Berechnung von Weiterleitungs- und Join/Prune-Verhalten
Für vollständige Definitionen und Verwendungsszenarien aller Zustandszusammenfassungsmakros siehe Abschnitt 4.1.5 der RFC 7761 für detaillierte Spezifikationen. Diese Makros sind entscheidend für das Verständnis des PIM-Weiterleitungs- und Kontrollebenenverhaltens.