複雑なプロトコル「BGP」と睨め合おう

こんにちは!
37歳にしてやっと普通運転免許を取得し、半年間経過したnogusanです。業務後に夜な夜な首都高をドライブし、複雑怪奇なJCTもスムーズに走行できるようになりました。最近は箱根スカイラインなどの峠も攻め始めています!
業務でAWS Direct Connectを使用しており、前提知識となるBGPの理解で苦戦することが多いです。今回はこのBGPが何者なのか、複雑怪奇なものが大好きな私が、逃げずにしっかりと立ち向かって解説していきます!
この記事に関して
読み終えるとわかること
- ルーティングプロトコルの全体概要
- BGPの詳細
- BGPとDXとの関係性
話さないこと
- BGP以外のルーティングプロトコルの詳細
- BGPの運用方法などの勘所
ネットワーク関連の前提知識
BGPを理解するためには、ネットワーク関係の前提知識を整理する必要があります。
順に見ていきましょう。
ルーティングプロトコル
BGPはルーティングプロトコルの1つです。
ルーティングプロトコルは、複数ルータ間で経路情報を交換し、目的地までの最適パスを決定するための手順のことです。
ルーティングプロトコルの設定手法は、ルートテーブル(ルータがパケットを送信する宛先を判断するための経路情報一覧)の設定方法によって、スタティックルーティングとダイナミックルーティングの2つに大別できます。一長一短あり、どちらか片方しか使用できないことはなく、組み合わせて使用可能です。
項目 | ダイナミック | スタティック |
---|---|---|
設定方法 | ルーティングプロトコルを設定すれば自動更新 | 手作業でルートテーブルを都度更新 |
メリット | ・管理コストが軽減 ・障害発生時、自動的に迂回路を選定する | ・誤った経路情報が広がにくい ・負荷が小さい |
デメリット | 隣接ルータ間で定期的に情報交換するため負荷がかかる | 障害発生時に手動対応が必要 |
AS(Autonomous System)
インターネットは世界中に張り巡らされており、組織・団体など多種多様な性質を持つまとまりどうしが、対等な関係で通信を行っています。このまとまりは一定のルールを持ち、自律的に経路制御を行っています。このまとまりのことを自律システム(AS : Autonomous System)といいます。
一例として、地域ネットワークやISP(インターネットサービスプロバイダ)が挙げられます。
下の図は、ASがインターネットを形成している様子です。(初出の用語は本節で順に取り上げます)

AS番号
ASには、JPNICなどの組織によって2〜4バイトのAS番号がユニークに割り振られており、インターネット上でAS識別するのに使用します。AS番号は次の2種類に分類されます。
- グローバルAS番号(1〜64511):インターネット上に公開するユニークなAS番号
- プライベートAS番号(64512~65535):組織内や閉域網で自由に使用できるAS番号
このグローバルAS番号/プライベートAS番号は、粒度が異なるだけでグローバルIPアドレス/パブリックIPアドレスとの関係と同じです。
IX(Internet Exchange)
複数のインターネット事業者(ISP)や組織が相互にトラフィックを交換(ピアリング)するための中立的な接続ポイントです。
かつてのインターネットでは、すべてのトラフィックがトランジット回線(上位ISP)を経由しておりました。これが理由でトラフィック混雑や遠回り経路によるレイテンシーなど様々な問題が発生し、現代では相互接続点としてIXが存在しています。
NOC(Network Operation Center)
ネットワークの監視・運用・障害対応を24時間体制で行う中枢組織(または施設)のことです。 通信事業者や大規模なISP、データセンター、IX運営会社などに存在します。
IGPとEGP
自律システムが使用するルーティングプロトコルは、下記の2種類が存在します。
分類 | 説明 | 例 |
---|---|---|
IGP(Internal Gateway Protocol) | AS内部のルータ間で経路情報を交換 | RIP、OSPF、EIGRP等 |
EGP(External Gateway Protocol) | 異なるAS間で経路情報を交換 | BGP |
アドバタイズ
ルータが自分の持っている経路情報を、BGPなどのルーティングプロトコルを使って隣接ルータ(ピア)に伝える行為のことです。日本語では「広告」と訳されます。アナウンスと呼ぶこともあります。
伝播(でんぱ)
経路情報がネットワーク内のルータ間で共有されていくようすのことです。
ピア
隣接するルータのことです。ネイバーと呼ぶこともあります。
経路制御アルゴリズム
ルーティングプロトコルの経路選定に使用する代表的なアルゴリズムは、下記3種類です。
名称 | 説明 | 使用プロトコル例 |
---|---|---|
距離ベクトル型(Distance-Vector) | メトリック(*1)・方向によって経路選定する。処理が比較的簡単な一方、経路収束(*2)や経路ループが発生しやすい。また、ルータごとに経路情報が異なるため管理が煩雑になりやすい。 | RIP、RIP2、IGRP |
リンク状態型(Link-State) | ルータがネットワーク全体のトポロジを理解してルートテーブルを作成する。最終的に全ルータの経路情報が揃うため、管理しやすい。ただし、ネットワークトポロジの算出の負荷がかかる。 | OSPF |
経路ベクトル型 | 各ASが通告する経路情報(AS_PATH)をもとに経路選定を行う。ループ防止や経路制御が可能で、インターネット規模のAS間経路制御に適している。 | BGP |
*1メトリック:ルータ間の距離。ホップ数。
*2経路の収束:経路制御情報が安定するまでに時間がかかる現象のこと。
各アルゴリズムの動作イメージを図で示します。



