Border Gateway Protocol

**Border Gateway Protocol**（ボーダー・ゲートウェイ・プロトコル、略称 : **BGP**）は自律システム（AS）間で経路情報を交換するために設計されたルーティングプロトコルである。広義のExterior Gateway Protocol（EGP）であり、インターネットではインターネット・サービス・プロバイダ（ISP）や巨大なネットワークの相互接続で標準的なルーティングプロトコルとして利用されている。

## 概要
自律システム（AS）間のルーティングを行うExterior Gateway Protocol（EGP）の通信プロトコルである。

BGPはIPネットワークか自律システム（AS）間の到達性を示すプレフィックス（）のルーティングテーブルを維持することでルーティングを行う。BGPは****に分類され、技術的なメトリックは使用しないが、ネットワークの細かい規則や方針（ポリシー）に従ってルーティングを行う。BGPはクラスレスドメイン間ルーティング（CIDR）をサポートし、経路集約を行うことでルーティングテーブルのサイズを削減することができる。

BGPを利用するルーター間はIGPセッションを張る。ルーターの数が多いネットワークでBGPを利用する場合、IGPセッションの数が多くなり、スケーラビリティの問題が発生する。この問題を解決するために利用している技術をルートリフレクションと言う。

AS間の経路が変化した場合、変化した差分の情報をやり取りする。

BGPはNSFNETインターネットバックボーンを廃して、複数のバックボーンネットワークを繋ぐ完全分散ルーティングに移行するため、EGPに代わるルーティングプロトコルとして生まれた。こうして生まれたBGPはインターネットを本当の分散システムへと変えた。

BGPの2015年現在のバージョンであるバージョン4は1994年に提案され、2006年1月には従来のからに更新された。その際に以前のバージョンは廃止された。

非常に大きなプライベートIPを利用したネットワークでもBGPを使用することができる。例えばいくつかの巨大なOSPFの橋渡しするのに使えるし、BGPのマルチホーミング機能を利用してネットワークの冗長性を改善することができる。

大部分のインターネットユーザにはBGPは無縁な存在であるが、大部分のインターネット・サービス・プロバイダは他のインターネット・サービス・プロバイダとのルーティングにBGPを利用している。その重要度はインターネット・サービス・プロバイダを電話回線業者に例えると公衆交換電話網上における共通線信号No.7に匹敵する。

## BGPの動作
BGPでのルータ間のネイバー（）やピア（）はTCPのポート179番を通じて手動による設定で確立される。BGPを利用するルータ（BGPスピーカーと呼ばれる）は接続を維持するために19バイトのキープアライブ（keepalive）を定期的に送信する（デフォルトは60秒毎）。トランスポートプロトコルにTCPを使うのは、ルーティングプロトコルの中ではBGPだけである。

BGPが自律システム（AS）内で動くとき、そのBGPを内部BGP（、以下iBGPと略す）という。AS間で動くBGPを外部BGP（、以下eBGPと略す）という。BGPを動作させているルータの中でiBGPのトラフィックにかかわるルータをトランジットルータ（）という。またASの境界に位置し、eBGPを使って他のASと情報をやり取りするルータをボーダルータ（）もしくはエッジルータ（）という。

同一のAS内に存在し、なおかつBGPのルーティングに参加している全てのルータは原則としてフルメッシュで構成されなくてはならない。つまり各々のルータは自分以外の全てのルータとピアを結ばなくてはならない。このネットワーク構築方法であると、ネットワーク内のルータが増えるとコネクションの数は二次関数的に増加し、いずれはスケールの問題に直面することになる。これを回避するには、2つの方法がBGPには組み込まれている。ひとつはで定められたルートリフレクタ、もうひとつはで定められたコンフェデレーションである。

ルートリフレクタはAS内で1つ（もしくは冗長性をとって2つ）のルータをルートリフレクタにすることで、他のルータはこのルータとだけピアを結べばいいことになり、AS内で必要なピア接続の数を減らすことができる。

