BGPの最適パス選択(ベストパスアルゴリズム)と各アトリビュートについて

本記事ではCisco製品におけるBGPのベストパスアルゴリズム(最適経路選択)について解説いたします。

BGPのベストパスアルゴリズム(最適経路選択)について


まずは「BGPのベストパスアルゴリズム(最適経路選択)について」について解説いたします。


Cisco製品では以下の優先順位に従って、最適経路を選定します。

▼BGP ベストパスアルゴリズム▼

  1. Weightの値が大きい経路を優先
  2. Local Preferenceの値が大きい経路を優先
  3. Networkコマンドで生成した経路を優先
  4. ASPathが最も短い経路を優先
  5. Originの値が小さい経路を優先
  6. MEDの値が小さい経路を優先
  7. iBGPよりeBGPパスを優先
  8. BGP経路のNexthopのメトリック値が小さい経路を優先
  9. 先に受信したeBGP経路を優先
  10. 最小のルータIDから受信したBGP経路を優先



では上記①〜⑩についてそれぞれを解説いたします。

【BGP ベストパスアルゴリズム①】Weightの値が大きい経路を優先

まず1つ目の「Weightの値が大きい経路を優先」について、解説いたします。
Weightとはシスコ独自のBGPアトリビュートであり、発信トラフィック(自AS→他AS)の経路制御を実装する事が可能です。
※Weightは自ルータ(ローカルルータ)にのみ適用され、他のBGPネイバーにはアドバタイズされません。


また、Weightは値が大きい経路を優先するので、
1つの宛先に対して複数の経路が存在する場合はWeightの値を変更する事により、経路制御を実現する事が可能です。
※自ルータで生成した経路のWeightのデフォルト値は「32768」であり、他のルータから受信した経路のWeightのデフォルト値は「0」です。
Weightの設定範囲は0~65535で設定する事が可能です。


もし、Weight値が同じ場合は次章に紹介する「Local Preference値」に基づき、経路選択を実施します。

【BGP ベストパスアルゴリズム②】Local Preferenceの値が大きい経路を優先

次に2つ目の「Local Preferenceの値が大きい経路を優先」について、解説いたします。
Local Preferenceアトリビュートとは同じAS内でのみ交換させるBGPアトリビュートであり、発信トラフィック(自AS→他AS)の経路制御を実装する事が可能です。
※Local PreferenceはeBGPネイバーには送信させず、iBGPネイバーにのみアドバタイズされます。


Local Preferenceは値が大きい経路を優先させる為、
同じAS内で1つの宛先に対して複数の経路が存在する場合はLocal Preferenceの値を変更する事により、経路制御を実現する事が可能です。
※Local Preferenceのデフォルト値は「100」です。
「bgp default local-preference」コマンドにてLocal Preferenceのデフォルト値を変更する事が可能です。


もし、Local Preference値が同じ場合は次章に紹介する「Networkコマンドで生成した経路」を優先します。

【BGP ベストパスアルゴリズム③】Networkコマンドで生成した経路を優先

次に3つ目の「Networkコマンドで生成した経路を優先」について、解説いたします。
文字通りですが、自ルータが生成した経路(Networkコマンドで生成した経路)を優先します。

【BGP ベストパスアルゴリズム④】ASPathが最も短い経路を優先

次に4つ目の「ASPathが最も短い経路を優先」について、解説いたします。
AS-PathアトリビュートとはBGP経路がアドバタイズさせる際に通過したAS-Path番号リストです。
BGPではASを通過する度にAS番号を挿入させ記録させる仕様になっております。

(つまり、複数のASを通過する度にASPath長が長くなっていきます。)


ASPathはASPath長が短い経路(あまりASを経由していない経路)を優先される為、
ASPathはas-path prependコマンドでAS番号を追加する事で経路制御を実現する事が可能です。
(ASPathを付与する事により優先度を下げる事が可能です。)


