メインコンテンツまでスキップ

8. BGP Finite State Machine (FSM) (BGP有限状態機械)

  1. BGP Finite State Machine (FSM) (BGP有限状態機械)

    本文書で説明されるデータ構造とFSMは概念的なものであり、実装が説明された機能をサポートし、同じ外部から見える動作を示す限り、ここで説明されたとおりに正確に実装される必要はありません。

    このセクションでは、有限状態機械 (Finite State Machine: FSM) の観点からBGP動作を規定します。このセクションは2つの部分に分かれます:

    1. 状態機械のイベントの説明(セクション8.1)
    2. FSMの説明(セクション8.2)

    各接続に必要(mandatory)なセッション属性は以下の通りです:

    1. State (状態)
    2. ConnectRetryCounter (接続再試行カウンタ)
    3. ConnectRetryTimer (接続再試行タイマー)
    4. ConnectRetryTime (接続再試行時間)
    5. HoldTimer (保持タイマー)
    6. HoldTime (保持時間)
    7. KeepaliveTimer (キープアライブタイマー)
    8. KeepaliveTime (キープアライブ時間)

    状態セッション属性は、BGP FSMの現在の状態を示します。ConnectRetryCounterは、BGPピアがピアセッションの確立を試みた回数を示します。

    タイマーに関連する必須属性は、セクション10で説明されています。各タイマーには「timer」と「time」(初期値)があります。

    オプションのセッション属性を以下に示します。これらのオプション属性は、接続ごとまたはローカルシステムごとにサポートされる場合があります:

    1. AcceptConnectionsUnconfiguredPeers (未設定ピアからの接続受け入れ)
    2. AllowAutomaticStart (自動開始許可)
    3. AllowAutomaticStop (自動停止許可)
    4. CollisionDetectEstablishedState (確立状態での衝突検出)
    5. DampPeerOscillations (ピア振動減衰)
    6. DelayOpen (オープン遅延)
    7. DelayOpenTime (オープン遅延時間)
    8. DelayOpenTimer (オープン遅延タイマー)
    9. IdleHoldTime (アイドル保持時間)
    10. IdleHoldTimer (アイドル保持タイマー)
    11. PassiveTcpEstablishment (パッシブTCP確立)
    12. SendNOTIFICATIONwithoutOPEN (OPENなしでNOTIFICATION送信)
    13. TrackTcpState (TCP状態追跡)

    オプションのセッション属性は、BGP FSMの状態遷移に影響を与えるBGP機能のさまざまな機能をサポートします。タイマーに関連する属性の2つのグループは以下の通りです:

    グループ1: DelayOpen、DelayOpenTime、DelayOpenTimer グループ2: DampPeerOscillations、IdleHoldTime、IdleHoldTimer

    最初のパラメータ(DelayOpen、DampPeerOscillations)は、タイマー機能がアクティブであることを示すオプション属性です。「Time」値は「Timer」(DelayOpenTime、IdleHoldTime)の初期値を指定します。「Timer」は実際のタイマーを指定します。

    これらのオプション属性と状態機械に通知されるイベントとの相互作用の説明については、セクション8.1.1を参照してください。セクション8.2.1.3も、さまざまなタイプのオプション属性(フラグまたはタイマー)の簡単な概要を提供しています。

8.1. Events for the BGP FSM (BGP FSMのイベント)

8.1.1. Optional Events Linked to Optional Session Attributes (オプションセッション属性にリンクされたオプションイベント)

BGP FSMへの入力はイベントです。イベントは必須またはオプションのいずれかです。一部のオプションイベントは、オプションのセッション属性にリンクされています。オプションのセッション属性は、FSM機能のいくつかのグループを有効にします。

FSM機能、イベント、およびオプションのセッション属性間のリンケージを以下に説明します。

グループ1: 自動管理イベント(Start/Stop)

オプションセッション属性: AllowAutomaticStart、 AllowAutomaticStop、 DampPeerOscillations、 IdleHoldTime、IdleHoldTimer

オプション1: AllowAutomaticStart

説明: BGPピア接続は、管理制御によって開始および停止できます。この管理制御は、オペレーターの介入に基づく手動、またはBGP実装固有のロジックの制御下にある自動のいずれかです。「自動」という用語は、そのようなロジックがBGPピア接続を再起動すべきと判断したときに、BGPピア接続FSMに発行される開始を指します。

AllowAutomaticStart属性は、このBGP接続がBGP接続の自動開始をサポートすることを指定します。

BGP実装がAllowAutomaticStartをサポートする場合、ピアは繰り返し再起動される可能性があります。他の3つのオプションは、自動再起動が発生する速度を制御します:DampPeerOscillations、IdleHoldTime、およびIdleHoldTimer。

DampPeerOscillationsオプションは、実装が自動開始と自動停止のシーケンスに直面してBGPピアの振動を減衰させる追加のロジックを実行することを指定します。IdleHoldTimeは、次の自動再起動を許可する前にBGPピアがIdle状態に保持される時間の長さを指定します。IdleHoldTimerは、ピアをIdle状態に保持するタイマーです。

DampPeerOscillationsロジックの例は、BGPピアが時間期間内に繰り返し接続性(接続/切断)を振動する場合、IdleHoldTime値を増加させることです。このロジックを実行するために、ピアは5分以内に10回接続および切断する可能性があります。IdleHoldTime値は0から120秒にリセットされます。

値: TRUEまたはFALSE

オプション2: AllowAutomaticStop

説明: このBGPピアセッションのオプション属性は、BGP接続がBGP接続の「自動」停止を許可することを示します。「自動」停止は、実装固有のロジックの制御下での停止として定義されます。実装固有のロジックは、この仕様の範囲外です。

値: TRUEまたはFALSE

オプション3: DampPeerOscillations

説明: DampPeerOscillationsオプションセッション属性は、BGP接続がIdle状態でBGPピアの振動を減衰させるロジックを使用していることを示します。

値: TRUEまたはFALSE

オプション4: IdleHoldTime

説明: IdleHoldTimeは、IdleHoldTimerに設定される値です。

値: 秒単位の時間

オプション5: IdleHoldTimer

