Logo CNTTShop.vn

Hotline: 0966 658 525

Hà Nội: NTT03, Line 1, Thống Nhất Complex, 82 Nguyễn Tuân, Thanh Xuân, Hà Nội. ● HCM: Số 31B, Đường 1, Phường An Phú, Quận 2 (Thủ Đức), TP HCM. ===> Đơn Vị Hàng Đầu Trong Lĩnh Vực Cung Cấp Thiết Bị Security - Network - Wifi - CCTV - Conference - Máy chủ Server - Lưu trữ Storge.
Thiết bị mạng: 0962 052 874 - 0966 658 525 Máy chủ Server: 0866 176 188 - 0968 498 887 Purchase: 096 350 6565
Danh mục sản phẩm

BFD - Bidirectional Forwarding Detection là gì? Lợi ích và trường hợp sử dụng

 

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về tính năng BFD, trường hợp sử dụng, và lợi ích của tính năng này trong hệ thống mạng nhé.

Tổng quan

BFD là gì?

BFD là viết tắt của Bidirectional Forwarding Detection, được định nghĩa trong RFC 5880, là 1 giao thức phát hiện, được thiết kế để cung cấp cơ chế phát hiện lỗi kết nối nhanh giữa 2 thiết bị. Sau khi phiên BFD được thiết lập, thì các gói BFD sẽ được gửi định kỳ giữa 2 thiết bị, nếu không nhận được gói BFD sau 1 khoảng thời gian nhất định, thì BFD xác định đã có lỗi xảy ra trên link liên kết.

Mục đích thiết kế của BFD là phát hiện nhanh lỗi trong mạng, tuy nhiên thì BFD không được sử dụng độc lập, mà thay vào đó, nó được sử dụng cùng với các giao thức khác, chẳng hạn như VPN, HSRP, VRRP hay các giao thức định tuyến khác như MPLS, OSPF, IS-IS, BGP, RIP… BFD có thể tích hợp được với giao thức nào thì tùy thuộc vào từng hãng hoặc phiên bản firmware.

Đối với mỗi giao thức, thì chúng đều có 1 số loại cơ chế để phát hiện lỗi liên kết hoặc láng giềng UP/DOWN. Ví dụ OSPF sẽ sử dụng các gói tin Hello và Dead Interval, EIGRP sử dụng gói tin Hello và holdown timer để xác định láng giềng của nó còn hoạt động hay không. Mặc định thì khoảng thời gian này khá lâu, lên đến vài chục giây. Đối với hệ thống quan trọng cần downtime thấp, thì chúng ta có thể cấu hình thời gian gửi gói tin hello hoặc dead interval xuống 1 giây. Tuy nhiên vấn đề là tất cả các giao thức này chưa bao giờ được thiết kế để chuyển đổi dự phòng dưới 1 giây. Các gói tin hello được xử lý bởi Control Plane, nên nếu giảm xuống 1 giây, thì có thể tiêu tốn khá nhiều tài nguyên của thiết bị, làm giảm hiệu suất tổng thể của toàn bộ mạng.

bfd được sử dụng kết hợp với các giao thức khác để tăng tốc quá trình hội tụ

Do vậy, trong các hệ thống quan trọng cần downtime thấp hoặc yêu cầu thời gian thực như VoIP, thì chúng ta sẽ sử dụng kết hợp với BFD. BFD có thể phát hiện lỗi tính theo mili giây, thậm chỉ là micro giây. Các bạn có thể cấu hình kết hợp BFD với các giao thức mà nó hỗ trợ để phát hiện lỗi liên kết thay vì cơ chế riêng của nó. Khi liên kết bị lỗi, BFD sẽ thông báo cho giao thức đó để nó chuyển đổi dự phòng ngay lập tức, thời gian sẽ tương đương với thời gian mà chúng ta đã cấu hình cho BFD. BFD được thiết kế để phát hiện lỗi nhanh, nên các gói tin của nó có thể được xử lý bởi 1 số interface modules hoặc line card, nên sẽ không bị quá tải hoặc tiêu tốn tài nguyên liên quan đến CPU như cơ chế riêng của các giao thức.

Các chế độ hoạt động

