↓ メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. BGP記事一覧/

BGPメッセージ

目次

BGPメッセージとは

BGPのピア同士は、TCPポート179のセッション上でメッセージをやり取りします。すべてのメッセージは共通の19バイトヘッダーで始まり、Typeで種類を識別します。RFC 4271の4種類に、拡張のROUTE-REFRESH(RFC 2918)が加わります。この記事では各メッセージの構造を解説し、IOS XR(XRd)で取得したキャプチャーで中身を確認します(BGPの基本はBGP(Border Gateway Protocol))。

Typeメッセージ役割
1OPENセッション確立後に最初に送り、AS番号やHold Time、対応する機能(Capability)を伝える。
2UPDATE経路の広告と取り消し(Withdraw)を行う。
3NOTIFICATIONエラーを通知し、セッションを切断する。
4KEEPALIVEセッションを維持するために定期的に送る。
5ROUTE-REFRESHセッションを切らずに、経路の再送をピアへ要求する(RFC 2918)。

共通ヘッダー

フィールドサイズ説明
Marker16バイトすべてのビットを1にする。RFC 4271では互換性のために置かれているフィールドで、受信側は値が期待どおりでなければ同期の失敗とみなし、Message Header Error(Error code 1)のConnection Not Synchronized(サブコード1)を返す。
Length2バイトヘッダーを含むメッセージ全体の長さ(バイト)。最小は19(KEEPALIVE)、最大は4096。
Type1バイトメッセージの種類(1〜5)。

最大長の4096はRFC 4271の値です。RFC 8654のBGP Extended Message(Capability 6)を双方が交換したセッションでは、OPENとKEEPALIVEを除くメッセージを65535バイトまで伸ばせます。

OPENメッセージ

TCPセッションが確立すると、双方が最初にOPENメッセージを送ります。相手のOPENを受け入れられる場合はKEEPALIVEを返し、セッションがEstablishedになります。

フィールドサイズ説明
Version1バイトBGPのバージョン。現在は4。
My Autonomous System2バイト送信元のAS番号。2バイトに収まらない4バイトAS番号を使う場合は23456(AS_TRANS)を入れ、実際の番号はCapabilityで伝える。
Hold Time2バイトこの時間(秒)の間にKEEPALIVEもUPDATEも受信しなければセッションを切断する。双方が提示した値の小さいほうが採用される。値は0か3秒以上でなければならず、0ならKEEPALIVEを送らない。Ciscoの既定値は180。
BGP Identifier4バイト送信元のBGP Router ID。
Opt Parm Len1バイトOptional Parametersの長さ(バイト)。
Optional Parameters可変長対応する機能(Capability)を列挙する。

Optional Parametersには、そのルータが対応する機能をCapability(RFC 5492)として列挙します。代表的なものは次のとおりです。

Capabilityコード説明
Multiprotocol Extensions1扱えるアドレスファミリー(AFI / SAFI)。IPv4ユニキャストはAFI 1 / SAFI 1。
Route Refresh2再設定なしでピアに経路の再送を要求できる。
Route Refresh(Cisco独自)128RFC 2918として標準化される前から使われているもの。IOS XRは2と128の両方を広告し、show bgp neighborにはadvertised (old + new)と出る。
Enhanced Route Refresh70ROUTE-REFRESHの開始(BoRR)と終了(EoRR)を明示できるようにする(RFC 7313)。
Extended Next Hop Encoding5IPv4経路のネクストホップにIPv6アドレスを使える。
4-octet AS Number654バイトAS番号に対応していることと、自身の実際のAS番号を伝える。

UPDATEメッセージ

UPDATEは経路情報を運びます。1つのUPDATEで、取り消す経路(Withdrawn Routes)と、同じパス属性を持つ経路(NLRI)をまとめて伝えられます。

フィールドサイズ説明
Withdrawn Routes Length2バイトWithdrawn Routesの長さ(バイト)。
Withdrawn Routes可変長取り消す経路のプレフィックス一覧。
Total Path Attribute Length2バイトPath Attributesの長さ(バイト)。
Path Attributes可変長後続のNLRIに共通するパス属性(ORIGIN、AS_PATH、NEXT_HOPなど)。
NLRI可変長広告する経路のプレフィックス一覧(Network Layer Reachability Information)。