説明: IdleHoldTimerは、BGPピアの振動制御を支援します。IdleHoldTimerは、BGPピアを特定の期間Idleに保つために使用されます。IdleHoldTimer_Expiresイベントは、セクション8.1.3で説明されています。

値: 秒単位の時間

グループ2: 未設定ピア

オプションセッション属性: AcceptConnectionsUnconfiguredPeers

オプション1: AcceptConnectionsUnconfiguredPeers

説明: BGP FSMは、オプションで事前設定されていないネイバーからのBGPピア接続の受け入れを許可します。「AcceptConnectionsUnconfiguredPeers」オプションセッション属性により、FSMは実装がこれらの未設定ピアを受け入れるか拒否するかを許可する状態遷移をサポートできます。

AcceptConnectionsUnconfiguredPeersにはセキュリティ上の影響があります。詳細については、BGP脆弱性文書[RFC4272]を参照してください。

値: TrueまたはFalse

グループ3: TCP処理

オプションセッション属性: PassiveTcpEstablishment、 TrackTcpState

オプション1: PassiveTcpEstablishment

説明: このオプションは、BGP FSMがリモートBGPピアがBGP TCP接続を確立するのを受動的に待機することを示します。

値: TRUEまたはFALSE

オプション2: TrackTcpState

説明: BGP FSMは通常、個々のTCPメッセージではなく、TCP接続試行の最終結果を追跡します。オプションで、BGP FSMはTCP接続ネゴシエーションとの追加の相互作用をサポートできます。TCPイベントとの相互作用により、BGPピア接続が必要とするロギングの量とBGP FSM変更の数が増加する可能性があります。

値: TRUEまたはFALSE

グループ4: BGPメッセージ処理

オプションセッション属性: DelayOpen、DelayOpenTime、 DelayOpenTimer、 SendNOTIFICATIONwithoutOPEN、 CollisionDetectEstablishedState

オプション1: DelayOpen

説明: DelayOpenオプションセッション属性により、実装は特定の時間期間(DelayOpenTime)OPENメッセージの送信を遅延するように設定できます。遅延により、リモートBGPピアが最初のOPENメッセージを送信する時間が与えられます。

値: TRUEまたはFALSE

オプション2: DelayOpenTime

説明: DelayOpenTimeは、DelayOpenTimerに設定される初期値です。

値: 秒単位の時間

オプション3: DelayOpenTimer

説明: DelayOpenTimerオプションセッション属性は、接続でのOPENメッセージの送信を遅延するために使用されます。DelayOpenTimer_Expiresイベント(イベント12)は、セクション8.1.3で説明されています。

値: 秒単位の時間

オプション4: SendNOTIFICATIONwithoutOPEN

説明: SendNOTIFICATIONwithoutOPENにより、ピアは最初にOPENメッセージを送信せずにNOTIFICATIONを送信できます。このオプションセッション属性がない場合、BGP接続は、ピアがNOTIFICATIONメッセージを送信する前にピアによってOPENメッセージが送信されなければならないと想定します。

値: TrueまたはFalse

オプション5: CollisionDetectEstablishedState

説明: 通常、衝突検出(セクション6.8参照)はEstablished状態で無視されます。このオプションセッション属性は、このBGP接続がEstablished状態で衝突を処理することを示します。

値: TrueまたはFalse

注: オプションのセッション属性は、BGP実装の既存機能のBGP FSM記述を明確にします。オプションのセッション属性は、実装に対して事前定義されている可能性があり、既存の正しい実装の管理インターフェースを介して読み取ることができない場合があります。新しいBGP MIB(バージョン2以降)がサポートされると、これらのフィールドは管理インターフェースを介してアクセス可能になります。

8.1.2. Administrative Events (管理イベント)

管理イベントは、オペレーターインターフェースとBGPポリシーエンジンがBGP有限状態機械にBGP状態機械の開始または停止を通知するイベントです。基本的な開始および停止指示は、BGP FSMに特定のタイプの開始または停止メカニズムを通知するオプションの接続属性によって拡張されます。この組み合わせの例は、イベント5、AutomaticStart_with_PassiveTcpEstablishmentです。このイベントでは、BGP実装は、実装がパッシブTCP確立を使用するオプションで自動開始を使用していることをBGP FSMに通知します。パッシブTCP確立は、このBGP FSMがリモート側がTCP確立を開始するのを待つことを示します。

イベント1(ManualStart)とイベント2(ManualStop)のみが必須の管理イベントであることに注意してください。他のすべての管理イベントはオプションです(イベント3-8)。以下の各イベントには、名前、定義、ステータス(必須またはオプション)、および各段階で設定されるべき(SHOULD)オプションのセッション属性があります。BGP FSMのイベント1からイベント8を生成する場合、「Optional Attribute Status」セクションで指定された条件が検証されます。これらの条件のいずれかが満たされない場合、ローカルシステムはFSMエラーをログに記録すべきです(should)。

オプションのセッション属性の設定は、一部の実装では暗黙的である可能性があるため、外部オペレーターのアクションによって明示的に設定されない場合があります。セクション8.2.1.5は、オプションのセッション属性のこれらの暗黙的な設定について説明しています。以下で説明する管理状態も、一部の実装では暗黙的であり、外部オペレーターによって直接設定できない場合があります。

イベント1: ManualStart (手動開始)

定義: ローカルシステム管理者がピア接続を手動で開始します。

ステータス: 必須

オプション 属性 ステータス: PassiveTcpEstablishment属性はFALSEに設定されるべきです(SHOULD)。

イベント2: ManualStop (手動停止)

定義: ローカルシステム管理者がピア接続を手動で停止します。

ステータス: 必須

オプション 属性 ステータス: オプション属性との相互作用はありません。

イベント3: AutomaticStart (自動開始)

定義: ローカルシステムがBGP接続を自動的に開始します。

ステータス: オプション、ローカルシステムに依存

オプション 属性 ステータス: 1) このイベントが発生する場合、AllowAutomaticStart属性はTRUEに設定されるべきです(SHOULD)。 2) PassiveTcpEstablishmentオプションセッション属性がサポートされている場合、FALSEに設定されるべきです(SHOULD)。 3) DampPeerOscillationsがサポートされている場合、このイベントが発生したときにFALSEに設定されるべきです(SHOULD)。

