BGPベストパス選択の概要

BGPではあるネットワークアドレスに対するルート情報を複数受信することがとても多くなっています。同じネットワークアドレスに対する複数のBGPルート情報を受信すると、ベストパス(最適ルート)を決めて、ルーティングテーブルに登録します。また、ベストパスとなったルート情報のみを他のネイバーへアドバタイズします。

OSPFなどのIGPでは、ベストパスの選択はメトリックに基づいて行います。メトリックの算出方法はさまざまですが、結局は1つの数値です。メトリックが最小となっているルート情報をベストパスとします。

一方、BGPではベストパスの選択はパスアトリビュートに基づいて行います。BGPのルート情報に付加されているパスアトリビュートは1つだけではありません。さまざまなパスアトリビュートに基づいて、柔軟にベストパスを決められることがBGPの大きな特徴です。

図 IGPとBGPのベストパスの選択
図 IGPとBGPのベストパスの選択

どのような順序でBGPのパスアトリビュートを評価して、ベストパスを決定するかについて、詳しく図解します。

BGPベストパス選択プロセス

前提

ベストパスを決める前に、受信したルート情報が有効でなければいけません。受信したBGPルートを利用するには、以下の条件を満足していなければいけません。

  • NEXT_HOPアトリビュートのIPアドレスに到達可能であること
  • 同期が有効なとき、同期の条件を満足していること

現在のCisco IOSでは、BGPの同期はデフォルトで無効です。また、同期を有効にするBGPの構成を取ることはまずないので、同期についての条件は特に意識しなくても大丈夫です。

1点目のNEXT_HOPアトリビュートのIPアドレスに到達可能かどうかをしっかりと確認してください。

ベストパス選択プロセス

同じネットワークアドレスに対する複数のBGPルートを受信したときに、以下の順序でルートに付加されているパスアトリビュートを評価して、ベストパスを決定します。

パスアトリビュートによらないベストパスの決定もあります。あるプロセスでベストパスが決まったら、それ以降のプロセスは見ません。
  1. 最大のWEIGHTを持つBGPルートを優先する
  2. 最大のLOCAL_PREFを持つBGPルートを優先する
  3. ローカルで生成したBGPルートを優先する
  4. 最短のAS_PATHを持つBGPルートを優先する
  5. 最小のORIGINを持つBGPルートを優先する
  6. 最小のMEDを持つBGPルートを優先する
  7. IBGPルートよりもEBGPルートを優先する
  8. NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する
  9. EBGPルートのとき、先に受信したルートを優先する
  10. 最小のルータIDのBGPネイバーから受信したBGPルートを優先する
  11. 最小のCLUSTER_LISTを持つBGPルートを優先する
  12. 最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

以降で、それぞれのプロセスについてもう少し詳しく見ていきます。なお、説明の都合上、それぞれの項目のアトリビュートのみに注目します。しかし、BGPルートには1つではなく、いろんなアトリビュートが付加されていることを忘れないでください。また、図中のBGPテーブルにおいて、ベストパスをCiscoの表記に合わせて「>」で表します。

最大のWEIGHTを持つBGPルートを優先する

WEIGHTアトリビュートはCisco独自です。BGPルートに付加されているわけではなく、ルータローカルでWEIGTHアトリビュートを付加できます。WEIGTHを付加するような設定を行っている場合、WEIGHTアトリビュートが最大のBGPルートをベストパスとします。

図 WEIGTHによるベストパスの決定
図 WEIGTHによるベストパスの決定

最大のLOCAL_PREFを持つBGPルートを優先する

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

図 LOCAL_PREFによるベストパスの決定
図 LOCAL_PREFによるベストパスの決定

ローカルで生成したBGPルートを優先する

ローカルで生成したBGPルートとは、networkコマンドやaggregate-addressコマンドの設定によってBGPルートとして生成したものです。他のBGPネイバーから受信したBGPルートよりも、そのルータ自身で生成したBGPルートを優先します。

最短のAS_PATHを持つBGPルートを優先する