パス属性の種類と役割はBGPパス属性とベストパス選択を参照してください。

経路の広告と取り消し(Withdraw)

用途Withdrawn RoutesPath Attributes / NLRI
経路の広告空広告するプレフィックスとそのパス属性が入る
経路の取り消し(Withdraw)取り消すプレフィックスが入る空

広告していた経路が使えなくなると、その経路をWithdrawn Routesに入れたUPDATEを送ります。パス属性は不要なのでTotal Path Attribute Lengthは0です。受信したルータはBGPテーブルから削除して自身のピアへも伝えるため、取り消しはASを越えて伝播します。

Path AttributesもNLRIも空のUPDATE(Length = 23)はEnd-of-RIBマーカーで、セッション確立直後の初期広告が完了したことを伝えます(RFC 4724)。

KEEPALIVEメッセージ

KEEPALIVEは共通ヘッダーだけの19バイトです。Hold Timeの3分の1の間隔(Ciscoの既定では60秒)で送られ、Hold Timeの間に何も届かなければ相手はセッションを切断します。相手のOPENを受け入れたことを伝える際にも使います。

NOTIFICATIONメッセージ

NOTIFICATIONはエラーを検出したときに送られ、送信後にTCPセッションを閉じます。

Error code意味主なサブコード
1Message Header Error接続の非同期、不正なメッセージ長、不正なメッセージタイプ
2OPEN Message Error非対応のバージョン、不正なピアAS、不正なBGP Identifier、受け入れられないHold Time
3UPDATE Message Error不正な属性リスト、必須属性の欠落、不正なNEXT_HOP、不正なAS_PATHなど
4Hold Timer ExpiredHold Timeの間に何も受信しなかった
5Finite State Machine Error状態遷移上ありえないメッセージを受信した
6Cease上記以外の理由による切断。管理者によるshutdownやリセット、最大プレフィックス数の超過など(RFC 4486)

ROUTE-REFRESHメッセージ

ROUTE-REFRESHは、セッションを切らずにピアへ経路の再送を要求します。入方向ポリシーを変えたあと、受信済みの経路に適用し直すために使い、OPENでRoute Refresh Capability(コード2)を交換したピア同士で使えます。共通ヘッダーに続くのはAFI / SAFIだけです。

フィールドサイズ説明
AFI2バイトアドレスファミリー。IPv4は1。
Subtype(Reserved)1バイトRFC 2918では予約。RFC 7313(Enhanced Route Refresh)がMessage Subtypeとして再定義し、通常の要求は0、再送の開始(BoRR)が1、終了(EoRR)が2。
SAFI1バイト後続アドレスファミリー。ユニキャストは1。

要求を受けたピアは、そのピアへ広告している経路をUPDATEですべて送り直します。

実機での検証

3つのASにXRd 4台を置き、R1 - R2間がiBGP、R2 - R3・R3 - R4間がeBGPです。各ルータは192.168.N.0/24を広告しています。

キャプチャーはR2 - R3間で取り、経路が2つのASを越える様子を見るSTEPではR3 - R4間も取りました。eBGPの出方向ルートポリシーはネイバーごとに別名にしています(中身はpassだけ)。同じ名前のポリシーを複数のネイバーに当てると、それらが1つのupdate-groupにまとめられ、あるピアから学んだ経路がそのピア自身にも広告されてしまうためです。

