Skip to Content
02. 라우팅BFD(Bidirectional Forwarding Detection)

BFD(Bidirectional Forwarding Detection)

BFD(Bidirectional Forwarding Detection)는 밀리초 또는 마이크로초 단위로 링크 장애를 감지하는 네트워크 프로토콜입니다. OSPF나 EIGRP 같은 라우팅 프로토콜은 네이버 다운을 감지하는 자체 메커니즘을 가지고 있지만, 이러한 방식은 느리고 몇 초가 걸릴 수 있습니다.

타이머를 조정할 수는 있지만, 대부분의 라우팅 프로토콜은 1초 미만의 페일오버(Sub-second Failover)를 위해 설계되지 않았습니다. OSPF나 EIGRP의 Hello 패킷은 컨트롤 플레인(Control Plane)에서 처리되므로 Hello 패킷이 많아지면 CPU 부하가 증가합니다. BFD는 빠르게 동작하도록 설계되었으며, BFD 패킷은 일부 인터페이스 모듈이나 라인 카드에서 처리할 수 있으므로 오버헤드가 거의 없습니다.

OSPF, EIGRP, BGP, HSRP, MPLS LDP 등 많은 프로토콜이 BFD를 사용할 수 있으므로, 링크 장애 감지에는 BFD를 사용하고 프로토콜은 본래 목적에 맞게 사용할 수 있습니다. 링크 장애가 발생하면 BFD가 해당 프로토콜에 알립니다.

핵심 요약

  • BFD는 인터페이스 모듈이나 라인 카드에서 처리되는 경량 제어 패킷을 사용하여 밀리초 단위로 링크 장애를 감지합니다.
  • (라우팅) 프로토콜과 독립적으로 동작합니다. BFD를 한 번 설정한 후 OSPF, EIGRP, BGP, HSRP, MPLS LDP 등에 활성화합니다.
  • 비동기 모드(Asynchronous Mode)는 BFD 제어 패킷을 지속적으로 전송합니다 (Cisco가 지원하는 모드).
  • 에코 모드(Echo Mode)는 네이버가 처리 없이 반환하는 패킷을 전송하여 더 빠른 감지가 가능합니다.
  • 일반적인 설정: 50ms 간격에 multiplier 3 = 150ms 장애 감지.
  • BFD 없는 OSPF: 장애 감지에 약 28~40초 소요 (타이머 조정 시 약 1초).
  • BFD 적용 OSPF: 1초 미만의 장애 감지 및 컨버전스.

사전 지식

BFD를 학습하기 전에, BFD를 사용할 수 있는 다양한 (라우팅) 프로토콜이 네이버 인접 관계를 어떻게 수립하고 유지하는지 이해하면 도움이 됩니다:

  • EIGRP 네이버 인접 관계
  • OSPF 네이버 인접 관계
  • BGP 네이버 인접 관계

설명

BFD의 동작 방식을 다음과 같이 시각화할 수 있습니다:

11_Bidirectional Forwarding Detection (BFD)_img_p03_01

R1과 R2는 BFD를 사용하도록 설정되어 있으며 서로 제어 패킷(Control Packet)을 전송합니다. OSPF는 기존과 동일하게 OSPF 패킷을 전송합니다. 링크 장애가 발생하면 다음과 같은 일이 일어납니다:

11_Bidirectional Forwarding Detection (BFD)_img_p03_02

BFD가 더 이상 제어 패킷을 수신하지 못하면, 링크 장애가 발생했음을 인식하고 이를 OSPF에 보고합니다. 그러면 OSPF가 네이버 인접 관계를 해제합니다.

BFD에는 두 가지 동작 모드가 있습니다: 비동기 모드(Asynchronous Mode)디맨드 모드(Demand Mode) 입니다. 비동기 모드는 hello 및 holddown 타이머와 유사하며, BFD가 hello 패킷(BFD 제어 패킷이라고 함)을 계속 전송하고 일부를 수신하지 못하면 세션이 해제됩니다.

