BGPはインターネットの根幹を支える重要なルーティングプロトコルですが、初めて触れる方には少し難解に感じられるかもしれません。このブログでは、初心者がBGPを理解するための基本的な概念を、できるだけシンプルかつわかりやすい言葉で説明します。BGPを理解すれば、ネットワーク全体がどのように接続され、どのように効率的に経路が選ばれるかを理解できるようになります。
BGPとは?
BGP(Border Gateway Protocol)は、インターネット上のルータがルート情報を交換し、効率的な経路を決定するためのプロトコルです。BGPは他のルーティングプロトコルとは異なり、AS(自律システム)間でのルーティングを行う点が特徴です。BGPの重要なポイントは、インターネットの大規模かつ複雑なネットワーク構造を効率よく管理できるという点です。
BGPの標準はRFC4271に記載されており、以下のような特徴があります:
- 信頼性:TCPを使用してルータ間で経路情報を交換し、確認応答や再送が可能です。また、AS-PATHという情報でループを防ぎます。
- 安定性:フラッピング(頻繁な経路の変動)を検知して不安定な経路を抑制する機能があります。
- 拡張性:BGPは非常に多くの経路を保持することが可能で、現在では80万を超える経路が存在します。
- 柔軟性:パス属性に基づき、異なる組織ごとに異なるポリシーを適用できます。
BGPの役割とは?
BGPは、インターネット全体の「交通整理」を行います。膨大なネットワークが世界中でつながっている中で、どの経路が最適かを判断し、効率よくデータを運ぶ役割を担っています。これにより、ルータ間の通信がスムーズに行われます。
AS番号とは?
AS(Autonomous System)は、インターネット上でルートを交換する独立したネットワークの集まりです。各ASはIANA(Internet Assigned Numbers Authority)によって管理され、その内部ではOSPFやEIGRPのようなIGP(内部ゲートウェイプロトコル)を使用しますが、異なるAS同士の通信にはBGPが使われます。
AS番号は16ビットの番号で表され、範囲は1〜65535です。これはインターネットでIPアドレスと同様に、インターネットレジストリIANAによって管理されています。
- グローバルAS番号:1〜64511(インターネットで使用)
- プライベートAS番号:64512〜65535(内部ネットワークで使用)
ASはネットワークのまとまりを管理するための「住所」のような役割を果たしており、AS番号はその識別番号です。
ASのイメージ
ASの概念をもう少しわかりやすくするために、日常生活の例で考えてみましょう。
旅行の例でASを理解する
例えば、大阪の通天閣から東京のスカイツリーまで旅行するとします。移動手段として、新幹線や飛行機などがありますが、この移動をASの概念で例えてみます。各都道府県を1つのASと考え、以下のような移動プランを立ててみましょう。
- 新幹線ルート:大阪 → 名古屋 → 東京(都道府県3つ、つまりAS3つを通過)
- 飛行機ルート:大阪 → 東京(都道府県2つ、つまりAS2つを通過)
ここで重要なポイントは、通過する都道府県(AS)が少ない方が、通常は最適な経路とされることです。つまり、飛行機ルートが最適なルートとして選ばれることになります。
ネクストホップとIGPの関係
BGPの視点から見ると、飛行機ルートを選択した場合、大阪(通天閣)から東京(スカイツリー)に行くためには、最初のステップとして「関西空港」という次の行き先(ネクストホップ)を選ぶことになります。BGPはこのように、最終目的地に行くための最初のルータ(ネクストホップ)を学習します。
ただし、通天閣から直接関西空港に行けるわけではありません。大阪市内での移動(例えば、通天閣から地下鉄や電車を使って関西空港に向かう)は、BGPの管理外であり、これは内部ルーティングプロトコル(IGP:例えば、OSPFやEIGRP)が担当します。つまり、大阪の中ではBGPは使われず、別のルールに基づいて経路が決定されるのです。
東京到着後の移動
同様に、東京に到着してからスカイツリーまでの移動も東京内(AS内)の問題です。例えば、羽田空港から半蔵門線を使って移動するか、京急線を使って迂回するかは、東京の内部で決まる経路であり、BGPはこの部分のルーティングには関与しません。
トランジットの概念
「トランジット」という言葉自体は、日常的に使われる「通過」や「経由地」の意味に近いです。BGPの文脈で言うと、あるAS(自律システム)を経由して他のASに通信を届けることを指します。大規模なネットワーク間の通信では、直接的に接続されていないASが多く存在し、これらを効率的につなぐためにトランジットが必要です。
例えば、大阪の通天閣から名古屋のテレビ塔へ行きたいとします。新幹線がベストなパスとなり、新大阪がネクストホップとなります。
大阪と名古屋が直接接続されていない場合、途中で東京を経由して移動することが考えられます。このように、目的地に到達するために他の都市(AS)を経由する仕組みがトランジットです。
トランジットの具体例
もう少し具体的に、ネットワークでのトランジットを考えてみましょう。
- AS1(大阪)
- AS2(東京)
- AS3(名古屋)
AS1とAS3は直接接続されていないため、AS2を経由して通信を行います。これがトランジットです。AS2は、AS1からAS3への通信を「中継」し、データが最終目的地に到達します。
トランジットの役割
トランジットは、BGPネットワークで次のような重要な役割を果たします:
- 経路広報: トランジットASは、自分が持つ経路情報を他のASに広報し、どの経路を通れば目的地に到達できるかを知らせます。たとえば、AS2(東京)は「AS3(名古屋)に行きたいなら、私(AS2)を通って行けますよ」とAS1(大阪)に広報します。
- データの中継: トランジットASは、他のASから来たデータを受け取り、次のASに転送します。このプロセスは、インターネット全体で非常に重要で、特に大規模なネットワーク間ではほとんどの通信が何らかのトランジットを利用して行われています。
- 経路選択: 通過するASが少ない経路を選択することが一般的ですが、トランジットの提供者がサービスレベルやコストなどを考慮して、異なる経路を選ぶこともあります。これはポリシーベースのルーティングに関わる部分です。
外部BGPと内部BGP
ASが異なるネットワーク(例えば、大阪と東京間)のBGP接続は外部BGP(eBGP)と呼ばれます。これは異なる管理者間のルーティングを調整するものです。一方、同じAS内(例えば、東京内のルータ間)のBGP接続は内部BGP(iBGP)と呼ばれ、同一管理ドメイン内のルーティングを最適化します。
パスベクター型プロトコルとは?
BGPは「パスベクター型プロトコル」として動作します。この意味を理解するために、まず「ベクター」とは何かを考えてみましょう。ベクターとは、方向と大きさを持ったものを指します。BGPにおいては、このベクターが「経路情報」として働きます。
つまり、BGPは各ネットワーク(AS)がどのルートを通過して目的地に到達するかを、通過するASのリストとして持っています。このリストは、ASの経路図のようなもので、BGPが経路を選ぶ際の決め手となる情報です。このリストをAS-PATHと呼び、BGPはこのパス情報を使って最適な経路を選択します。
経路情報とパスベクターの例
実際に具体的な例を使ってみましょう。
大阪の通天閣から東京のスカイツリーに行こうとしています。いくつかの経路オプションがある中で、経路情報として次の2つを考えます。
- 新幹線ルート:大阪(AS1) → 名古屋(AS2) → 東京(AS3)
- 飛行機ルート:大阪(AS1) → 東京(AS3)
ここで、新幹線経路では大阪から名古屋を経由し、東京に行くために2つのAS(自律システム)を通過します。一方、飛行機経路では名古屋を経由せず、直接東京に行くため、1つ少ないASを通過するだけで済みます。飛行機経路のほうが通過するASの数が少ないため、BGPは通常、この経路を優先します。
BGPはこのように、各経路がどのASを通過するかを常に把握しており、AS-PATHの数が少ない経路を「ベストパス」として選択します。これがパスベクター型プロトコルの基本的な動作です。
R2の2.2.2.2/32をR1がどう学習するのかを考えます。 R1から見ると、2.2.2.2/32の経路は、AS2、およびAS3から学習します。
R1#show ip bgp BGP table version is 1, local router ID is 3.3.3.3 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path * i 2.2.2.2/32 192.168.15.5 0 100 0 3 2 i *>i 192.168.13.3 0 100 0 2 i
R1上では、BGP経路(2.2.2.2/32)には、通過するパス情報が格納されています。
AS-PATHを利用したループ防止
BGPでは、AS-PATHの情報を使って経路ループを防ぐこともできます。たとえば、同じAS番号が経路情報に2回以上現れる場合、それは「経路がループしている」と判断され、BGPはその経路を無視します。
例えば、経路情報1:AS1 → AS2 → AS3 → AS1 の場合、再びAS1に戻るループが発生していることが分かります。BGPはこのようなループを検出して、その経路を選ばないようにします。
パスベクター型の他の特徴:経路選択の柔軟性
パスベクター型プロトコルであるBGPには、もう一つの重要な特徴があります。それは、経路選択に柔軟性があるという点です。BGPは単にAS-PATHの長さだけで経路を選ぶわけではなく、他の様々なパラメータ(メトリックやポリシー)を基に、柔軟に経路を決定します。
たとえば、AS-PATHが短い経路が必ずしも最適とは限りません。場合によっては、管理者が設定したポリシーに基づいて、AS-PATHが長くても特定の経路を優先することがあります。これは、ポリシーベースのルーティングと呼ばれ、特定のトラフィックを意図的に特定の経路に誘導することが可能です。
具体的な例として、飛行機経路が混雑している場合、新幹線経路を選ぶことで回避できる、といった状況が考えられます。
まとめ
今回の記事では、BGP(Border Gateway Protocol)の基本的な概念について解説しました。BGPは、インターネット全体の通信を管理し、効率的な経路を選択するための非常に重要なルーティングプロトコルです。特に、AS(自律システム)間の通信を最適化し、安定したネットワーク運用を実現するために不可欠な役割を果たしています。
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
最後までお読み頂きありがとうございました。
コメント