STEP操作確かめること
0初期状態全セッションがEstablished
1R2でclear bgp 10.2.3.3NOTIFICATION / OPEN / KEEPALIVE / UPDATE / End-of-RIB
2R4でinterface Loopback1をshutdown192.168.4.0/24の取り消しが2つのASを越えて伝播し、疎通が落ちること
3R4でinterface Loopback1をno shutdown再広告と疎通の復旧
4R4にLoopback11〜Loopback15を追加し5プレフィックスを広告1つのUPDATEに複数のNLRIが入ること
5R4から5プレフィックスをまとめて削除1つのUPDATEのWithdrawn Routesに複数入ること
6R2でclear bgp ipv4 unicast 10.2.3.3 softsoft-reconfiguration inbound alwaysがあると入方向でROUTE-REFRESHを送らないこと
7R2からsoft-reconfiguration inbound alwaysを外してsoft inROUTE-REFRESHの送信
8R2にsoft-reconfiguration inbound alwaysを戻す設定の投入自体がROUTE-REFRESHを発生させること
9R3のR2向けネイバーをshutdownNOTIFICATIONのサブコードがclearのときと変わること
10R3のR2向けネイバーをno shutdownOPENからやり直しになること
11R3のR2向けネイバーにtimers 30 90を入れてclear bgpHold Timeのネゴシエーション
12R3からtimers 30 90を外す(最終状態)180秒に戻り、KEEPALIVE間隔も戻ること

セッションの確立(STEP 1)

clear bgpから再確立までのパケットです。5種類のうちROUTE-REFRESH以外の4種類がここに出ます。

R2 - R3間 パケットキャプチャー(STEP 1、tshark一覧、TCPのACKのみの行は省略)
    1   0.000000     10.2.3.2 → 10.2.3.3     BGP 75 NOTIFICATION Message
    2   0.000202     10.2.3.2 → 10.2.3.3     TCP 54 179 → 40551 [FIN, ACK] Seq=22 Ack=1 Win=32134 Len=0
    4   0.012856     10.2.3.3 → 10.2.3.2     TCP 54 40551 → 179 [FIN, ACK] Seq=1 Ack=23 Win=32042 Len=0
    6   1.126688     10.2.3.2 → 10.2.3.3     TCP 62 47528 → 179 [SYN] Seq=0 Win=32768 Len=0 MSS=1460 WS=1
    7   1.130646     10.2.3.3 → 10.2.3.2     TCP 62 179 → 47528 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=1
    9   1.134115     10.2.3.2 → 10.2.3.3     BGP 129 OPEN Message
   10   1.219856     10.2.3.3 → 10.2.3.2     TCP 54 179 → 47528 [RST, ACK] Seq=1 Ack=1 Win=16384 Len=0
   11  30.000850     10.2.3.2 → 10.2.3.3     TCP 54 179 → 40551 [RST, ACK] Seq=23 Ack=2 Win=32134 Len=0
   12  32.938376     10.2.3.3 → 10.2.3.2     TCP 62 30318 → 179 [SYN] Seq=0 Win=32768 Len=0 MSS=1240 WS=1
   13  32.941808     10.2.3.2 → 10.2.3.3     TCP 62 179 → 30318 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1240 WS=1
   15  32.946208     10.2.3.3 → 10.2.3.2     BGP 129 OPEN Message
   18  34.952104     10.2.3.2 → 10.2.3.3     BGP 129 OPEN Message
   19  34.956468     10.2.3.3 → 10.2.3.2     BGP 73 KEEPALIVE Message
   20  34.959407     10.2.3.2 → 10.2.3.3     BGP 73 KEEPALIVE Message
   21  34.993300     10.2.3.3 → 10.2.3.2     BGP 194 UPDATE Message, UPDATE Message, UPDATE Message
   22  34.995936     10.2.3.2 → 10.2.3.3     BGP 190 UPDATE Message, UPDATE Message, UPDATE Message
   77  94.989534     10.2.3.2 → 10.2.3.3     BGP 73 KEEPALIVE Message
   78  94.993812     10.2.3.3 → 10.2.3.2     BGP 73 KEEPALIVE Message
No.内容
1〜4R2がNOTIFICATIONを送り、TCPセッションを閉じる
6〜10R2がすぐ再接続を試みるが、リセット直後のR3はRSTで拒否する
12〜15約32秒後にR3側からのTCP3ウェイハンドシェイクが成立し、R3がOPENを送る
18〜20R2がOPENを返し、双方がKEEPALIVEを返してセッションがEstablishedになる
21〜22双方がUPDATEで経路を広告する。3つ目は初期広告の完了を示すEnd-of-RIBマーカー
77以降KEEPALIVEが60秒間隔で流れる