イベント4: ManualStart_with_PassiveTcpEstablishment (パッシブTCP確立付き手動開始)

定義: ローカルシステム管理者がピア接続を手動で開始しますが、PassiveTcpEstablishmentが有効になっています。PassiveTcpEstablishmentオプション属性は、ピアが接続を確立する前にリッスンすることを示します。

ステータス: オプション、ローカルシステムに依存

オプション 属性 ステータス: 1) このイベントが発生する場合、PassiveTcpEstablishment属性はTRUEに設定されるべきです(SHOULD)。 2) このイベントが発生したとき、DampPeerOscillations属性はFALSEに設定されるべきです(SHOULD)。

イベント5: AutomaticStart_with_PassiveTcpEstablishment (パッシブTCP確立付き自動開始)

定義: ローカルシステムがPassiveTcpEstablishmentを有効にしてBGP接続を自動的に開始します。PassiveTcpEstablishmentオプション属性は、ピアが接続を確立する前にリッスンすることを示します。

ステータス: オプション、ローカルシステムに依存

オプション 属性 ステータス: 1) AllowAutomaticStart属性はTRUEに設定されるべきです(SHOULD)。 2) PassiveTcpEstablishment属性はTRUEに設定されるべきです(SHOULD)。 3) DampPeerOscillations属性がサポートされている場合、DampPeerOscillationsはFALSEに設定されるべきです(SHOULD)。

イベント6: AutomaticStart_with_DampPeerOscillations (ピア振動減衰付き自動開始)

定義: ローカルシステムがピア振動減衰を有効にしてBGPピア接続を自動的に開始します。持続的なピア振動を減衰させる正確な方法は実装によって決定され、この文書の範囲外です。

ステータス: オプション、ローカルシステムに依存。

オプション 属性 ステータス: 1) AllowAutomaticStart属性はTRUEに設定されるべきです(SHOULD)。 2) DampPeerOscillations属性はTRUEに設定されるべきです(SHOULD)。 3) PassiveTcpEstablishment属性はFALSEに設定されるべきです(SHOULD)。

イベント7: AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment (ピア振動減衰とパッシブTCP確立付き自動開始)

定義: ローカルシステムがピア振動減衰とPassiveTcpEstablishmentを有効にしてBGPピア接続を自動的に開始します。持続的なピア振動を減衰させる正確な方法は実装によって決定され、この文書の範囲外です。

ステータス: オプション、ローカルシステムに依存

オプション 属性 ステータス: 1) AllowAutomaticStart属性はTRUEに設定されるべきです(SHOULD)。 2) DampPeerOscillations属性はTRUEに設定されるべきです(SHOULD)。 3) PassiveTcpEstablishment属性はTRUEに設定されるべきです(SHOULD)。

イベント8: AutomaticStop (自動停止)

定義: ローカルシステムがBGP接続を自動的に停止します。

自動停止イベントの例は、特定のピアのプレフィックス数を超えて、ローカルシステムがピアを自動的に切断することです。

ステータス: オプション、ローカルシステムに依存

オプション 属性 ステータス: 1) AllowAutomaticStop属性はTRUEであるべきです(SHOULD)。

8.1.3. Timer Events (タイマーイベント)

イベント9: ConnectRetryTimer_Expires (接続再試行タイマー満了)

定義: ConnectRetryTimerが満了したときに生成されるイベント。

ステータス: 必須

イベント10: HoldTimer_Expires (保持タイマー満了)

定義: HoldTimerが満了したときに生成されるイベント。

ステータス: 必須

イベント11: KeepaliveTimer_Expires (キープアライブタイマー満了)

定義: KeepaliveTimerが満了したときに生成されるイベント。

ステータス: 必須

イベント12: DelayOpenTimer_Expires (オープン遅延タイマー満了)

定義: DelayOpenTimerが満了したときに生成されるイベント。

ステータス: オプション

オプション 属性 ステータス: このイベントが発生する場合、

  1. DelayOpen属性はTRUEに設定されるべきです(SHOULD)、
  2. DelayOpenTime属性はサポートされるべきです(SHOULD)、
  3. DelayOpenTimerはサポートされるべきです(SHOULD)。

イベント13: IdleHoldTimer_Expires (アイドル保持タイマー満了)

定義: IdleHoldTimerが満了したときに生成されるイベントで、BGP接続がBGPピアの振動を防ぐためのバックオフ期間の待機を完了したことを示します。

IdleHoldTimerは、DampPeerOscillationsオプション属性をTRUEに設定することによって持続的なピア振動減衰機能が有効になっている場合にのみ使用されます。

持続的なピア振動減衰機能を実装していない実装は、IdleHoldTimerを持たない場合があります。

ステータス: オプション

オプション 属性 ステータス: このイベントが発生する場合:

  1. DampPeerOscillations属性はTRUEに設定されるべきです(SHOULD)。
  2. IdleHoldTimerがちょうど満了しているべきです(SHOULD)。

8.1.4. TCP Connection-Based Events (TCP接続ベースのイベント)

イベント14: TcpConnection_Valid (TCP接続有効)

定義: ローカルシステムが有効な送信元IPアドレス、TCPポート、宛先IPアドレス、およびTCPポートを持つTCP接続要求を受信したことを示すイベント。無効な送信元および無効な宛先IPアドレスの定義は、実装によって決定されます。

BGPの宛先ポートは、IANAによって定義されているように、ポート179であるべきです(SHOULD)。

TCP接続要求は、ローカルシステムがTCP SYNを受信することによって示されます。

ステータス: オプション

オプション 属性 ステータス: 1) このイベントが発生する場合、TrackTcpState属性はTRUEに設定されるべきです(SHOULD)。

イベント15: Tcp_CR_Invalid (TCP接続要求無効)

定義: ローカルシステムが無効な送信元アドレスまたはポート番号、または無効な宛先アドレスまたはポート番号を持つTCP接続要求を受信したことを示すイベント。

BGP宛先ポート番号は、IANAによって定義されているように、179であるべきです(SHOULD)。

TCP接続要求は、ローカルシステムがTCP SYNを受信したときに発生します。

ステータス: オプション

オプション 属性 ステータス: 1) このイベントが発生する場合、TrackTcpState属性はTRUEに設定されるべきです(should)。

イベント16: Tcp_CR_Acked (TCP接続要求確認応答)

定義: ローカルシステムのリモートピアへのTCP接続確立要求を示すイベント。

ローカルシステムのTCP接続がTCP SYNを送信し、TCP SYN/ACKメッセージを受信し、TCP ACKを送信しました。

ステータス: 必須

イベント17: TcpConnectionConfirmed (TCP接続確認)

定義: ローカルシステムがリモートサイトによってTCP接続が確立されたことの確認を受信したことを示すイベント。

リモートピアのTCPエンジンがTCP SYNを送信しました。ローカルピアのTCPエンジンがSYN、ACKメッセージを送信し、現在最終ACKを受信しました。

ステータス: 必須

イベント18: TcpConnectionFails (TCP接続失敗)

定義: ローカルシステムがTCP接続失敗通知を受信したことを示すイベント。

リモートBGPピアのTCPマシンがFINを送信した可能性があります。ローカルピアはFIN-ACKで応答します。別の可能性は、ローカルピアがTCP接続でタイムアウトを示し、接続をダウンさせたことです。

ステータス: 必須

8.1.5. BGP Message-Based Events (BGPメッセージベースのイベント)

イベント19: BGPOpen (BGPオープン)

定義: 有効なOPENメッセージが受信されたときにイベントが生成されます。

ステータス: 必須

オプション 属性 ステータス: 1) DelayOpenオプション属性はFALSEに設定されるべきです(SHOULD)。 2) DelayOpenTimerは実行されているべきではありません(SHOULD)。

イベント20: BGPOpen with DelayOpenTimer running (DelayOpenTimer実行中のBGPOpen)

定義: トランスポート接続が正常に確立され、現在BGPオープンメッセージの送信を遅延しているピアに対して有効なOPENメッセージが受信されたときにイベントが生成されます。

ステータス: オプション

オプション 属性 ステータス: 1) DelayOpen属性はTRUEに設定されるべきです(SHOULD)。 2) DelayOpenTimerは実行されているべきです(SHOULD)。

イベント21: BGPHeaderErr (BGPヘッダーエラー)

定義: 受信したBGPメッセージヘッダーが有効でないときにイベントが生成されます。

ステータス: 必須

イベント22: BGPOpenMsgErr (BGPオープンメッセージエラー)

定義: OPENメッセージがエラーとともに受信されたときにイベントが生成されます。

ステータス: 必須

イベント23: OpenCollisionDump (オープン衝突ダンプ)

定義: 着信OPENメッセージの処理中に接続衝突が検出され、この接続が切断されるように選択されたときに管理的に生成されるイベント。衝突検出の詳細については、セクション6.8を参照してください。

イベント23は、セクション6.8のルールに従ってこの接続をドロップする必要があるかどうかを決定する実装ロジックによって生成される管理アクションです。このイベントは、FSMが2つのリンクされた状態機械として実装されている場合に発生する可能性があります。

ステータス: オプション

オプション 属性 ステータス: 状態機械がEstablished状態でこのイベントを処理する場合、

  1. CollisionDetectEstablishedStateオプション属性はTRUEに設定されるべきです(SHOULD)。

注意してください:OpenCollisionDumpイベントは、オプション属性が設定されていなくても、Idle、Connect、Active、OpenSent、およびOpenConfirmで発生する可能性があります。

イベント24: NotifMsgVerErr (通知メッセージバージョンエラー)

定義: 「バージョンエラー」を含むNOTIFICATIONメッセージが受信されたときにイベントが生成されます。

ステータス: 必須

イベント25: NotifMsg (通知メッセージ)

定義: NOTIFICATIONメッセージが受信され、エラーコードが「バージョンエラー」以外のときにイベントが生成されます。

ステータス: 必須

イベント26: KeepAliveMsg (キープアライブメッセージ)

定義: KEEPALIVEメッセージが受信されたときにイベントが生成されます。

ステータス: 必須

イベント27: UpdateMsg (更新メッセージ)

定義: 有効なUPDATEメッセージが受信されたときにイベントが生成されます。

ステータス: 必須

イベント28: UpdateMsgErr (更新メッセージエラー)

定義: 無効なUPDATEメッセージが受信されたときにイベントが生成されます。

ステータス: 必須

8.2. Description of FSM (FSMの説明)

8.2.1. FSM Definition (FSM定義)

BGPは、設定された各ピアに対して個別のFSMを維持しなければなりません(MUST)。潜在的な接続でペアリングされた各BGPピアは、idle状態に留まるように設定されていない限り、またはpassiveに留まるように設定されていない限り、相互に接続を試みます。この議論の目的上、TCP接続のアクティブまたは接続側(最初のTCP SYNパケットを送信するTCP接続の側)は、outgoingと呼ばれます。パッシブまたはリスニング側(最初のSYN/ACKの送信者)は、incoming接続と呼ばれます。(以下で使用される用語activeとpassiveの情報については、セクション8.2.1.1を参照してください。)

BGP実装は、着信接続を試みようとするのに加えて、着信接続のためにTCPポート179に接続してリッスンしなければなりません(MUST)。各着信接続に対して、状態機械がインスタンス化されなければなりません(MUST)。着信接続の相手側のピアのアイデンティティは既知であるが、BGP識別子は不明である期間が存在します。この間、同じ設定されたピアリングに対して着信接続と発信接続の両方が存在する可能性があります。これは接続衝突と呼ばれます(セクション6.8参照)。

BGP実装は、各設定されたピアリングに対して最大1つのFSMと、ピアがまだ識別されていない各着信TCP接続に対して1つのFSMを持ちます。各FSMは正確に1つのTCP接続に対応します。

接続が異なるIPアドレスのペアを使用するように設定されている場合、ピアのペア間に複数の接続が存在する可能性があります。これは、同じピアへの複数の「設定されたピアリング」と呼ばれます。

