본문 바로가기

카테고리 없음

BFD Part 1 - BFD 동작 원리와 Timer 값 이해

today keys : BFD, Bidirectional, forwarding, detection,timer, control, hello, echo, holddown

Control Packet, Echo, Hello, Holdown, Last Packet 해석하기

네트워크에서 장애를 빠르게 감지하는 것은 매우 중요합니다. 라우팅 프로토콜이 자체적으로 neighbor 상태를 확인할 수는 있지만, 기본 hello/dead timer만으로는 장애 감지가 늦어질 수 있습니다. 이런 문제를 해결하기 위해 사용하는 대표적인 기술이 BFD, Bidirectional Forwarding Detection입니다.


목차

  1. BFD란 무엇인가
  2. BFD 세션의 기본 구조
  3. BFD Control Packet 이해
  4. BFD Session State
  5. BFD Timer 기본 개념
  6. MinTxInt
  7. MinRxInt
  8. Received MinRxInt
  9. Multiplier
  10. Hello의 의미
  11. Holdown의 의미
  12. Hello와 Holdown의 차이
  13. Rx Count와 Tx Count
  14. Rx Interval과 Tx Interval
  15. Last Packet 값 해석
  16. BFD Echo Function 이해
  17. Echo 사용 시 Control Packet은 어떻게 달라지는가
  18. Echo Interval은 어디에서 확인해야 하는가
  19. BFD Down 감지 방식
  20. 장애 유형별 BFD 동작
  21. show bfd neighbors detail 읽는 순서
  22. 자주 하는 오해 정리
  23. 핵심 공식 정리
  24. Part 1 정리

1. BFD란 무엇인가

BFD는 네트워크 장비 간 연결 상태를 빠르게 감지하기 위한 경량 프로토콜입니다. BFD 자체가 라우팅을 수행하는 것은 아니며, OSPF, BGP, IS-IS, static route tracking 등 상위 프로토콜이나 기능에 장애 감지 결과를 빠르게 알려주는 역할을 합니다.

라우팅 프로토콜
→ 경로 계산과 라우팅 정보 교환 담당

BFD
→ 상대 장비 또는 forwarding path 상태를 빠르게 감지
→ 장애 발생 시 상위 프로토콜에 빠르게 알림

라우팅 프로토콜의 dead timer가 수 초에서 수십 초 단위라면, BFD는 수백 ms 단위로 장애를 감지할 수 있습니다. 이로 인해 장애 발생 후 라우팅 수렴 시간을 크게 줄일 수 있습니다.

2. BFD 세션의 기본 구조

BFD는 양쪽 장비 사이에 BFD session을 생성하고, 서로의 주소, 세션 식별자, timer, 상태 정보를 교환하면서 유지됩니다.

항목 의미
OurAddr 내 BFD 세션 주소
NeighAddr 상대 BFD neighbor 주소
LD/RD Local / Remote Discriminator, 세션 식별자
State BFD 세션 상태
Int BFD가 동작하는 인터페이스
Vrf BFD 세션이 속한 VRF
Type Singlehop 또는 Multihop 여부

Singlehop BFD는 직접 연결된 장비 사이에서 동작하고, Multihop BFD는 여러 hop을 거치는 neighbor와도 세션을 구성할 수 있습니다. 이 글에서는 직접 연결된 장비 간 Singlehop BFD를 기준으로 설명합니다.

3. BFD Control Packet 이해

BFD의 가장 기본적인 패킷은 BFD Control Packet입니다. Control packet은 세션을 만들고 유지하기 위해 사용되며, 세션 상태, Discriminator, Timer, Multiplier, Diagnostic 정보를 교환합니다.

나는 살아 있다.
내 BFD 세션 상태는 Up이다.
내가 사용할 timer 값은 이렇다.
내가 기대하는 수신 interval은 이렇다.