ここでR3がR2へ送るのは192.168.3.0/24と192.168.4.0/24の2経路だけです。R2から受け取った192.168.1.0/24と192.168.2.0/24はR2へ返しません。

OPENメッセージの中身

No.15でR3が送ったOPENです。Type 1、Version 4、AS番号65002、Hold Time 180秒、BGP Identifier 10.0.0.3で、Optional ParametersにCapabilityが5つ入っています。

No.15 OPEN(R3 → R2)tshark -V
Border Gateway Protocol - OPEN Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 75
    Type: OPEN Message (1)
    Version: 4
    My AS: 65002
    Hold Time: 180
    BGP Identifier: 10.0.0.3
    Optional Parameters Length: 46
    Optional Parameters
        Optional Parameter: Capability
            Parameter Type: Capability (2)
            Parameter Length: 6
            Capability: Multiprotocol extensions capability
                Type: Multiprotocol extensions capability (1)
                Length: 4
                AFI: IPv4 (1)
                Reserved: 00
                SAFI: Unicast (1)
        Optional Parameter: Capability
            Parameter Type: Capability (2)
            Parameter Length: 2
            Capability: Route Refresh Capability (Cisco)
                Type: Route Refresh Capability (Cisco) (128)
                Length: 0
        Optional Parameter: Capability
            Parameter Type: Capability (2)
            Parameter Length: 2
            Capability: Route refresh capability
                Type: Route refresh capability (2)
                Length: 0
        Optional Parameter: Capability
            Parameter Type: Capability (2)
            Parameter Length: 6
            Capability: Support for 4-octet AS number capability
                Type: Support for 4-octet AS number capability (65)
                Length: 4
                AS Number: 65002
        Optional Parameter: Capability
            Parameter Type: Capability (2)
            Parameter Length: 20
            Capability: Extended Next Hop Encoding
                Type: Extended Next Hop Encoding (5)
                Length: 18
<snip>
上のtshark出力のパケット(No.15 OPEN)のpcapをダウンロード

Route Refreshが128と2の2つ出ているのは、標準化前のCisco独自の番号と標準の番号を両方広告しているためです。show bgp neighborではこれがadvertised (old + new)と表示されます。なお、Enhanced Route Refresh(70)とBGP Extended Message(6)は、XRd 26.1.1では広告されませんでした。

KEEPALIVEメッセージの中身

No.19はR3がOPENを受理したときのKEEPALIVEで、共通ヘッダーだけの19バイトです。

No.19 KEEPALIVE(R3 → R2)tshark -V
Border Gateway Protocol - KEEPALIVE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 19
    Type: KEEPALIVE Message (4)
上のtshark出力のパケット(No.19 KEEPALIVE)のpcapをダウンロード

UPDATEメッセージの中身(経路の広告)

No.21のTCPセグメントには3つのUPDATEが入っています。1つ目はR3自身の192.168.3.0/24で、ORIGIN・AS_PATH・MULTI_EXIT_DISCが付いています。

No.21 UPDATE(R3 → R2、1つ目)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 60
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 37
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.2.3.3
                IPv4 Address: 10.2.3.3
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.3.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.3.0
        Path Attribute - ORIGIN: IGP
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: 65002 
<snip>
            Type Code: AS_PATH (2)
            Length: 6
            AS Path segment: 65002
                Segment type: AS_SEQUENCE (2)
                Segment length (number of ASN): 1
                AS4: 65002
        Path Attribute - MULTI_EXIT_DISC: 0
<snip>
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 0
上のtshark出力のパケット(No.21 UPDATE×3)のpcapをダウンロード
XRdはIPv4ユニキャストの経路でも、プレフィックスとネクストホップをUPDATE本体のNLRIフィールドではなくMP_REACH_NLRI属性(RFC 4760)に入れて送ります。RFC 4271の基本形では、ネクストホップはNEXT_HOP属性、プレフィックスはNLRIフィールドです。

