【図解】BGP属性(Path Attribute)とベストパス(経路選択)アルゴリズムの優先順位

BGP 属性(アトリビュート)とカテゴリ

BGP では UPDATE メッセージで広報するルート (NLRI) に対して属性 (Path Attribute) が付随します。

例えば以下のパケットキャプチャでは『192.168.50.0/24』というルートに対して『ORIGIN=IGP, AS_PATH=65001, NEXT_HOP=192.168.10.1』という属性が付与されていることが分かります。

BGP の属性 (パスアトリビュート) は、以下 4 つのカテゴリに分類されます。

  1. Well-known Mandatory : 全てのBGPルータが認識すべき必須属性 (この属性に値が無いとエラーになる)
  2. Well-known Discretionary : 全てのBGPルータで認識すべき任意属性 (この属性に値が無くてもエラーにならない)
  3. Optional Transitive : BGPルータは認識できなくてもよいが、相手から受信したら他のBGPルータにも伝える属性
  4. Optional Non-transitive : BGPルータは認識できなくてもよいが、相手から受信しても他のBGPルータには伝えない属性

なお、属性のパケットフォーマットを詳細に見ると、Well-known か Optional を示すフラグ、Transitive か Non-transitive かを示すフラグがありますが、Mandatory か Discretionary かを示すフラグはありません。

Well-known については BGP ルータ自体が「この属性は Mandatory か Discretionary か」を判断できるため、パケット内で識別させる必要が無いからです。

例えば ATOMIC_AGGREGATE という属性は Discretionary、NEXT_HOP 属性は Mandatory ですが、下図の通り、フラグ上は区別はありません。

BGP 属性一覧

BGP には様々な属性 (パスアトリビュート) が定義されています。一覧を以下に示します。

タイプ
コード
属性名 カテゴリ RFC 説明
1 ORIGIN Well-known Mandatory 4271 生成元がAS内か不明か
2 AS_PATH Well-known Mandatory 4271 経由したASの順列
3 NEXT_HOP Well-known Mandatory 4271 広報元ルータの IP
4 MULTI_EXIT_DISC Optional Non-transitive 4271 メトリック
5 LOCAL_PREF Well-known Discretionary 4271 AS内での優先度
6 ATOMIC_AGGREGATE Well-known Discretionary 4271 ルート集約により情報が欠けたことを示す
7 AGGREGATOR Optional Transitive 4271 ルート集約をしたルータのAS番号とルータIDを示す
8 COMMUNITIES Optional Transitive 1997 ルートのタグ付けを行い、コミュニティ単位で経路制御
や属性付与等の処理を行う 4 Bytes の情報
9 ORIGINATOR_ID Optional Non-transitive 4456 ルートリフレクタのループ防止で利用
10 CLUSTER_LIST Optional Non-transitive 4456 ルートリフレクタのループ防止で利用
11 DPA 廃止 draft RFC6938により廃止
12 Advertiser 廃止 1863 RFC6938により廃止
13 RCID_PATH/CLUSTER_ID 廃止 1863 RFC6938により廃止
14 MP_REACH_NLRI Optional Non-transitive 4760 MP-BGPやFlowSpecで利用
15 MP_UNREACH_NLRI Optional Non-transitive 4760 MP-BGPやFlowSpecで利用
16 Extended Communities Optional Transitive 4360 コミュニティを 4 Bytes から 6 Bytes に拡張したもの
特殊用途としてMP-BGP (MPLS-VPNのRoute-Target) 等で利用
17 AS4_PATH Optional Transitive 6793 4 Bytes AS番号に対応していないBGPルータにAS_PATHを通知するためのもの
18 AS4_AGGREGATOR Optional Transitive 6793 4 Bytes AS番号に対応していないBGPルータにAGGREGATORを通知するためのもの
32 LARGE_COMMUNITY Optional Transitive 8092 コミュニティを 4 Bytes から 8 Bytes に拡張したもの

より詳細については IANA の BGP パラメーターズを参照下さい。