Echo 기능을 사용하지 않는 BFD 세션에서는 Control packet의 수신 여부가 주요 장애 감지 기준입니다. 상대의 Control packet을 일정 시간 동안 받지 못하면 BFD는 상대가 Down 되었다고 판단합니다.

4. BFD Session State

상태 의미
AdminDown 관리자가 세션을 Down 시킨 상태
Down 세션이 Down 상태
Init 상대와 세션 형성을 시작한 상태
Up 양쪽 BFD 세션이 정상적으로 동작 중인 상태
Session state is Up
State: Up

Up 상태는 양쪽 장비가 BFD Control packet을 정상적으로 주고받고 있으며, 세션 식별자와 상태 정보가 정상적으로 교환되고 있다는 의미입니다.

5. BFD Timer 기본 개념

BFD를 정확히 해석하려면 여러 timer 값을 구분해야 합니다.

MinTxInt
MinRxInt
Received MinRxInt
Multiplier
Hello
Holdown
Rx Interval
Tx Interval
Min Echo interval

이 값들은 모두 interval 또는 timer와 관련되어 있지만, 의미가 서로 다릅니다.

6. MinTxInt

MinTxInt는 Minimum Transmit Interval입니다. 내가 BFD Control packet을 보낼 수 있는 최소 송신 간격을 의미합니다.

MinTxInt: 300000 us

300000 us = 300 ms
나는 BFD Control packet을 최소 300ms 간격까지 보낼 수 있다.

⚠️ 주의: MinTxInt가 항상 실제 송신 주기와 동일하지는 않습니다. 실제 송신 주기는 상대가 광고한 MinRxInt도 함께 고려됩니다.

7. MinRxInt

MinRxInt는 Minimum Receive Interval입니다. 내가 상대에게 광고하는 수신 interval입니다.

MinRxInt: 10000000 us

10000000 us = 10000 ms = 10초
나에게 BFD Control packet을 10초보다 더 자주 보낼 필요는 없다.

이 값은 상대방이 나에게 Control packet을 보낼 때 참고하는 값입니다.

8. Received MinRxInt

Received MinRxInt는 상대가 나에게 광고한 MinRxInt입니다.

Received MinRxInt: 2000000 us
상대는 나에게 Control packet을 2초보다 자주 보내지 않아도 된다고 광고했다.

📌 핵심: Received MinRxInt는 내가 실제로 수신하는 주기가 아닙니다. 상대가 광고한 수신 희망 interval이며, 내가 상대에게 Control packet을 보낼 때 참고하는 값입니다.

내 Control packet 송신 주기
= max(내 MinTxInt, 상대의 MinRxInt)

9. Multiplier

Multiplier는 장애 감지 배수입니다. BFD는 packet 하나를 놓쳤다고 바로 Down으로 판단하지 않고, 일정 횟수 이상 연속으로 packet을 받지 못했을 때 Down으로 판단합니다.

interval 300
multiplier 3

300ms 간격으로 packet을 기대
3번 연속으로 packet을 받지 못함
→ 약 900ms 후 Down 판단
장애 감지 시간 ≈ interval × multiplier

단, 실제 운영에서는 Control packet 기준인지 Echo packet 기준인지에 따라 해석이 달라집니다.

10. Hello의 의미

Hello (hits): 2000 ms (2186466)

Hello는 내가 BFD Control packet을 송신하는 주기입니다.

이 장비는 BFD Control packet을 약 2000ms마다 송신하고 있다.

hits 값은 해당 timer가 동작한 횟수 또는 송신 이벤트 누적 횟수로 볼 수 있습니다. 실제 출력에서 Hello (hits)의 hits 값은 Tx Count와 같은 값으로 나타나는 경우가 많습니다.

Hello (hits): 2000 ms (2186466)
Tx Count: 2186466

정리: Hello는 내가 수신하는 주기가 아니라, 내가 송신하는 BFD Control packet 주기입니다. 수신 주기를 확인하려면 Rx Interval을 봐야 합니다.