2つ目はR4から受け取った192.168.4.0/24に自ASを足して転送するUPDATE、3つ目は属性もNLRIも無い23バイトのEnd-of-RIBマーカーです。

No.21 UPDATE(R3 → R2、3つ目 = End-of-RIB)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 23
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 0

1つのUPDATEにまとまる複数の経路(STEP 4・5)

STEP 4でR4にLoopback11〜Loopback15(192.168.40.0/24〜192.168.44.0/24)を足し、5つを同時に広告しました。R3 - R4間にはUPDATEが1つだけ流れ、その中に5つのNLRIが並びます。パス属性は5経路に共通なので1組だけです。

STEP 4 No.1 UPDATE(R4 → R3)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 76
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 53
    Path attributes
        Path Attribute - MP_REACH_NLRI
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 29
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.3.4.4
                IPv4 Address: 10.3.4.4
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.44.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.44.0
                192.168.43.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.43.0
                192.168.42.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.42.0
                192.168.41.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.41.0
                192.168.40.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.40.0
        Path Attribute - ORIGIN: IGP
<snip>
        Path Attribute - AS_PATH: 65003 
<snip>
        Path Attribute - MULTI_EXIT_DISC: 0
<snip>
上のtshark出力のパケット(STEP 4 No.1 UPDATE)のpcapをダウンロード

STEP 5でこの5つをまとめて削除すると、取り消しも1つのUPDATEにまとまります。Withdrawn Routes Lengthが20(4バイト × 5)で、パス属性はありません。

STEP 5 No.3 UPDATE(R4 → R3、5経路の取り消し)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 43
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 20
    Withdrawn Routes
        192.168.40.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.40.0
        192.168.41.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.41.0
        192.168.42.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.42.0
        192.168.43.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.43.0
        192.168.44.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.44.0
    Total Path Attribute Length: 0
上のtshark出力のパケット(STEP 5 No.3 UPDATE)のpcapをダウンロード

経路の取り消しと転送への影響(STEP 2・3)

STEP 2でR4のLoopback1をshutdownすると、192.168.4.0/24が広告できなくなります。取り消しはR4 → R3 → R2 → R1と伝播し、R2 - R3間ではSTEP 2のNo.1として観測されました。

STEP 2 No.1 UPDATE(R3 → R2、経路の取り消し)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 27
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 4
    Withdrawn Routes
        192.168.4.0/24
            Withdrawn route prefix length: 24
            Withdrawn prefix: 192.168.4.0
    Total Path Attribute Length: 0
上のtshark出力のパケット(STEP 2 No.1 UPDATE)のpcapをダウンロード

R2のBGPテーブルから消え、2つのASを越えた先のR1でも消えています。

R2 show bgp(STEP 2、取り消し後)
RP/0/RP0/CPU0:R2#show bgp
Sun Sep 20 13:46:28.839 UTC
<snip>
Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*>i192.168.1.0/24     10.0.0.1                 0    100      0 i
*> 192.168.2.0/24     0.0.0.0                  0         32768 i
*> 192.168.3.0/24     10.2.3.3                 0             0 65002 i

Processed 3 prefixes, 3 paths
R1 show bgp 192.168.4.0/24(STEP 2、取り消し後)
RP/0/RP0/CPU0:R1#show bgp 192.168.4.0/24
Sun Sep 20 13:44:48.165 UTC
%% Network not in table

経路が無くなると転送も止まります。同じSTEPで取ったR1からのpingは全滅です。

R1 ping 192.168.4.1(STEP 2、取り消し後)
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.1.1 count 50 timeout 1
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)

STEP 3でLoopback1を戻すと再広告され、R1のルーティングテーブルと疎通も復活します。

R1 show route bgp(STEP 3、再広告後)
RP/0/RP0/CPU0:R1#show route bgp
Sun Sep 20 13:50:18.672 UTC

B    192.168.2.0/24 [200/0] via 10.0.0.2, 00:36:56
B    192.168.3.0/24 [200/0] via 10.2.3.3, 00:12:13
B    192.168.4.0/24 [200/0] via 10.2.3.3, 00:01:45