8.2.1.1. Terms "active" and "passive" (用語「active」と「passive」)

activeとpassiveという用語は、インターネットオペレーターの語彙に約10年間存在し、有用であることが証明されています。activeとpassiveという語は、TCP接続またはピアに適用されるときにわずかに異なる意味を持ちます。上記の定義と以下の状態機械に従って、任意の1つのTCP接続には1つのactive側と1つのpassive側のみがあります。BGPスピーカーがactiveとして設定されている場合、最終的に確立される接続のactive側またはpassive側のいずれかになる可能性があります。TCP接続が完了すると、どちらの端がactiveでどちらがpassiveであったかは関係ありません。唯一の違いは、TCP接続のどちら側がポート番号179を持つかです。

8.2.1.2. FSM and Collision Detection (FSMと衝突検出)

BGP接続ごとに1つのFSMがあります。接続がどのピアに関連付けられているかを判断する前に接続衝突が発生した場合、1つのピアに対して2つの接続が存在する可能性があります。接続衝突が解決された後(セクション6.8参照)、クローズされた接続のFSMは廃棄されるべきです(SHOULD)。

8.2.1.3. FSM and Optional Session Attributes (FSMとオプションセッション属性)

オプションのセッション属性は、フラグ(TRUEまたはFALSE)として機能する属性またはオプションのタイマーのいずれかを指定します。フラグとして機能するオプション属性の場合、オプションのセッション属性がシステムでTRUEに設定できる場合、対応するBGP FSMアクションをサポートしなければなりません(must)。たとえば、BGP実装で次のオプションを設定できる場合:AutoStartとPassiveTcpEstablishment、イベント3、4、および5をサポートしなければなりません(must)。オプションのセッション属性をTRUEに設定できない場合、そのオプションセットをサポートするイベントをサポートする必要はありません。

各オプションタイマー(DelayOpenTimerとIdleHoldTimer)には、次の属性のグループがあります:

  • サポートを示すフラグ、
  • タイマーに設定される時間
  • タイマー。

2つのオプションタイマーは、この形式を示しています:

DelayOpenTimer: DelayOpen、DelayOpenTime、DelayOpenTimer IdleHoldTimer: DampPeerOscillations、IdleHoldTime、 IdleHoldTimer

オプションタイマーのサポートを示すフラグ(DelayOpenまたはDampPeerOscillations)をTRUEに設定できない場合、そのオプションをサポートするタイマーとイベントをサポートする必要はありません。

8.2.1.4. FSM Event Numbers (FSMイベント番号)

この状態機械の説明で使用されるイベント番号(1-28)は、BGP状態機械の動作を指定するのに役立ちます。実装は、ネットワーク管理情報を提供するためにこれらの番号を使用してもかまいません(MAY)。FSMまたはFSMイベントの正確な形式は、各実装に固有です。

8.2.1.5. FSM Actions that are Implementation Dependent (実装依存のFSMアクション)

特定のポイントで、BGP FSMはBGP初期化が発生すること、またはBGPリソースが削除されることを指定します。BGP FSMおよび関連リソースの初期化は、BGP実装のポリシー部分に依存します。これらのアクションの詳細は、FSM文書の範囲外です。

8.2.2. Finite State Machine (有限状態機械)

Idle state (アイドル状態):

最初、BGPピアFSMはIdle状態にあります。以下、BGPピアFSMはBGP FSMに短縮されます。

この状態では、BGP FSMはこのピアのすべての着信BGP接続を拒否します。ピアにリソースは割り当てられません。ManualStartイベント(イベント1)またはAutomaticStartイベント(イベント3)に応答して、ローカルシステムは:

  • ピア接続のすべてのBGPリソースを初期化し、

  • ConnectRetryCounterをゼロに設定し、

  • 初期値でConnectRetryTimerを開始し、

  • 他のBGPピアへのTCP接続を開始し、

  • リモートBGPピアによって開始される可能性のある接続をリッスンし、

  • その状態をConnectに変更します。

ManualStopイベント(イベント2)とAutomaticStop(イベント8)イベントは、Idle状態で無視されます。

ManualStart_with_PassiveTcpEstablishmentイベント(イベント4)またはAutomaticStart_with_PassiveTcpEstablishmentイベント(イベント5)に応答して、ローカルシステムは:

  • すべてのBGPリソースを初期化し、

  • ConnectRetryCounterをゼロに設定し、

  • 初期値でConnectRetryTimerを開始し、

  • リモートピアによって開始される可能性のある接続をリッスンし、

  • その状態をActiveに変更します。

ConnectRetryTimerの正確な値はローカルな問題ですが、TCP初期化を許可するのに十分大きくあるべきです(SHOULD)。

DampPeerOscillations属性がTRUEに設定されている場合、Idle状態内で次の3つの追加イベントが発生する可能性があります:

  • AutomaticStart_with_DampPeerOscillations(イベント6)、

  • AutomaticStart_with_DampPeerOscillations_and_ PassiveTcpEstablishment(イベント7)、

  • IdleHoldTimer_Expires(イベント13)。

これらの3つのイベントを受信すると、ローカルシステムはこれらのイベントを使用してピアの振動を防ぎます。持続的なピア振動を防ぐ方法は、この文書の範囲外です。

他のイベント(イベント9-12、15-28)がIdle状態で受信されても、ローカルシステムの状態は変更されません。

Connect State (接続状態):

この状態では、BGP FSMはTCP接続が完了するのを待っています。

開始イベント(イベント1、3-7)は、Connect状態で無視されます。

ManualStopイベント(イベント2)に応答して、ローカルシステムは:

  • TCP接続をドロップし、

  • すべてのBGPリソースを解放し、

  • ConnectRetryCounterをゼロに設定し、

  • ConnectRetryTimerを停止してConnectRetryTimerをゼロに設定し、

  • その状態をIdleに変更します。

ConnectRetryTimer_Expiresイベント(イベント9)に応答して、ローカルシステムは:

  • TCP接続をドロップし、

  • ConnectRetryTimerを再起動し、

  • DelayOpenTimerを停止してタイマーをゼロにリセットし、

  • 他のBGPピアへのTCP接続を開始し、

  • リモートBGPピアによって開始される可能性のある接続を引き続きリッスンし、

  • Connect状態のままです。

