BGP 再入門
BGP とは
Section titled “BGP とは”- TCPconnection(port179)を利用して経路情報を交換
- packet の到達/受信確認、再送は TCP に委任
- 変化のあった経路の情報のみを広告
– PathVector 方式
- AS 番号の列で path を表現
- 経路情報に属性値(PathAttribute)を付加できる
- loop-free
AS 番号とは
Section titled “AS 番号とは”- AS に割り当てられる 16bit or 32bit の識別番号(1~4294967294)
- IR(InternetRegistry)が割り当て及び管理を実施(日本では JPNIC)
- BGP を利用する際には必須
- private AS 番号: 64512~65534, 4200000000 ~4294967294
- JPNIC AS 番号リスト https://www.nic.ad.jp/ja/ip/as-numbers.txt
AS 間の関係(peer)
Section titled “AS 間の関係(peer)”- AS 間で(双方向)通信を成立させる必要条件:
1.AS 間を物理的に接続する.(通信路の確立) 2.各々の AS が持っている経路情報を相手に知らせる.(経路の広告)
- いろいろな” peer”: – router (BGP speaker) 間の BGP session. == ”(BGP)peer”. – BGPconnection の対向側 router.==” peer(router)”. – 自 AS に割り振られた addressblock(prefix)のみを広告しあう AS 間の関係.==” peer”.
- 経路の種類:
- 自 AS 経路 peer 経路==自 AS に割り振られた addressblock への経路.AS 内で生成(origination) する.
- peer 経路 ==” peer”の関係にある AS からの受信経路
AS 間の関係(transit)
Section titled “AS 間の関係(transit)”-
通信を行いたい AS 間で直接に接続を持てない場合は他の network(AS)を介して接続する他ない – 各々の AS は持っている経路情報を仲介 AS に広告し、自身の代わりに通信相手の AS に対して再広告してもらう必要がある. – 当然ながら相手の AS から自身に向かう traffic も仲介 AS に運んでもらわなければならない. – 仲介 AS は経路広告及び traffic の中継(transit)を提供している.−→” transitprovider
-
AS 間の関係
AS10,AS20 −> AS30 AS30 −> AS10,AS20 upstream downstream 「transit を買う」 「transit を売る」 transit 提供はだいたい有償 「(Internet への)接続を買う」 顧客 -
経路の種類:
- transit 経路==transit 提供先(downstream)からの受信経路.(顧客経路)
AS の階層構造
Section titled “AS の階層構造”| upstream -> downstream | 広告 | 全経路(“full-route”).(又は defaultroute のみ) |
|---|---|---|
| upstream -> downstream | 受信 | 全て |
| downstream -> upstream | 広告 | 自 AS 経路+ transit 経路.(peer 経路は広告しない) |
| downstream -> upstream | 受信 | 事前に広告の通達があった経路のみ.(又は全て) |
| peer 間 | 広告 | 自 AS 経路+ transit 経路.(peer 経路は広告しない) |
| peer 間 | 受信 | 事前に広告の通達があった経路のみ. |
– 上記はあくまで基本的な例であり実際には対 AS 単位の接続 policy に従った制御(が可能なこと)が必要 – 制御の単位は prefix(の集合).−→ BGP の PathAttribute を利用.
BGPPeer の種類
Section titled “BGPPeer の種類”- Internal peer: (IBGPpeer)
– 同一 AS 内の peer
– loopback interface(address)間で connection を設定するのが一般的
- Internalpeer との BGP 接続は IBGP(InternalBGP,iBGP)と呼ばれる
- External peer: (EBGPpeer) – 異なる AS 間の peer. – AS 間の専用接続線を介する privatepeer と IX を介する publicpeer の 2 種類がある. – Externalpeer との BGP 接続は EBGP(ExternalBGP,eBGP)と呼ばれる
Internal peer の構成
Section titled “Internal peer の構成”- Internalpeer からの受信経路は他の Internalpeer へは広告しない.(SHALLNOT)
- 故に Internalpeer 間の接続は fullmesh 構成にする必要がある
- 但し物理的接続まで fullmesh 構成である必要はない
- BGP speaker の数が多くなると fullmesh 構成は作るのが大変.−→ scale 問題
- N 台の BGP speaker 間で IBGPfullmesh を構成する場合の connection 数は N(N-1)/2 となる
- 回避策:
- BGP Route Reflection(RFC4456)
- BGP Confederation(RFC5065)
BGP Route Reflection
Section titled “BGP Route Reflection”- RFC4456 にて規定
- 特定の BGPspeaker(” RouteReflector”,RR)が IBGP で学習した経路情報を他の Internalpeer に(再)広告することを許可する
- RR から見た他の Internalpeer の分類:
- ClientPeer: RR と group(” cluster”)を構成する Internal peer
- Non-ClientPeer: client 以外の Internal peer.
- RR は自己の受信経路から最適経路選択を行った後に他の Internal peer に対して経路情報を転送する
- non-client からの受信経路は cluster 内の全 client に転送.
- client からの受信経路は全ての non-client に転送.
- 更に cluster 内の他の client に転送しても良い.−→ cluster 内は fullmesh 構成でなくとも良い
- 各 cluster は異なる CLUSTERID (4byte)を持つ.
- cluster 内に複数の RR が存在する場合は同じ ID を共有する.
- 経路情報の転送時に付与する.
- 同一 cluster 内 RR からの受信経路の識別(廃棄)に利用.
- client が他の cluster の RR となっても良い.−→階層構造が可.
- Route Reflector の(階層)構造は物理接続と合わせるべき.
- 例:POP 間接続線を収容する router が RR となり POP 内で cluster を構成する.(POP 間は IBGPfullmesh)
BGP Confederation
Section titled “BGP Confederation”- RFC5065 にて規定.
- 1 つの AS 内部に複数の Member-AS が存在する構成.
- Member-AS は各々異なる AS 番号を持ち member 間は Externalpeer とほぼ同等になる.
- Member-ASNumber:
- confederation 内部のみで見える AS 番号.
- confederation member は他 member との BGPsession ではこの AS 番号を用いる.
- AS ConfederationIdentifier:– confederation の外から見える AS 番号.
- confederation member は member 以外との BGPsession ではこの AS 番号を用いる
BGP の状態遷移
Section titled “BGP の状態遷移”| Idel | 初期状態.error が発生した場合はこの状態に戻る. |
|---|---|
| Connect | TCPconnection の完了を待つ |
| Active | peer からの TCPconnection 開始を待つ. |
| OpenSent | OPENmessage 送信後 peer からの OPENmessage を待つ. |
| OpenComfirm | OPENmessage 受信後 peer からの KEEPALIVE(orNOTIFICATION)message を待つ. |
| Established | BGPconnection 確立.経路情報の交換他を行う. |
Open Message
Section titled “Open Message”- TCPconnection の確立後に最初に送られる message.
- message に含まれる情報:
- 自 AS 番号.
- Hold-Time:
- BGPconnection を維持する最大時間(秒).
- value:0or3 以上.(RFC 推奨=90)
- BGPpeer 間で negotiation されより小さい方の値が採用される.
- BGPIdentifier:
- BGPspeaker(router)識別子.(4octets)
- RouterID(” router-id”)の方が一般的か?
- BGPspeaker に設定された interfaceaddress(の内の 1 つ)を設定する.
- BGPconnection の衝突が発生した場合はこの値がより高い側の BGP speaker が initiate した connection が残る.
- BGPspeaker(router)識別子.(4octets)
- OptionalParameters:
- ex. Capabilities(RFC5492)
Update Message
Section titled “Update Message”- 経路情報を BGPpeer に広告する為に用いられる message.
- 変化のあった経路の情報のみを広告.
- 変化には attribute のそれも含む.
- message に含まれる情報:
- WithdrawnRoutes:
- 無効となる経路の prefix 情報.∗複数の prefix を 1 つの message 内に含めても良い.
- Network Layer Reachability Information(NLRI):
- (新規に)有効となる経路の prefix 情報.∗PathAttributes が同じ複数の prefix を 1 つの message 内に含めても良い.
- Path Attributes: (−→ 3 章)
- (新規に)有効となる経路(prefix)の BGP 属性値.
- WithdrawnRoutes:
KeepAlive Message
Section titled “KeepAlive Message”- BGPconnection の維持に用いられる message.
- TCP-base の keep-alive 機構を使用しない代わりとして BGPpeer に対して定期的に送信.
- Hold-Time の間に本 message や UPDATEmessage を 1 つも受信できなかった場合 BGPconnection は close される.
- message の送出間隔は Hold-Time の 1/3 以下が適切とされている.
- 但し 1 秒以下になってはならない.(MUST NOT)
- Hold-Time が 0 に negotiation された場合は本 message は送出してはならない.(MUSTNOT)
Notification Message
Section titled “Notification Message”- error が発生/検出された場合等に送出される message.
- Error Code:
- Message HeaderError
- OPEN MessageError
- UPDATE MessageError
- Hold TimerExpired
- Finite State MachineError
- Cease
- error 発生時には本 message の送出後即座に BGPconnection を close し peer からの受信経路を無効とする
- < 例-1> Hold-Time の間に KEEPALIVE 他の message を受信できなかった場合は ErrorCode=4 の message を送出し BGPconnection を close
- < 例-2> peer からの受信経路数が設定(上限)値を超えた場合は ErrorCode=3(subcode =1)の message を送出し BGPconnection を close.
ROUTE-REFRESH Message
Section titled “ROUTE-REFRESH Message”- RFC2918 にて規定
- peer に対して全経路情報の再広告を要求する際に送信する message.
- inboundroutingpolicy の変更を適用する為に必要.(policy 適用以前の全情報を local で保存していない場合)
- 本 message は peer からの OPENmessage に RouteRefreshCapability が含まれていた場合のみ有効.