Néhány évvel ezelőtt egy hiba esetén a hálózat konvergálása néhány (néhány tíz) másodperc alatt még elfogadható volt. Kritikus alkalmazásoknál volt csupán szükség szinte azonnali konvergenciára. Napjainkban azonban a VoIP megjelenésével, a hiba azonnali érzékelésére és konvergenciára az igény magas lett.
Számos protokoll nyújt módszert a kieső hálózati eszközök érzékelésére, azonban ezek timereken alapszanak így csupán mondhatjuk úgy, hogy a működőképességüket tudjuk vele monitorozni, nem pedig a tényleges elérhetőségüket, ottlétüket. Több esetben a kiesés nem érzékelhető egyből, és meg kell várni még a timerek letelnek. EIGRP, OSPF és BGP esetén a szomszéd eltűnése így 15-90 másodperc múlva érzékelődik.
Ilyen eset az amikor két router egy switchen keresztül van összekötve. Ha az egyik routert kihúzzuk a switchből, a másik router interfésze (linkje) a switch miatt még mindig fent marad, így a másik eszköz hiányát csak a kapott hello csomagok elmaradásából érzékelheti, és több kimaradt hello csomag után nyílvánítja eltüntnek.

EIGRP-nél az egyirányú (unidirectional) linkek is problémát jelentenek.
BFD csomagok 24 bájtosak (plusz IP és UDP header), így azok küldése kisebb terhet jelentenek a hálózat számára. Hello csomagok küldésének idejét is lehet konfigurálni, azonban azok számos más funkciót látnak el, és több adatot tartlamaznak. Több protokoll esetén több helló csomag küldése újabb terhelést jelent.
BFD kétféle üzemmódban, kétféle csomagot küldhet:
- control csomag: BFD control csomagokkal hoz létre BFD neighbor-öket, illetve egyirányú tesztelést végez.
- echo csomag: a küldött BFD csomag L2-es címe a szomszédé, a L3-as címe pedig a saját IP címe. A szomszéd megkapja a csomagot, majd mivel a szomszédnak az IP címe szerepel benne, visszaküldi azt számára. Ezzel a teljes forwarding-path tesztelhető oda-vissza, mindkét irányba.
A BFD a protokolloktól függetlenül, de velük összhangban fut.
Amikor egy interfész BFD-vel van konfigurálva, és egy routing protokoll egy új szomszédot érzékel, akkor a protokoll a BFD folyamattól kérheti az új szomszéd figyelését. Ha a BFD hibát észlel, ezt jelzi a routing protokoll számára, így az egyből eltüntnek nyílváníthatja a szomszédját.
BFD további előnye, hogy disztributált architechúra esetén a line-card-on fut nem a CPU-t terheli, még a protokoll hello csomagokat minden esetben a CPU dolgozná fel.
BFD konfigurálása két lépésből áll:
- interfész konfigurálása BFD-re
- routing protokoll konfigurálása BFD használatára
Interfész konfigurálása BFD-re:
Router(config)# interface Fa0/0
Router(config-if)# bfd interval 100 min_rx 100 multiplier 3
echo mód konfigurálásához az alábbi parancsot is ki kell adnunk:
Router(config-if)# bfd echo
bfd intervall 100 : bfd csomagok 100ms-ként kerülnek küldésre
min_rx 100 : bfd csomagokat legalább 100ms-ként vár a router (BFD adjacency nem jön létre ha a távoli router interfvall értéke nagyobb mint a fogadó router min_rx értéke)
multiplier 3 : kiesett BFD csomagok száma, ami után a szomszéd eltüntnek nyílvánítható
Routing protokoll konfigurálása BFD használatára:
OSPF:
Router(config)# router ospf 100
Router(config-router)# bfd all-interfaces
vagy interfészenként egyenként is bekapcsolható az interfész alatt:
Router(config)# interface Fa0/0
Router(config-if)# ip ospf bfd
EIGRP:
Router(config)# router eigrp 100
Router(config-router)# bfd all-interfaces
vagy interfészenként egyenként is bekapcsolható az EIGRP alatt:
Router(config-if)# bfd interface Fa0/0
BGP: BGP esetén a BFD a neighbor-ön konfigurálható, és csak directly connected neighbor esetén működik, multi-hop esetén nem.
Router(config)# router bgp 100
Router(config-router)# neighbor 10.1.1.10 fall-over bfd
BFD ellenőrzése: BFD neighbor és a hozzájuk tartozó konfiguráció és statisztika az alábbi két paranccsal tekinthető meg:
Router# show bfd neighbor
OurAddr NeighAddr LD/RD RH/RS Holddown(mult) State Int
10.1.1.2 10.1.1.10 1/2 Up 0 (3 ) Up Fa0/0
Router# show bfd neighbors details
OurAddr NeighAddr LD/RD RH/RS Holddown(mult) State Int
10.1.1.2 10.1.1.10 1/2 Up 0 (3 ) Up Fa0/0
Session state is UP and using echo function with 100 ms interval.
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(866)
Rx Count: 424, Rx Interval (ms) min/max/avg: 1/22491/621 last: 172 ms ago
Tx Count: 768, Tx Interval (ms) min/max/avg: 1/1000/796 last: 724 ms agoElapsed time watermarks: -1 0 (last: 0)
Registered protocols: OSPF
Uptime: 00:04:39
Last packet: Version: 1 - Diagnostic: 0
State bit: Up - Demand bit: 0
Poll bit: 0 - Final bit: 0
Multiplier: 3 - Length: 24
My Discr.: 2 - Your Discr.: 1
Min tx interval: 1000000 - Min rx interval: 1000000
Min Echo interval: 100000