本記事では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を取得すると年収が増えるのか?実体験を語ります!」