本連載の第1回目「ルーティング・プロトコルの役割を理解する」では、IPルーティングの中核を成す「ルーティング・プロトコル」について、その役割や全体像を解説してきました。今回からは、その際に紹介した「BGP」「RIP」「OSPF」の3つのプロトコルにフォーカスを当て、仕組みや運用法をより詳細に説明していきます。まずは、AS間で経路情報の交換を行う「BGP」の仕組みと役割について解説していきましょう(編集局)
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はAS間の経路交換のために作られたプロトコルです。BGPの経路情報には、あて先に到達するまでに経由したAS番号のリスト(ASパス)が含まれており、通常、ASパスの短いものを最短ルートとして使用しますが、パス属性の操作により柔軟な経路制御を行うことができます。
またBGPは、CIDR(Classless Inter Domain Routing)をサポートしており、受け取った経路やローカル経路を集約し、複数の経路をまとめて1つの経路としてアナウンスすることができます。経路を集約することで、インターネット上にある経路情報の数を抑えています。BGPにはIBGPとEBGPがあり、AS内でのBGP経路の伝播に使われるBGPをIBGPと呼び、AS間で使用するBGPをEBGPと呼びます。
BGPは2台のルータ間でTCP(ポート番号179)による接続を行い、経路情報を交換します。この経路情報を交換する隣接ルータをネイバー(Neighbor)やピア(Peer)と呼びます。経路情報は、それぞれのASで受信している経路、およびローカル経路を交換します。
また、ASパスを参照して、そのリストの中に自身のAS番号が含まれていた場合、その経路を受け取らないようにすることで経路ループを回避しています。
BGPは、初めにTCPを用いた1対1のセッションを確立します。そのうえで、BGPの基本情報、および互いのルータが知っているすべての経路情報を交換します。以降は、KEEPALIVEメッセージによる対向ルータの生存確認を行い、ルーティング・テーブルが更新(追加/削除)された場合には、その経路の差分情報のみを交換します*1。
*1差分情報のみを交換することにより、CPU負荷の軽減や帯域の浪費を最低限に抑えることが可能です。このような仕組みにより、BGPでは効率よく経路情報の交換が行えます
以下に、経路情報の交換プロセスをまとめます。
最初に、2台のルータ間で1対1のTCPセッションの確立を行います。このセッションの確立は、どちらのルータから開始しても構いません。
次に、互いのBGPルータの基本情報(OPENメッセージ)を交換します。この基本情報には、ルータ自身が属しているASの番号、ルータID、BGPのバージョンなどの情報が含まれています。
この時点で、BGPのセッションが確立されたことになります。ただし、基本情報の交換時に受信した情報が正しくなかった場合には、相手にエラーを通知するとともに、TCPセッションを切断します。
BGPセッションが確立されると、2台のルータは、自分が知っているすべての経路情報を交換します(UPDATEメッセージ)。
その後は、基本的には互いにKEEPALIVEメッセージをアナウンスし合うことで、相手ルータの生存確認を行います。もし、決められた時間以内に相手からのKEEPALIVEメッセージを受信できなかった場合には、エラーを通知するとともに、BGPセッションを切断します。
ルーティング・テーブルに経路情報が追加された場合、その追加情報のみを相手にアナウンスします。
同様に、ルーティング・テーブルから経路情報が削除された場合、その削除情報のみを相手にアナウンスします。
BGPは、UPDATEメッセージにパス属性という、BGPメトリックに関する情報を含みます。BGPでは、このパス属性を用いて柔軟なポリシーを実現します。
以下に、それらの属性について説明します。
1. ORIGIN
ORIGIN属性は、経路情報の生成元を示します。BGPでは、以下の値を示します。
値 | 意味 |
---|---|
IGP | 経路情報をAS内から学習したことを示す |
EGP | 経路情報をEGPから学習したことを示す |
Incomplete | 経路情報を上記以外から学習したことを示す |
2. AS_PATH(ASパス)
ASパス属性は、AS番号のリストを示します。ルータは、UPDATEメッセージをアナウンスする際にAS番号を付加します。実際には、ある経路へ到達するために通過するASが、その経路を外部にアナウンスするたびにAS番号を付加するため、到達先のASを最後としたリストが形成されます。
3. NEXT_HOP(ネクスト・ホップ)
NEXT_HOP属性は、トラフィックを転送すべきルータのアドレスを示します。ただし、通常のIGPでのネクスト・ホップの概念とは、以下の点が異なります。
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では、以下のSTEPに基づいて順番に比較されていき、最終的に1つの最適経路を決定します。各STEPでは、比較する経路の属性値が同一の場合、もしくはその比較条件を満たしていない場合は次のSTEPに進みます。
経路を比較する前に、各経路のNEXT_HOP到達性が確認されます。到達性がない経路は無効経路となり、比較対象になりません。BGP経路のNEXT_HOPはIGPと異なり、直接到達できないケースがあります。このようなケースでは、さらにそのNEXT_HOPに到達するための経路(IGPやスタティック)が必要となります。
NEXT_HOPの到達性が確認されると、各経路のLOCAL_PREFの値を比較して、最も高い値を持つ経路を優先します。LOCAL_PREF属性が含まれない経路は、デフォルト値*3として考えます。
LOCAL_PREFが同一の場合は、各経路のASパスを比較して、ASパスの短い経路を優先します。
ASパスが同一の場合は、各経路のORIGINを比較して、最も低い値を持つ経路を優先します。各ORIGINには、以下の値が定義されています。
値 | ORIGIN属性 |
---|---|
0 | IGP |
1 | EGP |
2 | Incomplete |
ORIGINが同一の場合は、各経路のMEDを比較して、最も低い値を持つ経路を優先します。ただし、MEDは同一隣接ASから受信した経路間でのみ比較されます。この条件に当てはまらない場合は、MED比較を行いません。MED属性が含まれない経路の扱い*4は、ルータにより異なります。
MEDが同一の場合、もしくはMED比較を行えない場合、IBGP経路よりもEBGP経路を優先します。
EBGP経路、IBGP経路が同一の場合は、ネクストホップに到達するための内部経路(IGP)のコストを比較して、最も小さいコストで到達できる経路を優先します。直接到達できる場合や、内部経路にスタティックを採用している場合は、コスト0として考えます。
最終的に経路を受信した相手ルータのルータIDを比較して、最も小さいルータIDを持つ経路を優先します。
*3LOCAL_PREFのデフォルト値は、ほとんどのベンダが100を採用しています
*4ほとんどのベンダは0として扱っていることが多いようです。最大値(最も優先度が低い)として扱うベンダもあります
上記の経路選択プロセスで記述されているSTEP以外にも、ベンダによって独自の仕様が盛り込まれている場合があります。例えばCisco社などでは、WEIGHT属性と呼ばれるルータ内部で独立した経路優先度を示す情報を持っており、LOCAL_PREFよりも先にこの値が比較されます。
BGPの経路選択プロセスは、ほかのルーティング・プロトコルと比較すると比較要素が多いため少し複雑になります。しかし、これらの属性を理解して適切な値を設定することで、ほかのルーティング・プロトコルでは実現できないような柔軟性のあるトラフィック・コントロールを行うことが可能です。
次回は、これらの仕組みを踏まえたうえで、いかにBGPを運用していくのか、その手法を紹介していきます。
Copyright © ITmedia, Inc. All Rights Reserved.