DelayOpenTimer_Expiresイベント(イベント12)がConnect状態で発生した場合、ローカルシステムは:

  • ピアにOPENメッセージを送信し、

  • HoldTimerを大きな値に設定し、

  • その状態をOpenSentに変更します。

BGP FSMがTcpConnection_Validイベント(イベント14)を受信した場合、TCP接続が処理され、接続はConnect状態のままです。

BGP FSMがTcp_CR_Invalidイベント(イベント15)を受信した場合、ローカルシステムはTCP接続を拒否し、接続はConnect状態のままです。

TCP接続が成功した場合(イベント16またはイベント17)、ローカルシステムは処理前にDelayOpen属性をチェックします。DelayOpen属性がTRUEに設定されている場合、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを初期値に設定し、

  • Connect状態のままです。

DelayOpen属性がFALSEに設定されている場合、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • BGP初期化を完了し

  • ピアにOPENメッセージを送信し、

  • HoldTimerを大きな値に設定し、

  • その状態をOpenSentに変更します。

HoldTimer値は4分が推奨されます。

TCP接続が失敗した場合(イベント18)、ローカルシステムはDelayOpenTimerをチェックします。DelayOpenTimerが実行中の場合、ローカルシステムは:

  • 初期値でConnectRetryTimerを再起動し、

  • DelayOpenTimerを停止してその値をゼロにリセットし、

  • リモートBGPピアによって開始される可能性のある接続を引き続きリッスンし、

  • その状態をActiveに変更します。

DelayOpenTimerが実行されていない場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに停止し、

  • TCP接続をドロップし、

  • すべてのBGPリソースを解放し、

  • その状態をIdleに変更します。

DelayOpenTimerが実行中にOPENメッセージが受信された場合(イベント20)、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • BGP初期化を完了し、

  • DelayOpenTimerを停止してクリアし(値をゼロに設定)、

  • OPENメッセージを送信し、

  • KEEPALIVEメッセージを送信し、

  • HoldTimer初期値がゼロでない場合、

    • 初期値でKeepaliveTimerを開始し、

    • 交渉された値にHoldTimerをリセットし、

    それ以外の場合、HoldTimer初期値がゼロの場合、

    • KeepaliveTimerをリセットし、

    • HoldTimer値をゼロにリセットし、

  • その状態をOpenConfirmに変更します。

自律システムフィールドの値がローカル自律システム番号と同じ場合、接続ステータスを内部接続に設定します。それ以外の場合は「外部」になります。

BGPメッセージヘッダーチェック(イベント21)またはOPENメッセージチェックがエラーを検出した場合(イベント22)(セクション6.2参照)、ローカルシステムは:

  • (オプション)SendNOTIFICATIONwithoutOPEN属性がTRUEに設定されている場合、ローカルシステムは最初に適切なエラーコードを持つNOTIFICATIONメッセージを送信し、次に

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

バージョンエラーを含むNOTIFICATIONメッセージが受信された場合(イベント24)、ローカルシステムはDelayOpenTimerをチェックします。DelayOpenTimerが実行中の場合、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを停止してリセットし(ゼロに設定)、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • その状態をIdleに変更します。

DelayOpenTimerが実行されていない場合、ローカルシステムは:

  • ConnectRetryTimerを停止してConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • DampPeerOscillations属性がTrueに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

他のイベント(イベント8、10-11、13、19、23、25-28)に応答して、ローカルシステムは:

  • ConnectRetryTimerが実行中の場合、ConnectRetryTimerを停止してリセットし(ゼロに設定)、

  • DelayOpenTimerが実行中の場合、DelayOpenTimerを停止してリセットし(ゼロに設定)、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • DampPeerOscillations属性がTrueに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

Active State (アクティブ状態):

この状態では、BGP FSMは接続をリッスンして受け入れることでピアを取得しようとしています。

開始イベント(イベント1、3-7)は、Active状態で無視されます。

ManualStopイベント(イベント2)に応答して、ローカルシステムは:

  • DelayOpenTimerが実行中でSendNOTIFICATIONwithoutOPENセッション属性が設定されている場合、ローカルシステムはCeaseを含むNOTIFICATIONを送信し、

  • DelayOpenTimerの停止を含むすべてのBGPリソースを解放し

  • TCP接続をドロップし、

  • ConnectRetryCounterをゼロに設定し、

  • ConnectRetryTimerを停止してConnectRetryTimerをゼロに設定し、

  • その状態をIdleに変更します。

ConnectRetryTimer_Expiresイベント(イベント9)に応答して、ローカルシステムは:

  • ConnectRetryTimer(初期値で)を再起動し、

  • 他のBGPピアへのTCP接続を開始し、

  • リモートBGPピアによって開始される可能性のあるTCP接続を引き続きリッスンし、

  • その状態をConnectに変更します。

ローカルシステムがDelayOpenTimer_Expiresイベント(イベント12)を受信した場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを停止してクリアし(ゼロに設定)、

  • BGP初期化を完了し、

  • リモートピアにOPENメッセージを送信し、

  • ホールドタイマーを大きな値に設定し、

  • その状態をOpenSentに変更します。

この状態遷移についても、HoldTimer値は4分が推奨されます。

ローカルシステムがTcpConnection_Validイベント(イベント14)を受信した場合、ローカルシステムはTCP接続フラグを処理し、Active状態のままです。

ローカルシステムがTcp_CR_Invalidイベント(イベント15)を受信した場合、ローカルシステムはTCP接続を拒否し、Active状態のままです。

TCP接続の成功(イベント16またはイベント17)に応答して、ローカルシステムは処理前にDelayOpenオプション属性をチェックします。

DelayOpen属性がTRUEに設定されている場合、ローカルシステムは:

  • ConnectRetryTimerを停止してConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを初期値(DelayOpenTime)に設定し、

  • Active状態のままです。

DelayOpen属性がFALSEに設定されている場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • BGP初期化を完了し、

  • ピアにOPENメッセージを送信し、

  • HoldTimerを大きな値に設定し、

  • その状態をOpenSentに変更します。