https://www.iana.org/assignments/bgp-parameters/bgp-parameters.xhtml#bgp-parameters-2

BGP Best Path Selection Algorithm

BGP では受信した宛先ルートをまず『BGP テーブル (RIB: Route Information Base)』に格納します。同じ宛先ルートが複数のルータから受信した場合、『ベストパス』を決め、ベストパスのみをルーティングテーブルに格納します。

まれに RIB=ルーティングテーブルと記載している箇所がありますが (Cisco の記事でも見られますが)、RFC 4271 の Section 3.2 には以下のように「RIB」と「Routing Table」を使い分けて記載されています。

b) Loc-RIB: The Loc-RIB contains the local routing information the BGP speaker selected by applying its local policies to the routing information contained in its Adj-RIBs-In. These are the routes that will be used by the local BGP speaker. The next hop for each of these routes MUST be resolvable via the local BGP speaker's Routing Table.

BGP テーブルは show ip bgp で確認し、ルーティングテーブルは show ip route で確認します。

Cisco の場合、BGP のベストパスは以下の優先順位で決まります。

  1. WEIGHT 属性 (Cisco 独自属性) の値が最大のもの
  2. LOCAL_PREF 属性の値が最大のもの
  3. ローカルルータで (network や aggregate-address コマンドで) 生成したルート
  4. AS_PATH 属性が最短のもの (経由した AS の数が少ないもの)
  5. ORIGIN 属性の値が最小のもの
    • 0 (IGP) = networkコマンドや aggregate-addressで生成されたルート (リモートルータ含む)
    • 1 (EGP) = EGPで受信したもの
    • 2 (Incomplete) = redistributeで再配布されたもの
  6. MED 属性が最小のもの
  7. iBGP よりも eBGP が優先 (もしベストパスが決まった場合であっても ⑨ でマルチパス選択へ)
  8. NEXT_HOP 属性への IGP (RIP/OSPF/EIGRP) メトリックが最小のもの (ここでベストパスが決まっても⑨でマルチパス選択へ)
  9. maximum-paths (デフォルト=1) が 2 以上である場合はマルチパスとして複数ルートをルーティングテーブルに掲載。
  10. eBGPから受信した最古のもの (フラッピングが発生しにくい)
  11. ネイバーのルータID が最小のもの (ルートリフレクタを含む場合、ORIGINATOR_ID が最小のもの)
  12. CLUSTER_LIST 属性が最短のもの
  13. ネイバーのIPアドレスが最小のもの

③について

network コマンドは Connected のネットワークアドレスだけでなく、RIP/OSPF/EIGRP で学習したネットワークアドレスに対しても有効です。なので例えば同一 AS 内で OSPF にて 1.1.1.0/24 を広報し、それを BGP の network コマンドで R1 と R2 の両ルータで取り込む場合、各々で自身の network コマンドで取り込んだルートが優先されます。

⑤について

EGP とは BGP の前身であるプロトコルです。RFC 827 で定められていますが、現在では使われていませんので、表示されることはないでしょう。

⑦~⑨について

⑦でベストパスが決まったとしても、もし⑨で maximum-paths が 2 以上であったらその数だけ等コスト(ECMP)/不等コストマルチパスとして採択されます。

⑦でベストパスが決まらない場合、⑧にてベストパスを決め、同様に⑨によるチェックとマルチパス採択が行われます。

⑩以降はパスは 1 つだけに決まります。

ECMP/不等コストマルチパスの設定は以下のように行います。(3 経路をルーティングテーブルに載せる例)

(config)# router bgp 65001
(config-router)# maximum-paths 3

ただし、maximum-paths コマンドは同一 AS に対する eBGP ネイバーに対して負荷分散をするコマンドです。異なる AS に対する eBGP ネイバーや iBGP ネイバーに対する負荷分散の設定については以下をご参照下さい。

関連記事

BGP で ECMP を実装する方法 BGP では ECMP (Equal Cost Multi Path : 等コストマルチパス) による負荷分散が実装可能ですが、デフォルト設定では有効になっていません。 また、有効にするにも大き[…]

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG