BGPは4種類のメッセージをやり取りし、ネイバーを確立し、3つのテーブル(データーベース)を最新に保つ。
| 4種類のメッセージ |
BGPの4つのメッセージ種類(BGP Message Types)
| メッセージ名 | 主な目的 | タイミング |
|---|---|---|
| OPEN | ピア関係(セッション)を確立する | 最初に送信される |
| UPDATE | 経路情報(広告・撤回)をやり取りする | 通常運用時 |
| KEEPALIVE | 接続が生きていることを確認する | 定期的に送信 |
| NOTIFICATION | エラー発生を通知し、セッションを終了する | 異常時 |
| BGPルーターが保持するデータベース |
BGPルータはルーティングする為に、以下のデーターベースを保持しています。
| BGPのデーターベース | 説明 | コマンド |
| ①BGPネイバーテーブル | BGPネイバーの情報 | show ip bgp summary |
| ②BGPテーブル | すべてのBGPルート情報 | show ip bgp |
| ③ルーティングテーブル | ↑上記のルートのうちのBGPベストパスを含む 全ての経路(staticなども)。 | show ip route |
| ①BGPネイバーテーブル |
BGPネイバーの状態を保持しているテーブルを、BGPネイバーテーブルと言います。
show ip bgp summaryで確認できます。
BGPネイバーの関係には3つ種類があります。
| ネイバー状態の種類 | 説明 |
| EBGPネイバー | ルータ同士のAS番号が異なる |
| IBGPネイバー | ルータ同士のAS番号が同一 |
| IEBGPネイバー | コンフェデレーション機能を利用するネイバー |
| ②BGPテーブル |
BGPで受信・生成したルート情報を保持するテーブル。
各BGPピアから受信した経路情報が含まれ、BGPのルート選択アルゴリズムによって最適な経路が決定されます。
BGPのパスアトリビュート(AS-PATH、Local Preference、MEDなど)を基に最適なルートが選ばれます。
| ③ルーティングテーブル |
ルータが実際に使用する経路情報を保持するテーブル。
BGP以外にも、OSPF、EIGRP、スタティックルートなどのさまざまなプロトコルから選ばれた最適なルートが格納されます。
BGPテーブルにあるすべてのルートがルーティングテーブルに入るわけではなく、BGPのベストパスアルゴリズムで選ばれた最適なルートのみがインストールされます。
| BGPの状態遷移 |
Contents
Ciscoでの確認コマンド例
show ip bgp summary
出力例:
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
192.0.2.2 4 65002 1024 1030 3 0 0 00:30:12 Established
198.51.100.2 4 65003 0 0 0 0 0 00:00:09 Active
ここで「State/PfxRcd」列が Established ならピア確立成功です。
ActiveやIdleなら、接続に問題があります。
BGPの状態遷移(6ステージ)
| 状態名 | 意味 | 主な動作 |
|---|---|---|
| Idle | 初期状態 | TCP接続を待機。接続を開始する準備。 |
| Connect | TCP接続中 | 相手へのTCP接続を試行。成功で次へ。 |
| Active | 再試行状態 | 接続失敗時に再度トライ。 |
| OpenSent | OPEN送信済み | 自分のOPENメッセージを送信し、相手からのOPENを待つ。 |
| OpenConfirm | OPEN確認中 | 双方のOPENを交換済み。KEEPALIVE応答待ち。 |
| Established | 確立状態 | セッション確立!UPDATEで経路交換が可能。 |
Idle(アイドル)「まだ相手に話しかけてない状態。」
- 初期状態。ピアとの接続をまだ開始していない。
- TCPポート179での接続を待機。
- 障害時などにここに戻ることもある。
Connect(コネクト)「相手に電話をかけている最中。」
- TCPセッションを開始している段階。
- 相手のIPに対して接続を試みる。
- 成功すれば OpenSent へ進む。
- 失敗した場合は Active へ。
Active(アクティブ)「相手が出なかったので、もう一回電話をかけ直している。」
- TCP接続を再試行している状態。
- Connectで失敗したのでリトライ中。
- 成功すればOpenSentへ進む。失敗するとまたConnectへ。
OpenSent(オープン送信)「自分の名前を言ったので、相手の名前を待っている。」
- 自分のOPENメッセージを送信済み。
- 相手からのOPENメッセージを受信待ち。
- 受信に成功するとOpenConfirmへ。
OpenConfirm(オープン確認)「お互い自己紹介を済ませた状態。」
- 双方がOPENメッセージを交換済み。
- KEEPALIVEメッセージの受信待ち状態。
- KEEPALIVEを受信したら、セッション確立(Established)。
Established(エスタブリッシュド)「会話(経路交換)が始まった状態。」
- BGPセッション確立!
- UPDATEメッセージで経路情報の交換が可能。
- KEEPALIVEを定期送信し、セッション維持。
状態遷移がうまくいかない原因例
| 状態 | よくある原因 | 対策 |
|---|---|---|
| Idle | ピア設定ミス、ACLでブロック | IP・AS設定確認、TCP/179開放 |
| Active | 相手側設定ミス、ルーティング不達 | 相互設定を確認(neighbor設定など) |
| OpenSent | BGPバージョンやAS番号不一致 | neighbor remote-as 設定確認 |
| OpenConfirm | Keepalive未受信、タイマー不一致 | hold-time・keepalive設定を確認 |
| Established後の切断 | 認証エラー、ネットワーク断 | TCPセッションログ確認 |