両方がTCP接続を確立しようとするときに、FSMに2つの異なる状態があることの重要性は何ですか?
回答
BGPピアはアイドル状態。アイドル状態では、ピアは相互に隣接関係を形成するように構成されていますが、まだ通信を開始または受信していません。
BGPはトランスポートとしてTCPを使用します。したがって、 BGP隣接、最初のステップはTCP接続を確立することです。両方のピアがIDLE状態にある間、それぞれが定期的に独立した間隔でTCP接続を開始しようとします(BGPピア構成が実際に完了した時期に基づく)。
1つのピアがSYNを使用してTCP3ウェイハンドシェイクを開始すると、そのピアはアクティブivに移行します。 id = “ec6daa4a58”>
状態。この状態は、ローカルルーターがアクティブにTCP接続を開始しようとしていることを示します。
他のピアが受信したとき / em>ピアからのTCPSYNは、接続状態に移行します。この状態は、ローカルルーターが他のルーターからTCP開始を受信し、SYNACKで応答したことを示します。
そこから、両方のピアは残りの状態(Open Sent、Open Confirmed、確立されました。
要約:
- アクティブ状態-ローカルルーターがTCPSYNを送信しました
- 接続状態-ローカルルーターピアからTCPSYNを受信しました
隣接関係を形成するための「開始」BGPスピーカーの状態遷移は次のようになります。Idle
、Active
、Open Sent
、Open Received
、Established
隣接関係を形成するための「応答する」BGPスピーカーの状態遷移は次のようになります:Idle
、Connect
、Open Sent
、Open Received
、Established
注意、TCPハンドシェイクを開始したピアのみがActive
状態を通過します。そして、TCPハンドシェイクを開始しなかったピアのみがConnect
状態を通過します。
証明するデバッグを追加します。動作。これは、Ciscoルーターコードバージョン15.4(1)Tです。
これは、R1(9.9.12.1)とR2(9.9.12.2)の間のBGPピアリングセッションからのものです。
R2はこのTCPセッションのイニシエーター:
router1# show ip bgp neighbors | i ^BGP|host BGP neighbor is 9.9.12.2, remote AS 2323, external link Local host: 9.9.12.1, Local port: 179 Foreign host: 9.9.12.2, Foreign port: 43876
他のルーターで確認済み:
router2# show ip bgp neighbors | i ^BGP|host BGP neighbor is 9.9.12.1, remote AS 1111, external link Local host: 9.9.12.2, Local port: 43876 Foreign host: 9.9.12.1, Foreign port: 179
これは、イニシエーターであるR2での(フィルター処理された)デバッグです:
$ cat BGP-Peering_Initiator.txt | grep -e "TCP src" -e "went from" *Oct 28 17:06:36.971: BGP: 9.9.12.1 active went from Idle to Active *Oct 28 17:06:36.972: TCP src=43876, dst=179, seq=1526684246, ack=0, win=16384 SYN *Oct 28 17:06:36.975: TCP src=179, dst=43876, seq=2072809595, ack=1526684247, win=16384 ACK SYN *Oct 28 17:06:36.975: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK *Oct 28 17:06:36.977: BGP: 9.9.12.1 active went from Active to OpenSent *Oct 28 17:06:36.982: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK PSH *Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK *Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK PSH *Oct 28 17:06:36.985: BGP: 9.9.12.1 active went from OpenSent to OpenConfirm *Oct 28 17:06:36.985: TCP src=43876, dst=179, seq=1526684304, ack=2072809653, win=16327 ACK PSH *Oct 28 17:06:36.987: TCP src=179, dst=43876, seq=2072809653, ack=1526684304, win=16327 ACK PSH *Oct 28 17:06:36.987: BGP: 9.9.12.1 active went from OpenConfirm to Established
これは、レスポンダーであるR1での(フィルター処理された)デバッグです:
$ cat BGP-Peering_Responder.txt | grep -e "TCP src" -e "went from" *Oct 28 17:06:36.973: TCP src=43876, dst=179, seq=1526684246, ack=0, win=16384 SYN *Oct 28 17:06:36.974: TCP src=179, dst=43876, seq=2072809595, ack=1526684247, win=16384 ACK SYN *Oct 28 17:06:36.976: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK *Oct 28 17:06:36.976: BGP: 9.9.12.2 passive went from Idle to Connect *Oct 28 17:06:36.983: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK PSH *Oct 28 17:06:36.984: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK *Oct 28 17:06:36.984: BGP: 9.9.12.2 passive went from Connect to OpenSent *Oct 28 17:06:36.984: BGP: 9.9.12.2 passive went from OpenSent to OpenConfirm *Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK PSH *Oct 28 17:06:36.986: TCP src=179, dst=43876, seq=2072809653, ack=1526684304, win=16327 ACK PSH *Oct 28 17:06:36.986: TCP src=43876, dst=179, seq=1526684304, ack=2072809653, win=16327 ACK PSH *Oct 28 17:06:36.986: BGP: 9.9.12.2 passive went from OpenConfirm to Established
コメント
- 実際には、アクティブ状態と接続状態が逆になっています。たとえば、RFCは、アクティブ状態について次のように述べています。” アクティブ状態:この状態では、BGPFSMはリッスンしてピアを取得しようとしています。 b> TCP接続を受け入れます。 “また、” 接続状態:この状態では、 BGPFSMはTCP接続が完了するのを待っています。 ” TCPSYNを送信しました。
- こんにちは@RonMaupin。 ‘そうは思いません。私はそれを書き、それをラボした後に興味を持ちました、そしてそれは私がそれらを説明したようにアクティブ/接続状態が機能することを確認します。 ‘ “ニート”デバッグ出力をまとめて、に追加しようとします回答。
- @RonMaupinデバッグを追加しました。上記を参照してください。また、’は、シスコが言うよりもシスコが行うことに関心があります。私が’デバッグを誤って解釈しているのを見た/疑わしい場合は、遠慮なく教えてください。
- それを見ると、レスポンダーが行っただけです。 TCP接続が完了した後にアイドルから接続へ。私の答えでは、SYN / ACKを送信した後であると言いました。最終的なACKを受信した後、実際に移行しているようです。
- 次の行を解釈します” 10月28日17:06:36.971:BGP:9.9.12.1アクティブになりましたR1がアイドルからアクティブに移行するため、アイドルからアクティブに”。 R2がTCPセッションを開始しているため、@ RonMaupinsビューが確認されます。
回答
TCPは接続を作成します2つのピア間で、BGPはTCPを使用します。 1つのTCPピアが他のTCPピアに接続しようとします。これは、connect
の状態です。1つのピアが接続をリッスンする場合があり(特にその側で接続試行が失敗した後)、これはactive
状態です。
BGPにはいくつかの状態があり、それぞれが RFC 4271、ボーダーゲートウェイプロトコル4(BGP-4) に明確に文書化されています。状態の説明と、ある状態から別の状態への移動(および/またはその逆)は、ここで説明するには大きすぎます。以下は、BGP有限ステートマシン(FSM)を説明する画像です。
RFCには、FSMのさまざまな状態と各段階で何が起こるかについての完全な説明があります。
アイドル状態から開始して、システムでManualStartまたはAutomaticStartイベントが発生すると、状態がConnectに変更されますが、これらのイベントのパッシブバージョン(ManualStart_with_PassiveTcpEstablishmentまたはAutomaticStart_with_PassiveTcpEstablishment)が発生すると、状態がアクティブに変更されます。基本的に、ピアに接続するように指示されると、接続に変わりますが、ピアをリッスンするように指示されると、アクティブに変わります。
接続状態のときに、TCP接続が失敗すると、状態をアクティブに変更して、ピアからの接続をリッスンします。
アクティブ状態のときにConnectRetryTimer_Expiresイベントが発生すると、TCP接続を試行して接続状態になります。
実際にはそれ以上のものがありますが、このようなサイトには大きすぎます。