BGPとは
BGPはBorder Gateway Protocolの略で、AS(Autonomous System)間の経路情報をやり取りする際に用いられるプロトコルです。
ルーティングプロトコルでのBGPの位置付け
IGPとEGP
BGPを詳しく調べる前に、IGPとEGPについても知っておいた方がいいでしょう。
IGP
IGPはInterior Gateway Protocolの略で、ASの中などの単一ネットワーク内で完結するルーティングのときに使用するプロトコルの総称です。
例として、RIPやOSPFなどが挙げられます。
EGP
EGPはExterior Gateway Protocolの略で、AS内では完結しない場合、つまりAS間同士でのやり取りの際に使用されます。
BGPはここに属します。
BGPのフォーマット
メッセージヘッダ
Markerフィールド
このフィールドは16オクテットの長さから構成されています。Markerの値は受信側が計算でき、認証アルゴリズムを使うことができます。
Lengthフィールド
このフィールドには、メッセージ全体の長さが入ります。
Typeフィールド
Typeフィールドには、メッセージ自体の種類を示す値が入ります。
この値は以下の4種類から成ります。
- OPEN
TCPコネクション確立後に、BGPルーター間のルーティング情報の交換を行います。 - UPDATE
ルーティング情報の交換を行います。 - NOTIFICATION
エラーが検出された際に、送信されます。Notificationメッセージを送信した方が、TCPセッションを切断します。 - KEEPALIVE
相手の機器が動作しているかを確かめます。
メッセージのフォーマット
次は先程のメッセージのフォーマットを詳しく見ていきましょう。
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
メッセージプロトコルのバージョンを示します。現在使われているBGPのバージョンは 4 です。
My Autonomous System
送信者のAS番号が格納されます。
Hold Time
UPDATEメッセージやKEEPALIVEメッセージの受信を許容するまでの時間を表します。
受け取ったOPENメッセージでの値と自身の値を比較して、小さい方をHold Timeとして使用します。
BGP Identifier
送信元ルーターのIPアドレスの値が入ります。
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
Withdrawn Routesフィールドの長さをオクテットで示します。
値が 0 だとWithdrawn Routesが無く、Withdrawn Routesフィールドも無いということになります。
Withdrawn Routes
取り消されたルートのコード化したIPアドレスの接頭ビットのリストが格納されます。
Total Path Attribute Length
Total Path Attributeの長さを格納します。
Total Path Attribute
このフィールドには属性のリストが置かれます。
Network Layer Reachability Information
IPアドレスとプレフィックス長を示します。
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
エラーコードの通知タイプを示します。
Error subcode
具体的なエラーコードを示します。
Data
エラーの内容を格納します。
KEEPALIVE
KEEPALIVEメッセージは、メッセージヘッダのみで構成されており、他の情報は持っていません。この場合のLengthは19オクテットとなります。
今回を通して
BGPの全体像を少し掴むことができたと感じました。しかし、UPDATEメッセージのTotal Path Attribute部分が今回全然触れられていないので、次回はその部分の詳細に触れていきたいと思います。