検索
連載

BGPの仕組みと役割を理解するIPルーティング入門(2)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

本連載の第1回目「ルーティング・プロトコルの役割を理解する」では、IPルーティングの中核を成す「ルーティング・プロトコル」について、その役割や全体像を解説してきました。今回からは、その際に紹介した「BGP」「RIP」「OSPF」の3つのプロトコルにフォーカスを当て、仕組みや運用法をより詳細に説明していきます。まずは、AS間で経路情報の交換を行う「BGP」の仕組みと役割について解説していきましょう(編集局)


AS(Autonomous System)とAS番号

 ASとは、共通のポリシーや同じ管理下で運用されているルータやネットワークの集合を意味します。各AS内では独立したIGPやポリシーが運用されており、インターネットはこのASの集合体ととらえることができます。インターネットは、AS単位に分割して管理することでルーティングのオーバーヘッドを減らし、ネットワークの管理を容易にしています。

 このASを識別するための番号がAS番号です。各ASは、AS番号割り当て機関に対して申請を行い、ユニークな番号を保持、運用しています。割り当て機関としては、以下のようなものがあります。日本では、JPNIC(社団法人日本ネットワークインフォメーションセンター)がAPNICの代行を行っています。

機関名 管理地域
ARIN
(American Registry for Internet Numbers)
南北アメリカ、カリブ海沿岸諸国、およびアフリカ
RIPE-NCC
(Reseaux IP Europeans-Network Coordination Center)
ヨーロッパ
APNIC
(Asia Pacific Network Information Center)
アジア太平洋地域
JPNIC
(Japan Network Information Center)
日本

 このAS番号は、16ビット(1〜65535)の数字を用います。また、プライベートIPアドレスと同様に、プライベートAS番号(64512〜65535)も提供されています。

BGPの役割と仕組み

BGPの役割

 BGPはAS間の経路交換のために作られたプロトコルです。BGPの経路情報には、あて先に到達するまでに経由したAS番号のリスト(ASパス)が含まれており、通常、ASパスの短いものを最短ルートとして使用しますが、パス属性の操作により柔軟な経路制御を行うことができます。

またBGPは、CIDR(Classless Inter Domain Routing)をサポートしており、受け取った経路やローカル経路を集約し、複数の経路をまとめて1つの経路としてアナウンスすることができます。経路を集約することで、インターネット上にある経路情報の数を抑えています。BGPにはIBGPとEBGPがあり、AS内でのBGP経路の伝播に使われるBGPをIBGPと呼び、AS間で使用するBGPをEBGPと呼びます。

BGPの仕組み

 BGPは2台のルータ間でTCP(ポート番号179)による接続を行い、経路情報を交換します。この経路情報を交換する隣接ルータをネイバー(Neighbor)ピア(Peer)と呼びます。経路情報は、それぞれのASで受信している経路、およびローカル経路を交換します。

ALT
図1 AS1とAS2の経路の交換。AS1は、AS2より「AS2」「AS3」「AS4」の3つの経路を受け取ることで、AS2/AS3/AS4への経路を持つことになる

 また、ASパスを参照して、そのリストの中に自身のAS番号が含まれていた場合、その経路を受け取らないようにすることで経路ループを回避しています。

ALT
図2 経路ループの回避。ASパスに自身のAS番号(AS1)が含まれているため、その経路を破棄する

BGPの経路情報交換の仕組み

 BGPは、初めにTCPを用いた1対1のセッションを確立します。そのうえで、BGPの基本情報、および互いのルータが知っているすべての経路情報を交換します。以降は、KEEPALIVEメッセージによる対向ルータの生存確認を行い、ルーティング・テーブルが更新(追加/削除)された場合には、その経路の差分情報のみを交換します*1

*1差分情報のみを交換することにより、CPU負荷の軽減や帯域の浪費を最低限に抑えることが可能です。このような仕組みにより、BGPでは効率よく経路情報の交換が行えます


 以下に、経路情報の交換プロセスをまとめます。

経路情報の交換プロセス

 最初に、2台のルータ間で1対1のTCPセッションの確立を行います。このセッションの確立は、どちらのルータから開始しても構いません。

