InfraLab

BGP 仕様書

76 / 76 items

InfraLab Reference Series

Category: BGP

Updated: 2026-05-12

infralab.jp

bgp

76 items

BGP 仕様書

Abstract

Border Gateway Protocol (RFC 4271) のメッセージ・ステート遷移・パス属性・Best Path 選択順・タイマー・AFI/SAFI・ループ防止・スケーリング (RR/Confed)・経路フィルタ・Cisco 設定例。

Table of Contents

  1. 1. 概要4
  2. 2. トランスポート4
  3. 3. メッセージ種別6
  4. 4. ステート遷移6
  5. 5. パス属性 (Path Attribute)9
  6. 6. Best Path 選択順10
  7. 7. タイマー5
  8. 8. AFI / SAFI7
  9. 9. ループ防止4
  10. 10. スケーリング機構4
  11. 11. 経路フィルタ5
  12. 12. Cisco IOS 設定例5
  13. 13. 確認・トラブルシュート7
  14. 14. References15

1. 概要

1.1. BGP とは

Border Gateway Protocol。AS (Autonomous System) 間の経路情報を交換する Path Vector 型ルーティングプロトコル。インターネットの背骨。

BGP-4 / Path Vector / AS 間ルーティング

1.2. RFC

BGP-4 の標準は RFC 4271。拡張機能多数 (Multiprotocol RFC 4760、Communities RFC 1997、4-byte AS RFC 6793 等)。

RFC 4271 (BGP-4) / RFC 4760 (MP-BGP)

1.3. eBGP

異なる AS のルータ間の BGP セッション。直接接続 (TTL=1) が原則、TTL Security 適用が一般的。

AS 間 / TTL=1 / 既定 AD 20 (Cisco)

1.4. iBGP

同一 AS 内の BGP セッション。フルメッシュ要件があり、スケール対策に Route Reflector / Confederation を使う。

同一 AS 内 / 任意の Loopback 同士 / 既定 AD 200

2. トランスポート

2.1. トランスポート

TCP/179 上で動作。信頼性確保のため UDP は使わない。

TCP/179

2.2. ピアリング

明示的に neighbor を設定。マルチキャスト/ブロードキャスト Discovery は使わない。

明示的 neighbor 構成 / Discovery なし

2.3. TTL Security

eBGP セッションを GTSM (RFC 5082) で保護。TTL を 255 で固定し低 TTL 攻撃を防ぐ。

ttl-security hops <N> / GTSM (RFC 5082)

2.4. MD5 認証

BGP セッションを MD5 で保護。両側で完全一致必須。

neighbor <ip> password <secret>

3. メッセージ種別

3.1. BGP メッセージヘッダ

BGP-4 の全 message に共通する 19B ヘッダ。KEEPALIVE はこのヘッダのみで payload を持たない。

RFC 4271 Message Header ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Length             |     Type      |  Message ...  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.2. OPEN

セッション開始時に送る。AS 番号、BGP バージョン、Hold Time、BGP ID、Capability を含む。

type=1 / AS・BGP ver・Hold・ID・Capability

RFC 4271 OPEN Message ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    Version    |             My AS             |   Hold Time   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Hold Time   |                BGP Identifier                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    BGP ID     | Opt Parm Len  |        Opt Params ...         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Optional Parameters ...                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.3. UPDATE

経路情報の追加/取消。Withdrawn Routes + Path Attributes + NLRI。

type=2 / Withdrawn + Attr + NLRI

RFC 4271 UPDATE Message ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Withdrawn Len         |       Withdrawn Routes        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     Withdrawn Routes ...                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Path Attr Len         |        Path Attributes        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  Path Attributes / NLRI ...                   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.4. NOTIFICATION

エラー通知。送出後にセッションを切断する。Error code/subcode を含む。

type=3 / Error code+subcode → close

RFC 4271 NOTIFICATION Message ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Error Code   | Error Subcode |           Data ...            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           Data ...                            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.5. KEEPALIVE

セッション維持。Hold Time 1/3 の間隔で送出するのが定石。

type=4 / 既定 60s

RFC 4271 KEEPALIVE Message (common header only) ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Marker                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Length             |     Type      |  Message ...  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.6. ROUTE-REFRESH

RFC 2918。ピアに UPDATE 再送を要求。route-map 変更後の soft reset で使用。

type=5 / RFC 2918 / soft reset

4. ステート遷移

4.1. Idle

初期状態。TCP 接続未開始。エラー後の rest state でもある。

初期 / TCP 未開始

4.2. Connect

TCP 接続を試みている状態。

TCP SYN 送信中

4.3. Active

受動的に TCP 接続を待つ状態。「Active」だが Idle より前進という意味で、トラブル時に貼りつくことが多い。

TCP 受け待ち / トラブル兆候

4.4. OpenSent

OPEN を送出してピアの OPEN を待つ状態。

自分の OPEN 送出済み

4.5. OpenConfirm

ピアの OPEN を受信し KEEPALIVE 待ち。

KEEPALIVE 待ち

4.6. Established