AS_PATHには、BGPルートが経由してきたAS番号が文字列でリストされています。AS_PATHの長さは、含まれているAS番号の数です。つまり、経由してきたASの数が最も少ないBGPルートを優先してベストパスとして決定します。

図 AS_PATHによるベストパスの決定
図 AS_PATHによるベストパスの決定

最小のORIGINを持つBGPルートを優先する

ORIGINアトリビュートには、3つの値があります。

  • 0 (IGP)
  • 1 (EGP)
  • 2 (Incomplete)

最小のORIGINアトリビュートのBGPルートがベストパスに決まります。

図 ORIGINによるベストパスの決定
図 ORIGINによるベストパスの決定

ただ、ORIGINアトリビュートでベストパスが決まることはほとんどありません。基本的にBGPルートに付加するORIGINアトリビュートは0、すなわちIGPになるからです。

最小のMEDを持つBGPルートを優先する

MEDは、隣のASから自ASのネットワークへルーティングするときの入り口となるルータを決めるために利用するアトリビュートです。OSPFなどのIGPでのメトリックに相当するアトリビュートで、値が小さい方が優先されます。

図 MEDによるベストパスの決定
図 MEDによるベストパスの決定

なお、ここでは詳細について割愛していますが、MEDの評価にはさまざまな条件があります。

IBGPルートよりもEBGPルートを優先する

IBGPネイバーから受信したBGPルートよりもEBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

図 IBGPルートよりもEBGPルートを優先する
図 IBGPルートよりもEBGPルートを優先する

NEXT_HOPへ到達するための最小のIGPメトリックを持つBGPルートを優先する

BGPルートがルーティングテーブルに登録されるときに、ネクストホップはNEXT_HOPアトリビュートのIPアドレスです。NEXT_HOPアトリビュートのIPアドレスは、必ずしも直接接続されているネットワークのIPアドレスとは限りません。NEXT_HOPアトリビュートのIPアドレスへルーティングするために、ルーティングテーブルを再帰的に検索することもあります。

再帰的にNEXT_HOPアトリビュートのIPアドレスを検索するときのIGPメトリックの値が最小となるBGPルートを優先してベストパスとして決定します。つまり、NEXT_HOPアトリビュートのIPアドレスへ最短で到達できるBGPルートを優先します。

図 NEXT_HOPへ最短で到達できるBGPルートを優先
図 NEXT_HOPへ最短で到達できるBGPルートを優先

EBGPルートのとき、先に受信したルートを優先する

EBGPネイバーから受信しているBGPルートの場合、先に受信しているルートを優先してベストパスとして決定します。

最小のルータIDのBGPネイバーから受信したBGPルートを優先する

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

図 ルータIDによるベストパスの決定
図 ルータIDによるベストパスの決定

最小のCLUSTER_LISTを持つBGPルートを優先する

CLUSTER_LISTは、ルートリフレクタを構成しているときに付加されるパスアトリビュートです。CLUSTER_LISTには、ルートリフレクタのルータIDが含まれています。CLUSTER_LISTのルータIDが最小のルートをベストパスとして決定します。

最小のIPアドレスのBGPネイバーから受信したBGPルートを優先する

同じルータとIPアドレスを変えて複数のBGPネイバーを確立することもできます。そして、ここまでのプロセスでベストパスが決定できなかったときには、最小のIPアドレスのBGPネイバーから受信したBGPルートを優先してベストパスとして決定します。

図 IPアドレスによるベストパスの決定
図 IPアドレスによるベストパスの決定

たいていはMEDまでで決まるように

以上のようにあるネットワークアドレスについてのBGPルートを複数受信したときに、さまざまなパスアトリビュートによってベストパスを決定します。ただ、ベストパスを決めるために、こうしたプロセスの後ろの方まで評価するようなことはしません。ベストパスを決定するために、よく使うパスアトリビュートとして以下があげられます。

  • LOCAL_PREF
  • AS_PATH
  • MED

MEDまででベストパスが決まるようにパスアトリビュートを調整することが多いでしょう。パスアトリビュートの調整を行うために、Ciscoルータではルートマップを利用します。

関連記事

「ネットワークのおべんきょしませんか?」内の記事を検索

BGPの仕組み