ALT
図3 TCPセッションの確立

 次に、互いのBGPルータの基本情報(OPENメッセージ)を交換します。この基本情報には、ルータ自身が属しているASの番号、ルータID、BGPのバージョンなどの情報が含まれています。

ALT
図4 BGP基本情報の交換

 この時点で、BGPのセッションが確立されたことになります。ただし、基本情報の交換時に受信した情報が正しくなかった場合には、相手にエラーを通知するとともに、TCPセッションを切断します。

 BGPセッションが確立されると、2台のルータは、自分が知っているすべての経路情報を交換します(UPDATEメッセージ)。

ALT
図5 経路情報の交換(BGPセッションの確立後)

 その後は、基本的には互いにKEEPALIVEメッセージをアナウンスし合うことで、相手ルータの生存確認を行います。もし、決められた時間以内に相手からのKEEPALIVEメッセージを受信できなかった場合には、エラーを通知するとともに、BGPセッションを切断します。

ALT
図6 生存確認

 ルーティング・テーブルに経路情報が追加された場合、その追加情報のみを相手にアナウンスします。

ALT
図7 経路情報の交換(追加時)

 同様に、ルーティング・テーブルから経路情報が削除された場合、その削除情報のみを相手にアナウンスします。

ALT
図8 経路情報の交換(削除時)

パス属性とは?

 BGPは、UPDATEメッセージにパス属性という、BGPメトリックに関する情報を含みます。BGPでは、このパス属性を用いて柔軟なポリシーを実現します。

 以下に、それらの属性について説明します。

1. ORIGIN

 ORIGIN属性は、経路情報の生成元を示します。BGPでは、以下の値を示します。

意味
IGP 経路情報をAS内から学習したことを示す
EGP 経路情報をEGPから学習したことを示す
Incomplete 経路情報を上記以外から学習したことを示す

            

2. AS_PATH(ASパス)

 ASパス属性は、AS番号のリストを示します。ルータは、UPDATEメッセージをアナウンスする際にAS番号を付加します。実際には、ある経路へ到達するために通過するASが、その経路を外部にアナウンスするたびにAS番号を付加するため、到達先のASを最後としたリストが形成されます。

ALT
図9 UPDATEメッセージをアナウンスする際に、AS番号を付与して次にルータへと受け渡していく。経路を外部にアナウンスするたびにAS番号が付加されるため、最終的には、到達先のASを最後としたリストが作成される

3. NEXT_HOP(ネクスト・ホップ)

 NEXT_HOP属性は、トラフィックを転送すべきルータのアドレスを示します。ただし、通常のIGPでのネクスト・ホップの概念とは、以下の点が異なります。

  • EBGPセッションでは、ピア接続された隣接ルータのIPアドレスがネクスト・ホップになります
  • IBGPセッションでは、外部ASから学習した経路である、そのEBGPでのネクスト・ホップがそのまま反映されます
  • 多重アクセス・メディア上で学習した経路は、その経路をアナウンスしたルータのIPアドレスがネクスト・ホップになります

4. MULTI_EXIT_DISC(MED:Multi-Exit-Discriminator)

 MULTI_EXIT_DISC属性は、ASへの入力トラフィックの優先度を示します。同一のASに複数の接続を持つようなユーザーが、入力トラフィックを区別するために、優先度を隣接ルータにアナウンスします。このとき、値が低い方を優先します。

5. LOCAL_PREF(ローカル優先度)

 LOCAL_PREF属性は、ASからの出力トラフィックの優先度を示します。AS内にて複数経路を持つような場合、どの経路を優先するかを示します。このとき、値が高い方を優先します。この値はIBGPピア間でのみ交換されます。

6. ATOMIC_AGGREGATE(アトミック集約)

 ATOMIC_AGGREGATE属性は、経路を集約した際の情報の欠落を示します。通常、個々の経路には、さまざまな情報が付加されています。ところが、個々の経路を集約した場合、そのさまざまな情報が欠落してしまいます。このような場合に、ATOMIC_AGGREGATE属性を付加します。

7. AGGREGATOR(アグリゲータ)

 AGGREGATOR属性は、集約経路を生成したASやBGPルータを示します。実際には、経路の集約を行ったBGPルータのルータIDとAS番号をAGGREGATOR属性として付加します。