디맨드 모드는 다릅니다. BFD가 네이버를 발견한 후에는 제어 패킷을 지속적으로 전송하지 않고 폴링 메커니즘만 사용합니다. 도달 가능성을 확인하기 위해 다른 방법을 사용해야 합니다. 예를 들어 인터페이스의 수신 및 전송 통계를 확인할 수 있습니다. 현재 Cisco(또는 알려진 다른 벤더)는 BFD 디맨드 모드를 지원하지 않습니다.

두 모드 모두 에코 모드(Echo Mode) 라는 기능도 지원합니다. 장비가 BFD 에코 패킷을 전송하면 수신 측은 이를 처리하지 않고 그대로 반환합니다. 송신 측이 에코 패킷을 돌려받지 못하면 문제가 있다는 것을 알게 되고 세션을 해제합니다.

설정

BFD가 왜 뛰어난지 확인하기 위해, BFD가 있는 경우와 없는 경우의 시나리오를 살펴보겠습니다. OSPF를 사용하겠지만 다른 많은 (라우팅) 프로토콜도 사용할 수 있습니다.

BFD 없는 OSPF

사용할 토폴로지는 다음과 같습니다:

11_Bidirectional Forwarding Detection (BFD)_img_p04_01

위에 두 대의 라우터가 스위치에 연결되어 있고 OSPF를 실행하고 있습니다. 설정은 다음과 같습니다:

R1 & R2 (config)#router ospf 1 (config-router)#network 192.168.12.0 0.0.0.255 area 0

특별한 것 없이, 일반적인 OSPF입니다. 갑자기 링크 장애가 발생합니다:

11_Bidirectional Forwarding Detection (BFD)_img_p04_02

다음과 같은 일이 발생합니다:

R1# Jul 30 11:54:46.011: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down Jul 30 11:54:46.011: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.12.2 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached

R1은 SW1에 직접 연결되어 있으므로 이 링크 장애를 즉시 감지합니다. 네이버 인접 관계를 즉시 해제합니다. R2는 어떨까요?

R2# Jul 30 11:55:14.667: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.12.1 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired

R2는 R1으로부터 OSPF hello 패킷 수신이 중단되므로, 데드 인터벌(Dead Interval)이 만료되면 R1에 도달할 수 없다고 판단하고 네이버 인접 관계를 해제합니다. 이 과정에 약 28초가 걸렸습니다.

OSPF 타이머를 조정하더라도 약 1초는 걸립니다. BFD의 성능을 확인해 보겠습니다…

BFD 적용 OSPF

OSPF를 실행하는 두 라우터에 BFD를 활성화하겠습니다. 토폴로지는 동일합니다:

11_Bidirectional Forwarding Detection (BFD)_img_p05_01

BFD 명령을 자세히 살펴보겠습니다:

R1(config)#interface FastEthernet 0/0 R1(config-if)#bfd ? echo Use echo adjunct as bfd detection mechanism interval Transmit interval between BFD packets

위에서 에코 패킷 사용 여부를 지정할 수 있고 인터벌을 설정할 수 있습니다. BFD는 기본적으로 에코 패킷을 사용하므로 변경할 필요가 없습니다. 인터벌을 살펴보겠습니다:

R1(config)#interface FastEthernet 0/0 R1(config-if)#bfd interval ? <50-999> Milliseconds

BFD 인터벌은 BFD 패킷을 얼마나 자주 전송할지를 지정합니다. OSPF, EIGRP, HSRP 등의 프로토콜이 사용하는 hello 패킷과 유사합니다. 가장 낮은 값을 사용하겠습니다:

R1(config-if)#bfd interval 50 ? min_rx Minimum receive interval capability

두 번째로 설정할 값은 최소 수신 인터벌(Minimum Receive Interval)입니다. 네이버로부터 BFD 패킷을 얼마나 자주 수신할 것으로 기대하는지를 나타냅니다. 동일한 값을 사용하겠습니다:

R1(config-if)#bfd interval 50 min_rx 50 ? multiplier Multiplier value used to compute holddown

마지막으로 설정할 값은 홀드다운(Holddown)입니다. OSPF의 데드 인터벌이나 다른 프로토콜이 사용하는 holddown 타임과 유사합니다:

