BGPメッセージとは
BGPのピア同士は、TCPポート179のセッション上でメッセージをやり取りします。すべてのメッセージは共通の19バイトヘッダーで始まり、Typeで種類を識別します。RFC 4271の4種類に、拡張のROUTE-REFRESH(RFC 2918)が加わります。この記事では各メッセージの構造を解説し、IOS XR(XRd)で取得したキャプチャーで中身を確認します(BGPの基本はBGP(Border Gateway Protocol))。
| Type | メッセージ | 役割 |
|---|---|---|
| 1 | OPEN | セッション確立後に最初に送り、AS番号やHold Time、対応する機能(Capability)を伝える。 |
| 2 | UPDATE | 経路の広告と取り消し(Withdraw)を行う。 |
| 3 | NOTIFICATION | エラーを通知し、セッションを切断する。 |
| 4 | KEEPALIVE | セッションを維持するために定期的に送る。 |
| 5 | ROUTE-REFRESH | セッションを切らずに、経路の再送をピアへ要求する(RFC 2918)。 |
共通ヘッダー
| フィールド | サイズ | 説明 |
|---|---|---|
| Marker | 16バイト | すべてのビットを1にする。RFC 4271では互換性のために置かれているフィールドで、受信側は値が期待どおりでなければ同期の失敗とみなし、Message Header Error(Error code 1)のConnection Not Synchronized(サブコード1)を返す。 |
| Length | 2バイト | ヘッダーを含むメッセージ全体の長さ(バイト)。最小は19(KEEPALIVE)、最大は4096。 |
| Type | 1バイト | メッセージの種類(1〜5)。 |
最大長の4096はRFC 4271の値です。RFC 8654のBGP Extended Message(Capability 6)を双方が交換したセッションでは、OPENとKEEPALIVEを除くメッセージを65535バイトまで伸ばせます。
OPENメッセージ
TCPセッションが確立すると、双方が最初にOPENメッセージを送ります。相手のOPENを受け入れられる場合はKEEPALIVEを返し、セッションがEstablishedになります。
| フィールド | サイズ | 説明 |
|---|---|---|
| Version | 1バイト | BGPのバージョン。現在は4。 |
| My Autonomous System | 2バイト | 送信元のAS番号。2バイトに収まらない4バイトAS番号を使う場合は23456(AS_TRANS)を入れ、実際の番号はCapabilityで伝える。 |
| Hold Time | 2バイト | この時間(秒)の間にKEEPALIVEもUPDATEも受信しなければセッションを切断する。双方が提示した値の小さいほうが採用される。値は0か3秒以上でなければならず、0ならKEEPALIVEを送らない。Ciscoの既定値は180。 |
| BGP Identifier | 4バイト | 送信元のBGP Router ID。 |
| Opt Parm Len | 1バイト | Optional Parametersの長さ(バイト)。 |
| Optional Parameters | 可変長 | 対応する機能(Capability)を列挙する。 |
Optional Parametersには、そのルータが対応する機能をCapability(RFC 5492)として列挙します。代表的なものは次のとおりです。
| Capability | コード | 説明 |
|---|---|---|
| Multiprotocol Extensions | 1 | 扱えるアドレスファミリー(AFI / SAFI)。IPv4ユニキャストはAFI 1 / SAFI 1。 |
| Route Refresh | 2 | 再設定なしでピアに経路の再送を要求できる。 |
| Route Refresh(Cisco独自) | 128 | RFC 2918として標準化される前から使われているもの。IOS XRは2と128の両方を広告し、show bgp neighborにはadvertised (old + new)と出る。 |
| Enhanced Route Refresh | 70 | ROUTE-REFRESHの開始(BoRR)と終了(EoRR)を明示できるようにする(RFC 7313)。 |
| Extended Next Hop Encoding | 5 | IPv4経路のネクストホップにIPv6アドレスを使える。 |
| 4-octet AS Number | 65 | 4バイトAS番号に対応していることと、自身の実際のAS番号を伝える。 |
UPDATEメッセージ
UPDATEは経路情報を運びます。1つのUPDATEで、取り消す経路(Withdrawn Routes)と、同じパス属性を持つ経路(NLRI)をまとめて伝えられます。
| フィールド | サイズ | 説明 |
|---|---|---|
| Withdrawn Routes Length | 2バイト | Withdrawn Routesの長さ(バイト)。 |
| Withdrawn Routes | 可変長 | 取り消す経路のプレフィックス一覧。 |
| Total Path Attribute Length | 2バイト | Path Attributesの長さ(バイト)。 |
| Path Attributes | 可変長 | 後続のNLRIに共通するパス属性(ORIGIN、AS_PATH、NEXT_HOPなど)。 |
| NLRI | 可変長 | 広告する経路のプレフィックス一覧(Network Layer Reachability Information)。 |
パス属性の種類と役割はBGPパス属性とベストパス選択を参照してください。
経路の広告と取り消し(Withdraw)
| 用途 | Withdrawn Routes | Path Attributes / NLRI |
|---|---|---|
| 経路の広告 | 空 | 広告するプレフィックスとそのパス属性が入る |
| 経路の取り消し(Withdraw) | 取り消すプレフィックスが入る | 空 |
広告していた経路が使えなくなると、その経路をWithdrawn Routesに入れたUPDATEを送ります。パス属性は不要なのでTotal Path Attribute Lengthは0です。受信したルータはBGPテーブルから削除して自身のピアへも伝えるため、取り消しはASを越えて伝播します。
KEEPALIVEメッセージ
KEEPALIVEは共通ヘッダーだけの19バイトです。Hold Timeの3分の1の間隔(Ciscoの既定では60秒)で送られ、Hold Timeの間に何も届かなければ相手はセッションを切断します。相手のOPENを受け入れたことを伝える際にも使います。
NOTIFICATIONメッセージ
NOTIFICATIONはエラーを検出したときに送られ、送信後にTCPセッションを閉じます。
| Error code | 意味 | 主なサブコード |
|---|---|---|
| 1 | Message Header Error | 接続の非同期、不正なメッセージ長、不正なメッセージタイプ |
| 2 | OPEN Message Error | 非対応のバージョン、不正なピアAS、不正なBGP Identifier、受け入れられないHold Time |
| 3 | UPDATE Message Error | 不正な属性リスト、必須属性の欠落、不正なNEXT_HOP、不正なAS_PATHなど |
| 4 | Hold Timer Expired | Hold Timeの間に何も受信しなかった |
| 5 | Finite State Machine Error | 状態遷移上ありえないメッセージを受信した |
| 6 | Cease | 上記以外の理由による切断。管理者によるshutdownやリセット、最大プレフィックス数の超過など(RFC 4486) |
ROUTE-REFRESHメッセージ
ROUTE-REFRESHは、セッションを切らずにピアへ経路の再送を要求します。入方向ポリシーを変えたあと、受信済みの経路に適用し直すために使い、OPENでRoute Refresh Capability(コード2)を交換したピア同士で使えます。共通ヘッダーに続くのはAFI / SAFIだけです。
| フィールド | サイズ | 説明 |
|---|---|---|
| AFI | 2バイト | アドレスファミリー。IPv4は1。 |
| Subtype(Reserved) | 1バイト | RFC 2918では予約。RFC 7313(Enhanced Route Refresh)がMessage Subtypeとして再定義し、通常の要求は0、再送の開始(BoRR)が1、終了(EoRR)が2。 |
| SAFI | 1バイト | 後続アドレスファミリー。ユニキャストは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 |
| 1 | R2でclear bgp 10.2.3.3 | NOTIFICATION / OPEN / KEEPALIVE / UPDATE / End-of-RIB |
| 2 | R4でinterface Loopback1をshutdown | 192.168.4.0/24の取り消しが2つのASを越えて伝播し、疎通が落ちること |
| 3 | R4でinterface Loopback1をno shutdown | 再広告と疎通の復旧 |
| 4 | R4にLoopback11〜Loopback15を追加し5プレフィックスを広告 | 1つのUPDATEに複数のNLRIが入ること |
| 5 | R4から5プレフィックスをまとめて削除 | 1つのUPDATEのWithdrawn Routesに複数入ること |
| 6 | R2でclear bgp ipv4 unicast 10.2.3.3 soft | soft-reconfiguration inbound alwaysがあると入方向でROUTE-REFRESHを送らないこと |
| 7 | R2からsoft-reconfiguration inbound alwaysを外してsoft in | ROUTE-REFRESHの送信 |
| 8 | R2にsoft-reconfiguration inbound alwaysを戻す | 設定の投入自体がROUTE-REFRESHを発生させること |
| 9 | R3のR2向けネイバーをshutdown | NOTIFICATIONのサブコードがclearのときと変わること |
| 10 | R3のR2向けネイバーをno shutdown | OPENからやり直しになること |
| 11 | R3のR2向けネイバーにtimers 30 90を入れてclear bgp | Hold Timeのネゴシエーション |
| 12 | R3からtimers 30 90を外す(最終状態) | 180秒に戻り、KEEPALIVE間隔も戻ること |
セッションの確立(STEP 1)
clear bgpから再確立までのパケットです。5種類のうちROUTE-REFRESH以外の4種類がここに出ます。
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〜4 | R2がNOTIFICATIONを送り、TCPセッションを閉じる |
| 6〜10 | R2がすぐ再接続を試みるが、リセット直後のR3はRSTで拒否する |
| 12〜15 | 約32秒後にR3側からのTCP3ウェイハンドシェイクが成立し、R3がOPENを送る |
| 18〜20 | R2が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つ入っています。
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>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バイトです。
Border Gateway Protocol - KEEPALIVE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 19
Type: KEEPALIVE Message (4)UPDATEメッセージの中身(経路の広告)
No.21のTCPセグメントには3つのUPDATEが入っています。1つ目はR3自身の192.168.3.0/24で、ORIGIN・AS_PATH・MULTI_EXIT_DISCが付いています。
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: 0MP_REACH_NLRI属性(RFC 4760)に入れて送ります。RFC 4271の基本形では、ネクストホップはNEXT_HOP属性、プレフィックスはNLRIフィールドです。2つ目はR4から受け取った192.168.4.0/24に自ASを足して転送するUPDATE、3つ目は属性もNLRIも無い23バイトのEnd-of-RIBマーカーです。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 23
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 01つの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組だけです。
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>STEP 5でこの5つをまとめて削除すると、取り消しも1つのUPDATEにまとまります。Withdrawn Routes Lengthが20(4バイト × 5)で、パス属性はありません。
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経路の取り消しと転送への影響(STEP 2・3)
STEP 2でR4のLoopback1をshutdownすると、192.168.4.0/24が広告できなくなります。取り消しはR4 → R3 → R2 → R1と伝播し、R2 - R3間ではSTEP 2のNo.1として観測されました。
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: 0R2のBGPテーブルから消え、2つのASを越えた先のR1でも消えています。
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 pathsRP/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は全滅です。
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のルーティングテーブルと疎通も復活します。
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:45NOTIFICATIONメッセージの中身(STEP 1・9)
NOTIFICATIONはエラーコードとサブコードで切断の理由を伝えます。同じCease(6)でも、clear bgpによる再確立とネイバーのshutdownではサブコードが違います。
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)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には送信側・受信側それぞれの記録が残ります。
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 resetBGP 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 resetBGP 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 shutdownSTEP 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バイトです。
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)soft-reconfiguration inbound alwaysが入っているかどうかで、送るか送らないかが変わります。3つのSTEPでR2のshow bgp neighborのカウンタを比べると次のとおりです。
| STEP | R2の設定と操作 | キャプチャー内のROUTE-REFRESH | Route refresh request: sent |
|---|---|---|---|
| 6 | 設定あり。clear bgp ipv4 unicast 10.2.3.3 soft | 0件 | 0 |
| 7 | 設定を外してclear bgp ipv4 unicast 10.2.3.3 soft in | 1件 | 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も使えなくなります。
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秒にしました。
router bgp 65002
neighbor 10.2.3.2
timers 30 90コミットしただけでは切り替わりません。Hold TimeはOPENで交換する値なので、セッションを張り直すまで反映されません。
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 secondsclear bgpで張り直すと、R3が90、R2が180を提示し、双方とも90秒になります。設定を変えていないR2でもConfigured hold timeは180のまま、実際のHold timeが90に変わり、KEEPALIVE間隔も3分の1の30秒に連動します。
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: 3BGP 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秒間隔です。
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の値です。
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.txt | show 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.txt | show 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出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 1:R2でclear bgp 10.2.3.3(セッションの再確立)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | exec |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 2:R4でinterface Loopback1をshutdown(経路の取り消し)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | commit |
STEP 3:R4でinterface Loopback1をno shutdown(経路の再広告)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | commit |
STEP 4:R4にLoopback11〜Loopback15を追加して5プレフィックスを広告
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | commit |
STEP 5:R4から5プレフィックスをまとめて削除
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | commit |
STEP 6:R2でclear bgp ipv4 unicast 10.2.3.3 soft
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | exec |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 7:R2からsoft-reconfiguration inbound alwaysを外してsoft in
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 8:R2にsoft-reconfiguration inbound alwaysを戻す
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 9:R3のR2向けネイバーをshutdown
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | commit |
| R4 | show | log | run | ping | trace | — |
STEP 10:R3のR2向けネイバーをno shutdown
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | commit |
| R4 | show | log | run | ping | trace | — |
STEP 11:R3のR2向けネイバーにtimers 30 90を入れてclear bgp
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | commit |
| R4 | show | log | run | ping | trace | — |
STEP 12:R3からtimers 30 90を外す(最終状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | commit |
| R4 | show | log | run | ping | trace | — |
パケットキャプチャーはSTEPごとに取得しています(キャプチャーしていない区間は「—」)。STEP 11と12はHold Timeの変更前後のKEEPALIVE間隔を比べるため、通しで1本にしています。
| STEP | R2 - R3間 | R3 - R4間 |
|---|---|---|
| 0 | pcap | — |
| 1 | pcap | — |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
| 4 | pcap | pcap |
| 5 | pcap | pcap |
| 6 | pcap | — |
| 7 | pcap | — |
| 8 | pcap | — |
| 9 | pcap | — |
| 10 | pcap | — |
| 11 | STEP 12に含む | — |
| 12 | pcap | — |
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| IANA | Border Gateway Protocol (BGP) Parameters | メッセージタイプ、パス属性、Capabilityコード、NOTIFICATIONのエラーコード / サブコードなど、BGPで使われる番号の割り当て一覧。 |
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | BGP-4の基本仕様。各メッセージの形式を定義。 |
| RFC 5492 | Capabilities Advertisement with BGP-4 | OPENメッセージのCapabilityを定義。 |
| RFC 4486 | Subcodes for BGP Cease Notification Message | NOTIFICATIONのCeaseサブコードを定義。 |
| RFC 2918 | Route Refresh Capability for BGP-4 | ROUTE-REFRESHメッセージとCapabilityを定義。 |
| RFC 7313 | Enhanced Route Refresh Capability for BGP-4 | Reservedフィールドを Message Subtype として再定義し、BoRR / EoRR を追加。 |
| RFC 8654 | Extended Message Support for BGP | メッセージの最大長を65535バイトに拡張するCapability 6を定義。 |
| RFC 4724 | Graceful Restart Mechanism for BGP | End-of-RIBマーカーを定義。 |
| RFC 4760 | Multiprotocol Extensions for BGP-4 | MP_REACH_NLRI / MP_UNREACH_NLRI属性を定義。 |
関連記事
- 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(ベストでない外部経路の広告)