コンフェデレーションはかなり大きなネットワークで使う方法で、いくつかの対処可能なある程度小さなASを大きなASで包み込むような方法である。コンフェデレーションはルートリフレクタと一緒に使うことができる。

### 有限状態機械

BGPのピアは他のBGPのピアとの動作の決定にシンプルな有限オートマトン（、以下FSMと略す）を使用する。FSMにはIdle、Connect、Active、OpenSent、OpenConfirm、Establishedの6つの状態がある。BGPのピアはTCP接続がされ次第、ピアのセッションが確立・維持される方向で状態遷移する。

### 経路選択
BGPは経路の選択に上から下の順に以下の基準を用いる。
* ネクストホップルータへの明示的なルート（デフォルトルートではない）がルーティングテーブルに存在する。
* より高いWeight属性を持つ経路を選択（シスコシステムズ社のルータのみ）
* より高いローカル設定属性を持つ経路を選択
* このルータを起源とするBGPを選択
* ASパスのルートが最も短いものを選択
* オリジン属性の値がより低いルートを選択（IGP < EGP < Incomplete）
* MED（）属性の値が一番低い経路を選択
* 内部経路より外部経路を選択
* ネクストホップへの経路で最もIGPメトリック値が最も低いものを選択
* もし全ての経路が外部からのものであれば、一番古いものを選択
* 最も低いBGP IDを持つネクストホップルータを選択

### ポリシーの実装
BGPにおけるポリシーは、上述の経路選択の基準に基づいて実装される。以下に具体的な実装手法の一部を示す。

; ローカル設定属性値
: 特定のASやピアなどから受信した経路について、ルータ内のみで有効な属性値を固定的に与える。コミュニティ属性値を併用する場合を除き、他のルータやASなどの状況に影響されない。
; ASパス追加
: 他のルータやASに使わせるのが望ましくない経路に対し、自分のASをASパスに余分に追加する。他のルータやASがその経路を受信した場合、同じ宛先へより短いASパスにて到達できる経路が別にあれば、そちらを優先させることができる。
; MED属性値
: 隣接する別のASへ複数のピアを介した接続がある場合、優先的に使いたいピアに対して低いMED属性値を設定する。
; コミュニティ属性値
: 経路に対し、BGPに透過的なコミュニティ属性値を整数値として与える。コミュニティ属性値を持つ経路を受信したルータはこれを解釈し、経路に対してコミュニティ属性値が指定する処理を施す。一部のwell-known属性値を除き、上位ビットを対象AS番号、下位ビットを処理内容として用いる。当初からの仕様では対象AS番号を上位16ビット、処理内容を下位16ビットとする32ビット整数値としている。後に、対象をAS番号ではなく32ビットのIPv4アドレス、ないしは処理内容を32ビットに拡張した48ビット整数値や、32ビットAS番号に対応し、かつ処理内容も64ビットに拡張した96ビット整数値の仕様が追加されている。
: ポリシーを他のルータやASから注入するために使用する。特に、ルータ内でしか意味を持たないローカル設定属性値を外部から間接的に設定する運用が可能となる。
: 各コミュニティ属性値に対する処理内容は、well-known属性値についてはIETFが、それ以外は対象ASが定義する。後者の場合、処理内容はBGPの仕様外となるため、各ルータにて要求される処理を別途実装する必要がある。

## BGPにおける問題と緩和策
### ルートフラッピング
**ルートフラップダンピング**は、ルートフラッピングによる影響を軽減させるために組み込まれている。ルータでのフラッピングはWAN/WLANのリンクやインターフェースが故障したり自己修復されたりすること、誤設定されること、誤管理されることで発生する。もしルートフラップダンピングがなかった場合、フラッピングを起こしたルートはただちにルーティングテーブルから削除されるが、その際にルータに高負荷がかかる恐れがあり、それがルーティングの安定性に重大な影響を及ぼす可能性がある。