BFD sẽ có 2 chế độ hoạt động là asynchronous modedemand mode.

  • Ở chế độ asynchronous mode thì tương tự như hello của giao thức khác, BFD sẽ liên tục gửi các gói tin hello của nó, gọi là BFD Control Packets, khi không nhận được các gói này thì phiên BFD sẽ bị down.
  • Demand mode thì sẽ khác. Khi 1 phiên BFD giữa 2 thiết bị được thiết lập, thì BFD sẽ không gửi control packets, mà chỉ sử dụng cơ chế thăm dò. Khi đó BFD sẽ phải sử dụng 1 cách khác để kiểm tra, ví dụ như kiểm tra số liệu truyền và nhận trên cổng. Hiện tại thì đa số các hãng sẽ không hỗ trợ cơ chế này, do nó khá phức tạp, nên mặc định chúng ta sẽ sử dụng asynchronous mode.

Cả 2 chế độ đều có 1 cái là echo mode. Khi 1 thiết bị gửi các gói echo BFD thì thiết bị hàng xóm sẽ trả về mà ko xử lý chúng. Nếu không nhận được các gói echo, thì BFD sẽ kết luận kết nối bị lỗi và sẽ hủy phiên.

Lợi ích của BFD với hệ thống mạng

  • Phát hiện lỗi kết nối nhanh chóng, chỉ vài mili giây, giúp tăng độ tin cậy cho hệ thống mạng.
  • Phát hiện nhanh chóng nhiều loại lỗi khác nhau, bao gồm lỗi giao diện, lỗi liên kết, lỗi forwarding engine...
  • Cung cấp cơ chế phát hiện lỗi thống nhất theo thời gian thực, sử dụng được cho nhiều loại giao thức khác nhau mà không phụ thuộc vào phần cứng.

Hướng dẫn cấu hình BFD trên Cisco

Trong bài viết này thì mình sẽ hướng dẫn các bạn cấu hình BFD kết hợp với OSPF trên các thiết bị Cisco. Đối với các giao thức khác thì cũng tương tự. Phần cấu hình BFD sẽ giống nhau, chỉ khác phần gán vào giao thức thôi. Mình sẽ test với 2 trường hợp OSPF có BFD và không có BFD để các bạn dễ dàng thấy được lợi ích của BFD.

OSPF không có BFD

Đầu tiên mình sẽ test với OSPF khi không có BFD. Mình sẽ sử dụng 1 mô hình đơn giản gồm 2 router và 1 switch. Switch ở giữa chỉ là switch layer 2, mục đích chỉ để khi mình ngắt link nối từ switch sang R2 thì link trên cổng R1 sẽ không down thôi, ngoài ra không có tác dụng gì khác.

mô hình lab BFD

Mình sẽ cấu hình IP và OSPF giữa 2 Routers

Cấu hình IP và OSPF trên Router R1:

R1(config)#interface e0/0
R1(config-if)#no shutdown
R1(config-if)#ip add 10.0.0.1 255.255.255.0
R1(config-if)#ip ospf 1 area 0

Cấu hình IP và OSPF trên Router R2:

R2(config)#interface e0/0
R2(config-if)#no shutdown
R2(config-if)#ip add 10.0.0.2 255.255.255.0
R2(config-if)#ip ospf 1 area 0

Các bạn sẽ cần chờ 1 khoảng thời gian để OSPF thiết lập quan hệ láng giềng. Sau khi OSPF hội tụ thì các bạn sẽ thấy log như bên dưới.

*Nov 25 08:05:01.157: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on Ethernet0/0 from LOADING to FULL, Loading Done

Bây giờ chúng ta sẽ ngắt kết nối link từ switch sang R2. Trên R2 sẽ có log thông báo cổng E0/0 down.

R2(config-if)#
*Nov 25 08:05:30.206: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to down
R2(config-if)#
*Nov 25 08:05:30.206: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.1 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
*Nov 25 08:05:31.206: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
R2(config-if)#

Trên R1 thì sẽ mất thêm khoảng 30 giây nữa để OSPF cập nhật thông tin về láng giềng của nó.

R1(config-if)#
*Nov 25 08:05:57.157: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired
R1(config-if)#

Đây là khoảng thời gian khá lâu để OSPF hội tụ. Kể cả các bạn có cấu hình hello time và dead interval thì cũng phải mất khoảng 1 giây và quan trọng là sẽ tiêu tốn nhiều tài nguyên của thiết bị.

OSPF sử dụng kết hợp với BFD

Bây giờ mình sẽ test OSPF kết hợp với BFD.

Để cấu hình BFD thì các bạn vào mode config interface để cấu hình cho từng cổng, mình sẽ cấu hình trên cổng E0/0 đang chạy OSPF của 2 router. Cấu hình BFD trên 2 router sẽ giống nhau, các bạn lặp lại cho router còn lại.