HoldTimerの「大きな値」として、HoldTimer値は4分が推奨されます。

ローカルシステムがTcpConnectionFailsイベント(イベント18)を受信した場合、ローカルシステムは:

  • ConnectRetryTimer(初期値で)を再起動し、

  • DelayOpenTimerを停止してクリアし(値をゼロに設定)、

  • すべてのBGPリソースを解放し、

  • ConnectRetryCounterを1増やし、

  • オプションでDampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

OPENメッセージが受信されDelayOpenTimerが実行中の場合(イベント20)、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを停止してクリアし(ゼロに設定)、

  • BGP初期化を完了し、

  • OPENメッセージを送信し、

  • KEEPALIVEメッセージを送信し、

  • HoldTimer値がゼロでない場合、

    • KeepaliveTimerを初期値で開始し、

    • 交渉された値にHoldTimerをリセットし、

    それ以外の場合、HoldTimerがゼロの場合

    • KeepaliveTimerをリセットし(ゼロに設定)、

    • HoldTimerをゼロにリセットし、

  • その状態をOpenConfirmに変更します。

自律システムフィールドの値がローカル自律システム番号と同じ場合、接続ステータスを内部接続に設定します。それ以外の場合は外部になります。

BGPメッセージヘッダーチェック(イベント21)またはOPENメッセージチェックがエラーを検出した場合(イベント22)(セクション6.2参照)、ローカルシステムは:

  • (オプション)SendNOTIFICATIONwithoutOPEN属性がTRUEに設定されている場合、適切なエラーコードを持つNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

バージョンエラーを含むNOTIFICATIONメッセージが受信された場合(イベント24)、ローカルシステムはDelayOpenTimerをチェックします。DelayOpenTimerが実行中の場合、ローカルシステムは:

  • ConnectRetryTimer(実行中の場合)を停止してConnectRetryTimerをゼロに設定し、

  • DelayOpenTimerを停止してリセットし(ゼロに設定)、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • その状態をIdleに変更します。

DelayOpenTimerが実行されていない場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

他のイベント(イベント8、10-11、13、19、23、25-28)に応答して、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

OpenSent (オープンセント状態):

この状態では、BGP FSMはピアからのOPENメッセージを待ちます。

開始イベント(イベント1、3-7)は、OpenSent状態で無視されます。

ManualStopイベント(イベント2)がOpenSent状態で発行された場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterをゼロに設定し、

  • その状態をIdleに変更します。

AutomaticStopイベント(イベント8)がOpenSent状態で発行された場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

HoldTimer_Expires(イベント10)の場合、ローカルシステムは:

  • エラーコードHold Timer Expiredを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

TcpConnection_Valid(イベント14)、Tcp_CR_Acked(イベント16)、またはTcpConnectionConfirmedイベント(イベント17)が受信された場合、2番目のTCP接続が進行中の可能性があります。この2番目のTCP接続は、OPENメッセージが受信されるまで、接続衝突処理(セクション6.8)ごとに追跡されます。

無効なポートのTCP接続要求(Tcp_CR_Invalid(イベント15))は無視されます。

TcpConnectionFailsイベント(イベント18)が受信された場合、ローカルシステムは:

  • BGP接続をクローズし、

  • ConnectRetryTimerを再起動し、

  • リモートBGPピアによって開始される可能性のある接続を引き続きリッスンし、

  • その状態をActiveに変更します。

OPENメッセージが受信されると、すべてのフィールドが正確性についてチェックされます。OPENメッセージにエラーがない場合(イベント19)、ローカルシステムは:

  • DelayOpenTimerをゼロにリセットし、

  • BGP ConnectRetryTimerをゼロに設定し、

  • KEEPALIVEメッセージを送信し、

  • KeepaliveTimerを設定し(下記のテキストによる)

  • 交渉された値に従ってHoldTimerを設定し(セクション4.2参照)、

  • その状態をOpenConfirmに変更します。

交渉された保持時間値がゼロの場合、HoldTimerとKeepaliveTimerは開始されません。Autonomous Systemフィールドの値がローカル自律システム番号と同じ場合、接続は「内部」接続です。それ以外の場合は「外部」接続です。(これは、以下で説明するようにUPDATE処理に影響します。)

BGPメッセージヘッダーチェック(イベント21)またはOPENメッセージチェックがエラーを検出した場合(イベント22)(セクション6.2参照)、ローカルシステムは:

  • 適切なエラーコードを持つNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEの場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

有効なBGP OPENメッセージが受信されたとき(イベント19またはイベント20)、衝突検出メカニズム(セクション6.8)を適用する必要があります。比較の詳細については、セクション6.8を参照してください。

CollisionDetectDumpイベントは、BGP実装がこの文書の範囲外の手段によって接続衝突が発生したと判断したときに発生します。

OpenSent状態の接続がクローズされなければならない接続であると判断された場合、OpenCollisionDump(イベント23)が状態機械に通知されます。OpenSent状態でそのようなイベントが受信された場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

バージョンエラーを含むNOTIFICATIONメッセージが受信された場合(イベント24)、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • その状態をIdleに変更します。

他のイベント(イベント9、11-13、20、25-28)に応答して、ローカルシステムは:

  • エラーコードFinite State Machine Errorを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

OpenConfirm State (オープンコンファーム状態):

この状態では、BGPはKEEPALIVEまたはNOTIFICATIONメッセージを待ちます。

任意の開始イベント(イベント1、3-7)は、OpenConfirm状態で無視されます。

オペレーターによって開始されたManualStopイベント(イベント2)に応答して、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONメッセージを送信し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterをゼロに設定し、

  • ConnectRetryTimerをゼロに設定し、

  • その状態をIdleに変更します。

システムによって開始されたAutomaticStopイベント(イベント8)に応答して、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

KEEPALIVEメッセージが受信される前にHoldTimer_Expiresイベント(イベント10)が発生した場合、ローカルシステムは:

  • エラーコードHold Timer Expiredを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

