BGP
AS(共通の経路制御方針で運用されるネットワークのまとまり)の間で経路情報を交換するルーティングプロトコル。経路情報の交換にTCPを使い、経路に付くパス属性と運用方針に基づいて経路を選ぶ。
イマシルちゃんの解説
インターネットは、プロバイダや企業などが運用するネットワークをつないでできているよ。
共通の経路制御方針で運用されるネットワークのまとまりを、AS(自律システム)というんだ。
BGPは、ASの間で到達できるネットワークの情報を交換するルーティングプロトコルだよ。
ルータは受け取った情報から、宛先へ向かう経路を選ぶの。
単に距離が短い方を選ぶのではなく、どのASを経由するかや、どの接続先を優先するかという運用方針も判断に使うんだ。
管理者の異なるネットワーク同士でも、それぞれの方針を反映しながら通信先への経路を知らせ合えるよ。
この解説はわかりやすかったですか?
より深い解説
役割と選択の基準
BGP-4は、AS間で経路情報を交換するEGP(Exterior Gateway Protocol)の代表である。宛先を203.0.113.0/24のようなプレフィックスで表し、経路選択に使うパス属性とともに広告する。
一方、RIP・OSPF・IS-ISは、AS内の経路制御を担うIGP(Interior Gateway Protocol)である。主な違いは、経路を選ぶ範囲と判断材料にある。
| プロトコル | 経路選択の考え方 |
|---|---|
| RIP | 隣接ルータから宛先と距離を学ぶ距離ベクトル型。通常はホップ数で比較し、到達可能な経路は最大15ホップである |
| OSPF・IS-IS | 接続状態を共有するリンクステート型。リンクに設定したコストやメトリックの合計をもとに、AS内の最短経路を計算する |
| BGP | ASの経由情報や優先度などのパス属性を使うパスベクトル型。接続先ごとの方針で経路を広告・選択する |
RIPは経路選択の基準が単純であるが、規模とホップ数による制約がある。AS内でリンクのコストを使って経路を制御する場合は、OSPFやIS-ISが候補になる。比較対象の基本仕様はRFC 2453、RFC 2328、RFC 1195に示されている。
BGPの利点は、管理主体が異なるAS間で、接続先ごとの経路選択と広告方針を表現できることである。 複数の通信事業者へ接続し、どの出口を優先するか、どの宛先を知らせるかを制御したい場合に適する。
その分、属性・経路フィルタ・次ホップへの到達性を設計し、相互の整合性を管理する負担がある。注意:誤った広告や属性の設定は、経路の迂回や通信断につながる。
OSPFやIS-ISでAS内部の到達性を確保し、BGPで外部経路とその選択方針を配る構成もある。内部の経路計算とAS間の方針を役割分担し、併用できる。
AS内外の相手と接続する
BGPを実行する装置をBGPスピーカ、経路情報を交換する相手をピアという。接続にはTCPを使い、接続を受け付けるポートは179番である。異なるASの相手とのセッションがeBGP、同じASの相手とのセッションがiBGPである。後者は、外部から学習した経路をAS内部へ配るためにも使う。
セッションは論理的な接続である。直結していない相手へ接続する場合も、そのアドレスへの到達性が必要になる。静的経路やOSPFなどで到達性を確保し、接続元アドレスと戻りの経路を揃える。
BGPが送るのは経路を制御する情報であり、利用者のIPパケットとは別である。パケットは、各ルータが選んだ経路に従って転送される。基本仕様はRFC 4271で定められている。
セッションの確立と維持
TCP接続が成立すると、両側がOPENを送り、バージョン・AS番号・Hold Time・BGP Identifierなどを伝える。BGP IdentifierはBGPスピーカを識別する32ビットの値である。Optional Parametersには、対応機能を知らせるCapabilityなどを載せる。
相手のOPENを受理するとKEEPALIVEを送り、相手からも受け取ると経路交換が可能になる。図は正常な接続例で、TCPの3ウェイハンドシェイクを省略している。両方向の送信時刻は常にこの並びになるとは限らない。
- Establishedへ移行
メッセージはヘッダーのTypeで識別する。基本の四種類に、再広告を要求する拡張を加えると次のようになる。
| メッセージとType | 役割 |
|---|---|
| OPEN(1) | セッション開始時の情報を交換する |
| UPDATE(2) | 経路の広告・変更・撤回を伝える |
| NOTIFICATION(3) | エラーや終了理由を通知する |
| KEEPALIVE(4) | 接続を確認・維持する。経路情報は載せない |
| ROUTE-REFRESH(5) | 相手へ経路の再広告を要求する |
再広告は、受信ポリシーを変更した後の再評価などに使う。RFC 2918で定められている。
接続状態では、初期化・待機に関わるIdle、TCP接続待ちのConnect、接続の再試行に関わるActiveを区別する。OPENを送って相手のOPENを待つ状態がOpenSent、それを受理してKEEPALIVEを待つ状態がOpenConfirmである。経路交換が可能な状態がEstablishedであり、Activeという表示だけでは接続成功を意味しない。
接続後は、有効なKEEPALIVEまたはUPDATEを受信するたびにHold Timerを更新する。監視に使うHold Timeは双方が示した値の小さい方で、0ならこのタイマーと定期的なKEEPALIVE送信を使わない。
監視時間内にこれらのメッセージを受信できず、タイマーが満了すると、NOTIFICATIONを送って接続を切断する。基本動作では、そのピアから学習した経路を取り除き、代わりの有効な経路があれば選び直す。
経路を広告して候補を選ぶ
基本のIPv4ユニキャスト形式のUPDATEには、到達可能な宛先を示すNLRI(Network Layer Reachability Information)、経路のパス属性、取り消す宛先を示すWithdrawn Routesがある。広告済みの経路を取り消す操作を経路の撤回という。接続直後は広告方針に合う経路を送り、その後は変更に応じて更新する。
IPv6などの経路を扱う拡張がMP-BGP(Multiprotocol BGP)である。AFI(Address Family Identifier)でIPv4・IPv6などのアドレス体系を、SAFI(Subsequent Address Family Identifier)でユニキャスト・VPNなどの種類を区別する。到達可能な経路と次ホップはMP_REACH_NLRI、撤回する経路はMP_UNREACH_NLRIというUPDATE内の属性で伝える。RFC 4760がこの拡張を定めている。
受信した経路にはフィルタを適用し、利用できる候補から最良経路を選ぶ。BGPが保持する経路情報をBGPテーブルと呼ぶ。仕様上は、受信した情報をAdj-RIB-In、自ルータが選択した情報をLoc-RIB、相手への広告用の情報をAdj-RIB-Outとして整理する。RIBはRouting Information Baseの略で、これらは論理的な区分である。
BGP内で選ばれた経路は、静的経路などとの比較でも優先された場合に、ルーティングテーブルへ採用される。BGPで経路を受信したことと、その経路が転送に使われることは別である。 経路情報源の優先関係は動的ルーティング、転送時の宛先照合はロンゲストマッチの記事で扱う。
次ホップへ到達する
NEXT_HOPは、その宛先へ進むための次ホップのアドレスである。ルータはこのアドレスへの経路も参照するため、広告された宛先が分かっていても、次ホップへ到達できなければその経路を利用できない。
通常のiBGPでは、外部から学習した経路のNEXT_HOPを保持したまま内部へ広告する。内部ルータが外部の次ホップへの経路を持たない場合は、その到達性を確保するか、境界ルータでnext-hop-selfを設定する。後者は広告時の次ホップを自分のアドレスへ書き換える設定である。
次の例では、外部Xと境界BがeBGP、Bと内部AがiBGPで接続している。Xの接続アドレスは192.0.2.1で、Bの内部向け接続元は10.0.0.1である。Aは10.0.0.1へ到達できるものとする。
AS 65030
AS 65020
AS 65020
- Bでnext-hop-selfを設定
経路情報はXからAへ伝わり、その経路を使うパケットはAからXの方向へ進む。BGPセッションの相手へ到達できることと、経路情報に含まれる次ホップへ到達できることも区別する。
属性で経路を比較する
同じネットワークアドレスとプレフィックス長への候補が複数ある場合は、次ホップへの到達性などを確認した上で、パス属性を比較する。主な属性は次のとおりである。
| 属性 | 意味と選択への関係 |
|---|---|
| LOCAL_PREF | AS内部で共有する優先度。値が大きい経路を優先する |
| AS_PATH | 経由したAS番号の並び。先行条件が同じなら短い経路を優先する |
| ORIGIN | 経路をBGPへ取り込んだ由来。IGP・EGP・INCOMPLETEの順に優先する |
| MED | 隣接ASへ入口の希望を伝える。比較対象では値が小さい経路を優先する |
| COMMUNITIES | 経路を分類する値。広告範囲や属性変更の方針に使う |
LOCAL_PREFは通常iBGPでAS内へ共有し、通常のeBGPでは相手ASへ渡さない。MEDはMulti Exit Discriminatorの略で、属性名はMULTI_EXIT_DISCである。通常は同じ隣接ASに由来する経路同士で比較する。相手ASに入口の希望を伝えても、最終的な選択は相手の方針に従う。
AS_PATHには、通常のeBGP広告時に自分のAS番号を先頭へ追加する。iBGPでは追加しない。受信した並びに自分のAS番号があれば、通常はループを検出して受け入れない。この情報を使うBGPはパスベクトル型に分類される。並びを意図的に長くする設定はAS_PATHプリペンドの記事で扱う。
このAS番号の並びは経路広告に付く情報であり、各パケットの経由先を送信元が指定するソースルーティングとは役割が異なる。また、ORIGINの値は内部・外部のどちらのセッションから受信したかを示すものではない。値のEGPは歴史的なプロトコル名に由来する。
代表的な実装では、LOCAL_PREF、AS_PATHの長さ、ORIGIN、比較可能なMEDなどを順に比較する。差が付かなければ、eBGPで学習した経路や、次ホップまでのIGPコストが小さい経路などを優先する。前の条件で差が付けば、後の条件が有利でも選ばれない。細かな順序は製品・設定によるため、実装の条件を確認する。
RFC 4271の同順位の候補を絞る規則では、次ホップまでのコストでも差が付かなければ、広告した相手のBGP Identifierが小さい経路を選ぶ。それも同じならピアのIPアドレスが小さい経路を選ぶ。ここで「次ホップが近い」とは地理的な距離ではなく、IGPが算出した到達コストが低いという意味である。識別子やアドレスの大小も、先行する条件を飛び越えて適用するものではない。
COMMUNITIESの予約済みの値では、NO_EXPORTが通常の単一AS構成でAS外への広告を抑え、NO_ADVERTISEが他のBGPピアへの広告を抑える。RFC 1997で定められている。経路の選別にはプレフィックスリストを、条件に応じた属性変更にはルートマップを使う。
AS内へ経路情報を配る
通常のiBGPでは、内部の相手から受信した経路を別の内部の相手へ再広告しない。この制約の下で経路を共有するには、BGPスピーカ間にフルメッシュのセッションが必要になる。これは論理的な接続の全組合せを意味する。
ルートリフレクションは、この制約を緩和して経路の配布をルートリフレクタ(RR)へ集約する仕組みである。RRは受信候補から最良経路を選び、内部から受信した経路を次の相手へ反射する。
| 内部での受信元 | 反射先 |
|---|---|
| クライアント | 他のクライアントと非クライアント |
| 非クライアント | クライアント |
反射によるループはORIGINATOR_IDとCLUSTER_LISTで検出する。前者にはそのAS内で経路を生成・持ち込んだBGPスピーカの識別子を、後者には通過したクラスタの識別子を記録する。自分の識別子やクラスタを含む経路が戻ってきたことを検出し、再利用を防ぐ。
RRは経路情報の配布を担い、利用者のパケットが必ずRRを通るわけではない。反射時は通常、NEXT_HOPを保持するため、その到達性は別に確保する。RFC 4456が反射の規則を定めている。
実際の試験ではここに出る!全24問
ネットワークスペシャリスト
- 午前Ⅱ
- 午後Ⅰ
- 午後Ⅱ
テクニカルエンジニア(ネットワーク)
- 午前