R1(config)#interface e0/0
R1(config-if)#bfd interval 50 min_rx 50 multiplier 3
  • interval: là khoảng thời gian mà router sẽ gửi gói tin hello đi. Các bạn có thể cấu hình từ 50 mili giây trở lên, nó tùy thuộc vào loại thiết bị. Càng nhanh thì thời gian phát hiện lỗi kết nối sẽ càng thấp. Các bạn có thể cân nhắc giá trị dựa trên phần cứng sử dụng, và độ quan trọng của ứng dụng.
  • Min_rx: là tần suất các gói tin sẽ nhận được từ router đối diện.
  • Multiplier: là hệ số nhân, nếu sau khoảng min_rx nhân với hệ số nhân mà router không nhận được gói BFD thì link sẽ được thông báo là lỗi, nó giống như dead interval của các giao thức khác.

Ví dụ mình cấu hình multiplier là 3, min_rx là 50 thì sau 150 mili giây nếu router không nhận được gói tin BFD thì link sẽ được cho là lỗi.

Sau khi cấu hình xong thì chúng ta sẽ gán BFD vào OSPF. Chúng ta có thể gán qua mode interface hoặc qua OSPF config đều được, tương tự như với cấu hình OSPF. Nếu gán vào tất cả interface chạy OSFP thì các bạn vào mode OSPF config, còn chỉ muốn bật trên 1 số cổng thì các bạn có thể sử dụng 1 trong 2 cách.

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

Nếu chỉ muốn bật trên 1 số cổng, thì các bạn vào mode config interface và bật BFD cho OSPF bằng lệnh ip ospf bfd. Tùy chọn ip ospf bfd disable nếu các bạn muốn tắt BFD trên 1 số cổng cụ thể.

R1(config)#interface e0/0
R1(config-if)#ip ospf bfd ?
  disable  Disable BFD on this interface
 

Để kiểm tra cấu hình BFD, thì các bạn có thể sử dụng lệnh show bfd neighbor. Chúng ta sẽ thấy các IP mà BFD đang check, cùng với trạng thái và cổng.

R1#show bfd neighbors

IPv4 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
10.0.0.2                                1/1          Up        Up        Et0/0
R1#

Để kiểm tra chi tiết thì các bạn thêm tùy chọn details.

R1#show bfd neighbors  details

IPv4 Sessions
NeighAddr                              LD/RD         RH/RS     State     Int
10.0.0.2                                1/1          Up        Up        Et0/0
Session state is UP and using echo function with 50 ms interval.
Session Host: Software
OurAddr: 10.0.0.1
Handle: 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(71)
Rx Count: 32, Rx Interval (ms) min/max/avg: 1/1006/833 last: 455 ms ago
Tx Count: 72, Tx Interval (ms) min/max/avg: 1/1004/867 last: 583 ms ago
Elapsed time watermarks: 0 0 (last: 0)
Registered protocols: OSPF CEF
Uptime: 00:00:26
Last packet: Version: 1                  - Diagnostic: 0
             State bit: Up               - Demand bit: 0
             Poll bit: 0                 - Final bit: 0
             C bit: 0
             Multiplier: 3               - Length: 24
             My Discr.: 1                - Your Discr.: 1
             Min tx interval: 1000000    - Min rx interval: 1000000
             Min Echo interval: 50000
R1#

Chúng ta sẽ biết được các thông số đang cấu hình, và BFD này đang được gán vào giao thức nào.. Một trong các lợi ích lớn nhất của BFD là chúng ta có 1 giao thức monitor chung cho toàn bộ các giao thức khác. Các bạn có thể gán BFD này vào OSPF, BGP… đồng thời, mà không cần sử dụng nhiều cơ chế khác nhau.

Các bạn show ip ospf thì cũng được kết quả tương tự.

