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

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

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は開始されません。自律システムフィールドの値がローカル自律システム番号と同じ場合、接続は「内部」接続です。それ以外の場合は「外部」接続です。(これは、以下で説明するように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に変更します。