もし、ASPath長が同じ場合は次章に紹介する「Originの値が小さい経路」を優先します。

【BGP ベストパスアルゴリズム⑤】Originの値が小さい経路を優先

次に5つ目の「Originの値が小さい経路を優先」について、解説いたします。
OriginとはBGP経路の生成時に付与させるアトリビュートです。


Originには3つの値「i」「e」「?」があり、i > e > ?の順で優先されます。

Origin : i IGP

Originが「i」のBGP経路はnetworkコマンドやaggregate-addressで生成された事を示します。
上記の通り、「i」が一番優先されます。

Origin : e EGP

Originが「e」のBGP経路はEGP(Exterior Gateway Protocol)で生成された事を示します。
※現在はBGPが利用されておりますので、「e」という表示を見る機会は少ないでしょう。
「e」は「i」の次に優先されます。

Origin : ? Incomplete

Originが「?」のBGP経路はStaticルートや再配送で生成された事を示します。
※「?」は一番非優先です。



もし、Origin値が同じ場合は次章に紹介する「MEDの値が小さい経路を優先」します。

【BGP ベストパスアルゴリズム⑥】MEDの値が小さい経路を優先

次に6つ目の「MEDの値が小さい経路を優先」について、解説いたします。
MEDアトリビュートとは外部の隣接するASに対して着信トラフィック(他AS→自AS)の経路制御を実装する事が可能なBGPアトリビュートです。
※前述したLocal Preferenceと異なり、MEDは隣接するASにもアドバタイズされますので他ASの経路制御に関わる事が出来ます。
また、受信した隣接ASのルータが他のASへアドバタイズする際は「MED値は0」になります。


MEDは値が小さい経路を優先させMEDのデフォルト値は「0」である為、
優先度を下げたい経路のMED値を高くする事で経路制御を実現する事が可能です。


本記事では紹介しませんがMEDは細かい仕様がありますので、
興味のある方は「bgp always-compare-med」「bgp deterministic-med」「bgp bestpath med missing-as-worst」「bgp bestpath med missing-as-worst」を検索してみて下さい。

【BGP ベストパスアルゴリズム⑦】iBGPよりeBGPパスを優先

次に7つ目の「iBGPよりeBGPパスを優先」についてですが、
文字通りですが、iBGPよりeBGPの経路を優先します。

【BGP ベストパスアルゴリズム⑧】BGP経路のNexthopのメトリック値が小さい経路を優先

次に8つ目の「BGP経路のNexthopのメトリック値が小さい経路を優先」についてですが、
BGPのNexthopへの最小のIGPメトリックを持つパスが優先されます。


また、BGPのマルチパス設定(maximum-paths)がされている場合、最適経路以外の経路もルーティングテーブルへインストールする事が出来ます。
※デフォルトではeBGPでは最適経路(1経路のみ)をルーティングテーブルへ適用されますが、
maximum-pathsコマンドにて最適経路以外の経路をルーティングテーブルへ適用する事が可能です。

【BGP ベストパスアルゴリズム⑨】先に受信したeBGP経路を優先

次に9つ目の「先に受信したeBGP経路を優先」ですが、
言葉の通り古くから受信しているBGPパスが優先されます。


それは古くから受信している経路=ルートフラップが抑えられている=信頼性の高い経路という扱いになる為、古くから受信しているBGPパスが優先すると覚えましょう!

【BGP ベストパスアルゴリズム⑩】最小のルータIDから受信したBGP経路を優先

最後に10つ目の「最小のルータIDから受信したBGP経路を優先」ですが、
文字通りですが、隣接のBGPルータのルータIDが最小の経路を優先します。

本記事ではBGPのベストパスアルゴリズム10つを紹介しておりますが、
まだ続きがございますのでご興味のある方はWebで調べてみて下さい!

まとめ


最後までお読み頂きましてありがとうございます。


BGPのベストパスアルゴリズム(最適経路選択)は非常に複雑なので少しずつ覚えてみましょう!