R1#show ip ospf
 Routing Process "ospf 1" with ID 10.0.0.1
 Start time: 00:14:45.043, Time elapsed: 00:08:21.937
 Supports only single TOS(TOS0) routes
 Supports opaque LSA
 Supports Link-local Signaling (LLS)
 Supports area transit capability
 Supports NSSA (compatible with RFC 3101)
 Supports Database Exchange Summary List Optimization (RFC 5243)
 Event-log enabled, Maximum number of events: 1000, Mode: cyclic
 Router is not originating router-LSAs with maximum metric
 Initial SPF schedule delay 5000 msecs
 Minimum hold time between two consecutive SPFs 10000 msecs
 Maximum wait time between two consecutive SPFs 10000 msecs
 Incremental-SPF disabled
 Minimum LSA interval 5 secs
 Minimum LSA arrival 1000 msecs
 LSA group pacing timer 240 secs
 Interface flood pacing timer 33 msecs
 Retransmission pacing timer 66 msecs
 EXCHANGE/LOADING adjacency limit: initial 300, process maximum 300
 Number of external LSA 0. Checksum Sum 0x000000
 Number of opaque AS LSA 0. Checksum Sum 0x000000
 Number of DCbitless external and opaque AS LSA 0
 Number of DoNotAge external and opaque AS LSA 0
 Number of areas in this router is 1. 1 normal 0 stub 0 nssa
 Number of areas transit capable is 0
 External flood list length 0
 IETF NSF helper support enabled
 Cisco NSF helper support enabled
 BFD is enabled
 Reference bandwidth unit is 100 mbps
    Area BACKBONE(0)
        Number of interfaces in this area is 1
        Area has no authentication
        SPF algorithm last executed 00:04:07.973 ago
        SPF algorithm executed 7 times
        Area ranges are
        Number of LSA 3. Checksum Sum 0x014EA9
        Number of opaque link LSA 0. Checksum Sum 0x000000
        Number of DCbitless LSA 0
        Number of indication LSA 0
        Number of DoNotAge LSA 0
        Flood list length 0

R1#

Bây giờ mình sẽ ngắt lại link nối từ switch sang router R2.

Log trên Router R2:

R2#
*Nov 25 08:12:34.222: %BFDFSM-6-BFD_SESS_DOWN: BFD-SYSLOG: BFD session ld:1 handle:1,is going Down Reason: ECHO FAILURE
*Nov 25 08:12:34.222: %BFD-6-BFD_SESS_DESTROYED: BFD-SYSLOG: bfd_session_destroyed,  ld:1 neigh proc:OSPF, handle:1 act
R2#
*Nov 25 08:12:34.222: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.1 on Ethernet0/0 from FULL to DOWN, Neighbor Down: BFD node down
R2#
*Nov 25 08:12:46.080: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to down
*Nov 25 08:12:47.082: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
R2#

Log trên Router R1:

R1#
*Nov 25 08:12:34.234: %BFDFSM-6-BFD_SESS_DOWN: BFD-SYSLOG: BFD session ld:1 handle:1,is going Down Reason: ECHO FAILURE
*Nov 25 08:12:34.234: %BFD-6-BFD_SESS_DESTROYED: BFD-SYSLOG: bfd_session_destroyed,  ld:1 neigh proc:OSPF, handle:1 act
R1#
*Nov 25 08:12:34.234: %OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on Ethernet0/0 from FULL to DOWN, Neighbor Down: BFD node down
R1#

Các bạn có thể thấy, R1 ngay lập tức thông báo láng giềng down, gần như cùng lúc với thông báo trên R2, chỉ sau vài mili giây, nên OSPF sẽ hội tụ nhanh hơn rất nhiều.

Cấu hình và hoạt động của BFD chỉ đơn giản vậy thôi, các bạn nên sử dụng trong mọi tình huống có thể, nhất là trên các thiết bị có các phần cứng hỗ trợ BFD

Kết luận

BFD là 1 tính năng rất đơn giản nhưng hữu ích, giúp hệ thống mạng trở lên đáng tin cậy hơn. Các thông số khuyến nghị thì sẽ phụ thuộc vào phần cứng và các hãng khác nhau. Nếu các bạn có thắc mắc hay góp ý nào thì hãy để lại comment để mọi người cùng trao đổi nhé.

Chúc các bạn thành công

Lê Văn Tuấn

Là chuyên gia trong lĩnh vực Network System, Security, Server.. Có kinh nghiệm nhiều năm tư vấn giải pháp mạng, triển khai các giải pháp CNTT và phân phối thiết bị mạng Switch, Wifi, Router, Máy chủ Server, Lưu trữ Storage, Tường lửa Firewall, Video Conferencing, Module quang, Load Balancing. Hiện tại tôi là Founder và Managing Director công ty TNHH Công Nghệ Việt Thái Dương (CNTTShop.vn).

Bình luận bài viết!

Có 0 bình luận:
Chuyên mục chính
Bài viết cùng danh mục
Sản phẩm liên quan