パス属性とは
パス属性は、BGPが経路とセットで運ぶ付加情報です。UPDATEのPath Attributesフィールドに入り、そのUPDATEが運ぶすべてのNLRIに共通して適用されます(BGPメッセージ)。
通過したAS(AS_PATH)、次の転送先(NEXT_HOP)、優先度(LOCAL_PREF、MED)などがここに入り、BGPはメトリックではなくこの属性の集合で経路を評価します。1つの属性はフラグ・種別・長さ・値で構成されます。
属性の4分類
Attribute Flagsの上位2ビット(Optional・Transitive)で4つに分類されます(RFC 4271 5)。「実装が必ず対応するか」と「知らない属性を転送してよいか」が決まります。
| 分類 | Optional | Transitive | 意味 |
|---|---|---|---|
| Well-known mandatory | 0 | 1 | すべての実装が対応必須。UPDATEに必ず含めなければならない。 |
| Well-known discretionary | 0 | 1 | すべての実装が対応必須だが、UPDATEに含めるかは任意。 |
| Optional transitive | 1 | 1 | 対応は任意。知らない属性でもPartialビットを立てて隣へ転送する。 |
| Optional non-transitive | 1 | 0 | 対応は任意。知らない属性は破棄し、隣へ転送しない。 |
well-known属性はTransitiveビットが常に1です。Partialビットはoptional transitive属性だけで使われ、属性を理解できないルータが転送するときに1を立てます。
RFC 4271がwell-known discretionaryと明記しているのはATOMIC_AGGREGATEだけです(5.1.6)。LOCAL_PREFもwell-known属性ですが、5節の属性一覧表ではiBGPへはrequired(必須)とされています。詳しくはLOCAL_PREFで解説しています。
パス属性の一覧
主なパス属性です(番号はIANAのBGP Parameters)。
| Type code | 属性 | 分類 | 概要 |
|---|---|---|---|
| 1 | ORIGIN | Well-known mandatory | 経路がBGPに入った経緯(IGP / EGP / Incomplete)。ORIGINで解説しています。 |
| 2 | AS_PATH | Well-known mandatory | 経路が通過したAS番号の並び。ループ検出と経路長の比較に使う。AS_PATHで解説しています。 |
| 3 | NEXT_HOP | Well-known mandatory | 経路の次ホップIPアドレス。NEXT_HOPおよびnext-hop-selfを参照してください。 |
| 4 | MULTI_EXIT_DISC(MED) | Optional non-transitive | 隣接ASに対して、自AS内のどの入口を使ってほしいかを示す。MEDを参照してください。 |
| 5 | LOCAL_PREF | Well-known(iBGPピアへは必ず含め、eBGPピアへは送らない) | AS内でどの出口を優先するかを示す。LOCAL_PREFを参照してください。 |
| 6 | ATOMIC_AGGREGATE | Well-known discretionary | より詳細な経路を含む集約経路であることを示す。BGP経路集約(aggregate-address)で解説しています。 |
| 7 | AGGREGATOR | Optional transitive | 経路を集約したルータのAS番号とRouter ID。BGP経路集約(aggregate-address)で解説しています。 |
| 8 | COMMUNITY | Optional transitive | 経路にタグを付け、ポリシーの適用対象をまとめて指定する。COMMUNITYを参照してください。 |
| 9 | ORIGINATOR_ID | Optional non-transitive | ルートリフレクタが反射する際に付ける、経路をAS内に持ち込んだルータのRouter ID。ルートリフレクタで解説しています。 |
| 10 | CLUSTER_LIST | Optional non-transitive | 経路が通過したクラスタIDのリスト。ルートリフレクタで解説しています。 |
| 14 | MP_REACH_NLRI | Optional non-transitive | IPv4ユニキャスト以外のアドレスファミリーの経路を運ぶ(RFC 4760)。 |
| 15 | MP_UNREACH_NLRI | Optional non-transitive | 同じくマルチプロトコル拡張での経路の取り消し。 |
| 16 | EXTENDED COMMUNITIES | Optional transitive | 8バイトに拡張されたコミュニティ(RFC 4360)。 |
| 17 | AS4_PATH | Optional transitive | 4バイトAS番号に非対応のルータを経由する際にAS_PATHを補完する(RFC 6793)。 |
| 18 | AS4_AGGREGATOR | Optional transitive | 同じくAGGREGATORを補完する。 |
| 32 | LARGE_COMMUNITY | Optional transitive | 12バイトのコミュニティ(RFC 8092)。 |
MP_REACH_NLRI属性に入れて広告します(BGPメッセージ)。壊れた属性の扱い(RFC 7606)
RFC 4271は、必須属性が無い・長さが合わないといったUPDATEを受け取ったらNOTIFICATIONを送ってセッションを落とす、と定めていました。 1つの経路の誤りで全経路が落ちるため、RFC 7606がこれを改め、属性ごとに次の扱いを割り当てています。
| 扱い | 内容 |
|---|---|
| Attribute discard | その属性だけを捨てて経路は残す(COMMUNITYなどのoptional属性) |
| Treat-as-withdraw | そのUPDATEが運ぶNLRIを取り消しとして扱う(AS_PATH・NEXT_HOP・LOCAL_PREFなど) |
| Session reset | セッションを落とす(属性の長さの整合が取れず、UPDATEの境界が分からない場合) |
WEIGHTはパス属性ではない
CiscoルータのWEIGHTはベストパス選択で最初に評価されますが、Cisco独自のローカル値でUPDATEには載りません。
| 項目 | LOCAL_PREF | WEIGHT |
|---|---|---|
| パス属性か | はい(Type code 5) | いいえ(Cisco独自のローカル値) |
| 伝わる範囲 | iBGPピア全体(AS内) | 設定したルータのみ |
| 既定値 | 100 | 0(自身が生成した経路は32768) |
| 大小 | 大きいほど優先 | 大きいほど優先 |
ベストパス選択の順序
同じプレフィックスに複数の経路があるとき、BGPは1つだけをベストパスに選び、ルーティングテーブルへ入れてピアへ広告します。
NEXT_HOPに到達できない経路は候補から外れます(next-hop-self)。残った経路を次の順に比較し、決着した時点で終えます。
| 順序 | 比較項目 | 優先 | 根拠 |
|---|---|---|---|
| 1 | WEIGHT | 大きいほう | Cisco独自 |
| 2 | LOCAL_PREF | 大きいほう | RFC 4271 9.1.1(degree of preference) |
| 3 | 自身が生成した経路 | network / redistribute / 集約で生成したもの | Cisco独自 |
| 4 | AS_PATHの長さ | 短いほう | RFC 4271 9.1.2.2 a |
| 5 | ORIGIN | IGP < EGP < Incomplete | RFC 4271 9.1.2.2 b |
| 6 | MULTI_EXIT_DISC | 小さいほう(同じ隣接ASから学習した経路同士のみ比較) | RFC 4271 9.1.2.2 c |
| 7 | eBGPとiBGP | eBGPで学習した経路 | RFC 4271 9.1.2.2 d |
| 8 | NEXT_HOPまでのIGPメトリック | 小さいほう | RFC 4271 9.1.2.2 e |
| — | マルチパスの判定 | 条件を満たす経路を複数インストールする | Cisco独自(マルチパス) |
| 9 | 既存のベストパスの維持 | eBGP経路同士で8まで同点なら、すでに選ばれているベストパスを維持する(bgp bestpath compare-routeridで無効化) | Cisco独自 |
| 10 | BGP Router ID | 小さいほう(ORIGINATOR_IDがあればその値) | RFC 4271 9.1.2.2 f、RFC 4456 9 |
| 11 | CLUSTER_LISTの長さ | 短いほう | RFC 4456 9 |
| 12 | ネイバーのIPアドレス | 小さいほう | RFC 4271 9.1.2.2 g |
WEIGHT・自身が生成した経路・既存のベストパスの維持はCisco独自で、RFCには規定がありません。順序はIOS XEも同じで、差が出るのは比較の挙動を変えるコマンド名です。
| 挙動 | IOS XR | IOS XE |
|---|---|---|
| 異なる隣接ASの経路同士でもMEDを比較する | bgp bestpath med always | bgp always-compare-med |
AS_PATH長を比較しない | bgp bestpath as-path ignore | bgp bestpath as-path ignore |
| 同点時にRouter IDまで必ず比較する | bgp bestpath compare-routerid | bgp bestpath compare-routerid |
実機での検証
XRd 26.1.1を7台使い、同じプレフィックスが2経路で届くR1を観測点にします。
| ルータ | AS | 役割 |
|---|---|---|
| R1 | 65001 | 観測点。R2・R3の両方とiBGP(R2 - R3間は張らない) |
| R2 | 65001 | 境界。AS 65002のR4・R5と2本のeBGP |
| R3 | 65001 | 境界。AS 65004のR6とeBGP |
| R4 | 65002 | 192.168.100.0/24をredistribute staticで生成(ORIGINは?) |
| R5 | 65002 | 同じ192.168.100.0/24をnetworkで生成(ORIGINはi)。実体はLoopback100 |
| R6 | 65004 | トランジット。R5から受けてR3へ渡す(R1から見たAS_PATHが1つ長い) |
| R7 | 65003 | COMMUNITYがASを2つ越えることの確認用 |
AS 65001内はOSPFエリア0で、iBGPはLoopback0どうしです。R2・R3のeBGP側リンクはOSPFのpassiveインタフェースとして広告しています。
R1には192.168.100.0/24が2経路届きます。R2経由(AS_PATH 65002)とR3経由(AS_PATH 65004 65002)です。
day-0で上位の判定条件を入れておき、STEPごとに下位と同じ値に揃えて、決め手が1つずつ下へ移る様子を追います。
WEIGHTがno weightでもソフトリフレッシュでもハードクリアでも消えなかったためです。値を足す方向の変更は即座に反映されます。| STEP | 操作 | R1(またはR2)での決め手 |
|---|---|---|
| 0 | なし(初期状態) | (1) WEIGHT(R2経由だけ100) |
| 1 | R1のR3ネイバーにもweight 100 | (2) LOCAL_PREF(R3経由が200) |
| 2 | R1のFROM-R2にもset local-preference 200 | (4) AS_PATHの長さ(R2経由が短い) |
| 3 | R1にbgp bestpath as-path ignore | (5) ORIGIN(R3経由がIGP、R2経由がIncomplete) |
| 4 | R4の生成をnetworkに変えてORIGINを揃える | (8) IGPメトリック(R1ではMEDは比較されない) |
| 5 | R1 - R2のOSPFコストも100にして揃える | (10) BGP Router ID |
| 6 | R2のR5ネイバーにもweight 100 | (R2側)(6) MED |
| 7 | R5のTO-R2のMEDも100にして揃える | (R2側)(9) / (10) の段へ |
| 8 | R2でclear bgp ipv4 unicast 10.2.4.4 | 構文が通らず実行されなかった |
| 9 | R2にbgp bestpath compare-routerid | 変化なし |
| 10 | R4にsend-community-ebgp(R7向け) | COMMUNITYがASを2つ越える |
| 11 | R2のsend-community-ebgpを外す(最終状態) | 送信制御と推移性は別物 |
各STEPでR1から192.168.100.1(R5のLoopback100)へping 50発とtracerouteを取り、転送がベストパスに追従していることも確認しています。
UPDATEで4分類を確認する
R1 - R2間(iBGP)とR2 - R4間(eBGP)で、同じ192.168.100.0/24のUPDATEを比べます。STEP 4でR4が生成方法を変えたときに流れたものです。
Border Gateway Protocol - UPDATE Message
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
Next hop: 10.2.4.4
<snip>
192.168.100.0/24
<snip>
Path Attribute - ORIGIN: IGP
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Origin: IGP (0)
Path Attribute - AS_PATH: 65002
Flags: 0x40, Transitive, Well-known, Complete
<snip>
AS4: 65002
Path Attribute - MULTI_EXIT_DISC: 100
Flags: 0x80, Optional, Non-transitive, Complete
<snip>
Multiple exit discriminator: 100
Path Attribute - LOCAL_PREF: 100
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Local preference: 100Border Gateway Protocol - UPDATE Message
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
Next hop: 10.2.4.4
<snip>
192.168.100.0/24
<snip>
Path Attribute - ORIGIN: IGP
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Origin: IGP (0)
Path Attribute - AS_PATH: 65002
Flags: 0x40, Transitive, Well-known, Complete
<snip>
AS4: 65002
Path Attribute - MULTI_EXIT_DISC: 100
Flags: 0x80, Optional, Non-transitive, Complete
<snip>
Multiple exit discriminator: 100 上のtshark出力のパケット(STEP 4 iBGPのUPDATE)のpcapをダウンロード
上のtshark出力のパケット(STEP 4 eBGPのUPDATE)のpcapをダウンロード
well-known属性は0x40、optional non-transitiveは0x80です。LOCAL_PREF(well-known。iBGPへは必ず含め、eBGPへは送らない)はiBGP側にだけ入り、eBGP側には入っていません。
optional transitive(0xc0)はCOMMUNITYで確認できます。R4がAS 65003のR7へ広告したUPDATEです(STEP 10)。
Border Gateway Protocol - UPDATE Message
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
Next hop: 10.4.7.4
<snip>
Path Attribute - ORIGIN: IGP
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Origin: IGP (0)
Path Attribute - AS_PATH: 65002 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
AS4: 65002
AS4: 65001
Path Attribute - COMMUNITIES: 65001:100
Flags: 0xc0, Optional, Transitive, Complete
<snip>
Communities: 65001:100 | 分類 | フラグ | この検証で観測した属性 |
|---|---|---|
| Well-known mandatory | 0x40 | ORIGIN、AS_PATH |
| Well-known(iBGPへは必須) | 0x40 | LOCAL_PREF(iBGPのみ) |
| Optional transitive | 0xc0 | COMMUNITIES |
| Optional non-transitive | 0x80 | MULTI_EXIT_DISC、MP_REACH_NLRI |
MP_REACH_NLRIの0x90は0x80に0x10(Extended Length、長さフィールドが2バイト)が加わったものです。ORIGINATOR_IDとCLUSTER_LIST(どちらもoptional non-transitive)はルートリフレクタが付ける属性で、この検証にはRRがないため観測していません(ルートリフレクタのキャプチャーで確認できます)。決め手が1段ずつ下へ移る
R1のshow bgp 192.168.100.0/24です。(received-only)の行はsoft-reconfiguration inbound alwaysが保持している入方向ポリシー適用前のコピーです。
RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:10:27.708 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 34 34
Last Modified: Sep 23 12:00:35.023 for 00:09:52
Paths: (3 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 100, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 34
Path #2: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:17:25.011 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 39 39
Last Modified: Sep 23 12:15:13.023 for 00:02:12
Paths: (3 available, best #2)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 100, weight 100, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #2: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 39
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:24:25.916 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 45 45
Last Modified: Sep 23 12:22:13.023 for 00:02:13
Paths: (4 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 200, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 45
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received-only)
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 100, weight 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, weight 100, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #4: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:31:27.860 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 47 47
Last Modified: Sep 23 12:29:15.023 for 00:02:12
Paths: (4 available, best #3)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 200, weight 100, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received-only)
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin incomplete, metric 100, localpref 100, weight 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 47
Path #4: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:38:29.238 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 48 48
Last Modified: Sep 23 12:36:36.023 for 00:01:53
Paths: (4 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin IGP, metric 100, localpref 200, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 48
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received-only)
10.2.4.4 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin IGP, metric 100, localpref 100, weight 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, weight 100, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #4: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0RP/0/RP0/CPU0:R1#show bgp 192.168.100.0/24
Wed Sep 23 12:45:27.510 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 48 48
Last Modified: Sep 23 12:36:36.023 for 00:08:51
Paths: (4 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002
10.2.4.4 (metric 101) from 10.0.0.2 (10.0.0.2)
Origin IGP, metric 100, localpref 200, weight 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 48
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received-only)
10.2.4.4 (metric 101) from 10.0.0.2 (10.0.0.2)
Origin IGP, metric 100, localpref 100, weight 100, valid, internal
Received Path ID 0, Local Path ID 0, version 0
Path #3: Received by speaker 0
Not advertised to any peer
65004 65002
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 200, weight 100, valid, internal, group-best
Received Path ID 0, Local Path ID 0, version 0
Path #4: Received by speaker 0
Not advertised to any peer
65004 65002, (received-only)
10.3.6.6 (metric 101) from 10.0.0.3 (10.0.0.3)
Origin IGP, localpref 100, valid, internal
Received Path ID 0, Local Path ID 0, version 01段ずつ見ていきます。
| STEP | 2経路の違い | best | なぜそこで決まったか |
|---|---|---|---|
| 0 | R2経由だけweight 100 | R2経由 | WEIGHTが最初に比較され、LOCAL_PREF(R3経由が200)は見られない |
| 1 | 両方weight 100、R3経由がlocalpref 200 | R3経由 | WEIGHTが同値になったのでLOCAL_PREFで決まる |
| 2 | 両方localpref 200 | R2経由 | AS_PATHが65002(1個)と65004 65002(2個) |
| 3 | as-path ignoreで長さを比較しない | R3経由 | ORIGINがIGP(R5がnetworkで生成)とIncomplete(R4がredistribute staticで生成) |
| 4 | R4もnetworkに変えてORIGINを揃える | R2経由 | R1ではMEDは比較されない(隣接ASがR2経由は65002、R3経由は65004で異なる)。次のIGPメトリックが(metric 2)と(metric 101) |
| 5 | R1 - R2のコストも100にして(metric 101)で揃える | R2経由 | Router IDが10.0.0.2 < 10.0.0.3 |
転送もベストパスに追従しています。STEP 0はR2から、STEP 1はR3から出ていきます。
RP/0/RP0/CPU0:R1#ping 192.168.100.1 source 192.168.1.1 count 50 timeout 1
Wed Sep 23 12:10:17.621 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.100.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 8/14/75 ms
RP/0/RP0/CPU0:R1#traceroute 192.168.100.1 source 192.168.1.1 probe 3 timeout 1 maxttl 6
Wed Sep 23 12:10:19.958 UTC
Type escape sequence to abort.
Tracing the route to 192.168.100.1
1 10.1.2.2 7 msec 5 msec 5 msec
2 10.2.4.4 24 msec 10 msec 9 msec
3 10.4.5.5 11 msec * 11 msec RP/0/RP0/CPU0:R1#ping 192.168.100.1 source 192.168.1.1 count 50 timeout 1
Wed Sep 23 12:17:14.977 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.100.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 7/10/23 ms
RP/0/RP0/CPU0:R1#traceroute 192.168.100.1 source 192.168.1.1 probe 3 timeout 1 maxttl 6
Wed Sep 23 12:17:16.475 UTC
Type escape sequence to abort.
Tracing the route to 192.168.100.1
1 10.1.3.3 10 msec 4 msec 4 msec
2 10.3.6.6 11 msec 47 msec 8 msec
3 10.5.6.5 12 msec * 18 msec 同じ隣接ASから2経路を受けるR2ではMEDが効く
R2はAS 65002のR4・R5から同じプレフィックスを受け取ります。隣接ASが同じなのでMEDが比較されます。
RP/0/RP0/CPU0:R2#show bgp 192.168.100.0/24
Wed Sep 23 12:11:09.060 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 7 7
Last Modified: Sep 23 11:33:33.023 for 00:37:36
Paths: (2 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
65002, (received & used)
10.2.4.4 from 10.2.4.4 (10.0.0.4)
Origin incomplete, metric 100, localpref 100, weight 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 7
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, metric 200, localpref 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)RP/0/RP0/CPU0:R2#show bgp 192.168.100.0/24
Wed Sep 23 12:53:08.026 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 16 16
Last Modified: Sep 23 12:50:16.023 for 00:02:52
Paths: (3 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
65002, (received & used)
10.2.4.4 from 10.2.4.4 (10.0.0.4)
Origin IGP, metric 100, localpref 100, weight 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 12
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65002
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, metric 200, localpref 100, weight 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)
Path #3: Received by speaker 0
Not advertised to any peer
65002, (received-only)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, metric 200, localpref 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)RP/0/RP0/CPU0:R2#show bgp 192.168.100.0/24
Wed Sep 23 13:00:01.970 UTC
BGP routing table entry for 192.168.100.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 16 16
Last Modified: Sep 23 12:50:16.023 for 00:09:46
Paths: (2 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
65002, (received & used)
10.2.4.4 from 10.2.4.4 (10.0.0.4)
Origin IGP, metric 100, localpref 100, weight 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 12
Origin-AS validity: (disabled)
Path #2: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.2.5.5 from 10.2.5.5 (10.0.0.5)
Origin IGP, metric 100, localpref 100, weight 100, valid, external
Received Path ID 0, Local Path ID 0, version 0
Origin-AS validity: (disabled)STEP 0はR4向けのweight 100で決まっており、MED(100と200)は見られていません。STEP 6でWEIGHTを揃えるとMEDが決め手になり、STEP 7でMEDも揃えると残るのは(9)以降です。
(9) 既存のベストパスの維持、(11) CLUSTER_LISTの長さ、(12) ネイバーのIPアドレスは、この検証では観測していません。
(9)を見るためにSTEP 8でR2のセッションを落とそうとしましたが、clear bgp ipv4 unicast 10.2.4.4はIOS XR 26.1.1で% Incomplete command.となり実行されませんでした。
仮に落とせても、この構成ではR4のRouter ID(10.0.0.4)がR5(10.0.0.5)より小さく、(9)と(10)のどちらで決まったかを区別できません。
(9)の実機での確認はBGP AS_PATH属性にあります(AS_PATHを伸ばして選び直させた後、元に戻してもベストパスが戻らないことをSTEPごとに追っています)。
COMMUNITYはASを2つ越える
COMMUNITYはoptional transitiveなので、対応するルータはASをまたいでも転送します。付けているのはAS 65001のR2だけです。
RP/0/RP0/CPU0:R7#show bgp 192.168.2.0/24
Wed Sep 23 13:17:17.693 UTC
BGP routing table entry for 192.168.2.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 6 6
Last Modified: Sep 23 11:33:33.023 for 01:43:44
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002 65001, (received & used)
10.4.7.4 from 10.4.7.4 (10.0.0.4)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 6
Origin-AS validity: (disabled)RP/0/RP0/CPU0:R7#show bgp 192.168.2.0/24
Wed Sep 23 13:24:19.299 UTC
BGP routing table entry for 192.168.2.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 10 10
Last Modified: Sep 23 13:17:56.023 for 00:06:23
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002 65001, (received & used)
10.4.7.4 from 10.4.7.4 (10.0.0.4)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 10
Community: 65001:100
Origin-AS validity: (disabled)RP/0/RP0/CPU0:R7#show bgp 192.168.2.0/24
Wed Sep 23 13:31:14.786 UTC
BGP routing table entry for 192.168.2.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 13 13
Last Modified: Sep 23 13:24:56.023 for 00:06:18
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002 65001, (received & used)
10.4.7.4 from 10.4.7.4 (10.0.0.4)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 13
Origin-AS validity: (disabled)STEP 9まで届かないのは、R4がR7向けにsend-community-ebgpを持たないためです。STEP 10で入れるとR7まで届き、STEP 11でR2が送信をやめると消えます。
属性が推移的であることと、実装がそれを送信するかどうかは別です。IOS XR / IOS XEはeBGPピアへのCOMMUNITY送信を既定で抑止しています(IOS XRはsend-community-ebgp、IOS XEはsend-community)。
検証Configおよびshow結果
各STEPで7台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 11のもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show bgp / show bgp summary / show route bgp / show bgp 192.168.100.0/24・192.168.1.0/24・192.168.2.0/24 / show bgp neighbors / ピアごとのadvertised-routes・routes・received routes / show bgp update-group / show bgp process / show rpl route-policy。R1〜R3はshow ospf neighbor / show route ospf、R1はshow route 192.168.100.0/24 / show cef 192.168.100.0/24も含む |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
..._ping.txt | R1から192.168.100.1へのping 50発とtraceroute、R7から192.168.1.1へのping |
..._trace.txt | show bgp trace neighborとshow bgp trace error |
..._commit.cfg | そのSTEPで実際にコミットされた設定(設定を変えたルータのみ) |
..._exec.txt | そのSTEPで実行したclearコマンドと時刻(STEP 8のR2) |
STEP 0:なし(初期状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 1:R1のR3ネイバーにもweight 100
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | commit |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 2:R1のFROM-R2にもset local-preference 200
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | commit |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 3:R1にbgp bestpath as-path ignore
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | commit |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 4:R4の生成をnetworkに変えてORIGINを揃える
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | commit |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 5:R1 - R2のOSPFコストも100にして揃える
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | commit |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 6:R2のR5ネイバーにもweight 100
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 7:R5のTO-R2のMEDも100にして揃える
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | commit |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 8:R2でclear bgp ipv4 unicast 10.2.4.4
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | exec |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 9:R2にbgp bestpath compare-routerid
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 10:R4にsend-community-ebgp(R7向け)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | commit |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
STEP 11:R2のsend-community-ebgpを外す(最終状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | — | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | — | trace | — |
| R5 | show | log | run | — | trace | — |
| R6 | show | log | run | — | trace | — |
| R7 | show | log | run | ping | trace | — |
パケットキャプチャーはSTEPごとに取得しています。
| STEP | R1 - R2間(iBGP) | R2 - R4間(eBGP) | R4 - R7間(eBGP) |
|---|---|---|---|
| 0 | pcap | pcap | pcap |
| 1 | pcap | pcap | pcap |
| 2 | pcap | pcap | pcap |
| 3 | pcap | pcap | pcap |
| 4 | pcap | pcap | pcap |
| 5 | pcap | pcap | pcap |
| 6 | pcap | pcap | pcap |
| 7 | pcap | pcap | pcap |
| 8 | pcap | pcap | pcap |
| 9 | pcap | pcap | pcap |
| 10 | pcap | pcap | pcap |
| 11 | pcap | pcap | pcap |
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | パス属性の4分類(5)、LOCAL_PREFによるdegree of preference(9.1.1)、タイブレークの手順(9.1.2.2)を定義。 |
| RFC 7606 | Revised Error Handling for BGP UPDATE Messages | 壊れた属性の扱いを属性ごとに定義(attribute discard / treat-as-withdraw / session reset)。 |
| RFC 1997 | BGP Communities Attribute | COMMUNITY属性を定義。 |
| RFC 4360 | BGP Extended Communities Attribute | EXTENDED COMMUNITIES属性を定義。 |
| RFC 4456 | BGP Route Reflection | ORIGINATOR_IDとCLUSTER_LISTを定義し、経路選択への影響(9)も規定。 |
| RFC 4760 | Multiprotocol Extensions for BGP-4 | MP_REACH_NLRIとMP_UNREACH_NLRIを定義。 |
| RFC 6793 | BGP Support for Four-Octet AS Number Space | AS4_PATHとAS4_AGGREGATORを定義。 |
| RFC 8092 | BGP Large Communities Attribute | LARGE_COMMUNITY属性を定義。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeなど、BGPで使われる番号の割り当て一覧。 |
関連記事
- BGP(Border Gateway Protocol)
- BGPメッセージ
- BGPネイバーの状態遷移
- iBGPとeBGPの違い
- BGP next-hop-self
- BGPルートリフレクタ
- BGPパス属性とベストパス選択
- BGP ORIGIN属性
- BGP AS_PATH属性
- BGP NEXT_HOP属性
- BGP LOCAL_PREF属性
- BGP MED属性
- BGP WEIGHT属性
- BGP COMMUNITY属性
- BGP経路集約(aggregate-address)
- MP-BGP(マルチプロトコル拡張)
- BGP Extended Community(拡張コミュニティ)
- BGPマルチパス(maximum-paths)
- BGPの4バイトAS番号(RFC 6793)
- BGPのプライベートAS番号の除去(remove-private-AS)
- BGPのADD-PATH(RFC 7911)
- BGP PIC(Prefix Independent Convergence)
- BGP Best External(ベストでない外部経路の広告)