NOTIFICATIONメッセージの中身(STEP 1・9)

NOTIFICATIONはエラーコードとサブコードで切断の理由を伝えます。同じCease(6)でも、clear bgpによる再確立とネイバーのshutdownではサブコードが違います。

STEP 1 No.1 NOTIFICATION(R2 → R3)tshark -V
Border Gateway Protocol - NOTIFICATION Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 21
    Type: NOTIFICATION Message (3)
    Major error Code: Cease (6)
    Minor error Code (Cease): Administratively Reset (4)
STEP 9 No.1 NOTIFICATION(R3 → R2)tshark -V
Border Gateway Protocol - NOTIFICATION Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 21
    Type: NOTIFICATION Message (3)
    Major error Code: Cease (6)
    Minor error Code (Cease): Administratively Shutdown (2)

STEP 1のパケット(No.1 NOTIFICATION)のpcapをダウンロード

STEP 9のパケット(No.1 NOTIFICATION)のpcapをダウンロード

show bgp neighborには送信側・受信側それぞれの記録が残ります。

R2 show bgp neighbor(抜粋、STEP 1)
BGP neighbor is 10.2.3.3
  BGP state = Established, up for 00:02:02
  Received 37 messages, 0 notifications, 0 in queue
  Sent 39 messages, 1 notifications, 0 in queue
  Connections established 2; dropped 1
  Time since last notification sent to neighbor: 00:02:37
  Error Code: administrative reset
R3 show bgp neighbor(抜粋、STEP 1)
BGP neighbor is 10.2.3.2
  Received 38 messages, 1 notifications, 0 in queue
  Last reset 00:03:21, due to BGP Notification received: administrative reset
  Time since last notification received from neighbor: 00:03:21
  Error Code: administrative reset
R2 show bgp neighbor(抜粋、STEP 9)
BGP neighbor is 10.2.3.3
  BGP state = Active
  Received 80 messages, 1 notifications, 0 in queue
  Last reset 00:04:16, due to BGP Notification received: administrative shutdown

STEP 9ではR3側がネイバーをshutdownしたままなので、R2はActiveで再接続を試み続けます。STEP 10で解除すると、OPENからやり直してセッションが戻ります。

ROUTE-REFRESHメッセージの中身(STEP 6〜8)

IOS XRではclear bgp <ピア> soft inで送信します。STEP 7のNo.1がそれで、共通ヘッダーにAFI / Subtype / SAFIが続く23バイトです。

STEP 7 No.1 ROUTE-REFRESH(R2 → R3)tshark -V
Border Gateway Protocol - ROUTE-REFRESH Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 23
    Type: ROUTE-REFRESH Message (5)
    Address family identifier (AFI): IPv4 (1)
    Subtype: Normal route refresh request [RFC2918] with/without ORF [RFC5291] (0)
    Subsequent address family identifier (SAFI): Unicast (1)
上のtshark出力のパケット(STEP 7 No.1 ROUTE-REFRESH)のpcapをダウンロード

soft-reconfiguration inbound alwaysが入っているかどうかで、送るか送らないかが変わります。3つのSTEPでR2のshow bgp neighborのカウンタを比べると次のとおりです。

STEPR2の設定と操作キャプチャー内のROUTE-REFRESHRoute refresh request: sent
6設定あり。clear bgp ipv4 unicast 10.2.3.3 soft0件0
7設定を外してclear bgp ipv4 unicast 10.2.3.3 soft in1件1
8設定を戻す(clearはしない)1件2
soft-reconfiguration inbound alwaysがあると、soft inでROUTE-REFRESHは送られません(STEP 6)。入方向ポリシー適用前の経路をローカルに保持しているので、自分のコピーだけで再評価できるためです。show bgp neighborはこれをInbound soft reconfiguration allowed (override route-refresh)と表示します。

設定を外すとreceived routesも使えなくなります。

R2 show bgp neighbors 10.2.3.3 received routes(STEP 7、設定を外した状態)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.2.3.3 received routes
Sun Sep 20 14:10:26.738 UTC
% The 'show bgp neighbor received routes' command is only available when inbound soft reconfiguration is active.  To activate inbound soft reconfiguration, use the 'soft-reconfiguration inbound' command.  If the neighbor supports route-refresh, the 'always' option to the command must also be specified.

