Border Gateway Protocol

Border Gateway Protocol（ボーダ・ゲートウェイ・プロトコル、略称 : BGP）はインターネットの基幹となるルーティングプロトコルである。インターネットにおける最大の構成要素となる自律システム(Autonomous System:AS)の管理者のポリシーをAS間の経路制御に反映させる事を目的として設計された。 自律システム (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でのルータ間のネイバー (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接続がされ次第、ピアのセッションが確立・維持される方向で状態遷移する。 BGPは経路の選択に上から下の順に以下の基準を用いる。 ネクストホップルータへの明示的なルート（デフォルトルートではない）がルーティングテーブルに存在する。 より高いWeight属性を持つ経路を選択（シスコシステムズ社のルータのみ） より高いローカル設定属性を持つ経路を選択 このルータを起源とするBGPを選択 ASパスのルートが最も短いものを選択 オリジン属性の値がより低いルートを選択 (IGP < EGP < Incomplete) MED (Multi exit discriminator) 属性の値が一番低い経路を選択 内部経路より外部経路を選択 ネクストホップへの経路で最もIGPメトリック値が最も低いものを選択 もし全ての経路が外部からのものであれば、一番古いものを選択 最も低いBGP IDを持つネクストホップルータを選択 ルートフラップダンピングは、ルートフラッピングによる影響を軽減させるために組み込まれている。 ルータでのフラッピングは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の経路集約の設定が失敗し、大量の経路情報が外部に流出したことが原因であった。 EGP - 1984年にRFCとして提案された、BGPの前身となったプロトコルである。 BGPに関する重要なRFC RFC 4271, A Border Gateway Protocol 4 (BGP-4)（廃止: RFC 1771） RFC 4272, BGPのセキュリティー・脆弱性についての分析 RFC 4273, BGP-4のための管理オブジェクトの定義 RFC 4274, BGP-4プロトコルの分析 RFC 4275, BGP-4 MIB Implementation Survey RFC 4276, BGP-4導入レポート RFC 4277, BGP-4プロトコルを使った実験 RFC 4278, Standards Maturity Variance Regarding the TCP MD5 Signature Option (RFC 2385) and the BGP-4 Specification RFC 3392, BGP-4のアドバタイズ能力 RFC 3065, BGPにおける自律システム (AS) のコンフェデレーション RFC 2918, BGP-4のルートリフレッシュ能力 RFC 2796, BGPルートリフレクション - IBGPのフルメッシュとの選択 RFC 1772, Application of the Border Gateway Protocol in the Internet Protocol (BGP-4) using SMIv2 廃止となったBGPに関するRFC RFC 1965, 廃止 - BGPにおける自律システム（AS）のコンフェデレーション RFC 1771, 廃止 - A Border Gateway Protocol 4 (BGP-4) RFC 1657, 廃止 - BGP-4のための管理オブジェクトの定義 RFC 1655, 廃止 - インターネットにおけるBGPアプリケーション RFC 1654, 廃止 - A Border Gateway Protocol 4 (BGP-4) RFC 1105, 廃止 - Border Gateway Protocol (BGP) BGPの導入に関するもの OpenBGPD OpenBSDチームによって開発されたBSDライセンスのソフト Quagga GNU Zebraから分岐したUnix-likeなGPLのルーティングソフトウェア Xorp the eXtensible Open Router Platform, BSDライセンスのルーティングソフトウェア GNU Zebra BGP4をサポートしたGPLのルーティングソフトウェア BIRD Unix-likeなプラットホームのためのGPLのルーティングパッケージ BGP Interactions at Router Startup Described as a Sequence Diagram (PDF) BGPの通信障害に関する情報 Major outages today, not much info at this time 2014年8月12日に米国で発生したISP間の通信障害に関する最初の報告