Skip to content

BGP 再入門

  • TCPconnection(port179)を利用して経路情報を交換
    • packet の到達/受信確認、再送は TCP に委任
  • 変化のあった経路の情報のみを広告

– PathVector 方式

  • AS 番号の列で path を表現
  • 経路情報に属性値(PathAttribute)を付加できる
  • loop-free
  • 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 間で(双方向)通信を成立させる必要条件:

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 間で直接に接続を持てない場合は他の network(AS)を介して接続する他ない – 各々の AS は持っている経路情報を仲介 AS に広告し、自身の代わりに通信相手の AS に対して再広告してもらう必要がある. – 当然ながら相手の AS から自身に向かう traffic も仲介 AS に運んでもらわなければならない. – 仲介 AS は経路広告及び traffic の中継(transit)を提供している.−→” transitprovider

  • AS 間の関係

    AS10,AS20 −> AS30AS30 −> AS10,AS20
    upstreamdownstream
    「transit を買う」「transit を売る」transit 提供はだいたい有償
    「(Internet への)接続を買う」顧客
  • 経路の種類:

    • transit 経路==transit 提供先(downstream)からの受信経路.(顧客経路)
upstream -> downstream広告全経路(“full-route”).(又は defaultroute のみ)
upstream -> downstream受信全て
downstream -> upstream広告自 AS 経路+ transit 経路.(peer 経路は広告しない)
downstream -> upstream受信事前に広告の通達があった経路のみ.(又は全て)
peer 間広告自 AS 経路+ transit 経路.(peer 経路は広告しない)
peer 間受信事前に広告の通達があった経路のみ.

– 上記はあくまで基本的な例であり実際には対 AS 単位の接続 policy に従った制御(が可能なこと)が必要 – 制御の単位は prefix(の集合).−→ BGP の PathAttribute を利用.

  • 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)と呼ばれる
  • 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)
  • 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)
  • 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 番号を用いる
Idel初期状態.error が発生した場合はこの状態に戻る.
ConnectTCPconnection の完了を待つ
Activepeer からの TCPconnection 開始を待つ.
OpenSentOPENmessage 送信後 peer からの OPENmessage を待つ.
OpenComfirmOPENmessage 受信後 peer からの KEEPALIVE(orNOTIFICATION)message を待つ.
EstablishedBGPconnection 確立.経路情報の交換他を行う.
  • 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 が残る.
    • OptionalParameters:
      • ex. Capabilities(RFC5492)
  • 経路情報を BGPpeer に広告する為に用いられる message.
  • 変化のあった経路の情報のみを広告.
  • 変化には attribute のそれも含む.
  • message に含まれる情報:
    • WithdrawnRoutes:
      • 無効となる経路の prefix 情報.∗複数の prefix を 1 つの message 内に含めても良い.
    • Network Layer Reachability Information(NLRI):
      • (新規に)有効となる経路の prefix 情報.∗PathAttributes が同じ複数の prefix を 1 つの message 内に含めても良い.
    • Path Attributes: (−→ 3 章)
      • (新規に)有効となる経路(prefix)の BGP 属性値.
  • 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)
  • error が発生/検出された場合等に送出される message.
  • Error Code:
    1. Message HeaderError
    2. OPEN MessageError
    3. UPDATE MessageError
    4. Hold TimerExpired
    5. Finite State MachineError
    6. 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.
  • RFC2918 にて規定
  • peer に対して全経路情報の再広告を要求する際に送信する message.
    • inboundroutingpolicy の変更を適用する為に必要.(policy 適用以前の全情報を local で保存していない場合)
  • 本 message は peer からの OPENmessage に RouteRefreshCapability が含まれていた場合のみ有効.