本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
BGP経路選択アルゴリズムとパス属性の理解
背景
Border Gateway Protocol (BGP) は、インターネットの中核を成すルーティングプロトコルであり、異なる自律システム (AS) 間で経路情報を交換するために利用されています。BGPは単に経路をアドバタイズするだけでなく、多様なパス属性に基づいて最適な経路を選択する複雑なアルゴリズムを持っています。この経路選択プロセスは、インターネットの安定性、効率性、およびポリシーベースのルーティングを可能にする上で極めて重要です。ネットワークエンジニアにとって、BGPの経路選択メカニズムとパス属性を深く理解することは、信頼性の高い大規模ネットワークを設計・運用するために不可欠です。
設計目標
BGPの経路選択アルゴリズムは、以下の主要な目標を達成するように設計されています。
ルーティングの効率性と安定性: 利用可能な複数の経路の中から、最も効率的で安定したパスを選択し、ルーティングループを回避することで、インターネット全体の安定性を維持します。
ポリシー制御の柔軟性: ネットワーク事業者が自社のルーティングポリシー(トラフィックエンジニアリング、コスト最適化、ピアリング関係など)を反映できるように、多様なパス属性とそれらの評価順序を提供します。
スケーラビリティ: 膨大な数の経路情報(インターネットのフルルーティングテーブルは数十万エントリに達する)を効率的に処理し、継続的に変化するネットワーク状況に適応できる能力を持ちます。
セキュリティ確保: 悪意のある経路情報の注入や改ざんからネットワークを保護するための仕組みを組み込み、インターネットルーティングの信頼性を高めます。
詳細
BGPの基本とメッセージタイプ
BGPはパスベクトル型ルーティングプロトコルであり、経路情報に付随する属性群(パス属性)を利用して、宛先ネットワークへの経路を選択します。BGPピアリングはTCPポート179上で確立され、以下の主要なメッセージタイプを交換します。
OPEN: BGPピアリングの確立時に交換され、BGPバージョン、AS番号、ルーターID、ホールドタイムなどのネゴシエーションを行います。
UPDATE: 経路情報(到達可能な経路、撤回された経路)と、それに関連するパス属性をアドバタイズするために使用されます。
KEEPALIVE: BGPセッションがアクティブであることを確認するために定期的に交換されます。
NOTIFICATION: BGPセッションのエラーを報告し、通常はセッションを切断します。
BGPピアリングの確立から経路交換までの基本的なシーケンスは以下の通りです。
sequenceDiagram
participant RouterA as ルーターA
participant RouterB as ルーターB
"ルーターA"->>"ルーターB": |TCP SYN|
"ルーターB"->>"ルーターA": |TCP SYN-ACK|
"ルーターA"->>"ルーターB": |TCP ACK|
note over ルーターA,ルーターB: TCPセッション確立
"ルーターA"->>"ルーターB": |BGP OPEN Message (AS_A, RouterID_A)|
"ルーターB"->>"ルーターA": |BGP OPEN Message (AS_B, RouterID_B)|
note over ルーターA,ルーターB: BGPパラメータ交渉・ピアリング確立
"ルーターA"->>"ルーターB": |BGP KEEPALIVE Message|
"ルーターB"->>"ルーターA": |BGP KEEPALIVE Message|
"ルーターA"-->>"ルーターB": |BGP UPDATE Message (経路情報+属性)|
"ルーターB"-->>"ルーターA": |BGP UPDATE Message (経路情報+属性)|
note over ルーターA,ルーターB: 経路情報の交換とルーティングテーブル更新
BGP経路選択アルゴリズム
BGPの経路選択アルゴリズムは、RFC 4271 [1] のSection 9.1.2に定義されており、複数の候補経路の中から最適な1つを選択するための優先順位付きのステップで構成されます。これらのステップは、ルーターの実装によって若干異なる場合がありますが、一般的な順序は以下の通りです。
graph TD
START["BGP経路選択プロセス開始"] --> A["1. NEXT_HOPの到達性確認"];
A -->|"到達不能"| D["経路を破棄"]
A -->|"到達可能"| B["2. LOCAL_PREFの比較 (最高値を優先)"]
B --> C["3. AS_PATHの比較 (最短を優先)"];
C --> E["4. ORIGINタイプの比較 (IGP < EGP < INCOMPLETE を優先)"]
E --> F["5. MEDの比較 (最低値を優先)"]
F --> G["6. eBGP経路とiBGP経路の優先 (eBGPを優先)"];
G --> H["7. NEXT_HOPへのIGPコストの比較 (最低コストを優先)"];
H --> I["8. ピアのBGP Router IDの比較 (最低値を優先)"];
I --> J["9. ピアのIPアドレスの比較 (最低値を優先)"];
J --> END["最適な経路の選択"];
D --> END;
経路選択アルゴリズムの主要ステップ:
NEXT_HOPの到達性: まず、BGP UPDATEメッセージで指定されたNEXT_HOP(次ホップ)ルーターへの経路が、自身のAS内のInterior Gateway Protocol (IGP) によって到達可能であるかを確認します。到達不能な経路は破棄されます。
LOCAL_PREF (ローカル優先度): 最もLOCAL_PREF値が高い経路が優先されます。これは自AS内での経路選択に影響を与える属性で、通常、ポリシーによって設定されます。値が高いほど優先されます。
AS_PATH (自律システムパス): AS_PATHセグメントの数が最も短い経路が優先されます。AS_PATHは、経路が通過してきたASのリストであり、短いほど「近道」とみなされます。
ORIGIN (発信元): 経路の発信元タイプが最も低い(優先度が高い)経路が優先されます。優先順位はIGP (Interior Gateway Protocol) < EGP (Exterior Gateway Protocol) < INCOMPLETEです。
MED (Multi-Exit Discriminator): 同じASからの複数の経路がある場合、MED値が最も低い経路が優先されます。これは隣接ASに対して、どのエントリポイントが好ましいかを示すために使用されます。
eBGP vs iBGP: eBGP (External BGP) ピアから学習した経路は、iBGP (Internal BGP) ピアから学習した経路よりも優先されます。
IGPコスト: NEXT_HOPへのIGPコスト(自AS内のルーティングプロトコルで計算されたメトリック)が最も低い経路が優先されます。これは、AS内の出口点に最も近い経路を選択することに相当します。
BGP Router ID: 複数の経路が上記の条件で等しい場合、発信元ピアのBGP Router IDが最も低い経路が優先されます。
ピアIPアドレス: 最後に、複数の経路がまだ等しい場合、発信元ピアのIPアドレスが最も低い経路が最終的に選択されます。
BGPパス属性
BGPパス属性は、BGP UPDATEメッセージの必須部分であり、経路選択アルゴリズムの各ステップで利用されます。RFC 4271 [1] では、これらの属性が以下のように分類されています。
Well-known Mandatory: すべてのBGP実装で認識され、UPDATEメッセージに常に存在しなければならない属性。
ORIGIN (タイプ1): 経路の学習元を示す。IGP (0)、EGP (1)、INCOMPLETE (2)。
AS_PATH (タイプ2): 経路が通過したASのリスト。ルーピング防止とAS_PATH長による選択に利用される。
NEXT_HOP (タイプ3): 宛先ネットワークへの次ホップルーターのIPアドレス。
Well-known Discretionary: すべてのBGP実装で認識されるが、UPDATEメッセージに必ずしも存在しなくてもよい属性。
LOCAL_PREF (タイプ5): 自AS内での経路の優先度。デフォルトは100。
ATOMIC_AGGREGATE (タイプ6): 経路が集約されたことを示す。
Optional Transitive: BGP実装が認識しない場合でも、他のBGPピアに転送される属性。
COMMUNITY (タイプ8): 経路にタグを付け、特定のポリシーを適用するための任意の32ビット値。
AGGREGATOR (タイプ7): 経路を集約したルーターのAS番号とIPアドレス。
Optional Non-transitive: BGP実装が認識しない場合、その属性は破棄され、他のBGPピアには転送されない属性。
- MULTI_EXIT_DISC (MED) (タイプ4): 隣接ASに対して、どのエントリポイントが好ましいかを示す。低い値ほど優先される。
BGP UPDATEメッセージのPath Attributesフィールド構造の例:
Path Attributes Field: (Variable length list of Path Attributes)
Attribute 1:
Attribute Flags: 8 bits
- Optional bit (O): 1 bit (0=Well-known, 1=Optional)
- Transitive bit (T): 1 bit (0=Non-transitive, 1=Transitive)
- Partial bit (P): 1 bit (0=Complete, 1=Partial)
- Extended Length bit (E): 1 bit (0=1-octet length, 1=2-octet length)
- Unused: 4 bits (must be 0)
Attribute Type Code: 8 bits (e.g., 1=ORIGIN, 2=AS_PATH, 3=NEXT_HOP)
Attribute Length: 8 or 16 bits (based on Extended Length bit)
Attribute Value: Variable length (e.g., ORIGIN_IGP = 0x00)
Attribute 2: (Following Attribute 1, if any)
Attribute Flags: 8 bits
Attribute Type Code: 8 bits
Attribute Length: 8 or 16 bits
Attribute Value: Variable length
...
相互運用
BGPはその性質上、異なるネットワークやASとの相互運用を前提としています。
eBGPとiBGPの連携: AS間のルーティングにはeBGPが使用され、AS内のルーティングにはiBGPが使用されます。eBGPとiBGPは密接に連携し、NEXT_HOPの到達性検証のために、iBGPルーターがAS内のIGP(OSPF, EIGRPなど)から学習した経路を利用します。
ルーティングポリシーの調整: BGPのパス属性は、異なるAS間のルーティングポリシーを調整するための強力なツールです。LOCAL_PREFやMEDは、AS間のトラフィックフローを制御し、ピアリング契約やISPのアップストリーム選択などのビジネス要件を反映させるために利用されます。例えば、特定のASからの経路に高いLOCAL_PREFを設定することで、そのASを経由するトラフィックを優先的に選択させることが可能です。
他のルーティングプロトコルとの比較:
BGP (EGP):
目的: AS間ルーティング。大規模インターネットでの経路交換。
アルゴリズム: パスベクトル型。
スケーラビリティ: 極めて高い。数十万の経路を扱える。
ポリシー制御: 高度なパス属性による柔軟なポリシー制御が可能。
収束時間: 比較的遅い(数秒〜数分)。
適用範囲: ISP間、大規模組織間。
OSPF/EIGRP (IGP):
目的: AS内ルーティング。単一の自律システム内での経路交換。
アルゴリズム: OSPFはリンクステート型、EIGRPは拡張ディスタンスベクトル型。
スケーラビリティ: BGPほどではないが、大規模な企業ネットワークやデータセンターで利用される。
ポリシー制御: 主にメトリック(コスト、帯域幅など)ベースの制御。BGPほど柔軟ではない。
収束時間: 比較的速い(数ミリ秒〜数秒)。
適用範囲: 企業ネットワーク、データセンター内。
セキュリティ考慮
BGPはインターネットの基盤であるため、そのセキュリティは極めて重要です。BGPは様々な攻撃の対象となり、経路ハイジャック、ブラックホール攻撃、DoS攻撃などの深刻な問題を引き起こす可能性があります [2]。
脅威:
経路ハイジャック: 攻撃者が不正にIPプレフィックスをアドバタイズし、正当なトラフィックを奪う。
サブリフレクション攻撃: より具体的な(長いプレフィックスの)不正経路をアドバタイズし、特定の宛先へのトラフィックを奪う。
DoS/DDoS攻撃: 多数の不正な経路情報を注入し、ルーターのリソースを枯渇させる。
BGPセッションの改ざん: ピアリングセッションを乗っ取り、不正な経路情報を交換する。
対策:
RPKI (Resource Public Key Infrastructure) を用いたオリジン検証: RFC 6810 [3] に基づくRPKIは、IPアドレスリソースの所有者と、そのリソースからBGP経路をアドバタイズするASの関連付けを暗号的に証明します。これにより、不正な経路オリジンを検出・フィルタリングし、経路ハイジャックを防ぐのに役立ちます。
BGPセッションの認証:
TCP MD5: RFC 2385で定義され、BGPセッションを保護するためにTCPセグメントの認証にMD5ハッシュを使用します。
TCP Authentication Option (TCP AO): RFC 5925で定義され、MD5よりも強力な認証アルゴリズムとキーローテーションをサポートし、リプレイ攻撃に対する耐性も向上させます。これにより、BGPピア間のセッション確立やメッセージ交換におけるなりすましや改ざんを防ぎます。
経路フィルタリング: ルーター上でインバウンド/アウトバウンドフィルタリングリストを設定し、不正な経路や不適切な経路(プライベートAS番号を含む経路、予期しないプレフィックスなど)の受け入れやアドバタイズを防止します。
BGPSEC: RFC 8205で定義されているBGPSECは、BGP UPDATEメッセージにデジタル署名を付加し、AS_PATH属性の改ざんを検証することで、経路ハイジャックを検出する試みですが、実装の複雑さから広く採用には至っていません。
GTSM (Generalized TTL Security Mechanism): RFC 5082に定義され、BGPセッションのTTL値を検証することで、遠隔からの攻撃(オンパス攻撃ではない)を軽減します。
0-RTTのリスクとキー更新: BGPは長期的なTCPセッション上で動作するため、0-RTTデータ転送の直接的なリスクは限定的です。しかし、セッション確立時の認証(TCP AOなど)において、リプレイ攻撃のリスクは考慮されるべきです。TCP AOはキー更新メカニズムをサポートしており、定期的なキーローテーションによって長期的なセキュリティを維持します。ダウングレード攻撃に対しても、最新かつ最も強力な認証メカニズムを常に使用するように設定する必要があります。
実装メモ
BGPルーターの実装には、性能と安定性を確保するための複数の考慮事項があります。
MTU/Path MTU: BGPメッセージ自体は比較的小さいですが、UPDATEメッセージが多数の経路情報や大規模なコミュニティリストを含む場合、TCPセグメントがMTUを超える可能性があります。Path MTU Discovery (PMTUD) は、IPフラグメンテーションを避け、効率的なデータ転送を確保するために重要です。
HOL (Head-of-Line) Blocking回避: TCPのHOL Blockingは、単一のTCPストリームにおけるデータ転送の遅延を引き起こす可能性があります。BGP UPDATEメッセージの処理はTCPセッションの順序に依存するため、ルーターの内部キュー制御やCPUスケジューリングによって、経路情報の更新が他の重要な処理をブロックしないように工夫が必要です。
キュー制御と優先度: BGP UPDATEメッセージはネットワークの安定性に直接影響するため、ルーターの処理キューにおいて優先度の高い扱いを受けるべきです。特に、緊急の経路撤回(WITHDRAW)メッセージは迅速に処理される必要があります。
経路収束時間 (Convergence Time): 大規模なBGPテーブルを持つルーターにおいて、ネットワークイベント(リンクダウン、ピアリング切断など)が発生した際の経路再計算とアップデートの伝播にかかる時間は、ネットワークの可用性に直結します。Fast Reroute (FRR) などの技術は、障害発生時の迂回経路を事前に計算しておくことで、収束時間の短縮を目指します。
メモリとCPUリソース: インターネットのフルルーティングテーブルは数十万エントリに達し、これらをRIB (Routing Information Base) やFIB (Forwarding Information Base) に保持するためには、大量のメモリが必要です。また、経路選択アルゴリズムやポリシーの適用はCPUを多用するため、高性能なハードウェアと効率的なソフトウェア実装が不可欠です。
まとめ
BGP経路選択アルゴリズムとパス属性は、インターネットの機能と安定性を支える基盤技術です。RFC 4271 [1] に定義された厳格なステップと、LOCAL_PREFやAS_PATHなどの多様なパス属性を組み合わせることで、ネットワーク事業者は複雑なルーティングポリシーを実装し、トラフィックフローを最適化することが可能です。
しかし、BGPは悪意のある攻撃に対する脆弱性も抱えており、RPKI [3] やTCP AO [4] などのセキュリティ対策は、経路ハイジャックやその他の脅威からインターネットを守るために不可欠です。BGPの実装には、Path MTU、HOL Blocking、リソース管理などの運用上の注意点も多く、これらを適切に考慮することで、高性能で安全なネットワークインフラを構築することができます。BGPは常に進化しており、最新のRFCやドラフト(例: 2024年4月1日の draft-ietf-idr-bgp-optimal-route-reflection-10 [5] など)を追うことは、次世代のインターネットルーティングを理解する上で重要です。
参照: [1] RFC 4271, A Border Gateway Protocol 4 (BGP-4), January 2006. URL: https://datatracker.ietf.org/doc/html/rfc4271 (IETF, 2006年1月) [2] RFC 4272, BGP Security Vulnerabilities Analysis, January 2006. URL: https://datatracker.ietf.org/doc/html/rfc4272 (IETF, 2006年1月) [3] RFC 6810, The Resource Public Key Infrastructure (RPKI) to BGP Route Origin Validation, January 2013. URL: https://datatracker.ietf.org/doc/html/rfc6810 (IETF, 2013年1月) [4] RFC 5925, The TCP Authentication Option (TCP AO), August 2010. URL: https://datatracker.ietf.org/doc/html/rfc5925 (IETF, 2010年8月) [5] draft-ietf-idr-bgp-optimal-route-reflection-10, BGP Optimal Route Reflection, April 2024. URL: https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-optimal-route-reflection-10 (IETF, 2024年4月1日)

