Zum Hauptinhalt springen

4. Message Formats (Nachrichtenformate)

  1. Message Formats (Nachrichtenformate)

    Dieser Abschnitt beschreibt die von BGP verwendeten Nachrichtenformate.

    BGP-Nachrichten werden über TCP-Verbindungen gesendet. Eine Nachricht wird erst verarbeitet, nachdem sie vollständig empfangen wurde. Die maximale Nachrichtengröße beträgt 4096 Oktette. Alle Implementierungen müssen (REQUIRED) diese maximale Nachrichtengröße unterstützen. Die kleinste Nachricht, die gesendet werden kann, besteht aus einem BGP-Header ohne Datenteil (19 Oktette).

    Alle Multi-Oktett-Felder sind in Netzwerk-Byte-Reihenfolge (network byte order).

4.1. Message Header Format (Nachrichtenkopf-Format)

Jede Nachricht hat einen Header mit fester Größe. Je nach Nachrichtentyp kann dem Header ein Datenteil folgen oder auch nicht. Das Layout dieser Felder ist unten dargestellt:

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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

  • + | |

| Marker |

  • + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Marker:

Dieses 16-Oktett-Feld ist aus Kompatibilitätsgründen enthalten; es muss (MUST) auf alle Einsen gesetzt werden.

Length:

Diese vorzeichenlose 2-Oktett-Ganzzahl gibt die Gesamtlänge der Nachricht einschließlich des Headers in Oktetten an. Dadurch kann das (Marker-Feld der) nächsten Nachricht im TCP-Stream lokalisiert werden. Der Wert des Length-Felds muss (MUST) immer mindestens 19 und nicht größer als 4096 sein und kann (MAY) je nach Nachrichtentyp weiter eingeschränkt werden. Ein "Auffüllen" (padding) zusätzlicher Daten nach der Nachricht ist nicht zulässig. Daher muss (MUST) das Length-Feld den kleinsten erforderlichen Wert haben, gegeben den Rest der Nachricht.

Type:

Diese vorzeichenlose 1-Oktett-Ganzzahl gibt den Typcode der Nachricht an. Dieses Dokument definiert die folgenden Typcodes:

1 - OPEN 2 - UPDATE 3 - NOTIFICATION 4 - KEEPALIVE

[RFC2918] definiert einen weiteren Typcode.

4.2. OPEN Message Format (OPEN-Nachrichtenformat)

Nach dem Aufbau einer TCP-Verbindung ist die erste von jeder Seite gesendete Nachricht eine OPEN-Nachricht. Wenn die OPEN-Nachricht akzeptabel ist, wird eine KEEPALIVE-Nachricht zurückgesendet, die das OPEN bestätigt.