8. COMMUNITY(コミュニティ)

 COMMUNITY属性*2は、共通のポリシーを共有する経路のグループを示します。この際、ASなどの制限にとらわれることはありません。また、1つの経路が複数のグループに属することも可能です。

 Well-Known Communityとしては以下のものがあります。

意味
NO_EXPORT 外部ASにアナウンスしません
NO_ADVERTISE ほかのルータにアナウンスしません

*2COMMUNITYには、あらかじめそのポリシーが定義されたWell-Known Communityと、個別に作成したポリシーを共有するためのPrivate Communityの2つがあります


BGPの経路選択アルゴリズム

 BGPは、経路情報に含まれるパス属性に基づいて最適経路を選択します。同一のあて先に対して複数の経路が存在する場合、すべての経路のパス属性を比較して、トラフィックを転送するために最も適した経路を決定します。

 以下は、一般的なBGPルータで採用されている経路選択プロセスです。BGPでは、以下のSTEPに基づいて順番に比較されていき、最終的に1つの最適経路を決定します。各STEPでは、比較する経路の属性値が同一の場合、もしくはその比較条件を満たしていない場合は次のSTEPに進みます。

STEP.1 NEXT_HOPの到達性確認

 経路を比較する前に、各経路のNEXT_HOP到達性が確認されます。到達性がない経路は無効経路となり、比較対象になりません。BGP経路のNEXT_HOPはIGPと異なり、直接到達できないケースがあります。このようなケースでは、さらにそのNEXT_HOPに到達するための経路(IGPやスタティック)が必要となります。


STEP.2 LOCAL_PREFの比較

 NEXT_HOPの到達性が確認されると、各経路のLOCAL_PREFの値を比較して、最も高い値を持つ経路を優先します。LOCAL_PREF属性が含まれない経路は、デフォルト値*3として考えます。


STEP.3 ASパスの比較

 LOCAL_PREFが同一の場合は、各経路のASパスを比較して、ASパスの短い経路を優先します。


STEP.4 ORIGINの比較

 ASパスが同一の場合は、各経路のORIGINを比較して、最も低い値を持つ経路を優先します。各ORIGINには、以下の値が定義されています。

ORIGIN属性
0 IGP
1 EGP
2 Incomplete

STEP.5 MULTI_EXIT_DISC(MED)の比較

 ORIGINが同一の場合は、各経路のMEDを比較して、最も低い値を持つ経路を優先します。ただし、MEDは同一隣接ASから受信した経路間でのみ比較されます。この条件に当てはまらない場合は、MED比較を行いません。MED属性が含まれない経路の扱い*4は、ルータにより異なります。


STEP.6 EBGP経路/IBGP経路の比較

 MEDが同一の場合、もしくはMED比較を行えない場合、IBGP経路よりもEBGP経路を優先します。


STEP.7 ネクスト・ホップに到達するための内部コストの比較

 EBGP経路、IBGP経路が同一の場合は、ネクストホップに到達するための内部経路(IGP)のコストを比較して、最も小さいコストで到達できる経路を優先します。直接到達できる場合や、内部経路にスタティックを採用している場合は、コスト0として考えます。


STEP.8 ルータIDの比較

 最終的に経路を受信した相手ルータのルータIDを比較して、最も小さいルータIDを持つ経路を優先します。



*3LOCAL_PREFのデフォルト値は、ほとんどのベンダが100を採用しています


*4ほとんどのベンダは0として扱っていることが多いようです。最大値(最も優先度が低い)として扱うベンダもあります


ベンダによる違い

 上記の経路選択プロセスで記述されているSTEP以外にも、ベンダによって独自の仕様が盛り込まれている場合があります。例えばCisco社などでは、WEIGHT属性と呼ばれるルータ内部で独立した経路優先度を示す情報を持っており、LOCAL_PREFよりも先にこの値が比較されます。



 BGPの経路選択プロセスは、ほかのルーティング・プロトコルと比較すると比較要素が多いため少し複雑になります。しかし、これらの属性を理解して適切な値を設定することで、ほかのルーティング・プロトコルでは実現できないような柔軟性のあるトラフィック・コントロールを行うことが可能です。

 次回は、これらの仕組みを踏まえたうえで、いかにBGPを運用していくのか、その手法を紹介していきます。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る