【BGPについて】


このHPはBGP(AS、基本動作)についてまとめたものです。


1-1 BGPの概要

BGPは主に インターネット上に存在する AS間で経路制御を行うことを目的とした標準プロトコル として使用されている。ASとは 統一された管理ポリシーに よって運営されるネットワーク群のこと。一般的には, 一つのプロバイダのネットワークや,企 業 ネットワークがそれに該当する。

ASには,グローバルIPアドレスと同じように,管理された一意の番号が割り振られる。これを 「AS番号」 と呼ぶ。

AS番号は16ビットで,1〜65535の値をとる。ただし,64512〜65534はプライベートAS番号として使 われ,さらに0と65535は予約された番号のため使えない。 AS番号は,IPアドレス同様ICANNという組織が管理している。

ASを相互に接続した世界規模のネットワークが、インターネッ ト の姿。各ASは、主に「IX」という接続ポ イン トを解して接続されている。




IXとは、各ISPやキャリアなどが直接的に相互接続して、互いのAS間の通信を効率よく 行うための接続ポイントのこと。
IXでは、主に互 いのASおよびその直接顧客の経路のみを交換し、フルルートやデフォルトルートの交換は行われない 。(IXでは、あくまでも相互接続したAS間の通信のみを行い、IXを介したインターネットへの 接続などは行われない)。






■ パスベクトル方式のプロトコル

BGPは、パスベクトル方式のプロトコルと呼ばれている。BGPで伝播される経路情報には、この経路情報が経由してきた一連のAS番号の情報が付加されており、この数がより少ないパスを最適な経路と判断して優先的に採用する。

ディスタンスベクタ型の RIPでは、宛先に到達するため に経由するルータの数が少ない経路を最適な経路として判断するが、BGPでは、このルータをASに置き換えるとほぼ同じように考えることが出来る。






1-2 スタブAS(シング ルホームAS)とマルチホー ムAS

スタブAS(シングルホーム AS)とは、ただ1つの経路によって他のASに接続されているASをさす。 上位ASに対して複数のパスで接続されて いる形態がマルチホー ムAS。

シングルホームや、同一のASに対するマルチ ホームという接続形態を とるASでは、主にプライベートAS番号が利用されることが多い。 一方、異なるASに対する マルチホームという接続形態を取るASでは、主に固有のAS番号を取得することが多い。

IPアドレスについても、通 常は自AS固有のIPアドレスを取得して運用される。





1-3 トランジットASと非トランジットAS


外部ASから受信している経 路情報を、自ASを経由させてその他の外部ASにアナウンスしているAS は、トランジットASと呼 ばれる。

トランジットAS内には、 外部AS間で交換されるトラフィックが通過する事になる。





外部ASに対しては、自ASのローカル経路のみアナウンスするASを非トランジット ASと呼ぶ。非トランジットASでは、 自ASと外部AS間でだけトラフィックが交換される。





2-1 BGPパケットフォーマット

BGPで交換されるメッセージには、以下のものがある。







2-2 BGPの基本動作

BGPでは、最初に明示的にルーティング情報を交換する相手と、どのルータとルーティング情報を交換するかということを指定する。

BGPを有効にしているルータはBGPスピーカーと呼ばれ、このBGPスピーカー同士でルート情報を交換するためにネイバー(隣接関係)を形成する。これをBGPピア(BGPネイバー)という。

BGPでは、まずルータどうしが 1対1のTCPコネクションをポート179番で確立 する。それから 互いのルータがサポートしているBGPの基本情報を交換して、問題がなければBGPセッションが確立 される。

BGPレベルでの接続が完了したら、その直後にお互いのルータが学習している全ての経路情報を交換する。

その後は、経路の差分情報が発生した場合には差分情報のみを交換し、また特に経路情報のアップデートがない場合は、定期的にKEEPALIVEパケットを交換して、お互いのルータ や接続パス上に問題がないかを確認する。



■【BGPピアの確立フロー】

 

@TCPコネクションの確立

まずルー タ同士が1対1のTCPコネクションを確立する。あて先ポート番号は179。ど ちらのルータから始めてもかまわない。



A基本情報の交換

TCPコネクションが確立されると、ルータは互いにBGPの基本情報(自AS番号、ルータID、BGPVersionなど)を交換する。 この交換にはBGPのOPENメッセー ジを使う。問題がなければ、BGPレベルでの接続が確立する。 基本情報の内容が正しくなかった場合はTCPセッションは切 断される。



 

