BGP 経路選択アルゴリズムの完全解説
同じ宛先に複数経路が届いたとき、BGP がどれを最良経路に選ぶかを優先順位ごとに理解できる。各属性の設計意図まで踏み込み、トラフィック制御の勘所がつかめる。
- 1.BGP は同一宛先の複数経路から1本の最良経路を選び、Weight→LOCAL_PREF→AS_PATH→Origin→MED→eBGP/iBGP→IGPメトリックの順で機械的に比較する。
- 2.上位ほど運用ポリシーが効く設計で、出口(送信側)制御は LOCAL_PREF、入口(受信側)の誘導は AS_PATH プリペンドや MED を使う。
- 3.最良経路だけがルーティングテーブルに入り、かつ近隣に再広告される。だから経路選択は到達性そのものに直結する。
なぜ「経路選択」が要るのか
BGP では、同じ宛先プレフィックス(例 203.0.113.0/24 という CIDR)への経路が複数のピアから届くことが日常的に起きます。インターネットは数万の AS が網の目状につながっているため、当然です。しかし実際にパケットを送れるネクストホップは1つだけ。そこで BGP は受信した複数の候補からただ1本の最良経路(best path) を選び、それだけをルーティングテーブルに入れます。
重要なのは、最良経路に選ばれた1本だけが他のピアへ再広告される点です。つまり経路選択は自分の到達性だけでなく、自分を経由する他者の到達性まで左右します。AS 間のポリシーは ルーティングプロトコル(OSPF / BGP) で触れたとおり「速さ」でなく「都合」で決まり、その都合を実装するのがこの選択順序です。
選択順序の全体像
BGP は候補経路を上から順に1属性ずつ比較し、差が付いた時点で勝者を決めます。同点なら次の属性へ進む、トーナメント方式です。
| 順 | 属性 | 向き(大/小が優先) | 主な設計意図 |
|---|---|---|---|
| 1 | Weight(Cisco独自) | 大きいほど優先 | 自ルータ内だけの強制指定 |
| 2 | LOCAL_PREF | 大きいほど優先 | AS内で共有する出口ポリシー |
| 3 | ローカル生成 | 自分発が優先 | 自AS起点の経路を優先 |
| 4 | AS_PATH長 | 短いほど優先 | 通過AS数=おおまかな距離 |
| 5 | Origin | IGP<EGP<Incomplete | 経路の素性の確かさ |
| 6 | MED | 小さいほど優先 | 隣接ASに示す入口の希望 |
| 7 | eBGP / iBGP | eBGPが優先 | 外部学習を内部学習より優先 |
| 8 | IGPメトリック | 小さいほど優先 | 最寄りの出口(hot potato) |
これ以降も同点が続けば、より古い経路・ルータID最小などのタイブレーカで必ず1本に絞ります。決定性があり、どのルータでも同じ入力なら同じ結論に至るのが BGP の前提です。
Weight:自分だけの最優先指定
Weight は Cisco 独自で、そのルータの中だけで意味を持ち、他ルータには伝わりません。最初に評価されるため最も強力です。「この1台では必ずこの経路を使え」という局所的な強制に向きます。標準属性ではないため、AS 全体で揃えたいなら次の LOCAL_PREF を使います。
LOCAL_PREF:AS の出口ポリシー
LOCAL_PREF は iBGP で AS 内のルータ間に共有される標準属性で、値が大きい経路を優先します。
これが「自 AS からどの出口を使って外へ出るか(outbound)」を決める中心的なツマミです。例えば「主回線(高速・安価)を優先し、バックアップ回線は普段使わない」を実現するには、主回線で学んだ経路に高い LOCAL_PREF を付与します。AS 内の全ルータが同じ値を見るため、組織として一貫した出口選択になります。
送信トラフィックの出口を自分で決めるのが LOCAL_PREF。これは自AS内で完結します。一方、外から自分への入口(inbound)は最終的に相手ASが決めるので、こちらは MED や AS_PATH プリペンドで“お願い”するしかありません。制御の効きやすさが構造的に非対称です。
AS_PATH:通過 AS 数という距離
LOCAL_PREF で差が付かなければ、AS_PATH の長さ(通過する AS 数)を比べ、短いほうを選びます。BGP がパスベクタ型と呼ばれるのはこの属性ゆえで、AS番号の並びはループ検出にも使われます(自AS番号が含まれる経路は破棄)。
入口を誘導したいときは、自分が広告する経路の AS_PATH にわざと自AS番号を重ねる AS_PATH プリペンドを使います。経路を長く“見せかけて”、相手にその経路を選ばせにくくする手法です。
# 自AS(65001)からの広告にプリペンドを2回
通常: AS_PATH = 65001
プリペンド後: AS_PATH = 65001 65001 65001 # 長く見え、選ばれにくくなる
ただし AS_PATH より上位の LOCAL_PREF が相手側で効いていれば、プリペンドは無視されます。上位属性が常に優先である点を忘れると、誘導が効かない理由を見失います。
Origin と MED
Origin は経路の素性を示し、IGP(network文等で素直に生成)が最も信頼され、次いで EGP(現在ほぼ未使用)、Incomplete(再配布由来など出自不明)の順で優先されます。差が付くことは実務上まれですが、再配布した経路が不利に扱われる理由がここにあります。
MED(Multi-Exit Discriminator) は、同じ隣接 AS への複数リンクがある場合に「こちらのリンクで入ってきてほしい」と相手へ示す値で、小さいほど優先されます。あくまで相手AS内での比較に使われる弱いヒントで、デフォルトでは同一隣接AS同士でしか比較しません。LOCAL_PREF より下位なので、相手のポリシー次第で簡単に覆ります。
eBGP/iBGP と IGP メトリック
ここまで同点なら、eBGP(外部ピアから学んだ経路)を iBGP(内部ピア経由)より優先します。外部で直接学んだ経路のほうが新鮮で短いとみなす設計です。
最後に残るのが IGP メトリックで、ネクストホップまでの OSPF/IS-IS コストが小さい経路を選びます。これは「最も近い出口から早く外へ出す」考え方で、ホットポテト(hot potato)ルーティングと呼ばれます。自AS内を長く運ばず、熱いジャガイモを早く手放すイメージです。逆に相手都合を優先して遠い出口まで運ぶ設計はコールドポテトと呼ばれ、MED で実現します。
- 順序の暗記: Weight→LOCAL_PREF→自分発→AS_PATH→Origin→MED→eBGP/iBGP→IGPメトリック。
- 大小の向き: Weight と LOCAL_PREF は「大」、AS_PATH と MED と IGPメトリックは「小」が優先。混同しやすい。
- outbound は LOCAL_PREF、inbound は AS_PATH プリペンド/MED。「自分で決められるのは出口だけ」が本質。
- AS_PATH はループ検出も兼ねる(自AS番号を含む経路を破棄)。
設計意図を一段で言うと
この順序は偶然ではなく、上位ほど運用者の意図を強く反映し、下位ほど技術的・自動的な最短性に近づくよう並んでいます。まずローカルな強制(Weight)、次に組織ポリシー(LOCAL_PREF)、それでも決まらなければ距離(AS_PATH)、最後に物理的な近さ(IGP)。ポリシーと最短性の優先関係を一直線に並べたのが BGP 経路選択であり、ここを誤ると 経路ハイジャックや広域障害 のように影響が AS を越えて波及します。挙動の確認は実機で show ip bgp 系コマンドや パケットキャプチャ を併用し、どの属性で勝敗が付いたかを必ず裏取りしてください。
ネットワーク Article
BGP 経路選択アルゴリズムの完全解説を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
BGP
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
上位ほど運用ポリシーが効く設計で、出口(送信側)制御は LOCAL_PREF、入口(受信側)の誘導は AS_PATH プリペンドや MED を使う。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「BGP / ルーティング」に近いか確認する。
- 強みである「BGP は同一宛先の複数経路から1本の最良経路を選び、Weight→LOCAL_PREF→AS_PATH→Origin→MED→eBGP/iBGP→IGPメトリックの順で機械的に比較する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。