11. Holdown의 의미

Holdown은 Control packet 기준 Down 감지 시간입니다.

Holdown (hits): 30000 ms (0)
Control packet 기준으로 상대의 BFD packet을 30초 동안 받지 못하면 Down으로 판단한다.
상대 Control packet을 기대하는 수신 간격 × Multiplier

예를 들어 내가 상대의 Control packet을 10초 간격으로 기대하고 multiplier가 3이라면 10초 × 3 = 30초입니다.

⚠️ 중요: Echo 기능을 사용하는 경우, Holdown만 보고 실제 장애 감지 시간을 판단하면 안 됩니다. Echo를 사용하는 BFD 세션에서는 Control packet보다 Echo packet이 더 빠른 장애 감지 역할을 할 수 있습니다.

12. Hello와 Holdown의 차이

항목 의미 방향
Hello 내가 BFD Control packet을 보내는 주기 송신
Holdown 내가 상대 Control packet 미수신 시 Down 판단까지 기다리는 시간 수신 기준
Holdown (hits): 30000 ms (0)
Hello (hits): 2000 ms (2186466)

나는 Control packet을 2초마다 송신한다.
하지만 상대 Control packet을 30초 동안 받지 못하면 Control 기준으로 Down 판단한다.

BFD는 양방향 프로토콜이지만, 양쪽 timer가 반드시 동일할 필요는 없습니다. 한쪽에서는 2초마다 보내고, 반대쪽에서는 10초마다 보내는 식의 비대칭 동작이 가능합니다.

13. Rx Count와 Tx Count

Rx Count: 430156
Tx Count: 2186466
항목 의미
Rx Count 내가 수신한 BFD Control packet 수
Tx Count 내가 송신한 BFD Control packet 수

이 값들은 BFD 세션이 얼마나 오랫동안 동작했는지, 송수신 packet 수가 정상적으로 증가하고 있는지를 확인하는 데 도움이 됩니다.

14. Rx Interval과 Tx Interval

Rx IntervalTx Interval은 실제 송수신 간격의 통계입니다.

Rx Interval (ms) min/max/avg: 1149/370/9914 last: 9806 ms ago
Tx Interval (ms) min/max/avg: 1950/1950/1950 last: 1035 ms ago

14.1 Tx Interval

Tx Interval은 내가 실제로 BFD Control packet을 송신한 간격입니다.

Tx Interval avg: 1950 ms

Hello: 2000 ms
Tx Interval avg: 약 1950 ms

14.2 Rx Interval

Rx Interval은 내가 실제로 상대의 BFD Control packet을 수신한 간격입니다.

Rx Interval avg: 9914 ms

상대가 대략 10초 주기로 Control packet을 보내고 있고, 내가 그 주기로 받고 있다고 볼 수 있습니다.

항목 의미
Hello 내가 Control packet을 보내는 설정/동작 주기
Tx Interval 내가 실제로 보낸 간격 통계
Rx Interval 내가 실제로 받은 간격 통계
Holdown 상대 Control packet 미수신 시 Down 판단 시간

15. Last Packet 값 해석

BFD detail 출력에서 특히 헷갈리기 쉬운 부분이 Last packet입니다.

Last packet:
  Version: 1
  State bit: Up
  Multiplier: 3
  Min tx interval: 300000
  Min rx interval: 2000000
  Min Echo interval: 50000

핵심: Last packet은 내가 마지막으로 수신한 BFD Control packet의 내용입니다. 즉, 내 현재 설정값이 아니라 상대가 마지막으로 보낸 BFD Control packet 안의 정보입니다.

15.1 Last Packet의 Min tx interval

Last packet:
  Min tx interval: 300000
상대는 최소 300ms 간격까지 BFD Control packet을 송신할 수 있다고 광고했다.

이 값은 내 실제 송신 주기가 아닙니다.

15.2 Last Packet의 Min rx interval

Last packet:
  Min rx interval: 2000000