B経路情報の交換(BGPセッション確立直後)

BGPセッションが確立されると、ルータは自分が知っている全てのBGP経路情報を交換する。互いのルータが学習している全てのBGP経路情報をUPDATAメッセージで交換 する。

 

 

C生存確認

その後は互いにKeepalive メッセージを送り、相手ルータの生存確認を行う。ここで定時間(Holdtime)内に相手ルータからのKeepaliveメッセージを受 信出来なかった場合は、BGPセッションを切断する。



 

D経路情報の交換(経路情報の更新時)

その後は経路情報が追加 または削除された場合、その追加情報、削除情報のみを相手ルータにUpdateメッセージで交換する。



★【BGPピアのステータス】

BGPピアのステータスは、まずIdle状態から始まり、最終的にEstablished状態になったところで、接続が完了する。

 

(1)Idle状態  

BGPの最初の状態はIdle状態。このときにBGP関連の情報が流入してきてもすべて拒否される。
StartイベントによってBGPリソース割り当て、コネクトリトライタイマの開始、相手のBGPピアとのTCPコネクション確立開始を行い、Connect状態に遷移する。  もし、エラー等が発生した場合は、最初のIdle状態に戻る。


 

(2)Connect状態  

BGPがネイバーアドレスへのルートを発見し、TCPのコネクション確立完了を待っている状態。 BGPはピア間でコネクションを張るが、その過程での状態。  確立が成功すると、コネクトリトライタイマをクリアし、OPENメッセージをピアに送る。

その後、OpenSent状態に遷移する。  TCPコネクションの確立に失敗した場合は、コネクトリトライタイマをリスタートし、Active状態に遷移する。  さらに、コネクトリトライタイマーの時間切れが発生した場合は、コネクトリトライタイマーをリスタートしてTCPコネクションの確立要求を開始する。 それ以外の場合は、リソースを開放してIdle状態に戻る。

 

 

(3)Active状態

BGPがTCPコネクション確立開始でピアを見つけようとする状態。  コネクション確立が成功すると、コネクトリトライタイマをクリアし、OPENメッセージをピアに送り、その後、 OpenSent状態へ移行する。  

コネクトリトライタイマがタイムアウトすると、コネクトリトライタイマをリスタートし、Connect状態へ遷移する。  それ以外の場合は、リソースを開放してIdle状態に戻る。  

 

 

(4)OpenSent状態 

この状態では、BGPは相手のピアからのOPENメッセージを待っている状態。 相手からのOPENメッセージを受信すると、メッセージ内の全フィールドについて、正しいかチェックし、エラーやコネクション衝突が起きた場合、NOTIFICATIONメッセージを相手に送り、Idle状態に遷移する。TCPコネクションがクローズされた場合は、コネクトリトライタイマーをリスタートして、Active状態へ遷移する。

OPENメッセージが正常な場合、BGPはKEEPALIVEメッセージを送り、キープアライブタイマをセットし、その後、OpenConfirm状態に遷移する。  

 

 

(5)OpenConfirm状態  

この状態は、BGPはKEEPALIVEメッセージやNOTIFICATIONメッセージを待っている状態。 自身がKEEPALIVEを受信したら、ホールドタイマーをリスタートしてEstablished状態へ遷移する。  KEEPALIVEを受信する前にホールドタイマがタイムアウトした場合、NOTIFICATIONメッセージを相手に送り、Idle状態へ遷移する。

自身がNOTIFICATIONメッセージを受信した場合、Idle状態へ遷移する。  その他、エラーが発生した場合等も、NOTIFICATIONメッセージを送信してIdle状態に戻る。

 

 

(6) Established状態

この状態では、BGPはUPDATEメッセージかKEEPALIVEメッセージをやりとりする。  自身がUPDATEメッセージかKEEPALIVEメッセージを受信すると、ホールドタイマを再開させる。  NOTIFICATIONメッセージを受信すると、Idle状態へ遷移する。  

受信したUPDATEメッセージ内にエラーがある場合や、ホールドタイマがタイムアウトした(つまり相手からメッセージが来なくなった)場合、相手にNOTIFICATIONメッセージを送り、Idle状態に遷移する。