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

 BGP 経由で学習されたルートはBGP属性が付与され、特定の宛先に複数のパスが存在する場合に、宛先への最適なルートを決定するために使用します。 BGP属性により経路選択がどのように行われるか決まりがあり、これをBGPベストパス選定アルゴリズムと呼ばれます。

 ベストパスは以下の優先順位により決定されます。

  1. Weightが最も大きい方を優先
  2. Local Preferenceが最も大きい方を優先
  3. ローカルで生成されたプレフィックスを優先
  4. AS-PATHの最も短い方が優先
  5. Originが最も小さい方が優先(IGP < Incomplete)
  6. MEDが最も小さい方が優先
  7. 内部BGPパスよりも外部BGPパスを優先
  8. NEXT-HOP IPアドレスに到達するIGPメトリックが最小のパスを優先
  9. 先に受信したeBGP経路を優先
  10. 最小のBGPルーターIDを持つルーターから発信されたパスを優先
  11. BGPピアのIPアドレスが最小のルートを優先

 それでは、この優先順位を上から確認していきます。

スポンサーリンク

無視されるルート

 ベストパス選定の前に、以下条件のルートの場合、そもそもBGPルートとして無視されます。

ネクストホップへの到達性がない

 ネクストホップアドレスに対して、IGP(直結経路、スタティックルート含む)で到達できないルートは無視されます。

>> 参考記事 : 初心者わかりやすく: BGPをスッキリ理解する第1歩 

AS-PATH ループ

 AS-PATH属性に自身のAS番号が含まれている場合、そのルートはループしていると判断し、そのルートは無視されます。

スポンサーリンク

BGPベストパス選択

 BGPルータが、同じ宛先への複数のパスを受信したとします。その場合、以下のBGPベストパス選択に従って、トラフィック転送に使用するベストパスを決定します。

Weight属性の比較

 Cisco独自の機能で、最もWeight値が大きいパスが優先されます。Weight属性は、ルータローカルでのみ有効です。Weight値の変更をしても、AS内外の他のルータには影響しません。Weightが同じ場合、Local Preferenceを比較します。

>> 参考記事 : Weight属性 

Local Preference属性を比較

 Local Preferenceが最も高いパスが優先されます。Local Preference属性はAS内のルータに広告されます。Local Preferenceが同じ場合は、ローカル生成のルートがないか比較されます。

>> 参考記事 : Local Preference属性 

ローカルで生成されたプレフィックスかどうか。

 networkaggregate-addressredistributeコマンドにより、ローカルルータから生成されたルートを優先します。例えば、OSPF等で学習したルートをnetworkコマンドで生成したようなルートを指します。

ローカルルータから生成されたルートはネクストホップが0.0.0.0となり、かつ、Cisco IOSでは、ローカルルータ上で生成されたルートのWeightは32768 が割り当てられます。

 ローカル生成されたルートの例を以下に示します。

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

 ローカルルータから生成されたルートがない場合は、AS-PATH属性の長さが比較されます。

AS-PATH属性の長さを比較

 AS-PATH属性の長さが短い方が優先されます。AS-PATHの長さが同じ場合、Origin属性が比較されます。

>> 参考記事 : AS-PATH属性 

Origin属性の大きさを比較

 学習したBGPルートがどこから発生したものかを記録されるOrigin属性を比較します。

 IGPは、networkコマンドにより発生したルート、Incompleteは、BGPへ再配布され発生したルートを示し、同じBGPプレフィックスに対しては、IncompleteよりIGPが優先パスとされます。

 Origin属性が同じ場合、MED属性が比較されます。

>> 参考記事 : Origin属性 

MED属性を比較

 MULTI_EXIT_DISC(MED)はメトリックとも呼ばれ、MED値が低いパスが優先されます。

AS-PATH属性のリストの最初のASが同じである場合のみ比較されます。異なるASから同じBGPルートを学習して、MEDを比較する場合は、bgp always-compare-med コマンドを使用します。

>> 参考記事 : MED属性

その他

 MED属性が同じ場合、次の順番で、ベストパスを選択します。

  1. 内部BGPパスよりも外部BGPパスを優先します
  2. NEXT-HOP IPアドレスに到達するIGPメトリックが最小のパスを優先します。
  3. 先に受信したeBGP経路を優先します。
  4. 最小のBGPルーターIDを持つルーターから発信されたパスを優先します。
  5. BGPピアのIPアドレスが最小のルートを優先します

 次の記事では、実際にBGP属性を順番に比較しながら、ベストパスをどのように選択するのか、動作を確認していきます。

>> 参考記事 : BGPベストパス選定(PART2 動作確認)
>> 関連記事 : 内部BGP
>> 関連記事 : BGPルータ間通信をキャプチャしてみた
>> 関連記事 : 外部BGP
>> 関連記事 : Next-Hop-Self
>> 関連記事 : 属性(アトリビュート)
>> 関連記事 : BGPベストパス選定(bgp bestpath as-path ignore )
>> 関連記事 : BGPベストパス選定(bgp bestpath compare-routerid )
>> 関連記事 : BGPベストパス選定(異なるASからのルートはMEDを比較しない)
>> 関連記事 : BGPベストパス選定(bgp always-compare-med)

コメント