Zusätzlich zum BGP-Header mit fester Größe enthält die OPEN-Nachricht die folgenden Felder:

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 +-+-+-+-+-+-+-+-+ | Version | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | My Autonomous System | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hold Time | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BGP Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt Parm Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Optional Parameters (variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version:

Diese vorzeichenlose 1-Oktett-Ganzzahl gibt die Protokollversionsnummer der Nachricht an. Die aktuelle BGP-Versionsnummer ist 4.

My Autonomous System:

Diese vorzeichenlose 2-Oktett-Ganzzahl gibt die Autonome-System-Nummer (Autonomous System number) des Absenders an.

Hold Time:

Diese vorzeichenlose 2-Oktett-Ganzzahl gibt die Anzahl der Sekunden an, die der Absender für den Wert des Hold-Timers vorschlägt. Beim Empfang einer OPEN-Nachricht muss (MUST) ein BGP-Speaker den Wert des Hold-Timers berechnen, indem er den kleineren seiner konfigurierten Hold-Time und der im OPEN-Nachricht empfangenen Hold-Time verwendet. Die Hold-Time muss (MUST) entweder null oder mindestens drei Sekunden betragen. Eine Implementierung kann (MAY) Verbindungen auf der Grundlage der Hold-Time ablehnen.

Der berechnete Wert gibt die maximale Anzahl von Sekunden an, die zwischen dem Empfang aufeinanderfolgender KEEPALIVE- und/oder UPDATE-Nachrichten vom Absender vergehen dürfen.

BGP Identifier:

Diese vorzeichenlose 4-Oktett-Ganzzahl gibt den BGP-Identifier (BGP Identifier) des Absenders an. Ein gegebener BGP-Speaker setzt den Wert seines BGP-Identifiers auf eine IP-Adresse, die diesem BGP-Speaker zugewiesen ist. Der Wert des BGP-Identifiers wird beim Start bestimmt und ist für jedes lokale Interface und jeden BGP-Peer derselbe.

Optional Parameters Length:

Diese vorzeichenlose 1-Oktett-Ganzzahl gibt die Gesamtlänge des Optional-Parameters-Felds in Oktetten an. Wenn der Wert dieses Felds null ist, sind keine optionalen Parameter vorhanden.

Optional Parameters:

Dieses Feld enthält eine Liste optionaler Parameter, wobei jeder Parameter als <Parameter Type, Parameter Length, Parameter Value>-Tripel codiert ist.

0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... | Parm. Type | Parm. Length | Parameter Value (variable) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

Parameter Type ist ein Ein-Oktett-Feld, das einzelne Parameter eindeutig identifiziert. Parameter Length ist ein Ein-Oktett-Feld, das die Länge des Parameter-Value-Felds in Oktetten enthält. Parameter Value ist ein Feld variabler Länge, das gemäß dem Wert des Parameter-Type-Felds interpretiert wird.

[RFC3392] definiert den optionalen Capabilities-Parameter.

Die Mindestlänge der OPEN-Nachricht beträgt 29 Oktette (einschließlich Nachrichtenkopf).

4.3. UPDATE Message Format (UPDATE-Nachrichtenformat)

UPDATE-Nachrichten werden verwendet, um Routing-Informationen zwischen BGP-Peers zu übertragen. Die Informationen in der UPDATE-Nachricht können verwendet werden, um einen Graphen zu konstruieren, der die Beziehungen der verschiedenen autonomen Systeme beschreibt. Durch Anwendung zu diskutierender Regeln können Routing-Informationsschleifen und einige andere Anomalien erkannt und aus dem Inter-AS-Routing entfernt werden.

Eine UPDATE-Nachricht wird verwendet, um realisierbare Routen, die gemeinsame Pfadattribute teilen, einem Peer anzukündigen oder um mehrere nicht realisierbare Routen aus dem Dienst zu entfernen (siehe 3.1). Eine UPDATE-Nachricht kann (MAY) gleichzeitig eine realisierbare Route ankündigen und mehrere nicht realisierbare Routen aus dem Dienst entfernen. Die UPDATE-Nachricht enthält immer den BGP-Header mit fester Größe und enthält auch die anderen Felder, wie unten gezeigt (beachten Sie, dass einige der gezeigten Felder möglicherweise nicht in jeder UPDATE-Nachricht vorhanden sind):

+-----------------------------------------------------+ | Withdrawn Routes Length (2 octets) | +-----------------------------------------------------+ | Withdrawn Routes (variable) | +-----------------------------------------------------+ | Total Path Attribute Length (2 octets) | +-----------------------------------------------------+ | Path Attributes (variable) | +-----------------------------------------------------+ | Network Layer Reachability Information (variable) | +-----------------------------------------------------+

Withdrawn Routes Length:

Diese vorzeichenlose 2-Oktett-Ganzzahl gibt die Gesamtlänge des Withdrawn-Routes-Felds in Oktetten an. Sein Wert ermöglicht die Bestimmung der Länge des Network-Layer-Reachability-Information-Felds, wie unten angegeben.

Ein Wert von 0 zeigt an, dass keine Routen aus dem Dienst entfernt werden und dass das WITHDRAWN-ROUTES-Feld in dieser UPDATE-Nachricht nicht vorhanden ist.

Withdrawn Routes:

Dies ist ein Feld variabler Länge, das eine Liste von IP-Adresspräfixen für die Routen enthält, die aus dem Dienst entfernt werden. Jedes IP-Adresspräfix ist als 2-Tupel der Form <length, prefix> codiert, dessen Felder unten beschrieben sind:

+---------------------------+ | Length (1 octet) | +---------------------------+ | Prefix (variable) | +---------------------------+

Die Verwendung und Bedeutung dieser Felder sind wie folgt:

a) Length:

Das Length-Feld gibt die Länge des IP-Adresspräfixes in Bits an. Eine Länge von null gibt ein Präfix an, das allen IP-Adressen entspricht (wobei das Präfix selbst null Oktette hat).

b) Prefix:

Das Prefix-Feld enthält ein IP-Adresspräfix, gefolgt von der minimalen Anzahl nachfolgender Bits, die erforderlich sind, damit das Ende des Felds auf eine Oktett-Grenze fällt. Beachten Sie, dass der Wert der nachfolgenden Bits irrelevant ist.

Total Path Attribute Length:

Diese vorzeichenlose 2-Oktett-Ganzzahl gibt die Gesamtlänge des Path-Attributes-Felds in Oktetten an. Sein Wert ermöglicht die Bestimmung der Länge des Network-Layer-Reachability-Felds wie unten angegeben.

Ein Wert von 0 zeigt an, dass weder das Network-Layer-Reachability-Information-Feld noch das Path-Attribute-Feld in dieser UPDATE-Nachricht vorhanden sind.

Path Attributes:

Eine Sequenz variabler Länge von Pfadattributen ist in jeder UPDATE-Nachricht vorhanden, außer in einer UPDATE-Nachricht, die nur die zurückgezogenen Routen enthält. Jedes Pfadattribut ist ein Tripel <attribute type, attribute length, attribute value> variabler Länge.

Attribute Type ist ein Zwei-Oktett-Feld, das aus dem Attribute-Flags-Oktett besteht, gefolgt vom Attribute-Type-Code-Oktett.

0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attr. Flags |Attr. Type Code| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Das höchstwertige Bit (Bit 0) des Attribute-Flags-Oktetts ist das Optional-Bit. Es definiert, ob das Attribut optional (wenn auf 1 gesetzt) oder bekannt (wenn auf 0 gesetzt) ist.

Das zweithöchstwertige Bit (Bit 1) des Attribute-Flags-Oktetts ist das Transitive-Bit. Es definiert, ob ein optionales Attribut transitiv (wenn auf 1 gesetzt) oder nicht-transitiv (wenn auf 0 gesetzt) ist.

Für bekannte Attribute muss (MUST) das Transitive-Bit auf 1 gesetzt werden. (Siehe Abschnitt 5 für eine Diskussion transitiver Attribute.)

Das dritthöchstwertige Bit (Bit 2) des Attribute-Flags-Oktetts ist das Partial-Bit. Es definiert, ob die im optionalen transitiven Attribut enthaltenen Informationen partiell (wenn auf 1 gesetzt) oder vollständig (wenn auf 0 gesetzt) sind. Für bekannte Attribute und für optionale nicht-transitive Attribute muss (MUST) das Partial-Bit auf 0 gesetzt werden.

Das vierthöchstwertige Bit (Bit 3) des Attribute-Flags-Oktetts ist das Extended-Length-Bit. Es definiert, ob die Attribute Length ein Oktett (wenn auf 0 gesetzt) oder zwei Oktette (wenn auf 1 gesetzt) ist.

Die vier niederwertigen Bits des Attribute-Flags-Oktetts sind unbenutzt. Sie müssen (MUST) beim Senden null sein und müssen (MUST) beim Empfang ignoriert werden.

Das Attribute-Type-Code-Oktett enthält den Attributtypcode. Derzeit definierte Attributtypcodes werden in Abschnitt 5 diskutiert.

Wenn das Extended-Length-Bit des Attribute-Flags-Oktetts auf 0 gesetzt ist, enthält das dritte Oktett des Path-Attributs die Länge des Attributwerts in Oktetten.

Wenn das Extended-Length-Bit des Attribute-Flags-Oktetts auf 1 gesetzt ist, enthalten das dritte und vierte Oktett des Path-Attributs die Länge des Attributwerts in Oktetten.

Die verbleibenden Längen-Oktette enthalten den für den bestimmten Attributtyp spezifischen Attributwert.

Network Layer Reachability Information (NLRI):

Ein Feld variabler Länge enthält eine Liste von IP-Adresspräfixen für die angekündigten Routen. Jedes IP-Adresspräfix ist als 2-Tupel <length, prefix> im gleichen Format wie für Withdrawn Routes beschrieben codiert.

