メインコンテンツまでスキップ

4. Message Formats (メッセージ形式)

  1. Message Formats (メッセージ形式)

    本セクションでは、BGPが使用するメッセージ形式について説明します。

    BGPメッセージはTCP接続を介して送信されます。メッセージは完全に受信された後にのみ処理されます。最大メッセージサイズは4096オクテットです。すべての実装は、この最大メッセージサイズをサポートすることが要求されます (REQUIRED)。送信可能な最小のメッセージは、データ部分のないBGPヘッダーのみで構成されます(19オクテット)。

    すべてのマルチオクテットフィールドはネットワークバイトオーダーです。

4.1. Message Header Format (メッセージヘッダー形式)

各メッセージは固定サイズのヘッダーを持ちます。メッセージタイプに応じて、ヘッダーの後にデータ部分が続く場合と続かない場合があります。これらのフィールドのレイアウトを以下に示します:

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:

この16オクテットのフィールドは互換性のために含まれており、すべて1に設定しなければなりません (MUST)。

Length:

この2オクテットの符号なし整数は、ヘッダーを含むメッセージの合計長をオクテット単位で示します。したがって、TCPストリーム内の次のメッセージの(Markerフィールドの)位置を特定できます。Lengthフィールドの値は、常に少なくとも19以上で4096以下でなければならず (MUST)、メッセージタイプに応じてさらに制約される場合があります (MAY)。メッセージ後の余分なデータの「パディング」は許可されません。したがって、Lengthフィールドは、メッセージの残りの部分を考慮して、必要な最小値を持たなければなりません (MUST)。

Type:

この1オクテットの符号なし整数は、メッセージのタイプコードを示します。本文書では、以下のタイプコードを定義しています:

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

[RFC2918]では、さらに1つのタイプコードが定義されています。

4.2. OPEN Message Format (OPENメッセージ形式)

TCP接続が確立された後、各側から送信される最初のメッセージはOPENメッセージです。OPENメッセージが受け入れられると、OPENを確認するKEEPALIVEメッセージが返送されます。

固定サイズのBGPヘッダーに加えて、OPENメッセージには以下のフィールドが含まれます:

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:

この1オクテットの符号なし整数は、メッセージのプロトコルバージョン番号を示します。現在のBGPバージョン番号は4です。

My Autonomous System:

この2オクテットの符号なし整数は、送信者の自律システム番号 (Autonomous System number) を示します。

Hold Time:

この2オクテットの符号なし整数は、送信者がHold Timerの値として提案する秒数を示します。OPENメッセージを受信すると、BGPスピーカーは、設定されたHold Timeと、OPENメッセージで受信したHold Timeの小さい方を使用して、Hold Timerの値を計算しなければなりません (MUST)。Hold Timeは0か、少なくとも3秒でなければなりません (MUST)。実装は、Hold Timeに基づいて接続を拒否してもかまいません (MAY)。

計算された値は、送信者からの連続するKEEPALIVEおよび/またはUPDATEメッセージの受信間隔として経過してもよい最大秒数を示します。

BGP Identifier:

この4オクテットの符号なし整数は、送信者のBGP識別子 (BGP Identifier) を示します。特定のBGPスピーカーは、そのBGPスピーカーに割り当てられたIPアドレスをBGP識別子の値として設定します。BGP識別子の値は起動時に決定され、すべてのローカルインターフェイスおよびBGPピアで同じです。

Optional Parameters Length:

この1オクテットの符号なし整数は、Optional Parametersフィールドの合計長をオクテット単位で示します。このフィールドの値が0の場合、Optional Parametersは存在しません。

Optional Parameters:

このフィールドには、オプションパラメータのリストが含まれており、各パラメータは<Parameter Type, Parameter Length, Parameter Value>の3つ組としてエンコードされます。

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は、個々のパラメータを一意に識別する1オクテットのフィールドです。Parameter Lengthは、Parameter Valueフィールドの長さをオクテット単位で含む1オクテットのフィールドです。Parameter Valueは、Parameter Typeフィールドの値に従って解釈される可変長フィールドです。

[RFC3392]では、Capabilities Optional Parameterが定義されています。

OPENメッセージの最小長は29オクテットです(メッセージヘッダーを含む)。