コピーを常時保持する(received routesが使える)か、必要なときにROUTE-REFRESHで要求するか、というトレードオフです。なおSTEP 8で設定を戻したときは、保持していない経路を揃えるためにROUTE-REFRESHが送られています。設定があればROUTE-REFRESHが一切出ない、という意味ではありません。

Hold Timeのネゴシエーション(STEP 11・12)

Hold Timeは双方がOPENで提示し、小さいほうが採用されます。STEP 11でR3のR2向けネイバーだけを90秒にしました。

R3 Hold Timeの変更(STEP 11)
router bgp 65002
 neighbor 10.2.3.2
  timers 30 90

コミットしただけでは切り替わりません。Hold TimeはOPENで交換する値なので、セッションを張り直すまで反映されません。

R3 コミット直後(STEP 11、clear の前)
RP/0/RP0/CPU0:R3#show bgp neighbor 10.2.3.2 | include Hold time
Sun Sep 20 14:29:10.928 UTC
  Hold time is 180, keepalive interval is 60 seconds

clear bgpで張り直すと、R3が90、R2が180を提示し、双方とも90秒になります。設定を変えていないR2でもConfigured hold timeは180のまま、実際のHold timeが90に変わり、KEEPALIVE間隔も3分の1の30秒に連動します。

R2 show bgp neighbor(抜粋、STEP 11)
BGP neighbor is 10.0.0.1
  Hold time is 180, keepalive interval is 60 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3
BGP neighbor is 10.2.3.3
  Hold time is 90, keepalive interval is 30 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3
R3 show bgp neighbor(抜粋、STEP 11)
BGP neighbor is 10.2.3.2
  Hold time is 90, keepalive interval is 30 seconds
  Configured hold time: 90, keepalive: 30, min acceptable hold time: 3
BGP neighbor is 10.3.4.4
  Hold time is 180, keepalive interval is 60 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3

ネゴシエーションはセッション単位です。R3のR4向けは180のままで、R2のR1向け(iBGP)も影響を受けていません。

OPENで提示された値はキャプチャーでも確認できます。

R3が送ったOPEN(Hold Time 90)のpcapをダウンロード

R2が送ったOPEN(Hold Time 180)のpcapをダウンロード

KEEPALIVEの間隔も実測で変わります。STEP 11から12までを1本のキャプチャーで取ると、90秒の区間は30秒間隔、STEP 12で180秒に戻したあとは60秒間隔です。

R2 → R3のKEEPALIVEの間隔(STEP 11〜12、tshark一覧)
   No.20      32.2s
   No.24      62.2s   間隔 30.0s
   No.27      92.2s   間隔 30.0s
   No.142    122.2s   間隔 30.0s
   No.258    152.2s   間隔 30.0s
   No.261    182.2s   間隔 30.0s
   No.380    242.2s   間隔 30.0s
   No.383    272.2s   間隔 30.0s
   No.405    333.2s   間隔 61.0s
   No.520    393.2s   間隔 60.0s
   No.635    453.2s   間隔 60.0s
   No.638    513.2s   間隔 60.0s

メッセージカウンタの確認

show bgp neighborには、交換したメッセージ数、OPENで交換したCapability、Hold TimeとKEEPALIVE間隔が出ます。最終STEPのR2の値です。

R2 show bgp neighbor(抜粋、STEP 12)
BGP neighbor is 10.2.3.3
 Remote AS 65002, local AS 65001, external link
 Description: eBGP to R3
 Remote router ID 10.0.0.3
  BGP state = Established, up for 00:04:33
  Hold time is 180, keepalive interval is 60 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3
<snip>
  Neighbor capabilities:
    Route refresh: advertised (old + new) and received (old + new)
    4-byte AS: advertised and received
    Address family IPv4 Unicast: advertised and received
  Received 110 messages, 3 notifications, 0 in queue
  Sent 108 messages, 1 notifications, 0 in queue