R1(config-if)#bfd interval 50 min_rx 50 multiplier 3

3으로 설정하겠습니다. R2에도 동일하게 설정합니다:

R2(config)#interface FastEthernet 0/0 R2(config-if)#bfd interval 50 min_rx 50 multiplier 3

BFD가 이제 실행되고 있지만, 프로토콜이 실제로 BFD를 사용하도록 설정해야 합니다. OSPF에서는 다음과 같이 합니다:

R1(config)#router ospf 1 R1(config-router)#bfd all-interfaces R2(config)#router ospf 1 R2(config-router)#bfd all-interfaces

OSPF는 이제 BFD가 링크 장애를 알려주는 즉시 네이버 인접 관계를 해제합니다. 설정은 이것이 전부입니다. 결과를 확인해 보겠습니다.

검증

BFD 명령부터 시작하겠습니다:

R1#show bfd neighbors NeighAddr LD/RD RH/RS State Int 192.168.12.2 1/1 Up Up Fa0/0

위에서 모든 BFD 네이버에 대한 간단한 개요를 볼 수 있습니다. R2가 FastEthernet 0/0에서 발견되었고 Up 상태입니다. 더 자세히 살펴보겠습니다:

R1#show bfd neighbors details NeighAddr LD/RD RH/RS State Int 192.168.12.2 1/1 Up Up Fa0/0 Session state is UP and using echo function with 50 ms interval. OurAddr: 192.168.12.1 Local Diag: 0, Demand mode: 0, Poll bit: 0 MinTxInt: 1000000, MinRxInt: 1000000, Multiplier: 3 Received MinRxInt: 1000000, Received Multiplier: 3 Holddown (hits): 0(0), Hello (hits): 1000(617) Rx Count: 96, Rx Interval (ms) min/max/avg: 1/1000/868 last: 648 ms ago Tx Count: 618, Tx Interval (ms) min/max/avg: 1/1000/872 last: 708 ms ago Elapsed time watermarks: 0 0 (last: 0) Registered protocols: OSPF Uptime: 00:01:23 Last packet: Version: 1 - Diagnostic: 0 State bit: Up - Demand bit: 0 Poll bit: 0 - Final bit: 0 Multiplier: 3 - Length: 24 My Discr.: 1 - Your Discr.: 1 Min tx interval: 1000000 - Min rx interval: 1000000 Min Echo interval: 50000

위에서 BFD가 패킷을 얼마나 자주 송수신했는지, 그리고 어떤 프로토콜이 BFD를 사용하고 있는지 확인할 수 있습니다. 이제 실제로 링크 장애를 발생시켜 BFD가 얼마나 유용한지 확인해 보겠습니다:

SW1(config)#interface FastEthernet 0/1 SW1(config-if)#shutdown

거의 즉시 R1과 R2에서 다음 메시지가 표시됩니다:

R1# Jul 30 13:11:33.507: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.12.2 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: BFD node down Jul 30 13:11:34.339: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to down
R2# Jul 30 13:11:29.055: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.12.1 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: BFD node down

1초 이내에 BFD가 OSPF에 링크 장애를 보고하고 네이버 인접 관계가 해제되었습니다. 매우 빠릅니다!

최종 설정은 다음과 같습니다.

R1

hostname R1 ! ip cef ! interface FastEthernet0/0 ip address 192.168.12.1 255.255.255.0 bfd interval 50 min_rx 50 multiplier 3 ! router ospf 1 network 192.168.12.0 0.0.0.255 area 0 bfd all-interfaces ! end

R2

hostname R2 ! ip cef ! interface FastEthernet0/0 ip address 192.168.12.2 255.255.255.0 bfd interval 50 min_rx 50 multiplier 3 ! router ospf 1 network 192.168.12.0 0.0.0.255 area 0 bfd all-interfaces ! end

결론

BFD가 링크 장애를 빠르게 감지하여 컨버전스 속도를 높이는 데 어떻게 사용되는지 확인했습니다. 설정이 간단하며 OSPF, EIGRP, BGP, HSRP 등의 프로토콜이 사용하는 “기존” 링크 장애 감지 방식보다 훨씬 빠릅니다.