4.3. UPDATE Message Format (UPDATEメッセージ形式)

UPDATEメッセージは、BGPピア間でルーティング情報を転送するために使用されます。UPDATEメッセージの情報は、さまざまな自律システム間の関係を記述するグラフを構築するために使用できます。議論されるべきルールを適用することで、ルーティング情報のループやその他の異常が検出され、AS間ルーティングから削除される可能性があります。

UPDATEメッセージは、共通のパス属性を共有する実行可能なルートをピアにアドバタイズするため、または複数の実行不可能なルートをサービスから撤退させるために使用されます(3.1を参照)。UPDATEメッセージは、実行可能なルートをアドバタイズすると同時に、複数の実行不可能なルートをサービスから撤退させてもかまいません (MAY)。UPDATEメッセージには常に固定サイズのBGPヘッダーが含まれ、以下に示す他のフィールドも含まれます(注: 示されているフィールドの一部は、すべてのUPDATEメッセージに存在するわけではありません):

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

この2オクテットの符号なし整数は、Withdrawn Routesフィールドの合計長をオクテット単位で示します。その値により、以下に指定されているように、Network Layer Reachability Informationフィールドの長さを決定できます。

値0は、サービスから撤退されるルートがなく、このUPDATEメッセージにWITHDRAWN ROUTESフィールドが存在しないことを示します。

Withdrawn Routes:

これは可変長フィールドであり、サービスから撤退されるルートのIPアドレスプレフィックスのリストが含まれています。各IPアドレスプレフィックスは、以下に説明するフィールドを持つ<length, prefix>の2つ組としてエンコードされます:

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

これらのフィールドの使用と意味は次のとおりです:

a) Length:

Lengthフィールドは、IPアドレスプレフィックスのビット長を示します。長さ0は、すべてのIPアドレスに一致するプレフィックス(プレフィックス自体が0オクテット)を示します。

b) Prefix:

Prefixフィールドには、IPアドレスプレフィックスが含まれ、その後にフィールドの終わりをオクテット境界に合わせるために必要な最小数の末尾ビットが続きます。末尾ビットの値は無関係であることに注意してください。

Total Path Attribute Length:

この2オクテットの符号なし整数は、Path Attributesフィールドの合計長をオクテット単位で示します。その値により、以下に指定されているように、Network Layer Reachabilityフィールドの長さを決定できます。

値0は、このUPDATEメッセージにNetwork Layer Reachability InformationフィールドもPath Attributeフィールドも存在しないことを示します。

Path Attributes:

可変長のパス属性シーケンスは、撤退されたルートのみを含むUPDATEメッセージを除いて、すべてのUPDATEメッセージに存在します。各パス属性は、可変長の<attribute type, attribute length, attribute value>の3つ組です。

Attribute Typeは、Attribute Flagsオクテットの後にAttribute Type Codeオクテットが続く2オクテットのフィールドです。

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

Attribute Flagsオクテットの最上位ビット(ビット0)はOptionalビットです。これは、属性がオプション(1に設定されている場合)か既知(0に設定されている場合)かを定義します。

Attribute Flagsオクテットの2番目の最上位ビット(ビット1)はTransitiveビットです。これは、オプション属性が推移的(1に設定されている場合)か非推移的(0に設定されている場合)かを定義します。

既知の属性の場合、Transitiveビットは1に設定しなければなりません (MUST)。(推移的属性の議論については、セクション5を参照してください。)

Attribute Flagsオクテットの3番目の最上位ビット(ビット2)はPartialビットです。これは、オプションの推移的属性に含まれる情報が部分的(1に設定されている場合)か完全(0に設定されている場合)かを定義します。既知の属性およびオプションの非推移的属性の場合、Partialビットは0に設定しなければなりません (MUST)。

Attribute Flagsオクテットの4番目の最上位ビット(ビット3)はExtended Lengthビットです。これは、Attribute Lengthが1オクテット(0に設定されている場合)か2オクテット(1に設定されている場合)かを定義します。

Attribute Flagsオクテットの下位4ビットは未使用です。送信時には0でなければならず (MUST)、受信時には無視しなければなりません (MUST)。

Attribute Type Codeオクテットには、Attribute Type Codeが含まれています。現在定義されているAttribute Type Codeについては、セクション5で説明します。