セッション確立。UPDATE をやり取りする正常状態。

正常 / UPDATE 交換中

5. パス属性 (Path Attribute)

5.1. ORIGIN

経路の発生元。IGP (i, 0) < EGP (e, 1) < Incomplete (?, 2) の順で優先される。

IGP (i) / EGP (e) / Incomplete (?)

5.2. AS_PATH

経由 AS のリスト。eBGP で AS 番号を prepend、iBGP では編集しない。ループ防止と経路長の指標。

AS sequence / 短いほど優先

5.3. NEXT_HOP

次ホップ IP。eBGP では送出ルータの IF アドレス、iBGP では変更しないため Loopback ピアリングと組み合わせて運用。

eBGP: 自分の IF / iBGP: 変更せず (要 next-hop-self)

5.4. LOCAL_PREF

iBGP 内でのみ伝搬。AS の出口を制御。既定 100、大きいほど優先。

AS 内 / 既定 100 / 大きい方が優先 / Well-known discretionary

5.5. MED (Multi-Exit Discriminator)

隣接 AS への入口を制御。小さいほど優先。既定 0、デフォルト動作は同一 AS 内のみ比較。

隣接 AS への入口 / 小さい方が優先 / 既定 0

5.6. WEIGHT (Cisco)

ルータローカル属性。ピアに伝搬しない。Cisco 独自。最大値が勝つ。既定 0 (学習路) / 32768 (ローカル発生)。

ローカル / Cisco 独自 / 大きい方が優先

5.7. COMMUNITY

32 ビットタグ。AS:nn 表記。経路のグルーピング・ポリシー適用に使う。RFC 1997。

32-bit / AS:nn / 標準: NO_EXPORT・NO_ADVERTISE・LOCAL_AS

5.8. ATOMIC_AGGREGATE / AGGREGATOR

経路集約時に付与。情報損失を示す。

集約時のマーカー / RFC 4271

5.9. ORIGINATOR_ID / CLUSTER_LIST

Route Reflector 環境でループ防止に使う属性。

RR ループ防止 (RFC 4456)

6. Best Path 選択順

6.1. 1. WEIGHT (Cisco)

最高 WEIGHT が勝つ。Cisco IOS の場合の最優先判定。

高い WEIGHT 優先

6.2. 2. LOCAL_PREF

高い LOCAL_PREF が勝つ。AS 内のポリシーで出口を選ぶ最重要属性。

高い LOCAL_PREF 優先

6.3. 3. Locally Originated

自ルータ origin (network / aggregate / redistribute) を優先。

ローカル発生路 > 学習路

6.4. 4. AS_PATH 長

短い AS_PATH が勝つ。

短い AS_PATH 優先

6.5. 5. ORIGIN

IGP (i) < EGP (e) < Incomplete (?) の順。

IGP > EGP > Incomplete

6.6. 6. MED

小さい MED が勝つ。既定では同一隣接 AS 内のみ比較。

小さい MED 優先

6.7. 7. eBGP > iBGP

eBGP 学習を iBGP より優先する。

eBGP > iBGP

6.8. 8. IGP メトリック (NEXT_HOP)

NEXT_HOP までの IGP コストが小さい方を選ぶ。

短い IGP コスト優先

6.9. 9. 最古ルート (oldest)

eBGP 同士で同点の場合、古いルートを安定優先 (実装オプション)。

より長く保持されたルート

6.10. 10. Router ID (低い方)

最終タイブレーク。Router ID (BGP ID) が小さい方が勝つ。

小さい Router ID 優先

7. タイマー

7.1. Hold Time

ピアからメッセージが届かなくなってからセッション断とみなすまでの時間。

既定 180s / OPEN でネゴ

7.2. Keepalive

KEEPALIVE 送出間隔。慣例的に Hold / 3。

既定 60s / Hold / 3

7.3. ConnectRetry

TCP 接続再試行の間隔。

既定 120s

7.4. MinRouteAdvertisement

同一プレフィックスの UPDATE 送出間隔を制限。フラッピング抑制。

eBGP: 30s / iBGP: 5s (Cisco 既定)

7.5. BFD 連携

BFD で 1 秒未満の障害検知を実現し、BGP に伝える。

BFD 検知 → BGP セッション Down 通知

8. AFI / SAFI

8.1. AFI 1 (IPv4)

Address Family Identifier。IPv4 ファミリー。

AFI=1 (IPv4)

8.2. AFI 2 (IPv6)

IPv6 ファミリー。

AFI=2 (IPv6)

8.3. SAFI 1 (Unicast)

通常のユニキャスト経路。

SAFI=1 (Unicast)

8.4. SAFI 2 (Multicast)

マルチキャスト RPF 用。

SAFI=2 (Multicast)

8.5. SAFI 4 (MPLS-Labeled)

MPLS L3VPN / 6PE で使う SAFI。

SAFI=4 (MPLS Label)

8.6. SAFI 128 (MPLS VPN)

L3VPN の VPNv4/VPNv6 で使う。

SAFI=128 (VPNv4・VPNv6)

8.7. AFI 25 / SAFI 70 (EVPN)

