旅行に例えてわかるBGPの基本

音声で聞く

読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。

BGPはインターネットを支えるルーティングプロトコルですが、OSPFやEIGRPとは考え方がかなり違うので、最初はとっつきにくく感じるかもしれません。この記事では、大阪から東京への旅行にたとえながら、BGPの基本となる考え方を順に整理します。

この記事でわかること
  1. BGPの役割と、AS・AS番号の考え方
  2. ネクストホップとIGPの関係、トランジット、eBGPとiBGPの違い
  3. AS_PATHを使った経路選択とループ防止(パスベクター型)

BGPとは?

BGP(Border Gateway Protocol)は、AS(自律システム)同士が経路情報を交換するためのプロトコルです。OSPFやEIGRPが組織の中の経路を決めるのに対し、BGPは組織と組織の間、つまりインターネット全体の経路を扱います。インターネット全体の「交通整理」役と考えるとイメージしやすいと思います。

標準はRFC 4271で定められていて、主に次のような特徴があります。

特徴内容
信頼性TCPのポート179でセッションを張り、経路情報を確実に届けます。AS_PATHという情報で経路のループも防ぎます。
拡張性大量の経路を扱えます。インターネットのフルルートはIPv4だけでも非常に多く、記事執筆時点で80万を超えていました(年々増えています)。
柔軟性パス属性を使って、組織ごとに異なるポリシーで経路を選べます。
安定性頻繁に上下する経路(フラップ)を一時的に使わないようにする機能(ダンプニング)も用意されています。

AS番号とは?

AS(Autonomous System)は、1つの組織が同じ方針で運用しているネットワークのまとまりです。ISPや大きな企業、データセンター事業者などが、それぞれ1つ以上のASを持っています。AS番号は、そのまとまりを識別するための番号で、ネットワークの「住所」のようなものです。

ASの中ではOSPFやEIGRPなどのIGP(内部ゲートウェイプロトコル)で経路を決め、AS同士の間ではBGPで経路を交換します。

AS 1AS 2AS 3 OSPF OSPF EIGRP BGP BGP BGP
図1 AS内はIGP、AS間はBGP

AS番号は、IANAが地域インターネットレジストリ(日本ではAPNIC/JPNIC)に番号の範囲を割り振り、そこから各組織に割り当てられます。もともとは16ビット(2バイト)でしたが、番号が足りなくなったため、現在は32ビット(4バイト)のAS番号も使われています。

範囲用途
1〜64495グローバルAS番号(2バイト)。インターネットで使います。
64512〜65534プライベートAS番号(2バイト)。組織内や検証環境で使います。
65536〜4バイトAS番号。主にグローバル用です。
4200000000〜4294967294プライベートAS番号(4バイト)。
補足

上の表に含まれない番号(0、64496〜64511、65535 など)は、ドキュメント用や予約済みとして決められていて、通常の運用では使いません。

ASのイメージ

ここからは、ASの考え方を旅行にたとえて見ていきます。都道府県を1つのASと考えて、大阪=AS1、東京=AS2、名古屋=AS3 とします。この記事の後半でも、この番号のまま説明します。

旅行の例でASを理解する

大阪の通天閣から東京のスカイツリーへ行くとします。移動手段は新幹線と飛行機の2つです。

ルート通る都道府県(AS)大阪から見た経由AS
新幹線大阪 → 名古屋 → 東京AS3、AS2 の2つ
飛行機大阪 → 東京AS2 の1つ

BGPは、ほかの条件が同じであれば、通るASの数が少ない経路を選びます。この例では飛行機ルートが選ばれます。

大阪(AS1)名古屋(AS3)東京(AS2) 新大阪 関西空港 名古屋 東京 羽田空港 通天閣 スカイツリー 新幹線 飛行機 新幹線:経由AS 3 → 2(2つ) 飛行機:経由AS 2(1つ)→ 選ばれる
図2 通るASが少ないルートが選ばれる

ネクストホップとIGPの関係

飛行機ルートを選んだ場合、通天閣から東京へ向かう最初の行き先(ネクストホップ)は関西空港です。BGPが教えてくれるのは「東京へ行くなら関西空港へ向かえ」という情報までです。

通天閣から関西空港までの移動は、大阪の中(AS内)の話なので、BGPではなくIGP(OSPFやEIGRPなど)が経路を決めます。ネットワークで言えば、BGPで学習した経路のネクストホップに、IGPの経路を使ってたどり着く、という関係です。ネクストホップにIGPで到達できなければ、BGPの経路があっても使えません。

東京到着後の移動

東京に着いてからも同じです。羽田空港からスカイツリーまで、どの路線を使うかは東京の中(AS2の中)で決まることで、大阪のルータはその中身を知りません。BGPが扱うのは、どのASを通っていくかまでです。

大阪(AS1)東京(AS2) 関西空港 ネクストホップ 羽田空港 通天閣 スカイツリー IGPでネクストホップへ BGP 路線A 路線B どちらを使うかはAS2の中で決まる
図3 AS間はBGP、AS内の移動はIGP

トランジットの概念

トランジットは、あるASが別のAS同士の通信を中継することです。インターネットでは、直接つながっていないAS同士がたくさんあり、その間を中継してくれるASがあるおかげで、世界中のネットワークに届きます。

トランジットの具体例

大阪(AS1)から名古屋(AS3)のテレビ塔へ行くとします。普段は新幹線で名古屋へ直接行けますが、大阪と名古屋の間が通れない場合は、東京(AS2)を経由して名古屋へ向かうことになります。このとき東京(AS2)が、大阪から名古屋への移動を中継するトランジットASです。

大阪(AS1)名古屋(AS3)東京(AS2) 新大阪 関西空港 名古屋 東京 羽田空港 通れない AS2 がトランジットAS
図4 直接つながっていないASへは、トランジットASを経由する

トランジットの役割

役割内容
経路の広告トランジットASは、自分の先にあるASの経路を隣のASへ伝えます。例では東京(AS2)が大阪(AS1)に「名古屋(AS3)へは自分を経由して届く」と広告します。
データの中継受け取ったデータを、次のASへ転送します。インターネットの通信の多くは、どこかのトランジットASを通っています。
経路の選択通るASが少ない経路が基本ですが、コストや契約などの事情で、管理者が別の経路を選ばせることもあります(後述のポリシー)。

外部BGPと内部BGP

異なるAS同士(例:大阪と東京)のBGPを外部BGP(eBGP)、同じAS内のルータ同士(例:東京の中の東京と羽田空港)のBGPを内部BGP(iBGP)と呼びます。iBGPは、eBGPで受け取った経路を、AS内の他のBGPルータに配るために使います。

大阪(AS1)名古屋(AS3)東京(AS2) 関西空港 名古屋 東京 羽田空港 eBGP eBGP iBGP
図5 AS間はeBGP、AS内はiBGP
項目eBGPiBGP
ピアの関係異なるAS同士同じAS内のルータ同士
AS_PATH広告するときに自分のAS番号を追加する追加しない
学習した経路の扱い他のピアへ広告するiBGPで学習した経路は、別のiBGPピアへは広告しない(フルメッシュかルートリフレクタが必要)
アドミニストレーティブディスタンス(Cisco)20200

iBGPの設定と動作確認は 内部BGP(iBGP)の記事 で詳しく扱っています。

パスベクター型プロトコルとは?

BGPは「パスベクター型」のプロトコルです。RIPやEIGRPのような距離ベクター型が「宛先までの距離(メトリック)と方向」で経路を選ぶのに対し、パスベクター型は「宛先までに通るASのリスト」を経路情報として持ちます。このリストがAS_PATHです。

種類経路情報として持つもの例
距離ベクター型宛先までの距離(メトリック)と、次に渡す方向RIP、EIGRP(拡張型)
パスベクター型宛先までに通るASのリスト(AS_PATH)BGP

