BGP とは

 BGPは、EGP(Exterior Gateway Protocol)です。異なる自律システム(AS)間でルーティング情報を交換することができるルーティングプロトコルです。BGPでは、AS内部のルーティングは、IGPに任せています。

 BGPは、クラスフルルーティングにしか対応していないBGPv1から歴史が始まります。現在、主に使われているBGPv4では、ルート集約、VLSMをサポートしており広く普及しています。

BGPの通信や、セッションの確立には、信頼性のあるTCPが使われています。

BGPの特徴をいくつか挙げてみます。

  • CIDR(クラスレスルーティング)
  • VLSMのサポート
  • ポップス数が無制限
  • 差分アップデート
  • 手動集約
  • パス属性による経路制御
  • ネイバーの検出と隣接関係の維持

 BGPは、AS間をルーティングするプロトコルだけあって、複雑な動きをします。経路制御にパス属性を使用します。そのため、習得するのが難しいプロトコルです。

 RIP、IGRP、EIGRP、OSPFは、IGP(Interior Gateway Protocol)で、AS内でルーティングさせるためのルーティングプロトコルで、AS間でルーティングを行うことができません。しかし、BGPでは、異なるAS間をルーティングさせることができます。

 ここで、ASについて、おさらいしておきます。ASとは、同一の管理下にあるネットワークの集合体で、1つのASは、複数のIGP、1つのEGPで構成されることもあります。

 BGPでは、AS内ルーティングを行う内部BGP(iBGP)とAS間のルーティングを行う外部BGP(eBGP)の2つの形態でルーティングを行います。

 AS内部では、iBGPが動作しており、同じAS内のBGPスピーカーとピア張り、外部AS間では、eBGPで、各ASのBGPスピーカーとピアを張ります。

 ここで、「BGPスピーカー」というBGP用語が出てきたので、捕捉で説明します。BGPスピーカーとは、BGPが動作しているルータを指す用語です。

 BGPは、ポリシーに基づいてルーティングを行う複雑なルーティングプロトコルです。BGPには、ローカルプリファレンスなど、様々なパス属性があり、複雑な条件でルートを決定します。

 また、BGPが受け取る経路情報は、膨大であるため、ルータには、非常に負荷がかかります。ルータの負荷を軽減させるためには、ルート集約を行ったり、ルートリフレクタなどを使って、BGPルータにかかる負荷を軽減させる必要があります。

BGP(近隣関係の形成)

 BGPでは、まず、近接関係(ピア関係)を形成してから、通信を行うようになっています。近隣のBGPスピーカーとピア関係を形成するために、BGPスピーカーは、TCPのポート番号179を使って相互にセッションを張ります。

※BGPが動作しているルータをBGPスピーカーと呼びます。

 BGPスピーカーは、近接関係を結ぶために、以下の6つの状態を通過してピア関係を結びます。下の図は、簡単に状態の遷移を表したものです。

 Establishedの状態にると全てのBGPスピーカーとのネゴシエーションが完了し、ルーティング情報を交換するようになります。

それでは、それぞれの状態を簡単に説明します。

●ネゴシエーションの6つの状態

状態説明
Idle状態BGPセッション開始時の状態。
Connection状態TCPコネクションの待ち状態。
Active状態ピアを張るBGPスピーカーとセッションを開始しようとしている状態。
OpenSent状態リモートBGPスピーカーからのOPENメッセージを待っている状態。
OpenConfirm状態リモートBGPスピーカーからのKEEPALIVEメッセージを待っている状態。
Established状態全てのBGPスピーカーとのネゴシエーションが完了した状態。

 BGPスピーカーは、UPDATEメッセージやKEEPALIVEメッセージを送受信して、近接ルータの生存確認を行います。決められたホールド時間内にメッセージを受け取らなかった場合、近接ルータをdeadとみなします。

UPDATEメッセージやKEEPALIVEメッセージを受け取るとホールド時間は、0にリセットされます。

●BGPでやり取りされるメッセージ

BGPでやり取りされるメッセージには、以下のものがあります。

状態説明
OPENメッセージTCPのセッションが形成されると送信されるメッセージ。OpenSent状態では、OPENメッセージ受信を待ちます。
KEEPALIVEメッセージピア間の接続の存在を確認するためのメッセージ
UPDATEメッセージBGPのルーティング情報が入ったアップデート情報
NOTIFICATIONメッセージエラーを通知するメッセージ。

 ちなみに、ホールド時間を0に設定することもできます。0に設定するとKEEPALIVEメッセージが送信されなくなり、常にコネクションが確立された状態になります。

 BGPで通信を行うには、ピアの形成が必要です。どのルータとピア関係を結ぶのかをコマンドで指定していくことになります。