상대는 자신이 Control packet을 2초보다 자주 받을 필요 없다고 광고했다.

이 값은 내가 상대에게 Control packet을 보낼 때 참고하는 값입니다.

내 MinTxInt = 300ms
상대 MinRxInt = 2000ms

max(300ms, 2000ms) = 2000ms

15.3 Last Packet의 Min Echo interval

Last packet:
  Min Echo interval: 50000

50000 us = 50 ms

⚠️ 주의: Last packetMin Echo interval: 50000은 현재 실제 Echo packet이 50ms로 송신되고 있다는 뜻이 아닙니다.

실제 Echo가 몇 ms 주기로 동작하는지는 별도의 세션 상태 메시지를 봐야 합니다.

Session state is Up and using echo function with 300 ms interval
의미
Last packet Min Echo interval 상대가 마지막 Control packet에서 광고한 Echo 관련 최소 interval
using echo function with 300 ms interval 현재 실제 Echo 동작 주기

16. BFD Echo Function 이해

BFD에는 Control packet 외에 Echo function이 있습니다. Echo function은 forwarding path가 실제로 정상 동작하는지 확인하는 데 초점이 있습니다.

구분 Control Packet Echo Packet
목적 BFD 세션 유지, 상태 교환 Forwarding path 확인
처리 위치 상대 BFD control plane 상대 forwarding path를 통해 되돌아옴
역할 세션 상태 확인 데이터 경로 이상 감지
장애 감지 Control packet 미수신 Echo packet 미수신
내가 Echo packet을 보낸다.
상대 장비는 이 packet을 BFD control plane에서 직접 처리하지 않고 forwarding path로 되돌려 보낸다.
내가 Echo packet을 다시 받으면 forwarding path가 정상이라고 판단한다.
Echo packet이 일정 횟수 이상 돌아오지 않으면 장애로 판단한다.

17. Echo 사용 시 Control Packet은 어떻게 달라지는가

Echo를 사용하지 않는 경우에는 Control packet 미수신이 주요 장애 감지 기준입니다. 하지만 Echo를 사용하는 경우에는 빠른 장애 감지는 Echo packet이 담당하고, Control packet은 세션 유지와 상태 동기화 역할을 더 많이 수행합니다.

Echo interval 300ms
Multiplier 3

300ms × 3 = 약 900ms
Control Holdown
→ Control packet 기준 Down 판단 시간

Echo Detection
→ Echo packet 기준 forwarding path 장애 감지 시간

18. Echo Interval은 어디에서 확인해야 하는가

Session state is Up and using echo function with 300 ms interval

이 경우 실제 Echo interval은 300ms입니다.

Last packet:
  Min Echo interval: 50000

이 값은 상대가 마지막 BFD Control packet에서 광고한 Echo 관련 최소 interval일 뿐입니다.

정리: Echo의 실제 동작 주기는 Session state is Up and using echo function with X ms interval 값을 기준으로 확인하는 것이 가장 명확합니다.

19. BFD Down 감지 방식

19.1 Control 기반 Down 감지

1. 상대 BFD Control packet 수신
2. Holdown timer 갱신
3. 일정 시간 동안 상대 Control packet 미수신
4. Holdown timer 만료
5. BFD session Down
6. 상위 프로토콜에 장애 통보
Control 기반 Down 감지 시간
= 기대 Control 수신 간격 × Multiplier

기대 Control 수신 간격 = 300ms
Multiplier = 3

300ms × 3 = 900ms

19.2 Echo 기반 Down 감지

1. 내가 Echo packet 송신
2. 상대 장비가 forwarding path로 Echo packet을 되돌려 보냄
3. 내가 Echo packet을 다시 수신
4. Echo packet이 정상적으로 돌아오면 경로 정상
5. Echo packet이 일정 횟수 이상 돌아오지 않으면 Down 판단
Echo 기반 Down 감지 시간
= Echo interval × Multiplier

