Border Gateway Protocol

概要

自律システム (AS) 間のルーティングを行うExterior Gateway Protocol（EGP）の通信プロトコルである。
BGPはIPネットワークか自律システム (AS) 間の到達性を示すプレフィックス (prefix) のルーティングテーブルを維持することでルーティングを行う。
BGPはパスベクトル型ルーティングプロトコルに分類され、技術的なメトリックは使用しないが、ネットワークの細かい規則や方針に従ってルーティングを行う。
BGPはクラスレスドメイン間ルーティング (CIDR) をサポートし、経路の集約を行うことでルーティングテーブルのサイズを削減することができる。
BGPを利用するルーター間はIGPセッションを張る。
ルーターの数が多いネットワークでBGPを利用する場合、IGPセッションの数が多くなり、スケーラビリティの問題が発生する。この問題を解決するために利用している技術をルートリフレクションと言う。
AS間の経路が変化した場合、変化した差分の情報をやり取りする。
BGPはNSFNETインターネットバックボーンを廃して、複数のバックボーンネットワークを繋ぐ完全分散ルーティングに移行するため、EGPに代わるルーティングプロトコルとして生まれた。
こうして生まれたBGPはインターネットを本当の分散システムへと変えた。
BGPの2015年現在のバージョンであるバージョン4は1994年に提案され、2006年1月には従来のRFC 1771からRFC 4271に更新された。
その際に以前のバージョンは廃止された。
非常に大きなプライベートIPを利用したネットワークでもBGPを使用することができる。
例えばいくつかの巨大なOSPFの橋渡しするのに使えるし、BGPのマルチホーミング機能を利用してネットワークの冗長性を改善することができる。
大部分のインターネットユーザにはBGPは無縁な存在であるが、大部分のインターネット・サービス・プロバイダは他のインターネット・サービス・プロバイダとのルーティングにBGPを利用している。
その重要度はインターネット・サービス・プロバイダを電話回線業者に例えると公衆交換電話網上における共通線信号No.7に匹敵する。

BGPの動作

BGPでのルータ間のネイバー (neighbor) やピア (peer) はTCPのポート179番を通じて手動による設定で確立される。
BGPを利用するルータ（スピーカと言う）は接続を維持するために19バイトのキープアライブ (keepalive) を定期的に送信する（デフォルトは60秒毎）。
トランスポートプロトコルにTCPを使うのは、ルーティングプロトコルの中ではBGPだけである。
BGPが自律システム (AS) 内で動くとき、そのBGPを内部BGP（interior Border Gateway Protocol、以下iBGPと略す）という。
iBGPで広報される経路にはアドミニストレイティブディスタンス値200をとる。
AS間で動くBGPを外部BGP（exterior Border Gateway Protocol、以下eBGPと略す）といい、アドミニストレイティブディスタンス値20をとる。
BGPを使用しているルータの中でiBGPのトラフィックにかかわるルータをトランジットルータ (transit router) という。
またASの境界に位置し、eBGPを使って他のASと情報をやり取りするルータをボーダルータ (border router) もしくはエッジルータ (edge router) という。
同一のAS内に存在し、なおかつBGPのルーティングに参加している全てのルータはフルメッシュで構成されなくてはならない。
つまり各々のルータは自分以外の全てのルータとピアを結ばなくてはならない。
このネットワーク構築方法であると、ネットワーク内のルータが増えるとコネクションの数は二次関数的に増加し、いずれはスケールの問題に直面することになる。
これを回避するには、2つの方法がBGPには組み込まれている。
ひとつはRFC 2796で定められたルートリフレクタ、もうひとつはRFC 3065で定められたコンフェデレーションである。
ルートリフレクタはAS内で1つ（もしくは冗長性をとって2つ）のルータをルートリフレクタにすることで、他のルータはこのルータとだけピアを結べばいいことになり、AS内で必要なピア接続の数を減らすことができる。
コンフェデレーションはかなり大きなネットワークで使う方法で、いくつかの対処可能なある程度小さなASを大きなASで包み込むような方法である。
コンフェデレーションはルートリフレクタと一緒に使うことができる。

有限状態機械

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

ルートフラッピング

ルートフラップダンピングは、ルートフラッピングによる影響を軽減させるために組み込まれている。
ルータでのフラッピングはWAN/WLANのリンクやインターフェースが故障したり自己修復されたりすること、誤設定されること、誤管理されることで発生する。
もしルートフラップダンピングがなかった場合、フラッピングを起こしたルートはただちにルーティングテーブルから削除されるが、その際にルータに高負荷がかかる恐れがあり、それがルーティングの安定性に重大な影響を及ぼす可能性がある。
ダンピングがあることで、ルートのフラッピングは指数減少する。
どういう原因かを問わず、ルートが利用ができなくなったが、すぐさま復活するという事象が起きた場合、初回はBGPの通常のフェイルオーバーする時間を維持するためにダンピングは何も行わない。
2回目に同じことが起きた場合、BGPはこのプリフィックスを通ることを一定時間避ける。
以降、同じことが起きるたびに指数関数的にタイムアウトの時間が減る。
異常な状況が去り、一定時間がたつとプリフィックスは何事もなかったかのように復活する。
ダンピングはDoS攻撃を軽減することも可能である。
またダンピングのタイミングはカスタマイズ可能である。
バックボーンのリンクとルータのプロセッサの速度が速くなりネットワークに変化があった場合、ルータのルーティングテーブルに非常に速く反映できるようになってからは、一部のネットワーク構築にかかわる人からルートフラップダンピングはそれほど重要ではないのではないか、むしろ状況を悪化させてるのではないかという意見が出ている。この意見については今後、研究と議論が必要である。

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

BGPとインターネットインフラが直面している最大級の問題のひとつにインターネットルーティングテーブルの増大が挙げられる。
もしインターネットルーティングテーブルが適切な範囲を超えて増大した場合、ルータのルーティングテーブルを維持するためのメモリ要求やCPUの負荷はその能力を超え、インターネットのゲートウェイとしての役割を果たせなくなるだろう。
それに加えてルーティングテーブルが巨大化したことによりネットワーク構成に大きな変化があった場合、ネットワークの安定化（上記参照）に相当長い時間かかり、その間ネットワークサービスは全く信頼のできない状態になるか、最悪の場合、全く利用できなくなるだろう。
2001年の後半までグローバルルーティングテーブルは指数関数的に成長しており、それはインターネットへの接続性の維持への脅威となっていた。
それに対してグローバルルーティングテーブルをCIDRやルート集約を用いて、なるべく小さく維持するという各ISPによる協調努力があった。
その努力の甲斐あってその後数年は線形的成長にとどまった。
ただし、CIDR REPORTによると、2014年8月にはBGPテーブルのサイズが512Kを突破し、基幹業務向けの標準的なルータの処理能力やリソースでは処理しきれなくなってきている。
CISCO等の機器メーカーは、対応可能な上位機種にルータを変更したり、設定を変更したりすることを勧告している。
2014年8月12日から北米においてフルルートを扱うBGPルータのルーティングテーブルが溢れたことによるISP間の通信障害が発生した。
自律システムの1つであるVerizonの経路集約の設定が失敗し、大量の経路情報が外部に流出したことが原因であった。