Doctor Pepper

[물리 계층과 데이터 링크 계층] BFD(Bi-directional Forwarding Detection) 본문

네트워크/물리계층과 데이터 링크계층

[물리 계층과 데이터 링크 계층] BFD(Bi-directional Forwarding Detection)

Doctor Pepper 2024. 12. 3. 16:32
728x90

 

1. SONET과 이더넷의 에러 감지 비교

 SONET(Synchronous Optical Network)은 밀리초 단위로 전송로 에러를 감지하고 이를 알람으로 전달하여 상위 계층에서 경로를 빠르게 재지정할 수 있도록 지원한다. 그러나 이더넷에서는 이러한 에러 감지 기능이 제공되지 않으며, 전송 구간에서의 신뢰성을 확보하기 위해 동적 라우팅 프로토콜을 사용할 수 있다. 다만, 기존의 동적 라우팅 프로토콜에서 사용하는 슬로우 헬로우(Slow Hello) 메커니즘은 SONET이 제공하는 빠른 에러 감지 기능에 비해 속도가 느려, 이에 대한 개선이 필요하다는 문제점이 있었다.

 

 따라서 모든 전송 프로토콜에서 일관된 에러 감지 기능을 제공하는 새로운 에러 감지 프로토콜의 필요성이 대두되었고, 이를 해결하기 위해 IETF는 2004년 5월에 BFD(Bi-directional Forwarding Detection) 워킹 그룹을 결성하고, 2004년 8월 첫 드래프트를 발표하였다.

 

2. BFD(Bi-directional Forwarding Detection) 프로토콜

 IETF 워킹 그룹은 BFD를 독립적으로 동작할 수 있는 프로토콜로 개발하였으며, 이 프로토콜은 SONET과 동일한 수준(50ms)으로 빠른 에러 감지 및 복구 기능을 지원한다. 또한, BFD는 링크 감지 정보를 동적 및 정적 라우팅 프로토콜과 연동할 수 있도록 설계되었다.

 

- BFD 기능

 BFD는 두 개의 인접한 L3 장비가 양방향 포워딩 엔진의 데이터 플레인 상에서 에러를 감지하는 기능을 제공한다. 이 과정에서 기존의 라우팅 프로토콜 및 데이터 링크 계층 프로토콜과 무관하게 독립적으로 작동한다.

POS 수준의 에러 감지 기능 제공 SONET에서 제공하는 것과 유사한 수준으로 에러 감지 기능을 제공함
독립적인 동작 전송 매체, 데이터 링크 계층, 동적 라우팅 프로토콜과 관계없이 독립적으로 운영됨.
양방향 유니캐스트 방식 BFD는 양 노드 간의 유니캐스트 점대점 방식으로 동작함.
멀티세션 지원 여러 BFD 세션을 설정할 수 있어 노드 간의 다수의 BFD 세션을 운영할 수 있음.
세션 유지 및 파라미터 협상 BFD 세션을 유지하기 위한 파라미터 협상 기능을 제공함.
인증 기능 BFD 세션의 유효성을 확인하는 인증 기능을 제공함.

 

- 적용 영역

 BFD는 에러 감지 시간을 초 단위 이하로 단축시키며, 다른 제어 프로토콜에 비해 부하가 적고 다양한 프로토콜과 융합될 수 있도록 설계되었다. 

정적 및 동적 라우팅 프로토콜의
생존성 감지
라우팅 프로토콜이 제대로 작동하는지 모니터링하고, 링크나 경로의 장애를 신속하게 감지함.
스위치와 라우터 간의 생존성 감지 스위치와 라우터 간의 연결 상태를 실시간으로 확인함.
라우터와 서버 간의 생존성 감지 라우터와 서버 간의 연결 상태를 지속적으로 모니터링함.
가상 링크의 생존성 감지 MPLS, IP-in-IP/GRE 터널 등 가상 네트워크의 생존성도 감지할 수 있음.
에지 네트워크의 가용성 확보 에지 네트워크의 상태를 실시간으로 감지하여 가용성을 확보함.
이더넷상의 BFD 적용 이더넷 네트워크 상에서도 BFD를 적용하여 신속한 에러 감지 및 경로 수정을 가능하게 함.

 