Attribute FlagsオクテットのExtended Lengthビットが0に設定されている場合、Path Attributeの3番目のオクテットには、属性値の長さがオクテット単位で含まれます。

Attribute FlagsオクテットのExtended Lengthビットが1に設定されている場合、Path Attributeの3番目と4番目のオクテットには、属性値の長さがオクテット単位で含まれます。

残りの長さオクテットは、特定のタイプの属性に固有の属性値を含んでいます。

Network Layer Reachability Information (NLRI):

可変長フィールドには、アドバタイズされているルートのIPアドレスプレフィックスのリストが含まれています。各IPアドレスプレフィックスは、Withdrawn Routesで説明したのと同じ形式の<length, prefix>の2つ組としてエンコードされます。

UPDATE message (UPDATEメッセージ) の最小長は23オクテットです -- 19オクテットの固定ヘッダー + 2オクテットのWithdrawn Routes Length + 2オクテットのTotal Path Attribute Lengthです。

4.4. KEEPALIVE Message Format (KEEPALIVEメッセージ形式)

BGPは、KEEPALIVEメッセージを送信して、ピアが到達可能であることを確認します。BGPは、ピアが生きていることを確認するためにUPDATEメッセージも使用します。UPDATEメッセージを送信すると、Hold Timerがリセットされます。

KEEPALIVEメッセージは、19オクテットのヘッダーのみで構成されます。

4.5. NOTIFICATION Message Format (NOTIFICATIONメッセージ形式)

NOTIFICATIONメッセージは、エラー状態が検出されたときに送信されます。BGP接続は、NOTIFICATIONメッセージが送信された直後に閉じられます。

固定サイズのBGPヘッダーに加えて、NOTIFICATIONメッセージには以下のフィールドが含まれます:

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:

この1オクテットの符号なし整数は、報告されるエラーのタイプを示します。以下のError Codeが定義されています:

1 - Message Header Error (メッセージヘッダーエラー) 2 - OPEN Message Error (OPENメッセージエラー) 3 - UPDATE Message Error (UPDATEメッセージエラー) 4 - Hold Timer Expired (ホールドタイマー期限切れ) 5 - Finite State Machine Error (有限状態機械エラー) 6 - Cease (中止)

Error Subcode:

この1オクテットの符号なし整数は、より具体的なエラー情報を提供します。各Error Codeは、Error Subcodeに対して独自の一連の値を持っている場合があります。Error Subcodeが指定されていない場合、0の値を使用しなければなりません (MUST)。

Message Header Error Subcodes:

1 - Connection Not Synchronized (接続が同期していません) 2 - Bad Message Length (不正なメッセージ長) 3 - Bad Message Type (不正なメッセージタイプ)

OPEN Message Error Subcodes:

1 - Unsupported Version Number (サポートされていないバージョン番号) 2 - Bad Peer AS (不正なピアAS) 3 - Bad BGP Identifier (不正なBGP識別子) 4 - Unsupported Optional Parameter (サポートされていないオプションパラメータ) 5 - [Deprecated] - [非推奨] 6 - Unacceptable Hold Time (受け入れられないホールドタイム)

UPDATE Message Error Subcodes:

1 - Malformed Attribute List (不正な形式の属性リスト) 2 - Unrecognized Well-known Attribute (認識されない既知の属性) 3 - Missing Well-known Attribute (既知の属性の欠落) 4 - Attribute Flags Error (属性フラグエラー) 5 - Attribute Length Error (属性長エラー) 6 - Invalid ORIGIN Attribute (無効なORIGIN属性) 7 - [Deprecated] - [非推奨] 8 - Invalid NEXT_HOP Attribute (無効なNEXT_HOP属性) 9 - Optional Attribute Error (オプション属性エラー) 10 - Invalid Network Field (無効なネットワークフィールド) 11 - Malformed AS_PATH (不正な形式のAS_PATH)

Data:

この可変長フィールドは、Error CodeおよびError Subcodeフィールドによって決定されるエラー状態を診断するために使用されます。このフィールドの長さは、NOTIFICATIONメッセージのLengthフィールドから計算できます。このフィールドの内容は、Error CodeおよびError Subcodeに依存します。

NOTIFICATIONメッセージの最小長は21オクテット(データなし)です。