ダンピングがあることで、ルートのフラッピングは指数減少する。どういう原因かを問わず、ルートが利用ができなくなったが、すぐさま復活するという事象が起きた場合、初回はBGPの通常のフェイルオーバーする時間を維持するためにダンピングは何も行わない。2回目に同じことが起きた場合、BGPはこのプリフィックスを通ることを一定時間避ける。以降、同じことが起きるたびに指数関数的にタイムアウトの時間が減る。異常な状況が去り、一定時間がたつとプリフィックスは何事もなかったかのように復活する。ダンピングはDoS攻撃を軽減することも可能である。またダンピングのタイミングはカスタマイズ可能である。

バックボーンのリンクとルータのプロセッサの速度が速くなりネットワークに変化があった場合、ルータのルーティングテーブルに非常に速く反映できるようになってからは、一部のネットワーク構築にかかわる人からルートフラップダンピングはそれほど重要ではないのではないか、むしろ状況を悪化させてるのではないかという意見が出ている。この意見については今後、研究と議論が必要である。

### ルーティングテーブルの増大

BGPとインターネットインフラが直面している最大級の問題のひとつにインターネットルーティングテーブルの増大が挙げられる。もしインターネットルーティングテーブルが適切な範囲を超えて増大した場合、ルータのルーティングテーブルを維持するためのメモリ要求やCPUの負荷はその能力を超え、インターネットのゲートウェイとしての役割を果たせなくなるだろう。それに加えてルーティングテーブルが巨大化したことによりネットワーク構成に大きな変化があった場合、ネットワークの安定化（上記参照）に相当長い時間かかり、その間ネットワークサービスは全く信頼のできない状態になるか、最悪の場合、全く利用できなくなるだろう。

2001年の後半までグローバルルーティングテーブルは指数関数的に成長しており、それはインターネットへの接続性の維持への脅威となっていた。それに対してグローバルルーティングテーブルをCIDRやルート集約を用いて、なるべく小さく維持するという各ISPによる協調努力があった。その努力の甲斐あってその後数年は線形的成長にとどまった。

しかし、2014年8月にはBGPテーブルのエントリ数が512K（512,000～524,288 エントリ）を突破し、ルータの処理能力が不足しつつあったため、CISCO等の機器メーカーは、対応可能な上位機種にルータを変更したり、設定を変更したりすることを勧告した。

2014年8月12日から北米においてフルルートを扱うBGPルータのルーティングテーブルが溢れたことによるISP間の通信障害が発生した。自律システムの1つであるVerizonの経路集約の設定が失敗し、大量の経路情報が外部に流出したことが原因であった。

## 脚注

## 関連項目
* EGP - 1984年にRFCとして提案された、BGPの前身となったプロトコルである。

## 外部リンク
* BGPに関する重要なRFC
**  - （廃止: ）
**  - BGPのセキュリティー・脆弱性についての分析
**  - BGP-4のための管理オブジェクトの定義
**  - BGP-4プロトコルの分析
**  - 
**  - BGP-4導入レポート
**  - BGP-4プロトコルを使った実験
**  - 
**  - BGP-4のアドバタイズ能力
**  - BGPにおける自律システム（AS）のコンフェデレーション
**  - BGP-4のルートリフレッシュ能力
**  - BGPルートリフレクション - IBGPのフルメッシュとの選択
**  - 
* 廃止となったBGPに関するRFC
**  - 廃止 - BGPにおける自律システム（AS）のコンフェデレーション
**  - 廃止 - 
**  - 廃止 - BGP-4のための管理オブジェクトの定義
**  - 廃止 - インターネットにおけるBGPアプリケーション
**  - 廃止 - 
**  - 廃止 - 
* BGPの導入に関するもの 
** OpenBGPD OpenBSDチームによって開発されたBSDライセンスのソフト
** Quagga GNU Zebraから分岐したGPLのルーティングソフトウェア
** Xorp 。BSDライセンスのルーティングソフトウェア
** GNU Zebra BGP4をサポートしたGPLのルーティングソフトウェア
** BIRD Unix-likeなプラットホームのためのGPLのルーティングパッケージ
* 
* BGPの通信障害に関する情報
** Major outages today, not much info at this time 2014年8月12日に米国で発生したISP間の通信障害に関する最初の報告