BGP

【図解】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説明
1ORIGINWell-known Mandatory4271生成元がAS内か不明か
2AS_PATHWell-known Mandatory4271経由したASの順列
3NEXT_HOPWell-known Mandatory4271広報元ルータの IP
4MULTI_EXIT_DISCOptional Non-transitive4271メトリック
5LOCAL_PREFWell-known Discretionary4271AS内での優先度
6ATOMIC_AGGREGATEWell-known Discretionary4271ルート集約により情報が欠けたことを示す
7AGGREGATOROptional Transitive4271ルート集約をしたルータのAS番号とルータIDを示す
8COMMUNITIESOptional Transitive1997ルートのタグ付けを行い、コミュニティ単位で経路制御
や属性付与等の処理を行う 4 Bytes の情報
9ORIGINATOR_IDOptional Non-transitive4456ルートリフレクタのループ防止で利用
10CLUSTER_LISTOptional Non-transitive4456ルートリフレクタのループ防止で利用
11DPA廃止draftRFC6938により廃止
12Advertiser廃止1863RFC6938により廃止
13RCID_PATH/CLUSTER_ID廃止1863RFC6938により廃止
14MP_REACH_NLRIOptional Non-transitive4760MP-BGPやFlowSpecで利用
15MP_UNREACH_NLRIOptional Non-transitive4760MP-BGPやFlowSpecで利用
16Extended CommunitiesOptional Transitive4360コミュニティを 4 Bytes から 6 Bytes に拡張したもの
特殊用途としてMP-BGP (MPLS-VPNのRoute-Target) 等で利用
17AS4_PATHOptional Transitive67934 Bytes AS番号に対応していないBGPルータにAS_PATHを通知するためのもの
18AS4_AGGREGATOROptional Transitive67934 Bytes AS番号に対応していないBGPルータにAGGREGATORを通知するためのもの
32LARGE_COMMUNITYOptional Transitive8092コミュニティを 4 Bytes から 8 Bytes に拡張したもの

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

Border Gateway Protocol (BGP) Parameters

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】maximum-pathsによるECMP(等コストマルチパス)ロードバランス(シェアリング)設定
BGP で ECMP を実装する方法 BGP では ECMP (Equal Co...

 

コメント

タイトルとURLをコピーしました