BGP

July 22, 2018

BGP とは

BGP (Border Gateway Protocol) は、AS 間を接続するルーティングプロトコルであり、経路ベクトル方式が採用されている。
BGP の概要は以下の通り。

EGP / IGP の種別 EGP
経路制御の方式 経路ベクトル方式
下位プロトコル TCP
通信形態 ユニキャスト (TCP コネクション)

経路制御の特徴と仕組み

インターネットのバックボーンで交換される経路情報は、数十万にも上る。BGP は、この膨大な経路情報の交換を実現するため、以下のような工夫を取り入れている。

  1. 経路選択はパスアトリビュートにより行われる。これには様々な種類があり、AS のポリシーに基づく柔軟な経路選択を可能にしている
  2. ルータが広告するのは NLRI (Network Layer Reachability Information) とパスアトリビュートである
  3. 経路が変化したときだけ差分を送信する仕組みにより、経路情報の交換にかかるトラフィックを抑えている
  4. 経路広告する通信の信頼性を確保するため、TCP コネクションを用いる。コネクションを貼る 2 台のルータを BGP ピアと呼ぶ
  5. KEEP ALIVE パケットを交換して死活監視を行う

経路選択

NLRI は、ネットワークアドレスとサブネットマスクの組である。パスアトリビュートは、数ある経路の候補から、ベストパス (NLRI) を一つ選択するために用いられる。このベストパスが、ルーティングテーブル上の経路選択に使用される。
数々のパスアトリビュートには優先順位があり、それらを調整することで、AS は自ら定めたポリシーに基づいてベストパスを選択することができる。

BGP の主要なパスアトリビュートは、AS_PATH である。
これは、宛先ネットワークに至るパスを表す属性であり、そのパスは AS 番号の羅列で記述されている。AS_PATH に基づいてベストパスを決定するときは、AS_PATH 長が短いものを選択する仕様になっている。つまり、経由する AS の数が少ないものを優先する仕組みである。
BGP は、特にパスアトリビュートの調整をしなければ、AS_PATH に基づいてベストパスを選択する。

以下のように、AS10 、AS20 、AS30 という 3 つの AS がある例を考える。

f:id:shiro_kochi:2018××××××××:plain:w100:left

AS10 が自ネットワークを経路広告するとき、AS_PATH は AS10 である (本来はただの AS 番号) 。AS20 がそれを受け取り、AS30 に経路広告する際、AS20 は AS_PATH の先頭に AS20 を追加してから広告する。
この結果、AS20 が経路広告する「AS10 ネットワークの経路情報」の AS_PATH は「AS20 AS10」となる。AS30 がこれを受け取ると、AS10 ネットワークに到達するには AS20 -> AS10 というパスを通ることがわかる。
AS30 が他の AS からも AS10 ネットワークの経路情報を広告されている場合、AS_PATH 長を比較し、経由する AS の合計数が少ない方を優先する。

AS_PATH 以外のパスアトリビュートを組み合わせた場合は、パスアトリビュートごとに定められた優先順位に従う仕組みとなっている。
以下の図のような例を考える。

f:id:shiro_kochi:2018××××××××:plain:w100:left

自 AS は、あるネットワーク X に至る経路情報を AS1 と AS2 から受け取っており、自 AS からネットワーク X に到達できる経路として、AS1 経由および AS2 経由の 2 通りがある。
このとき、以下のような経路制御が可能となる。

* パスアトリビュートの AS_PATH を見ると、ネットワーク X に到達するまでに通過する AS のパス長は、AS1 経由が「AS1 -> AS3 -> AS4 -> AS7」の 4 個分であり、AS2 経由が「AS2 -> AS5 -> AS7」の 3 個分なので、AS2 経由の方をベストパストする

* パスアトリビュートの ASPATH に基づけば、AS2 経由の方を選択するのが適切であるが、今回は意図的に AS1 経由の方を選択したいとする。これを実現するため、AS1 から受け取った経路情報に、パスアトリビュートの LOCALPREF を設定して重み付けを蓋し、AS1 経由がベストパスになるように自 AS 内の全 BGP ルータに学習させる (LOCALPREF の方が ASPATH よりも優先順位が高い)

このように、ポリシーに基づく細かい設定を実施することで、AS は膨大な経路情報の交換を適切に制御し、日々運用している。

BGP ピア

BGP 接続を行う 2 台のルータ間では、TCP の 179 番ポートを仕様し、経路情報の交換を行う。このコネクションは BGP ピアと呼ばれる。
自 AS の BGP ルータは、他 AS の BGP ルータと BGP ピアを設定し、経路情報を交換している。このように、異なる AS に属するルータ間で設定される BGP ピアを eBGP ピア (external BGP ピア) と呼ぶ。
また、自 AS の BGP ルータは、自 AS 内の別 BGP ルータとともに BGP ピアを設定し、経路情報を交換している。このように、同じ AS に属するルータ間で設定される BGP ピアを iBGP ピア (internal BGP ピア) と呼ぶ。

iBGP ピアを設定する目的は、自分が受け取った経路情報を、ピアを貼る相手に伝えるためであるが、どのように伝え合うかに着目すると、その役割にはいくつか種類がある。
主なケースを 3 つ示す。

f:id:shiro_kochi:2018××××××××:plain:w100:left

  • ケース 1: 他 AS の情報を共有する
    この iBGP ピアは、自 AS の境界に位置する 2 台の BGP ルータが、それぞれ異なる AS から経路情報を受けている。この経路情報を自 AS 内で共有している。
  • ケース 2: 自 AS の内部に情報を伝える
    この iBGP ピアは、自 AS の境界に位置する BGP ルータが、自 AS の内部に位置する BGP ルータに経路情報を伝えている。AS 内では OSPF が稼働しており、この内部 BGP ルータに接続している。
    この内部 BGP ルータでは BGP と OSPF の二つが稼働しており、このルータは OSPF ルータから転送されたパケットを受け取った後、今度は BGP の経路情報を使ってルーティングし AS 外へと転送する役割をもつ。さらに、境界 BGP ルータから転送されたパケットを受け取った後、今度は OSPF の経路情報を使ってルーティングし AS 内へと転送する役割をもつ。つまり、このルータは OSPF と BGP の橋渡しをする存在である。
    なお、小規模なネットワークであれば、境界のルータが橋渡しする役割も兼務すれば良い。
  • ケース3: 隣接 AS 間の経路を冗長化する
    この iBGP ピアは、隣接 AS との経路の冗長化を目的に、iBGP ピアを張る 2 台の BGP ルータがともに隣接 AS と接続している。

通常 iBGP ピアは AS 内全ての BGP ルータ同士でフルメッシュ接続する。iBGP ピアを張る相手から学習した経路情報は、他の iBGP ピアに通知しない。これは、AS 内で BGP によるルーティングループを防ぐためである。
iBGP ピアで結ばれた 2 台の BGP ルータは、直に接続しなくてもよく、非 BGP ルータを中継しても構わない。その場合、それら 2 台の BGP ルータおよびそれらを中継する位置にある非 BGP ルータは、全て何らかの IGP (OSPF 等) が稼働している必要がある。2 台の BGP ルータがやりとりするパケットは IGP の経路制御による AS 内でルーティングされる。

死活監視

BGP ピアは、KEEP ALIVE パケットを送信して、両者間の TCP コネクションの死活監視を行う。
KEEP ALIVE の送信間隔は、ベンダにより異なり、Cisco の場合は 30 秒となる。KEEP ALIVE が 3 回途絶えたとき、経路障害が発生したと判断する。


 © 2023, Dealing with Ambiguity