
本記事ではCisco製品におけるBGPのベストパスアルゴリズム(最適経路選択)について解説いたします。
>>参考記事: 「CCIEが語る!ネットワークエンジニアにオススメな本・参考書!」
 >>参考記事: 「業務経験1年でもCCIE ラボ試験に合格出来る勉強方法」
BGPのベストパスアルゴリズム(最適経路選択)について

 まずは「BGPのベストパスアルゴリズム(最適経路選択)について」について解説いたします。
 
 Cisco製品では以下の優先順位に従って、最適経路を選定します。
 
- Weightの値が大きい経路を優先
 - Local Preferenceの値が大きい経路を優先
 - Networkコマンドで生成した経路を優先
 - ASPathが最も短い経路を優先
 - Originの値が小さい経路を優先
 - MEDの値が小さい経路を優先
 - iBGPよりeBGPパスを優先
 - BGP経路のNexthopのメトリック値が小さい経路を優先
 - 先に受信したeBGP経路を優先
 - 最小のルータ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のベストパスアルゴリズム(最適経路選択)は非常に複雑なので少しずつ覚えてみましょう!
>>参考記事: 「CCIEが語る!ネットワークエンジニアにオススメな本・参考書!」
 >>参考記事: 「CCIEを取得すると年収が増えるのか?実体験を語ります!」







