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.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 2002. トランスポート
2.1. トランスポート
TCP/179 上で動作。信頼性確保のため UDP は使わない。
TCP/1792.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 reset4. ステート遷移
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 discretionary5.5. MED (Multi-Exit Discriminator)
隣接 AS への入口を制御。小さいほど優先。既定 0、デフォルト動作は同一 AS 内のみ比較。
隣接 AS への入口 / 小さい方が優先 / 既定 05.6. WEIGHT (Cisco)
ルータローカル属性。ピアに伝搬しない。Cisco 独自。最大値が勝つ。既定 0 (学習路) / 32768 (ローカル発生)。
ローカル / Cisco 独自 / 大きい方が優先5.7. COMMUNITY
32 ビットタグ。AS:nn 表記。経路のグルーピング・ポリシー適用に使う。RFC 1997。
32-bit / AS:nn / 標準: NO_EXPORT・NO_ADVERTISE・LOCAL_AS5.8. ATOMIC_AGGREGATE / AGGREGATOR
経路集約時に付与。情報損失を示す。
集約時のマーカー / RFC 42715.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 > Incomplete6.6. 6. MED
小さい MED が勝つ。既定では同一隣接 AS 内のみ比較。
小さい MED 優先6.7. 7. eBGP > iBGP
eBGP 学習を iBGP より優先する。
eBGP > iBGP6.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 / 37.3. ConnectRetry
TCP 接続再試行の間隔。
既定 120s7.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 → drop9.2. Split Horizon (iBGP)
iBGP で学習した経路は他の iBGP ピアに広告しない。フルメッシュ要件の原因。
iBGP 学習 → iBGP 再広告なし9.3. Route Reflector ループ防止
RR 環境では ORIGINATOR_ID / CLUSTER_LIST で経路ループを検出。
ORIGINATOR_ID 一致 / CLUSTER_LIST 重複 → drop9.4. Confederation ループ防止
AS_CONFED_SEQUENCE で sub-AS 内のループを防止。
AS_CONFED_SEQUENCE10. スケーリング機構
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 / 外向きは単一 AS10.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 2411.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 20011.4. Maximum Prefix
ピアから受け取る経路数の上限。フルルート漏れ事故を防ぐ。
neighbor X maximum-prefix 100000 warning-only?11.5. Soft Reconfiguration / Refresh
ポリシー変更を反映するための再送要求。
clear ip bgp <peer> soft in/out / refresh12. 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.012.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-self12.3. BFD 連携
BFD で素早い障害検知。BGP セッションを fast-down。
neighbor X fall-over bfd
interface Gi0/0
bfd interval 50 min_rx 50 multiplier 312.4. Maximum Prefix
ピアからの経路数上限。事故防止に必須。
neighbor X maximum-prefix 1000 80 restart 512.5. 経路集約
より具体的な経路を集約してテーブル膨張を防ぐ。
aggregate-address 10.0.0.0 255.0.0.0 summary-only13. 確認・トラブルシュート
13.1. サマリ確認
セッション状態・受信経路数の概観。
show ip bgp summary / show bgp ipv4 unicast summary13.2. ネイバ詳細
ピアのケーパビリティ・Up Time・送受信統計を確認。
show ip bgp neighbors <ip>13.3. 受信経路一覧
あるピアから学んだ経路、フィルタ前/後を確認。
show ip bgp neighbors <ip> received-routes / routes13.4. 経路詳細
プレフィックスの属性・ベストパス選択理由を表示。
show ip bgp 10.0.0.0/2413.5. Idle (Admin) / Active 貼り付き
Active で止まる場合は TCP 接続失敗。MD5 不一致 / ACL / IF down を疑う。
症状: Active 貼り付き / 原因: TCP・MD5・ACL13.6. Clear / Soft Reset
ポリシー変更後の反映。原則 soft で十分。
clear ip bgp <peer> soft in/out13.7. debug
本番環境では負荷に注意。peer ごとに絞り、event/in/out を選んで使う。
debug ip bgp <peer> events / updates in14. References
- BGP
- BGP-4
- RFC 4271
- eBGP
- iBGP
- AS_PATH
- LOCAL_PREF
- MED
- Route Reflector
- Confederation
- MP-BGP
- AFI
- SAFI
- EVPN
- Best Path