BGP で学習した経路には、BGP 属性が付いています。同じ宛先への経路が複数あるとき、BGP ルータはこの属性を決まった順番で比べて、通信に使う経路(ベストパス)を 1 つ選びます。この選び方を、BGP のベストパス選択アルゴリズムと呼びます。この記事では、Cisco ルータでの比較の順番と、それぞれの属性の意味を確認します。
- ベストパス選択の比較の順番
- そもそも比較の対象にならない経路
- Weight、Local Preference、AS_PATH、Origin、MED などの属性の意味
ベストパス選択の順番
Cisco ルータの BGP は、次の順番で経路を比べ、差がついた時点でベストパスを決めます。
| 順番 | 優先する経路 |
|---|---|
| 1 | Weight が最も大きい |
| 2 | Local Preference が最も大きい |
| 3 | 自分で生成した(network、aggregate-address、再配布) |
| 4 | AS_PATH が最も短い |
| 5 | Origin が最も小さい(IGP < EGP < Incomplete) |
| 6 | MED が最も小さい(通常は、隣接 AS が同じ経路どうしでだけ比べる) |
| 7 | iBGP より eBGP |
| 8 | ネクストホップまでの IGP メトリックが最も小さい |
| 9 | (BGP マルチパスが有効なら、複数の経路をルーティングテーブルに入れるか判断する) |
| 10 | どちらも eBGP なら、先に受信した(古い)経路 |
| 11 | BGP ルータ ID が最も小さいルータからの経路 |
| 12 | クラスタリストが最も短い経路 |
| 13 | ネイバーのアドレスが最も小さい経路 |
この順番を、上から確認していきます。
比較の対象にならない経路
ベストパスを選ぶ前に、次の経路はそもそも比較の対象から外れます。
ネクストホップに到達できない経路
ネクストホップのアドレスに、ルーティングテーブル(直接接続、スタティックルート、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 32768 | Cisco では、自分で生成した経路の 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 | 表示 | 経路の入り方 |
|---|---|---|
| IGP | i | network コマンドで BGP に載せた経路 |
| EGP | e | EGP(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 が同じ場合は、次の順番でベストパスを選びます。
| 順番 | 優先する経路 | 補足 |
|---|---|---|
| 7 | iBGP より 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 動作確認)
コメント