EVPN。データセンタ L2/L3 ファブリックで主流。

AFI=25 / SAFI=70 (EVPN)

9. ループ防止

9.1. AS_PATH ループ防止 (eBGP)

自 AS が AS_PATH に含まれる UPDATE は破棄。eBGP のループ防止根幹。

自 AS in AS_PATH → drop

9.2. Split Horizon (iBGP)

iBGP で学習した経路は他の iBGP ピアに広告しない。フルメッシュ要件の原因。

iBGP 学習 → iBGP 再広告なし

9.3. Route Reflector ループ防止

RR 環境では ORIGINATOR_ID / CLUSTER_LIST で経路ループを検出。

ORIGINATOR_ID 一致 / CLUSTER_LIST 重複 → drop

9.4. Confederation ループ防止

AS_CONFED_SEQUENCE で sub-AS 内のループを防止。

AS_CONFED_SEQUENCE

10. スケーリング機構

10.1. Route Reflector (RR)

iBGP フルメッシュ要件を緩和。RR が Reflect することで O(n) 接続で済む。

RFC 4456 / RR + Client / フルメッシュ不要

10.2. Confederation

AS を sub-AS に分割し、内部だけ eBGP 風に運用。外部からは単一 AS に見える。

RFC 5065 / sub-AS / 外向きは単一 AS

10.3. Peer Group / Update Group

同じポリシーのピアを束ねて UPDATE 生成を共有。処理負荷を削減。

policy 同じ peer をグループ化

10.4. Add-Path

RFC 7911。同一プレフィックスの複数経路を広告。MED 比較範囲拡大や高速収束で有効。

RFC 7911 / 同一 prefix の複数経路

11. 経路フィルタ

11.1. prefix-list

プレフィックス長と内容で許可/拒否。最も基本的な経路フィルタ。

ip prefix-list NAME permit 10.0.0.0/8 le 24

11.2. AS-Path access-list

AS_PATH を正規表現でマッチ。トランジットを避ける customer-only ポリシー等で使う。

ip as-path access-list 1 permit ^65000_

11.3. route-map

match/set 構文で属性を読み書きしながらフィルタ。BGP ポリシーの中核。

route-map IN permit 10
 match ip address prefix-list X
 set local-preference 200

11.4. Maximum Prefix

ピアから受け取る経路数の上限。フルルート漏れ事故を防ぐ。

neighbor X maximum-prefix 100000 warning-only?

11.5. Soft Reconfiguration / Refresh

ポリシー変更を反映するための再送要求。

clear ip bgp <peer> soft in/out / refresh

12. Cisco IOS 設定例

12.1. 基本設定 (eBGP)

AS 番号を指定し、eBGP ピアを設定する最小構成。

router bgp 65001
 neighbor 203.0.113.1 remote-as 65002
 network 10.0.0.0 mask 255.255.0.0

12.2. iBGP + Loopback ピアリング

Loopback でピアリングする定型。update-source を忘れない。

neighbor 10.0.0.2 remote-as 65001
 neighbor 10.0.0.2 update-source Loopback0
 neighbor 10.0.0.2 next-hop-self

12.3. BFD 連携

BFD で素早い障害検知。BGP セッションを fast-down。

neighbor X fall-over bfd
interface Gi0/0
 bfd interval 50 min_rx 50 multiplier 3

12.4. Maximum Prefix

ピアからの経路数上限。事故防止に必須。

neighbor X maximum-prefix 1000 80 restart 5

12.5. 経路集約

より具体的な経路を集約してテーブル膨張を防ぐ。

aggregate-address 10.0.0.0 255.0.0.0 summary-only

13. 確認・トラブルシュート

13.1. サマリ確認

セッション状態・受信経路数の概観。

show ip bgp summary / show bgp ipv4 unicast summary

13.2. ネイバ詳細

ピアのケーパビリティ・Up Time・送受信統計を確認。

show ip bgp neighbors <ip>

13.3. 受信経路一覧

あるピアから学んだ経路、フィルタ前/後を確認。

show ip bgp neighbors <ip> received-routes / routes

13.4. 経路詳細

プレフィックスの属性・ベストパス選択理由を表示。

show ip bgp 10.0.0.0/24

13.5. Idle (Admin) / Active 貼り付き

Active で止まる場合は TCP 接続失敗。MD5 不一致 / ACL / IF down を疑う。

症状: Active 貼り付き / 原因: TCP・MD5・ACL

13.6. Clear / Soft Reset

ポリシー変更後の反映。原則 soft で十分。

clear ip bgp <peer> soft in/out

13.7. debug

本番環境では負荷に注意。peer ごとに絞り、event/in/out を選んで使う。

debug ip bgp <peer> events / updates in

14. References

  1. BGP
  2. BGP-4
  3. RFC 4271
  4. eBGP
  5. iBGP
  6. AS_PATH
  7. LOCAL_PREF
  8. MED
  9. Route Reflector
  10. Confederation
  11. MP-BGP
  12. AFI
  13. SAFI
  14. EVPN
  15. Best Path
Related