3. BFD 동작 방식

 BFD 프로토콜은 동적 라우팅 프로토콜들이 인접성을 확보하기 위해 사용되는 간단한 헬로우 프로토콜이다. 두 시스템 간에 채널을 설정하고 주기적으로 제어 패킷을 송수신하는 방식으로 동작하며, 이와 유사한 방식으로 동작한다. BFD 패킷은 포워딩 엔진에서 처리되고, 라우팅 프로토콜의 Hello 패킷은 제어 엔진에서 처리된다.

 

 

- BFD 패킷 포맷

 BFD는 UDP를 사용하여 패킷을 전달하며, 주로 제어 패킷(Control Packet)에코 패킷(Echo Packet)을 사용한다.

  • 제어 패킷(Control Packet)

Ver(Version) BFD 버전을 나타내며, 현재는 1
Diag(Diagnosis) 로컬 BDF 시스템이 up 상태에서 변경됐을 때의 마지막 상태 변화에 대한 이유를 설명하는 코드
  0 Diag 없음
1 에러 감지 시간 만료
2 에코 기능 실패
3 이웃 세션 다운 시그널
4 포워딩 Plane 리셋
5 경로 다운
6 연계 경로 다운
7 관리자에 의한 다운
Sta(Status) 로컬 BFD의 상태
P(Poll) 파라미터가 변경됐을 때 이 필드를 마킹해 송신자가 전송하고 수신자는 수신 즉시 이 패킷에 응답해야 함(파라미터 변경 통지 플래그)
F(Final) P 플래그 수신에 대한 응답 패킷임을 나타내기 위해 사용(P 플래그 패킷의 응답 확인 플래그)
C 포워딩/제어 분리 플래그, 일단 이 플래그가 마킹되면 제어 영역의 변화가 BFD 검출에 어떠한 영향도 미치치 못함.
- 예를 들면 제어 영역이 ISIS로 동작하고 있을 때, ISIS을 리셋하더라도 BDF는 지속적으로 링크 상태를 모니터링 함
A(Auth) 인증 플래그, 이 플래그의 마킹을 통해 해당 세션의 인증 요구를 알림
D(Demand) 질의(Query) 요청 플랙, 송신자는 링크를 모니터링할 때 상대가 질의 모드로 동작할 것을 알리기 위해 사용함
R(Resrved) 예약된 플래그 비트
Detect Mult 에러 검출을 위한 만료 시간의 배수, 에러 검출에 사용될 검출 만료 시간을 계산하기 위해 이용됨(결국 제어 패킷 응답의 실패 횟수가 됨)
Length 패킷의 길이
My Discriminator
(자신 식별자)
로컬 영역에 연결된 BFD 세션을 위한 식별자
Your Discriminator
(상대 식별자)
원격지 영역에 연결된 BFD 세션을 위한 식별자
Desired Min TX Interval
(희망 최소 전송 인터벌)
로컬 영역에서 제공하는 BFD 패킷의 최소 전송 시간 간격
Required Min RX Interval
(요구 최소 수신 인터벌)
로컬 영역에서 제공하는 BFD 패킷의 최소 수신 시간 간격
Required Min Echo
RX Interval
로컬 영역에서 제공하는 에코 패킷의 최소 수신 시간 간격
Auth Type 인증 타입, 현재 프로토콜이 제공하는 인증 타입(심플 패스워드 방식, MD5 키 교환, SHA1 키 교환)
Auth Length 인증 데이터 길이
Authentication Data 인증 데이터

 

 BFD는 선택적으로 인증 기능을 제공하며, 제어 패킷은 UDP 포트 3784를 사용한다.

  • 에코 패킷(Echo Packet)

 BFD 에코 패킷은 특별한 포맷을 정의하지 않는다. 원격 시스템은 받은 에코 패킷을 되돌려 보내면 되며, 이를 통해 패킷의 송수신 처리가 이루어진다. 에코 패킷의 UDP 포트 번호는 3785입니다. BFD는 단일 홉으로 설정되어 IP 패킷의 TTL 값은 255로 설정된다.

 