なお、IOS XRにこのメッセージカウンタをクリアするコマンドはありません。clear bgpのオプションにあるのはpeer-drops(確立・切断の回数)やperformance-statisticsなどで、送受信メッセージ数はセッションのリセットでしか0に戻りません。

検証Configおよびshow結果

各STEPで4台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 12のもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show bgp / show bgp summary / show bgp <プレフィックス> / show bgp neighbors / ピアごとのadvertised-routes・routes・received routes / show bgp update-group / show rpl route-policy。R1・R2ではOSPFを動かしているためshow ospf neighborも含む
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._ping.txtそのSTEPのpingとtraceroute(R1・R2・R4から192.168.4.1または192.168.1.1へ50発)
..._trace.txtshow bgp trace neighborとshow bgp trace error(BGPプロセス内部のイベント)
..._commit.cfgそのSTEPで実際にコミットされた設定(設定を変えたルータのみ)
..._exec.txtそのSTEPで実行したclear bgp系のコマンドと時刻

最終状態は、R1 - R2がiBGP(Loopback0ピア、OSPF area 0)、R2 - R3とR3 - R4がeBGPで、各ルータが192.168.N.0/24を広告している初期状態と同じです。

STEP 0:初期状態

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 1:R2でclear bgp 10.2.3.3(セッションの再確立)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtraceexec
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 2:R4でinterface Loopback1をshutdown(経路の取り消し)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 3:R4でinterface Loopback1をno shutdown(経路の再広告)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 4:R4にLoopback11〜Loopback15を追加して5プレフィックスを広告

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 5:R4から5プレフィックスをまとめて削除

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 6:R2でclear bgp ipv4 unicast 10.2.3.3 soft

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtraceexec
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 7:R2からsoft-reconfiguration inbound alwaysを外してsoft in

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 8:R2にsoft-reconfiguration inbound alwaysを戻す

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 9:R3のR2向けネイバーをshutdown

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—tracecommit
R4showlogrunpingtrace—

STEP 10:R3のR2向けネイバーをno shutdown

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—tracecommit
R4showlogrunpingtrace—

STEP 11:R3のR2向けネイバーにtimers 30 90を入れてclear bgp

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—tracecommit
R4showlogrunpingtrace—

STEP 12:R3からtimers 30 90を外す(最終状態)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—tracecommit
R4showlogrunpingtrace—

パケットキャプチャーはSTEPごとに取得しています(キャプチャーしていない区間は「—」)。STEP 11と12はHold Timeの変更前後のKEEPALIVE間隔を比べるため、通しで1本にしています。

STEPR2 - R3間R3 - R4間
0pcap—
1pcap—
2pcappcap
3pcappcap
4pcappcap
5pcappcap
6pcap—
7pcap—
8pcap—
9pcap—
10pcap—
11STEP 12に含む—
12pcap—

参考

資料タイトル概要
IANABorder Gateway Protocol (BGP) Parametersメッセージタイプ、パス属性、Capabilityコード、NOTIFICATIONのエラーコード / サブコードなど、BGPで使われる番号の割り当て一覧。
RFC 4271A Border Gateway Protocol 4 (BGP-4)BGP-4の基本仕様。各メッセージの形式を定義。
RFC 5492Capabilities Advertisement with BGP-4OPENメッセージのCapabilityを定義。
RFC 4486Subcodes for BGP Cease Notification MessageNOTIFICATIONのCeaseサブコードを定義。
RFC 2918Route Refresh Capability for BGP-4ROUTE-REFRESHメッセージとCapabilityを定義。
RFC 7313Enhanced Route Refresh Capability for BGP-4Reservedフィールドを Message Subtype として再定義し、BoRR / EoRR を追加。
RFC 8654Extended Message Support for BGPメッセージの最大長を65535バイトに拡張するCapability 6を定義。
RFC 4724Graceful Restart Mechanism for BGPEnd-of-RIBマーカーを定義。
RFC 4760Multiprotocol Extensions for BGP-4MP_REACH_NLRI / MP_UNREACH_NLRI属性を定義。

関連記事