BGP
前提知識の整理が終わったところで、やっと本題のBGPについて見ていきます。
概要
BGP(Border Gateway Protocol)とはEGPに分類され、AS間の経路制御に用いられるプロトコルです。
従来はISPどうしの経路制御に多く使用されていましたが、ここ最近ではAWS Direct Connect等のパブリッククラウドとプライベート接続を結ぶ場合に、その経路情報交換に使用することが多くなってきました。
特徴
BGPの特徴を列挙します。
- 下位プロトコルはTCP(179)
- ルータどうしはユニキャスト通信
- 経路情報の更新対象は差分のみのため、更新負荷が軽減される
基本動作
BGPの基本動作は下記の通りです。
- TCPコネクションの確立
- ルータどうしでTCPコネクションを確立
- 双方から定期的に試みるのが普通だが、確立されるのは片方が試みたセッションのみ
- コリジョン(衝突)が発生した場合は、ルータIDの値が大きい方のセッションが優先
- PASSIVEモード(相手からのTCPコネクション確立要求を待つのみのモード)を搭載するルータもある
- 基本情報の交換
- BGP基本情報を交換(ルータID、所属するAS番号)
- 経路情報の交換(BGPセッション確立直後)
- UPDATEメッセージ(後述)を使用する
- 互いの学習しているすべての経路情報を交換する
- 生存確認(KEEP_ALIVE)
- 互いのルータが定期的に生存しているかを確認する
- 経路情報の交換(経路情報の更新時)
- 差分のみ更新
メッセージ
BGPで交換されるメッセージには下記があり、それぞれパケットフォーマットを持っております。
今回の記事での本筋となるのはUPDATEメッセージです。
- OPEN:BGPピア確立のための基本情報の交換
- UPDATE:経路情報の交換
- NOTIFICATION:エラー検知
- KEEPALIVE:BGPピアの正常性確認
- ROUTE-REFRESH:ピアに対する経路の再送要求
パス属性
経路の優先度やループ検知などに利用される情報のこと。
カテゴリ
パス属性は、「ルータと経路上でどのように取り扱われるか」によって以下4つの属性に分かれます。
名称 | 日本語名 | 説明 |
---|---|---|
well-known mandatory | 既知必須 | すべてのルータがサポートすべき、かつ、すべてのBGP経路に付加されるべき属性 |
well-known discretionary | 既知任意 | すべてのルータがサポートすべき、しかし、BGP経路には付加されるとは限らない |
optional transitive | オプション通過 | サポートされるとは限らず、当該属性が非サポートであっても通過させなければならない |
optional non-transitive | オプション非通過 | サポートされるとは限らず、当該属性が非サポートであれば通過させてはならない |
パス属性の種類
パス属性には、経路選定するための様々な情報が入っています。
本記事で取り上げるのは下記の通りです。
No | 名称 | 名称 |
---|---|---|
1 | 既知必須 | ORIGIN |
2 | 既知必須 | AS_PATH |
3 | 既知必須 | NEXT_HOP |
4 | オプション非通過 | MULTI_EXIT_DISC(MED) |
5 | 既知任意 | LOCAL_PREF |
1.ORIGIN
経路情報の生成元を示し、生成元によって以下の3つの値が定義されています。
0
:AS内部(IGP)1
:AS外部(EGP)2
:上記以外(Incomplete)
2
は出どころ不明という意味で、下記一例のように、network
コマンドで手動により経路をBGPに注入した場合が挙げられます。これはBGPに「192.0.2.0/24 の経路をアドバタイズしてくれ」と命じているわけですが、
BGPはその出どころがIGPなのか手動なのかわからないためIncompleteとして分類されます。
router bgp 65000
network 192.0.2.0 mask 255.255.255.0
2.AS_PATH
ピアに引き渡される経路情報が経由してきたAS番号が、以下の法則で順番に挿入されます。
- EGPではAS番号を1つ付加して
- IGP内部ではAS番号は変更せずにアドバタイズ(内部でアドバタイズしているのみのため)
当該属性は、以下の目的で使用されます。
- 経路選択の際、含まれるAS番号の個数が少ないほうが優先される
- 受信したAS_PATH属性に自AS番号が含まれているときに、ループ防止のためこれらの経路は受信しないようにする
下図に、BGPにおいて一連のAS番号がアドバタイズされ、伝播していく様子を示します。