経路情報とパスベクターの例

旅行の例をAS_PATHに置き換えると、大阪(AS1)から見た東京(AS2)への経路は次のようになります。

  • 新幹線ルート:AS_PATH = 3 2(名古屋、東京の順に通る)
  • 飛行機ルート:AS_PATH = 2(東京へ直接)

AS_PATHが短い飛行機ルートが、ベストパスとして選ばれます。これをルータで確認したのが次の構成です。AS2のR2が持つ 2.2.2.2/32 を、AS1のR1がどう学習するかを見ます。

AS 1AS 3AS 2 R1R5R3 R7R6R4 R2 2.2.2.2/32 192.168.15.5 192.168.13.3 iBGP AS_PATH 3 2 AS_PATH 2(ベストパス)
図6 R1から見た 2.2.2.2/32 への2つの経路

R1から見ると、2.2.2.2/32 の経路は2つあります。

  • R5経由:AS1 → AS3 → AS2(AS_PATH = 3 2)
  • R3経由:AS1 → AS2(AS_PATH = 2)
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
表示意味
* i / *>i* は有効な経路、> はベストパス、i はiBGPで学習した経路です。R1はAS1の中のR5・R3からiBGPで受け取っています。
Next Hopこの経路へ転送する先のアドレス。R5経由は 192.168.15.5、R3経由は 192.168.13.3 です。
Weight / LocPrfどちらの経路も Weight 0、LocPrf 100 で同じ値です。
PathAS_PATHと末尾のOrigin。3 2 i はAS3、AS2の順に通る経路、2 i はAS2へ直接の経路です。

WeightとLocPrfが同じなので、次に比べるAS_PATHの長さで決まり、短い 2 i(R3経由)がベストパス(>)になっています。

AS_PATHを利用したループ防止

BGPルータは、受け取った経路のAS_PATHに自分のAS番号が含まれていたら、その経路を受け入れません。自分のASを一度通ってきた経路なので、受け入れると経路がループしてしまうためです。

例えば、AS1が広告した経路が AS2、AS3 と伝わって再びAS1に戻ってくると、そのAS_PATHは「3 2 1」となり、自分の番号(1)が入っています。AS1のルータはこれを見て、ループしている経路だと判断して捨てます。

パスベクター型の他の特徴:経路選択の柔軟性

BGPはAS_PATHの長さだけで経路を決めるわけではありません。複数の属性を決まった順番で比べ、管理者はその属性を設定で変えることで、AS_PATHが長い経路をあえて優先させることもできます。旅行にたとえると、飛行機が混んでいるときは新幹線を選ぶ、という判断を設定で決められるイメージです。

Ciscoルータでは、主に次の順番で比べます(上から順に比べ、差が出たところで決まります)。

順番比べる属性優先されるもの
1Weight(Cisco独自)大きい方
2LOCAL_PREF大きい方
3経路の生成元自分で生成した経路
4AS_PATHの長さ短い方
5OriginIGP(i)、EGP(e)、incomplete(?)の順
6MED小さい方
7eBGP / iBGPeBGPで学習した経路
8ネクストホップまでのIGPメトリック小さい方
補足

8番目以降も、経路の古さやルータIDなどで比べる手順が続きます。AS_PATHを意図的に長くして相手に経路を選ばせにくくする「AS_PATHプリペンド」や、LOCAL_PREFで自AS内の出口を決める設定が、ポリシーによる経路制御の代表例です。

まとめ

用語ポイント
BGPAS同士が経路を交換するプロトコル。TCP 179でセッションを張る
AS / AS番号同じ方針で運用されるネットワークのまとまりと、その識別番号。2バイトと4バイトがある
ネクストホップとIGPBGPが示すのはAS間の経路とネクストホップまで。そこへの到達はIGPが担う
トランジット他のAS同士の通信を中継すること
eBGP / iBGPAS間のBGPと、AS内のBGP
AS_PATH経路が通るASのリスト。経路選択とループ防止に使う

コメント