- BFD 검출 모드

 BFD는 비동기 모드(Asynchronous Mode)질의 모드(Query Mode) 두 가지 모드로 동작한다. 두 모드 모두 에코 기능을 적용할 수 있다.

비동기 모드
(Asynchronous Mode)
두 시스템은 주기적으로 BFD 제어 패킷을 교환함.
상대 시스템이 BFD 제어 패킷을 받지 못하면 세션이 다운되며, Cisco IOS에서는 비동기 모드만 지원함.
질의 모드
(Query Mode)
시스템은 독립적으로 연결을 검증하며, BFD 제어 패킷을 주기적으로 전송하지 않고, 검증이 필요할 때만 P 플래그와 F 플래그를 사용하여 응답을 요청함.

 

  • 에코 기능

 에코 기능은 로컬 시스템이 BFD 에코 패킷을 송신하면 원격 시스템은 이를 되돌려 보낸다. 이 과정에서 연속적인 에코 패킷을 수신하지 못하면 세션이 다운된다. 비동기 모드와 질의 모드 모두에서 적용될 수 있다.

 

BFD 전송 주기와 검출 시간

 BFD에서 전송 주기의 계산은 사용되는 검출 모드에 상관없이 동일한 방식으로 수행된다. 그러나 두 가지 주요 검출 모드(비동기 모드와 질의 모드)가 존재하며, 각 모드에 따라 동작 특성이 다르기 때문에 실제로 검출 시간을 계산하는 방식에 차이가 발생한다. 검출 시간은 링크상의 지터(Jitter)를 고려하여 일정한 범위 내에서 계산되며, 각 모드에서 에러 검출의 위치에 따라 검출 시간을 산정하는 방식이 달라진다.

비동기 모드 에러 검출 위치는 상대 시스템임
검출 시간은 상대 시스템의 검출 배수에 따라 결정됨.
질의 모드 에러 검출 위치는 로컬 시스템임.
검출 시간은 로컬 시스템의 검출 배수를 기준으로 계산됨.

검출 시간 계산에 있어 두 모드의 동작 특성이 다르며, 각 모드에 맞는 계산 방식이 필요하다.

 

3. BFD 세션 관리

 BFD프로토콜은 두 시스템 간에 동등한 세션을 수립하여 에러를 감지하는 방식이다. 세션이 수립된 후, 시스템들은 협의된 속도로 BFD 제어 패킷을 상호 간에 주고받으며, 이를 통해 에러를 검출한다.

 

- 세션 초기화

 BFD 세션 수립 과정에서 두 시스템은 각각 Active 또는 Passive 역할을 맡는다. 반드시 한 시스템은 Active 역할을 수행해야 하며, 이를 통해 세션을 초기화한다.

 

- 세션 수립 과정

 BFD 세션 수립은 3-way handshake 방식으로 이루어지며, 이를 통해 두 시스템은 세션을 Up 상태로 전환한다. 이 과정에서 두 시스템은 세션 관리에 필요한 파라미터를 협상한다. 이후 시스템 상태는 에러 검출 결과에 따라 변화하며, 이에 맞는 후속 처리가 수행된다.

  • BFD의 상태 변화