Die Mindestlänge einer UPDATE-Nachricht beträgt 23 Oktette -- 19 Oktette fester Header + 2 Oktette Withdrawn Routes Length + 2 Oktette Total Path Attribute Length.

4.4. KEEPALIVE Message Format (KEEPALIVE-Nachrichtenformat)

BGP sendet KEEPALIVE-Nachrichten, um zu bestätigen, dass Peers erreichbar sind. BGP verwendet auch UPDATE-Nachrichten, um zu bestätigen, dass Peers am Leben sind. Das Senden einer UPDATE-Nachricht setzt den Hold-Timer zurück.

Eine KEEPALIVE-Nachricht besteht nur aus einem 19-Oktett-Header.

4.5. NOTIFICATION Message Format (NOTIFICATION-Nachrichtenformat)

Eine NOTIFICATION-Nachricht wird gesendet, wenn eine Fehlerbedingung erkannt wird. Die BGP-Verbindung wird unmittelbar nach dem Senden der NOTIFICATION-Nachricht geschlossen.

Zusätzlich zum BGP-Header mit fester Größe enthält die NOTIFICATION-Nachricht die folgenden Felder:

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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error code | Error subcode | Data (variable) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Error Code:

Diese vorzeichenlose 1-Oktett-Ganzzahl gibt den Typ des gemeldeten Fehlers an. Die folgenden Error-Codes sind definiert:

1 - Message Header Error (Nachrichtenkopf-Fehler) 2 - OPEN Message Error (OPEN-Nachrichtenfehler) 3 - UPDATE Message Error (UPDATE-Nachrichtenfehler) 4 - Hold Timer Expired (Hold-Timer abgelaufen) 5 - Finite State Machine Error (Endlicher-Automat-Fehler) 6 - Cease (Beenden)

Error Subcode:

Diese vorzeichenlose 1-Oktett-Ganzzahl liefert spezifischere Fehlerinformationen. Jeder Error-Code kann seinen eigenen Satz von Werten für den Error-Subcode haben. Wenn kein Error-Subcode angegeben ist, muss (MUST) ein Wert von 0 verwendet werden.

Message Header Error Subcodes:

1 - Connection Not Synchronized (Verbindung nicht synchronisiert) 2 - Bad Message Length (Ungültige Nachrichtenlänge) 3 - Bad Message Type (Ungültiger Nachrichtentyp)

OPEN Message Error Subcodes:

1 - Unsupported Version Number (Nicht unterstützte Versionsnummer) 2 - Bad Peer AS (Ungültiges Peer-AS) 3 - Bad BGP Identifier (Ungültiger BGP-Identifier) 4 - Unsupported Optional Parameter (Nicht unterstützter optionaler Parameter) 5 - [Deprecated] - [Veraltet] 6 - Unacceptable Hold Time (Inakzeptable Hold-Time)

UPDATE Message Error Subcodes:

1 - Malformed Attribute List (Fehlerhafte Attributliste) 2 - Unrecognized Well-known Attribute (Nicht erkanntes bekanntes Attribut) 3 - Missing Well-known Attribute (Fehlendes bekanntes Attribut) 4 - Attribute Flags Error (Attribut-Flags-Fehler) 5 - Attribute Length Error (Attribut-Längen-Fehler) 6 - Invalid ORIGIN Attribute (Ungültiges ORIGIN-Attribut) 7 - [Deprecated] - [Veraltet] 8 - Invalid NEXT_HOP Attribute (Ungültiges NEXT_HOP-Attribut) 9 - Optional Attribute Error (Optionaler Attributfehler) 10 - Invalid Network Field (Ungültiges Netzwerkfeld) 11 - Malformed AS_PATH (Fehlerhafter AS_PATH)

Data:

Dieses Feld variabler Länge wird verwendet, um die durch die Felder Error Code und Error Subcode bestimmte Fehlerbedingung zu diagnostizieren. Die Länge dieses Felds kann aus dem Length-Feld der NOTIFICATION-Nachricht berechnet werden. Der Inhalt dieses Felds hängt vom Error Code und Error Subcode ab.

Die Mindestlänge einer NOTIFICATION-Nachricht beträgt 21 Oktette (ohne Daten).