둘 다 TCP 연결을 설정하려고 할 때 FSM에서 두 가지 다른 상태를 갖는 것은 어떤 의미입니까?
답변
BGP 피어는 유휴 상태. 유휴 상태에서 피어는 서로 인접성을 형성하도록 구성되었지만 아직 통신을 시작하거나 수신하지 않았습니다.
BGP는 TCP를 전송으로 사용합니다. BGP 인접성, 첫 번째 단계는 TCP 연결을 설정하는 것입니다. 두 피어가 모두 IDLE 상태에있는 동안 두 피어는 각각 독립적 인 간격으로 주기적으로 TCP 연결을 시작하려고 시도합니다 (BGP 피어링 구성이 실제로 완료된시기에 따라).
한 피어가 SYN을 사용하여 TCP 3 방향 핸드 셰이크를 시작 하면 해당 피어가 활성 상태.이 상태는 로컬 라우터가 활성 TCP 연결을 시도하고 있음을 나타냅니다. 다른 피어가 수신 할 때 해당 피어의 TCP SYN이 있으면 Connect 상태로 전환됩니다. 이 상태는 로컬 라우터가 다른 라우터로부터 TCP 시작을 수신했으며 SYN ACK로 응답했음을 나타냅니다. 여기에서 두 피어는 나머지 상태 인 Open Sent, Open Confirmed, 설립 됨. 요약 : 인접성을 형성하기위한 “시작”BGP 스피커의 상태 전환은 다음과 같습니다. 인접을 형성하기위한 “응답”BGP 스피커의 상태 전환은 다음과 같습니다. 주의, TCP 핸드 셰이크를 시작한 피어 만 증명하는 몇 가지 디버그 추가 그 행동. Cisco 라우터 코드 버전 15.4 (1) T입니다. R1 (9.9.12.1)과 R2 (9.9.12.2) 사이의 BGP 피어링 세션에서 가져온 것입니다. R2는 이 TCP 세션의 개시 자 : 다른 라우터에서 확인 됨 : 이것은 개시자인 R2의 (필터링 된) 디버그입니다 : 그리고 이것은 응답자 인 R1의 (필터링 된) 디버그입니다 :
Idle
, Active
, Open Sent
, Open Received
, Established
Idle
, Connect
, Open Sent
, Open Received
, Established
Active
상태를 통과합니다. 그리고 TCP 핸드 셰이크를 시작하지 않은 피어 만 Connect
상태를 통과합니다.
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
$ 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
$ 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
댓글
Answer
TCP가 연결을 만듭니다. 두 피어간에, BGP는 TCP를 사용합니다. 한 TCP 피어가 다른 TCP 피어에 연결을 시도하며 이것이 connect
상태입니다.한 피어가 연결을 수신 할 수 있으며 (특히 연결 시도가 실패한 후) 이는 active
상태입니다.
BGP에는 여러 상태가 있습니다. 각각은 RFC 4271, A Border Gateway Protocol 4 (BGP-4) 에 명확하게 설명되어 있습니다. 상태에 대한 설명과 한 곳에서 다른 곳으로 (또는 뒤로) 이동하는 것은 너무 커서 여기서 논의 할 수 없습니다. 다음은 BGP FSM (유한 상태 머신)을 설명하는 이미지입니다.
RFC에는 FSM의 다양한 상태와 각 단계에서 일어나는 일에 대한 자세한 설명이 있습니다 .
유휴 상태로 시작하여 시스템에서 ManualStart 또는 AutomaticStart 이벤트가 발생하면 상태가 Connect로 변경되지만 해당 이벤트의 수동 버전 (ManualStart_with_PassiveTcpEstablishment 또는 AutomaticStart_with_PassiveTcpEstablishment)이 발생하면 상태가 Active로 변경됩니다. 기본적으로 피어에 연결하라는 지시를 받으면 Connect로 변경되지만 피어를 수신하라는 지시를 받으면 Active로 변경됩니다.
Connect 상태에서 TCP 연결이 실패하면, 피어의 연결을 수신하기 위해 상태를 Active로 변경합니다.
Active 상태에서 ConnectRetryTimer_Expires 이벤트가 발생하면 TCP 연결을 시도하고 Connect 상태로 들어갑니다.
그보다 더 많은 것이 있지만 이와 같은 사이트에는 너무 큽니다.