초기(Init) 상태 상대 시스템과의 통신을 시작하고, BFD 세션 설정을 위한 준비 상태입니다. BFD 제어 패킷 전송 이전 단계임
업(Up) 상태 두 시스템이 BFD 제어 패킷을 송수신하여 세션이 정상적으로 수립된 상태임.
세션이 종료되기 전까지 시스템은 이 상태를 유지함
다운(Down) 상태 에러 검출로 인해 세션이 종료되는 상태임
관리자 다운(Admin down) 상태 관리자가 BFD 세션을 운영상 목적으로 강제 종료한 상태임

 

  • 패킷 전달 과정

 

 BFD 세션은 초기 상태에서 다운 상태로 시작된다. 두 시스템은 각자의 상태를 다운 상태로 전송하며, 상대 시스템은 이를 수신한 후 자신의 상태를 초기 상태로 변경한다. 이후, 시스템들은 타임아웃 타이머를 시작하고, 설정된 시간 내에 초기/업 상태 정보를 포함한 패킷을 수신하지 못하면 자동으로 다운 상태로 전환된다. 세션이 정상적으로 수립되면, 시스템은 업 상태를 유지하며 계속해서 에러 검출을 수행한다.

 

- IGP 라우팅 프로토콜과의 연동

 BFD는 BGP와 같은 동적 라우팅 프로토콜과 연동하여, 새로운 이웃을 감지하고 링크의 에러를 빠르게 검출할 수 있다. BFD는 라우팅 프로토콜이 새로운 이웃을 감지할 때, 해당 이웃에 대한 가용성 검증을 요청받고, 이를 통해 BFD 세션을 수립한다. 이후 링크 에러가 발생하면 BFD는 라우팅 프로토콜에 해당 정보를 통보하여, 라우팅 수렴 시간을 단축시킨다.

 

 OSPF 프로토콜과 연동할 경우, OSPF 프로세스는 Hello 메시지를 교환하여 이웃 관계를 설정하고, 이후 새로운 이웃에 대한 에러 검사를 BFD 프로세스에 의뢰한다. BFD 세션이 수립되면, 링크 에러를 감지하여 OSPF 프로세스에 이를 통보하고 라우팅 수렴을 촉진시킨다.

 

4. BFD 적용

BFD 프로토콜에 정적 라우팅을 적용한다.

- Cisco 설정

R1 # conf t
R1(config) # int fa0/0
R1(config-if) # ip add 192.168.12.1 255.255.255.0
R1(config-if) # bfd interval 500 min_rx 500 multiplier 5
R1(config) # ip route static bfd fastethernet 0/0 192.168.12.2
R1(config) # ip route 2.2.2.2 255.255.255.255 fastethernet 0/0 192.168.12.2
R2 # conf t
R2(config) # int fa0/0
R2(config-if) # ip add 192.168.12.2 255.255.255.0
R2(config-if) # bfd interval 500 min_rx 500 multiplier 5
R2(config) # ip route static bfd fastethernet 0/0 192.168.12.1
R2(config) # ip route 1.1.1.1 255.255.255.255 fastethernet 0/0 192.168.12.1

 

- Juniper 설정

  • 정적 라우팅과 BFD 설정
Juniper@R1 # show routing-options | display set
set routing-options static route 2.2.2.2/32 next-hops 192.168.12.2
set routing-options static route 2.2.2.2/32 bfd-liveness-detection neighbor 192.168.12.2
set routing-options static route 2.2.2.2/32 bfd-liveness-detection local-address 192.168.12.1
set routing-options static route 2.2.2.2/32 bfd-liveness-detection minimum-interval 1000
Juniper@R2 # show routing-options | display set
set routing-options static route 1.1.1.1/32 next-hops 192.168.12.1
set routing-options static route 1.1.1.1/32 bfd-liveness-detection neighbor 192.168.12.1
set routing-options static route 1.1.1.1/32 bfd-liveness-detection local-address 192.168.12.2
set routing-options static route 1.1.1.1/32 bfd-liveness-detection minimum-interval 1000
  • BFD 세션 수립 확인
Juniper@R1 # run show bfd session extensive
  • BFD 상태 확인 및 정적 라우팅 테이블 변화
Juniper@R1 # run show bfd session detail      # BFD 다운 상태 확인
Juniper@R1 # run show route        #  라우팅 테이블 추가 삭제 확인

 

728x90