Echo interval = 300ms
Multiplier = 3

300ms × 3 = 약 900ms

20. 장애 유형별 BFD 동작

장애 유형 주요 감지 방식
물리 링크 Down Interface link-down 이벤트가 먼저 감지될 수 있음
상대 장비 Down Control packet 미수신 또는 Echo 실패
상대 BFD 프로세스 이상 Control packet 미수신
Forwarding path 이상 Echo 사용 시 Echo packet 실패
Control packet 지연 또는 손실 Holdown timer 기준
Echo packet 지연 또는 손실 Echo detection 기준
단방향 장애 방향에 따라 한쪽에서 먼저 Down 감지 가능

21. show bfd neighbors detail 읽는 순서

1. Session state 확인
2. Echo 사용 여부 확인
3. MinTxInt / MinRxInt / Multiplier 확인
4. Received MinRxInt / Received Multiplier 확인
5. Hello 값 확인
6. Tx Interval과 Hello 비교
7. Holdown 값 확인
8. Rx Interval과 Holdown 비교
9. Last packet 값은 상대 광고값으로 분리해서 해석
10. Echo 사용 시 실제 Echo interval 기준으로 장애 감지 시간 계산

22. 자주 하는 오해 정리

오해 올바른 해석
Hello는 내가 받는 주기다 Hello는 내가 보내는 Control packet 주기
Holdown이 실제 Down 감지 시간의 전부다 Echo 사용 시 실제 감지는 Echo 기준일 수 있음
Received MinRxInt는 내가 실제로 받는 주기다 상대가 광고한 MinRxInt이며 내가 송신 주기를 계산할 때 참고
Last packet은 내 설정값이다 마지막으로 받은 상대 BFD Control packet 내용
Min Echo interval 50000은 실제 Echo 50ms 동작이다 실제 Echo interval은 세션 상태의 using echo function with X ms interval 확인
MinTxInt가 항상 실제 송신 주기다 상대의 MinRxInt에 의해 실제 Hello 주기가 달라질 수 있음
양쪽 BFD timer는 항상 동일하다 양쪽 Hello/Holdown은 비대칭일 수 있음

23. 핵심 공식 정리

내 Control Hello 송신 주기
= max(내 MinTxInt, 상대의 MinRxInt)

Control 기반 Down 감지 시간
= 기대 Control 수신 간격 × Multiplier

Echo 기반 Down 감지 시간
= Echo interval × Multiplier

24. Part 1 정리

BFD는 빠른 장애 감지를 위한 경량 헬스체크 프로토콜이다.

BFD Control packet은 세션 유지와 상태 교환을 담당한다.

Hello는 내가 보내는 Control packet 주기다.

Holdown은 상대 Control packet을 받지 못했을 때
Control 기준으로 Down 판단하기까지 기다리는 시간이다.

MinTxInt는 내가 Control packet을 보낼 수 있는 최소 간격이다.

MinRxInt는 내가 상대에게 광고하는 Control packet 수신 interval이다.

Received MinRxInt는 상대가 나에게 광고한 MinRxInt다.

Rx Interval은 내가 실제로 받은 간격 통계다.

Tx Interval은 내가 실제로 보낸 간격 통계다.

Last packet은 내가 마지막으로 받은 상대 BFD Control packet의 내용이다.

Echo를 사용하는 경우 실제 forwarding-path 장애 감지는
Control Holdown보다 Echo interval × multiplier 기준으로 더 빠르게 동작할 수 있다.

BFD를 해석할 때 가장 중요한 것은 Control packet과 Echo packet의 역할을 분리해서 보는 것입니다.

show bfd neighbors detail 출력을 볼 때는 단순히 Holdown 값 하나만 보고 장애 감지 시간을 판단하면 안 됩니다. Echo 사용 여부, Hello, Rx/Tx Interval, Last packet, 실제 Echo interval을 함께 봐야 정확한 해석이 가능합니다.