3.NEXT_HOP
受信した経路情報宛のネクストホップアドレスが含まれています。
ネクストホップアドレスは、送信元となるルータが自分自身のIPアドレスを注入して送信先にアドバタイズします。この際、同一AS内ではNEXT_HOPの値は変更されないため、IGPを利用してネクストホップを記憶する必要があります。
なお、ルータが受信した経路情報に基づいてトラフィック送信する際、まずはNEXT_HOP属性を確認し、次に該当するNEXT_HOPアドレスを自身のルートテーブルで参照します。これを再帰ルックアップと呼びます。
4.MEDとLOCAL_PREF
MED(Multi Exit Discriminator)とLOCAL_PREFは対照的なパス属性ですので、下表で比較してご説明します。
性質 | LOCAL_PREF | MED |
---|---|---|
主な用途 | 自ASからの出力トラフィック制御 | 自ASに対する入力トラフィック制御 |
評価優先度 | 最高 | 低い |
値の評価方法 | 大きい値が優先される | 小さい値が優先される |
伝播の範囲 | 自ASまで | 隣接するASまで |
注意点 | DXルータの経路制御は不可 | AWS公式にて非推奨 |
なお、AWSでは、他のパス属性と比較して経路選定時の評価の優先度が低いことを理由に、MEDによってAWSからの経路を制御することは推奨されていません。

経路選択アルゴリズム
BGPが学習した経路情報を保存するテーブルをBGP-RIB(Routing Information Base)といいます。
BGPは、BGP_RIBに保持された情報をもとに、下記のプロセスでベストパスを選定します。
- ネクストホップへの到達性確認(到達不可能であればBGP経路として無効)
- LOCAL_PREFの値を比較(最も大きい値の経路を優先)
- AS_PATHの値を比較(パス長がもっとも短いものを優先)
- ORIGINの値を比較(最も小さい値を優先)
- MEDの値を比較(最も小さい値の経路を優先)
- ピアタイプを比較(EBGPで受信した経路>IBGPで受信した経路)
- ネクストホップアドレスまでの経路を比較
- ルータIDを比較
BGPとDXとの関係性
ここまででBGPの仕様について詳しく見てきました。
最後に、BGPとAWS Direct Connectとの関係を改めて確認します。
AWS Direct Connectは、AWS指定のデータセンター(ダイレクトコネクトロケーション)から、AWSが管理するネットワーク設備を通してVPCなどの各種AWSリソースにアクセスするためのサービスです。
大まかな構成は下図のようになり、3つの構成単位それぞれがAS番号(VPC空間はプライベートAS番号)を保持することになります。

それぞれが異なる空間(外部)のASでありAS番号が割り振られているため、各ルータが経路を把握する必要があり、BGPを使用することになります。
異なるAS間での冗長構成と経路制御にもっとも適していることから、AWS Direct ConnectではBGPが使用されています。
さいごに
本記事を最後まで読んでいただきありがとうございます。
実は筆者、AWS ANS試験を合格しているのですが、試験勉強中にBGPが登場したときはあっさりと「ルーティングに必要な情報を交換するためのプロトコル」とだけ理解し、「ふーん、そうなんだ。」という感じで終わらせていました。
しかし、実際に業務でAWS Direct Connectが登場すると、AWS Direct Connectそのものの仕様だけではなく、前提となるBGPの知見が無いためについていけていないと実感することが多々ありました。
当社DWSはAWSのプロフェッショナルと銘打っておりますが、AWSを理解するためにはその前提となる技術の理解が不可欠です。
今回の記事で読者の皆さまに、BGPの仕様だけではなく「何ごとも前提知識を学ぶこと」の大切さが教訓として伝わっていれば誠に幸いです。