【BGP】ベストパス選定(PART1 アルゴリズム)

 

BGP で学習した経路には、BGP 属性が付いています。同じ宛先への経路が複数あるとき、BGP ルータはこの属性を決まった順番で比べて、通信に使う経路(ベストパス)を 1 つ選びます。この選び方を、BGP のベストパス選択アルゴリズムと呼びます。この記事では、Cisco ルータでの比較の順番と、それぞれの属性の意味を確認します。

この記事でわかること
  1. ベストパス選択の比較の順番
  2. そもそも比較の対象にならない経路
  3. Weight、Local Preference、AS_PATH、Origin、MED などの属性の意味

ベストパス選択の順番

Cisco ルータの BGP は、次の順番で経路を比べ、差がついた時点でベストパスを決めます。

順番優先する経路
1Weight が最も大きい
2Local Preference が最も大きい
3自分で生成した(network、aggregate-address、再配布)
4AS_PATH が最も短い
5Origin が最も小さい(IGP < EGP < Incomplete)
6MED が最も小さい(通常は、隣接 AS が同じ経路どうしでだけ比べる)
7iBGP より eBGP
8ネクストホップまでの IGP メトリックが最も小さい
9(BGP マルチパスが有効なら、複数の経路をルーティングテーブルに入れるか判断する)
10どちらも eBGP なら、先に受信した(古い)経路
11BGP ルータ ID が最も小さいルータからの経路
12クラスタリストが最も短い経路
13ネイバーのアドレスが最も小さい経路
1 Weight が大きい 2 Local Preference が大きい 3 自分で生成した経路 4 AS_PATH が短い 5 Origin が小さい 6 MED が小さい 7 iBGP より eBGP 8 IGP メトリックが小さい 9 マルチパスの判断 10 先に受信した(古い)eBGP 経路 11 ルータ ID が小さい 12 クラスタリストが短い 13 ネイバーのアドレスが小さい 上から順に比べ、差がついた 時点でベストパスが決まる 太枠:よく調整に使う属性
図1 ベストパス選択の比較の順番

この順番を、上から確認していきます。

比較の対象にならない経路

ベストパスを選ぶ前に、次の経路はそもそも比較の対象から外れます。

ネクストホップに到達できない経路

ネクストホップのアドレスに、ルーティングテーブル(直接接続、スタティックルート、IGP など)で到達できない経路は使われません。iBGP で受け取った経路のネクストホップには特に注意が必要です。

>> 参考:旅行に例えてわかるBGPの基本

AS_PATH のループ

AS_PATH に自分の AS 番号が含まれている経路は、ループしていると判断して受け入れません。

各比較項目の意味

BGP ルータが同じ宛先への経路を複数受け取ると、次の順番で比べてベストパスを決めます。

1. Weight

Weight は Cisco 独自の属性で、値が最も大きい経路が優先されます。Weight は設定したルータの中だけで使われ、他のルータには伝わりません。Weight を変えても、AS の内外の他のルータには影響しません。Weight が同じ場合は、Local Preference を比べます。

>> 参考:【BGP】Weight属性 動作確認 Cisco

2. Local Preference

Local Preference は、値が最も大きい経路が優先されます。Local Preference は同じ AS の中のルータ(iBGP ピア)に伝わるので、AS 全体で外へ出る出口を決めるのに使います。既定値は 100 です。Local Preference が同じ場合は、自分で生成した経路かどうかを比べます。

>> 参考:BGP Local Preferenceを使いこなす!Ciscoルータでの設定手順と確認

3. 自分で生成した経路

network、aggregate-address、再配布(redistribute)で、自分のルータが生成した経路を優先します。たとえば、OSPF などで学習した経路を network コマンドで BGP に載せた経路です。

自分で生成した経路の例を、次に示します。

R6

R6# show ip bgp 23.23.23.23
BGP routing table entry for 23.23.23.23/32, version 2
Paths: (1 available, best #1, table default)
  Local
    192.168.26.2 from 0.0.0.0 (6.6.6.6)
      Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
表示意味
Local自分で生成した経路。AS_PATH は空
from 0.0.0.0ネイバーから受け取った経路ではない
192.168.26.2ネクストホップ。この例はスタティックルートから生成したので、そのネクストホップが入る
weight 32768Cisco では、自分で生成した経路の Weight は既定で 32768
sourced, localこのルータが生成した経路
補足

自分で生成した経路は、show ip bgp の Next Hop 列に 0.0.0.0 と表示されることが多いですが、この例のようにネクストホップのあるスタティックルートから生成した場合は、そのネクストホップが表示されます。自分で生成したかどうかは、詳細表示の from 0.0.0.0 や sourced, local で見分けます。

自分で生成した経路がない場合は、AS_PATH の長さを比べます。

4. AS_PATH の長さ

AS_PATH が短い、つまり通過する AS が少ない経路が優先されます。AS_PATH の長さが同じ場合は、Origin を比べます。なお、AS_SET は中の AS の数に関係なく 1 と数え、コンフェデレーションの部分は長さに含めません。

>> 参考:BGPのAS-PATH属性を徹底解説:Ciscoルータでの設定と動作検証

5. Origin

Origin は、経路が BGP にどうやって入ったかを表す属性です。値が小さい方が優先され、IGP < EGP < Incomplete の順です。

Origin表示経路の入り方
IGPinetwork コマンドで BGP に載せた経路
EGPeEGP(BGP より前のプロトコル)で学習した経路。現在はほとんど使われない
Incomplete?再配布で BGP に入れた経路

Origin が同じ場合は、MED を比べます。

>> 参考:BGP Origin属性を徹底解説!Ciscoルーターでの動作確認手順

6. MED

MED(MULTI_EXIT_DISC)はメトリックとも呼ばれ、値が小さい経路が優先されます。隣の AS に「この入口から入ってきてほしい」と伝えるための属性です。

ポイント

MED は、AS_PATH の先頭の AS(隣接 AS)が同じ経路どうしでだけ比べます。隣接 AS が違う経路どうしでも MED を比べたいときは、bgp always-compare-med を設定します。

>> 参考:BGPのMED属性とは?Ciscoルータでの設定と動作確認

7〜13. その他

MED が同じ場合は、次の順番でベストパスを選びます。

順番優先する経路補足
7iBGP より eBGP外の AS から直接受け取った経路を優先
8ネクストホップまでの IGP メトリックが最も小さいAS の中で近い出口を優先
9マルチパスの判断maximum-paths を設定していれば、複数の経路をルーティングテーブルに入れる
10先に受信した(古い)eBGP 経路ベストパスが頻繁に入れ替わるのを防ぐ。bgp bestpath compare-routerid で飛ばせる
11ルータ ID が最も小さいルートリフレクタ経由なら Originator ID で比べる
12クラスタリストが最も短いルートリフレクタを使う構成で使われる
13ネイバーのアドレスが最も小さい最後の決め手

まとめ

BGP のベストパスは、Weight、Local Preference、自分で生成した経路、AS_PATH、Origin、MED の順に比べ、差がついた時点で決まります。実際のネットワークでは、Weight(自分のルータだけ)、Local Preference(AS 全体の出口)、AS_PATH のプリペンドや MED(相手 AS からの入口)を調整して、経路を制御します。

次の記事では、実際に BGP 属性を順番にそろえながら、ベストパスがどう選ばれるかを確認しています。

>> 参考:【BGP】ベストパス選定(PART2 動作確認)

コメント