Table of Contents
BGPベストパス選択の概要
BGPではあるネットワークアドレスに対するルート情報を複数受信することがとても多くなっています。同じネットワークアドレスに対する複数のBGPルート情報を受信すると、ベストパス(最適ルート)を決めて、ルーティングテーブルに登録します。また、ベストパスとなったルート情報のみを他のネイバーへアドバタイズします。
OSPFなどのIGPでは、ベストパスの選択はメトリックに基づいて行います。メトリックの算出方法はさまざまですが、結局は1つの数値です。メトリックが最小となっているルート情報をベストパスとします。
一方、BGPではベストパスの選択はパスアトリビュートに基づいて行います。BGPのルート情報に付加されているパスアトリビュートは1つだけではありません。さまざまなパスアトリビュートに基づいて、柔軟にベストパスを決められることがBGPの大きな特徴です。

どのような順序でBGPのパスアトリビュートを評価して、ベストパスを決定するかについて、詳しく図解します。
BGPベストパス選択プロセス
前提
ベストパスを決める前に、受信したルート情報が有効でなければいけません。受信したBGPルートを利用するには、以下の条件を満足していなければいけません。
- NEXT_HOPアトリビュートのIPアドレスに到達可能であること
- 同期が有効なとき、同期の条件を満足していること
現在のCisco IOSでは、BGPの同期はデフォルトで無効です。また、同期を有効にするBGPの構成を取ることはまずないので、同期についての条件は特に意識しなくても大丈夫です。
1点目のNEXT_HOPアトリビュートのIPアドレスに到達可能かどうかをしっかりと確認してください。
ベストパス選択プロセス
同じネットワークアドレスに対する複数のBGPルートを受信したときに、以下の順序でルートに付加されているパスアトリビュートを評価して、ベストパスを決定します。
- 最大のWEIGHTを持つBGPルートを優先する
- 最大のLOCAL_PREFを持つBGPルートを優先する
- ローカルで生成したBGPルートを優先する
- 最短のAS_PATHを持つBGPルートを優先する
- 最小のORIGINを持つBGPルートを優先する
- 最小のMEDを持つBGPルートを優先する
- IBGPルートよりもEBGPルートを優先する
- NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
- EBGPルートのとき、先に受信したルートを優先する
- 最小のルータIDのBGPネイバーから受信したBGPルートを優先する
- 最小のCLUSTER_LISTを持つBGPルートを優先する
- 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する
以降で、それぞれのプロセスについてもう少し詳しく見ていきます。なお、説明の都合上、それぞれの項目のアトリビュートのみに注目します。しかし、BGPルートには1つではなく、いろんなアトリビュートが付加されていることを忘れないでください。また、図中のBGPテーブルにおいて、ベストパスをCiscoの表記に合わせて「>」で表します。
最大のWEIGHTを持つBGPルートを優先する
WEIGHTアトリビュートはCisco独自です。BGPルートに付加されているわけではなく、ルータローカルでWEIGTHアトリビュートを付加できます。WEIGTHを付加するような設定を行っている場合、WEIGHTアトリビュートが最大のBGPルートをベストパスとします。

最大のLOCAL_PREFを持つBGPルートを優先する
WEIGHTの次にLOCAL_PREFアトリビュートを見ます。LOCAL_PREFアトリビュートは、他のASのネットワークへルーティングするときの出口となるルータを決めるときに利用します。LOCAL_PREFアトリビュートが最大のBGPルートをベストパスとして決定します。

ローカルで生成したBGPルートを優先する
ローカルで生成したBGPルートとは、networkコマンドやaggregate-addressコマンドの設定によってBGPルートとして生成したものです。他のBGPネイバーから受信したBGPルートよりも、そのルータ自身で生成したBGPルートを優先します。
最短のAS_PATHを持つBGPルートを優先する
AS_PATHには、BGPルートが経由してきたAS番号が文字列でリストされています。AS_PATHの長さは、含まれているAS番号の数です。つまり、経由してきたASの数が最も少ないBGPルートを優先してベストパスとして決定します。

最小のORIGINを持つBGPルートを優先する
ORIGINアトリビュートには、3つの値があります。
- 0 (IGP)
- 1 (EGP)
- 2 (Incomplete)
最小のORIGINアトリビュートのBGPルートがベストパスに決まります。

ただ、ORIGINアトリビュートでベストパスが決まることはほとんどありません。基本的にBGPルートに付加するORIGINアトリビュートは0、すなわちIGPになるからです。
最小のMEDを持つBGPルートを優先する
MEDは、隣のASから自ASのネットワークへルーティングするときの入り口となるルータを決めるために利用するアトリビュートです。OSPFなどのIGPでのメトリックに相当するアトリビュートで、値が小さい方が優先されます。

なお、ここでは詳細について割愛していますが、MEDの評価にはさまざまな条件があります。
IBGPルートよりもEBGPルートを優先する
IBGPネイバーから受信したBGPルートよりもEBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
BGPルートがルーティングテーブルに登録されるときに、ネクストホップはNEXT_HOPアトリビュートのIPアドレスです。NEXT_HOPアトリビュートのIPアドレスは、必ずしも直接接続されているネットワークのIPアドレスとは限りません。NEXT_HOPアトリビュートのIPアドレスへルーティングするために、ルーティングテーブルを再帰的に検索することもあります。
再帰的にNEXT_HOPアトリビュートのIPアドレスを検索するときのIGPメトリックの値が最小となるBGPルートを優先してベストパスとして決定します。つまり、NEXT_HOPアトリビュートのIPアドレスへ最短で到達できるBGPルートを優先します。

EBGPルートのとき、先に受信したルートを優先する
EBGPネイバーから受信しているBGPルートの場合、先に受信しているルートを優先してベストパスとして決定します。
最小のルータIDのBGPネイバーから受信したBGPルートを優先する
BGPルータにも、OSPFと同じように各ルータを識別するためのルータIDがあります。ルータIDが最小のBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

最小のCLUSTER_LISTを持つBGPルートを優先する
CLUSTER_LISTは、ルートリフレクタを構成しているときに付加されるパスアトリビュートです。CLUSTER_LISTには、ルートリフレクタのルータIDが含まれています。CLUSTER_LISTのルータIDが最小のルートをベストパスとして決定します。
最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する
同じルータとIPアドレスを変えて複数のBGPネイバーを確立することもできます。そして、ここまでのプロセスでベストパスが決定できなかったときには、最小のIPアドレスのBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

たいていはMEDまでで決まるように
以上のようにあるネットワークアドレスについてのBGPルートを複数受信したときに、さまざまなパスアトリビュートによってベストパスを決定します。ただ、ベストパスを決めるために、こうしたプロセスの後ろの方まで評価するようなことはしません。ベストパスを決定するために、よく使うパスアトリビュートとして以下があげられます。
- LOCAL_PREF
- AS_PATH
- MED
MEDまででベストパスが決まるようにパスアトリビュートを調整することが多いでしょう。パスアトリビュートの調整を行うために、Ciscoルータではルートマップを利用します。
関連記事
「ネットワークのおべんきょしませんか?」内の記事を検索
BGPの仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート
- BGPベストパス選定プロセス
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP local-as ~ネイバーに他のASのように見せる~
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- IPv4 BGPネイバーでのIPv6プレフィックスの交換