ローカルシステムがKeepaliveTimer_Expiresイベント(イベント11)を受信した場合、ローカルシステムは:

  • KEEPALIVEメッセージを送信し、

  • KeepaliveTimerを再起動し、

  • OpenConfirmed状態のままです。

TcpConnection_Validイベント(イベント14)、またはOpenConfirmでのTCP接続の成功(イベント16またはイベント17)の場合、ローカルシステムは2番目の接続を追跡する必要があります。

無効なポートでTCP接続が試行された場合(イベント15)、ローカルシステムは2番目の接続試行を無視します。

ローカルシステムが基礎となるTCPからTcpConnectionFailsイベント(イベント18)またはNOTIFICATIONメッセージ(イベント25)を受信した場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

ローカルシステムがバージョンエラーを含むNOTIFICATIONメッセージ(NotifMsgVerErr(イベント24))を受信した場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • その状態をIdleに変更します。

ローカルシステムが有効なOPENメッセージ(BGPOpen(イベント19))を受信した場合、衝突検出機能がセクション6.8に従って処理されます。接続衝突によってこの接続がドロップされる場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし(TCP FINを送信)、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

OPENメッセージが受信されると、すべてのフィールドが正確性についてチェックされます。BGPメッセージヘッダーチェック(BGPHeaderErr(イベント21))またはOPENメッセージチェックがエラーを検出した場合(セクション6.2参照)(BGPOpenMsgErr(イベント22))、ローカルシステムは:

  • 適切なエラーコードを持つNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

別のOPENメッセージの処理中に、BGP実装がこの文書の範囲外の手段によって接続衝突が発生したと判断し、この接続がクローズされる場合、ローカルシステムはOpenCollisionDumpイベント(イベント23)を発行します。ローカルシステムがOpenCollisionDumpイベント(イベント23)を受信した場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

ローカルシステムがKEEPALIVEメッセージ(KeepAliveMsg(イベント26))を受信した場合、ローカルシステムは:

  • HoldTimerを再起動し、

  • その状態をEstablishedに変更します。

他のイベント(イベント9、12-13、20、27-28)に応答して、ローカルシステムは:

  • Finite State Machine Errorのコードを持つNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

Established State (確立状態):

Established状態では、BGP FSMはピアとUPDATE、NOTIFICATION、およびKEEPALIVEメッセージを交換できます。

任意の開始イベント(イベント1、3-7)は、Established状態で無視されます。

(オペレーターによって開始された)ManualStopイベント(イベント2)に応答して、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • この接続に関連付けられたすべてのルートを削除し、

  • BGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterをゼロに設定し、

  • その状態をIdleに変更します。

AutomaticStopイベント(イベント8)に応答して、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し

  • この接続に関連付けられたすべてのルートを削除し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

AutomaticStopイベントの1つの理由は:BGPが特定のピアのプレフィックス数を含むUPDATEメッセージを受信し、受信した合計プレフィックスが設定された最大プレフィックス数を超えることです。ローカルシステムは自動的にピアを切断します。

HoldTimer_Expiresイベントが発生した場合(イベント10)、ローカルシステムは:

  • エラーコードHold Timer Expiredを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

KeepaliveTimer_Expiresイベントが発生した場合(イベント11)、ローカルシステムは:

  • KEEPALIVEメッセージを送信し、

  • 交渉されたHoldTime値がゼロでない限り、KeepaliveTimerを再起動します。

ローカルシステムがKEEPALIVEまたはUPDATEメッセージを送信するたびに、交渉されたHoldTime値がゼロでない限り、KeepaliveTimerを再起動します。

有効なポートに対して受信されたTcpConnection_Valid(イベント14)は、2番目の接続を追跡させます。

無効なTCP接続(Tcp_CR_Invalidイベント(イベント15))は無視されます。

TCP接続が正常に確立されたことの指示(イベント16またはイベント17)に応答して、2番目の接続は、OPENメッセージを送信するまで追跡されなければなりません(SHALL)。

有効なOPENメッセージ(BGPOpen(イベント19))が受信され、CollisionDetectEstablishedStateオプション属性がTRUEの場合、OPENメッセージは他の接続と衝突するかどうかをチェックされます(セクション6.8)。BGP実装がこの接続を終了する必要があると判断した場合、OpenCollisionDumpイベント(イベント23)を処理します。この接続を終了する必要がある場合、ローカルシステムは:

  • Ceaseを含むNOTIFICATIONを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • この接続に関連付けられたすべてのルートを削除し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillationsがTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

ローカルシステムがNOTIFICATIONメッセージ(イベント24またはイベント25)または基礎となるTCPからTcpConnectionFails(イベント18)を受信した場合、ローカルシステムは:

  • ConnectRetryTimerをゼロに設定し、

  • この接続に関連付けられたすべてのルートを削除し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • その状態をIdleに変更します。

ローカルシステムがKEEPALIVEメッセージ(イベント26)を受信した場合、ローカルシステムは:

  • 交渉されたHoldTime値がゼロでない場合、HoldTimerを再起動し、

  • Established状態のままです。

ローカルシステムがUPDATEメッセージ(イベント27)を受信した場合、ローカルシステムは:

  • メッセージを処理し、

  • 交渉されたHoldTime値がゼロでない場合、HoldTimerを再起動し、

  • Established状態のままです。

ローカルシステムがUPDATEメッセージを受信し、UPDATEメッセージエラー処理手順(セクション6.3参照)がエラーを検出した場合(イベント28)、ローカルシステムは:

  • Updateエラーを含むNOTIFICATIONメッセージを送信し、

  • ConnectRetryTimerをゼロに設定し、

  • この接続に関連付けられたすべてのルートを削除し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。

他のイベント(イベント9、12-13、20-22)に応答して、ローカルシステムは:

  • エラーコードFinite State Machine Errorを含むNOTIFICATIONメッセージを送信し、

  • この接続に関連付けられたすべてのルートを削除し、

  • ConnectRetryTimerをゼロに設定し、

  • すべてのBGPリソースを解放し、

  • TCP接続をドロップし、

  • ConnectRetryCounterを1増やし、

  • (オプション)DampPeerOscillations属性がTRUEに設定されている場合、ピア振動減衰を実行し、

  • その状態をIdleに変更します。