{"id":5091,"date":"2026-03-22T14:26:31","date_gmt":"2026-03-22T14:26:31","guid":{"rendered":"https:\/\/geekmungus.co.uk\/?p=5091"},"modified":"2026-03-22T14:26:31","modified_gmt":"2026-03-22T14:26:31","slug":"bgp-test-lab-part-17-bgp-with-bidirectional-forwarding-detection-bfd","status":"publish","type":"post","link":"https:\/\/geekmungus.co.uk\/?p=5091","title":{"rendered":"BGP Test Lab &#8211; Part 17 &#8211; BGP with Bidirectional Forwarding Detection (BFD)"},"content":{"rendered":"\n<p>In previous articles, we have mentioned the use of BFD &#8211; Bidirectional Forwarding Detection. RFC 5880.<\/p>\n\n\n\n<p>Essentially BGP failure detection is slow by design and for good reason when you are dealing with truly massive networks. BFD exists to make it fast, but also while being safe too.<\/p>\n\n\n\n<p>As was discussed in previous articles BGP detects failures slowly, by default the&nbsp;Keepalive&nbsp;Timer is 60 seconds, the Hold Timer is 180 seconds. Which means if a link silently fails, i.e. it stays up (no TCP reset) but stops forwarding traffic it may take up to 180 seconds for BGP to declare the neighbour dead and start to re-route traffic. Behaviour such as this is fine for Internet-Scale stability but is not fine for Data Centres, Core Networks or Low-Latency environments.<\/p>\n\n\n\n<p>As mentioned before, you can tweak the&nbsp;Keepalive&nbsp;and Hold Timers to reduce this time, but the shorter the time, the more &#8220;twitchy&#8221; your network becomes to failed or flapping links.&nbsp;<\/p>\n\n\n\n<p>BFD (Bidirectional Forwarding Detection) can be used to resolve these issues. It is a lightweight protocol, which is designed specifically to detect link\/forwarding failures, and it is independent of any routing protocol, meaning you can use it with BGP, OSPF,&nbsp;EIGRP&nbsp;or even static routes, and provides an extremely fast (potentially sub-second) protocol.&nbsp;<\/p>\n\n\n\n<p>Put in simple terms BFD is a heartbeat protocol that various routing protocols (such as BGP, OSPF or EIGRP) can subscribe to be informed of if a neighbour is dead, long before the mechanisms of the actual routing protocol kick in.<\/p>\n\n\n\n<p>BFD does not exchange routes, it just says: \u201cForwarding to this neighbour is working\u201d or \u201cForwarding is broken\u201d, the routing protocol above, then acts based on this.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Topology\">Topology<\/h1>\n\n\n\n<p>We will be setting up BFD between Router K and Router L, because these are the only two Routers we have that are sufficiently new to have software support for BFD!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"709\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111-1024x709.png\" alt=\"\" class=\"wp-image-5093\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111-1024x709.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111-300x208.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111-768x532.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111-1536x1064.png 1536w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-111.png 1957w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-TopologyChanges\">Topology Changes<\/h1>\n\n\n\n<p>We had a problem with Router K, so it needed to be replaced, so the port numbers had to change, the configuration needed to be re-applied and use different ports, however the rest of the configuration on Router F and Router L remained as it was.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>create vlan \"RouterK-LP\"\nconfigure vlan RouterK-LP tag 1212\nenable loopback-mode vlan RouterK-LP\nconfigure vlan RouterK-LP ipaddress 1.1.1.12 255.255.255.255\nenable ipforwarding vlan RouterK-LP\n\ncreate vlan \"RK-RF\"\nconfigure vlan \"RK-RF\" ipaddress 192.168.100.62\/30\nenable ipforwarding vlan \"RK-RF\"\nconfigure vlan \"RK-RF\" add port 103 untagged\n\ncreate vlan \"RK-RL\"\nconfigure vlan \"RK-RL\" ipaddress 192.168.100.65\/30\nenable ipforwarding vlan \"RK-RL\"\nconfigure vlan \"RK-RL\" add port 104 untagged\n\ncreate vlan \"RouterK-LAN1\" tag 1009\nconfigure vlan \"RouterK-LAN1\" ipaddress 10.4.1.1\/24\nenable ipforwarding \"RouterK-LAN1\"\nenable loopback-mode vlan \"RouterK-LAN1\"\n\nconfigure ospf routerid 1.1.1.12\nenable ospf\n\nconfigure ospf add vlan RK-RF area 0.0.0.0 link-type point-to-point\nconfigure ospf add vlan RK-RL area 0.0.0.0 passive\nconfigure ospf add vlan RouterK-LP area 0.0.0.0 passive\n\nconfigure bgp AS-number 65004\nconfigure bgp routerid 1.1.1.12\nenable bgp\n\ncreate bgp neighbor 1.1.1.6 remote-AS-number 65004\nconfigure bgp neighbor 1.1.1.6 source-interface ipaddress 1.1.1.12\nenable bgp neighbor 1.1.1.6\n\ncreate bgp neighbor 192.168.100.66 remote-AS-number 65005\nconfigure bgp neighbor 192.168.100.66 source-interface ipaddress 192.168.100.65\nenable bgp neighbor 192.168.100.66\n\nconfigure bgp add network 10.4.1.0\/24<\/code><\/pre>\n\n\n\n<p>So now everything is configured, we&#8217;re ready to start the BFD configuration, but before that, let&#8217;s find out how it actually works.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Howdoesitwork?\">How does it work?<\/h1>\n\n\n\n<p>BFD has two main modes of operation,&nbsp;<strong>asynchronous mode<\/strong>&nbsp;(most common) and&nbsp;<strong>demand mode<\/strong>. We&#8217;ll start with&nbsp;<strong>asynchronous mode<\/strong>, this works similar to the hello and Hold Down Timers, BFD continuously sends hello packets (BFD control packets), when a number of them are not received, it signals to any &#8220;subscribed&#8221; routing protocol (above) and those tear down the BGP neighbour or OSPF adjacency etc. without having to wait for the normal BGP, OSPF (or whatever) timer to expire.<\/p>\n\n\n\n<p><strong>Demand mode<\/strong>&nbsp;is different, rather than constantly sending control packets (hello packets), BFD instead just using some other method such as monitoring&nbsp;the&nbsp;receive&nbsp;and transmit statistics of the interface, in normal operation, even if the link is idle, the statistics would be constantly incrementing (albeit slowly) due to the hello packets of the routing protocol, if it stops seeing activity, it deems the link failed, and signals to the routing protocol and that tears down the session.<\/p>\n\n\n\n<p>Additionally, there is something called&nbsp;<strong>echo mode<\/strong>, this where a router sends a BFD echo packet, which the receiver then returns without processing them, if the sender stops getting these echo packets back, it knows there is a problem and signals to the routing protocol (above) the issue and that then tears down the session. You might want to use echo mode to reduce the load on the control plane of the Router(s), when using echo mode (optional), part of the monitoring is offloaded to the data plan (rather than the control plane), which means these echo packets are returned to the sender without requiring the remote Router&#8217;s control plane to be utilised.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-ExampleConfiguration\">Example Configuration<\/h1>\n\n\n\n<p>OK, so let&#8217;s try this out and see what happens. We&#8217;re going to configure BFD on the&nbsp;eBGP&nbsp;peering between Router K and Router L.<\/p>\n\n\n\n<p>When we activate BFD, we need to activate BFD first on the VLAN that is used for the point to point link between the two routers; otherwise BFD will show up saying it is &#8220;Administratively Down&#8221;.<\/p>\n\n\n\n<p>We must disable that BGP Neighbour (peering) first, then configure, then re-enable, after which BFD is enabled, of course you must do this on both sides of the link before BFD will actually be able to work correctly. At this stage we are going with the default settings, which means a TX\/RX Interval of 1000ms (1 Second), then a Multiplier of 3, meaning it will wait for 3 failed BFD Hello&#8217;s before it deems there is an issue, i.e. 3 seconds, much quicker than our BGP&nbsp;Keepalive&nbsp;and Hold Timer which means up to 180 seconds before BGP can detect an issue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-RouterK\">Router K<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>enable bfd vlan RK-RL\n\ndisable bgp neighbor 192.168.100.66\nconfigure bgp neighbor 192.168.100.66 bfd on\nenable bgp neighbor 192.168.100.66<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Router L<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>enable bfd vlan RL-RK\n\ndisable bgp neighbor 192.168.100.65\nconfigure bgp neighbor 192.168.100.65 bfd on\nenable bgp neighbor 192.168.100.65<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Verify\">Verify<\/h2>\n\n\n\n<p>That&#8217;s all you need to configure, now we can verify and see what BFD is doing.<\/p>\n\n\n\n<p>If we run the following on both routers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>show bfd session<\/code><\/pre>\n\n\n\n<p>We get an output like:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"136\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-112.png\" alt=\"\" class=\"wp-image-5094\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-112.png 646w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-112-300x63.png 300w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/figure>\n\n\n\n<p>OK, so looking into this we can see that BFD is enabled on the&nbsp;RK-RL&nbsp;VLAN, and that it has subscribed a client in this case BGP to this BFD session.<\/p>\n\n\n\n<p>Going a bit deeper by running:&nbsp;<strong>show&nbsp;bfd&nbsp;session detail<\/strong>, we see:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"599\" height=\"394\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-113.png\" alt=\"\" class=\"wp-image-5095\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-113.png 599w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-113-300x197.png 300w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/figure>\n\n\n\n<p>There are a few interesting things to mention in this output, you&#8217;ve obviously got the common things like the interface and neighbour IP addresses, but its some of the others.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-SessionType\">Session Type<\/h3>\n\n\n\n<p>Single Hop in this case, because the two routers are directly connected, however if the BFD was flowing through one or more intermediate devices, this would become &#8220;multi-hop&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Discriminator\">Discriminator<\/h3>\n\n\n\n<p>The discriminator is an important part of BFD. A discriminator allows for the transmitting Router to identify each of the multiple BFD sessions which may be running on the same interface and or between the same pair of systems. Without this a transmitting Router would not be able to identify each of the BFD sessions it is sending, and additionally a receiving Router would not either.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>My Discriminator (MY_DISC or Local Discriminator)\u00a0<\/strong>&#8211; A unique, non-zero discriminator value generated by the BFD sending router (Router K in the outputs above).\u00a0<\/li>\n\n\n\n<li><strong>Your Discriminator (YOUR_DISC or Remote Discriminator)<\/strong>\u00a0&#8211; The discriminator received from the remote router, remote system (Router L in the outputs above). This field is the received value of My Discriminator (from the remote router, Router L in this example), or is zero if that value is unknown.<\/li>\n<\/ul>\n\n\n\n<p>In our example the&nbsp;<strong>My Discriminator (MY_DISC or Local Discriminator)<\/strong>&nbsp;for Router K is set to 1, the&nbsp;<strong>Your Discriminator (YOUR_DISC or Remote Discriminator)<\/strong>&nbsp;of Router L is also set to 1 too. But this is not essential. They can be different, because the Your Discriminator (Remote Discriminator) is generated by the remote router, Router L in this instance and could be any random number.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"335\" height=\"26\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-114.png\" alt=\"\" class=\"wp-image-5096\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-114.png 335w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-114-300x23.png 300w\" sizes=\"auto, (max-width: 335px) 100vw, 335px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-LocalDiagandRemoteDiag\">Local&nbsp;Diag&nbsp;and Remote Diag<\/h3>\n\n\n\n<p>These are diagnostic codes that can give you an idea of the cause of any BFD failure. A diagnostic code specifying the local router&#8217;s reason for the last transition of the state from UP to DOWN or some other state.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>0 &#8211; No Diagnostic<\/li>\n\n\n\n<li>1 &#8211; Control Detection Time Expired<\/li>\n\n\n\n<li>2- Echo Function Failed<\/li>\n\n\n\n<li>3 &#8211; Neighbour Signalled Session Down<\/li>\n\n\n\n<li>4 &#8211; Forwarding Plane Reset<\/li>\n\n\n\n<li>5 &#8211; Path Down<\/li>\n\n\n\n<li>6 &#8211; Concentrated Path Down<\/li>\n\n\n\n<li>7 &#8211; Administratively Down<\/li>\n<\/ul>\n\n\n\n<p>In our example we can see these are both showing 0 (for no diagnostic), if however I was to disable the port between Router K and Router L, this would read 7 (for administrative down).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-SimulateaFailure-withBFD\">Simulate a Failure &#8211; with BFD<\/h2>\n\n\n\n<p>Now we have BFD enabled, let&#8217;s see what happens during a failure, we&#8217;ll then repeat the test with BFD turned off, so you can see the difference.<\/p>\n\n\n\n<p>We&#8217;ll shut down the link between Router K and Router L with:&nbsp;<strong>disable port 104.<\/strong><\/p>\n\n\n\n<p>Looking at Router L, we see the following&nbsp;<strong>immediately<\/strong>, the BFD Session is showing down, and the BGP Neighbour has transitioned to the IDLE state immediately, well within no more than 3 seconds or so.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"141\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-115.png\" alt=\"\" class=\"wp-image-5097\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-115.png 642w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-115-300x66.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"159\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-116.png\" alt=\"\" class=\"wp-image-5098\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-116.png 880w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-116-300x54.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-116-768x139.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<p>Liven up the link again, and then we&#8217;ll test without BFD enabled.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-SimulateaFailure-withoutBFD\">Simulate a Failure &#8211; without BFD<\/h2>\n\n\n\n<p>We&#8217;ll first turn off BFD, remember you need to disable the BGP Neighbour (peer) configuration, then turn off BFD, then re-enable the BGP Neighbour again.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-RouterK.1\">Router K<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>disable bgp neighbor 192.168.100.66\nconfigure bgp neighbor 192.168.100.66 bfd off\nenable bgp neighbor 192.168.100.66<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Router L<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>disable bgp neighbor 192.168.100.65\nconfigure bgp neighbor 192.168.100.65 bfd off\nenable bgp neighbor 192.168.100.65<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Verify.1\">Verify<\/h3>\n\n\n\n<p>We&#8217;ll now re-run the test and disable the link between Router K and Router L, then see how long it takes now we don&#8217;t have BFD monitoring the link.<\/p>\n\n\n\n<p>We&#8217;ll shut down the link between Router K and Router L with:&nbsp;<strong>disable port 104.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"155\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-117.png\" alt=\"\" class=\"wp-image-5099\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-117.png 910w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-117-300x51.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-117-768x131.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/figure>\n\n\n\n<p>If we run a: show\u00a0bgp\u00a0neighbour 192.168.100.65 we see the following, the output has been cut to focus on the important bit(s):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"735\" height=\"420\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-118.png\" alt=\"\" class=\"wp-image-5100\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-118.png 735w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-118-300x171.png 300w\" sizes=\"auto, (max-width: 735px) 100vw, 735px\" \/><\/figure>\n\n\n\n<p>We had a stopwatch running, and it took just over 45 seconds for the BGP Neighbour to move the ESTABLISHED state to the IDLE state, during which Router K and Router L would both think that this was a valid and working path and would be attempting to send traffic down it. In our example we only have a single link between these two routers, but if there were multiple routes between these routers, or between the AS Red and AS Purple, then for that period of time connectivity would have been disrupted (for 45 seconds) until the network determined this path was no longer valid and re-routing traffic via a different route between the two networks, not ideal, therefore showing the value of BFD in these kinds of situations!<\/p>\n\n\n\n<p>Examining the output above, specifically the bits highlighted in red, we can see the state &#8220;IDLE&#8221;, the Hold Timer being 45 seconds, hence why it determined the failure within about 45 seconds, rather than the default of 180 seconds! Then we have the state information, and we can see that the reason that the state changed was due to the &#8220;Hold Timer Expired&#8221;, which was obviously the case being that the link was down and three&nbsp;Keepalive&nbsp;messages would have been missed.<\/p>\n\n\n\n<p>Before going any further, we&#8217;ll re-enable BFD on Router K and Router L, and bring the link back up and running.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-TweakSettings\">Tweak Settings<\/h2>\n\n\n\n<p>You&#8217;ll notice that there are some settings that can be tweaked with regard to BFD, you adjust these on the VLAN, rather than the BGP Neighbour configuration, the output below shows you want kind of settings you can tweak.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"104\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-119.png\" alt=\"\" class=\"wp-image-5101\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-119.png 727w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-119-300x43.png 300w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<p>The authentication allows you to specify a password to be used for authentication of the BFD session, depending on your environment you may want this configured to ensure that your BFD session is set with who you expect it to be, especially useful when crossing an AS boundary, where you don&#8217;t have visibility or control over the other end of a link (also running BFD).<\/p>\n\n\n\n<p>The other three are fairly self-explanatory, but these are the&nbsp;<strong>Receive Interval<\/strong>&nbsp;and&nbsp;<strong>Transmit Interval<\/strong>; so the rate at which the BFD packets are sent and expected to be received at, the default being 1000ms (1 second), the&nbsp;<strong>Detection Multiplier<\/strong>&nbsp;is the number of these Receive Intervals that can be missed before BFD decides that the link is down and notifies any subscribing protocols (such as BGP).<\/p>\n\n\n\n<p>Its also worth mentioning BFD Hardware Assist (on Extreme Networks XOS), which allows for the BFD process to be offloaded to hardware, rather than operating in software; the benefit of this is that now you have the ability to shorten the intervals yet further (if you need to), to only a few milliseconds if required, which if you were attempting to do this without Hardware Assist, risks false positives due to the fluctuations of latency if\/when the Router CPUs get busy.<\/p>\n\n\n\n<p>You can read about this within this article:&nbsp;<a href=\"https:\/\/documentation.extremenetworks.com\/exos_31.5\/GUID-6199C8B8-66D1-4444-9AA6-E25BE918CB26.shtml\">https:\/\/documentation.extremenetworks.com\/exos_31.5\/GUID-6199C8B8-66D1-4444-9AA6-E25BE918CB26.shtml<\/a><\/p>\n\n\n\n<p>Once BFD has been enabled on the interfaces (and the routing protocols added) a BFD session is made, the BFD timers are negotated, and the BFD peers will begin to send BFD control packets to each other at whatever the negotiated interval is.<\/p>\n\n\n\n<p>These appear to be bidirectional negotiations where the&nbsp;Highest Value Wins: If one router requests a minimum transmission interval of 100ms and the peer requests 1000ms, the BFD protocol negotiates the interval to the higher value (1000ms) to ensure both devices can handle the load.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Multi-Hop\">Multi-Hop<\/h2>\n\n\n\n<p>Its worth noting about multi-hop. Although we don&#8217;t have the capability within the lab to test this (currently), BFD does not need to be enabled on only links that are directly connected to the receiving router.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"938\" height=\"167\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-120.png\" alt=\"\" class=\"wp-image-5102\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-120.png 938w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-120-300x53.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-120-768x137.png 768w\" sizes=\"auto, (max-width: 938px) 100vw, 938px\" \/><\/figure>\n\n\n\n<p>The example above shows how BFD, which uses BFD packets just flows across a link like any other, in just so happens that the link between these two Routers (Router K and Router L) flows via an intermediate switch (Switch X), in this configuration Switch X has nothing to do with the BGP, nor anything to do with the BFD session, it merely passes on the packets to Router L.<\/p>\n\n\n\n<p>Router K and Router L have a BGP Neighbour (peering), which being that it flows via another switch in the middle, could have issues if say Switch X to Router L fails and stops passing traffic, but because Router K is unaware of this would have a period of time with no traffic flowing. BFD would detect the failure (nearly instantly), allow Router K (and Router L for that matter) to move the state the BGP Neighbour to INIT, and remove the routes from the BGP route table very rapidly.<\/p>\n\n\n\n<p>Although in the example above, we&#8217;ve used a single VLAN, i.e. a single layer 2 segment between Router K and Router L, via Switch X, this is not essential, BFD packets can flow via routed interfaces and really is where the &#8220;multi-hop&#8221; nature of the configuration fits in, which is why it is important to configure on the Routers (at each end) if multi-hop is being used.<\/p>\n\n\n\n<p>BFD packets are just normal UDP packets, 3784 (Single-Hop) \/ 4784 (Multi-Hop).<\/p>\n\n\n\n<p>A key thing to remember is when using Multi-Hop BFD, you need to configure and use loopback IP addresses, which are what are used on the BFD session, not just interface IP addresses, which is typically what is used with single-hop BFD.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-Conclusion\">Conclusion<\/h1>\n\n\n\n<p>We&#8217;ve explored some simple examples of how BFD can be used to speed up how quickly BGP will detect if one of its neighbours has failed; the use of BFD on organisation networks has become almost essential nowadays especially when using BGP to ensure the network remains operational or gets back to operational as quickly as possible following a failure.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart17BGPwithBidirectionalForwardingDetection(BFD)-AdditionalInformation\">Additional Information<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_30.2.2\/GUID-9C466AC6-368E-472D-B00C-19657CFF1DC8.shtml\">https:\/\/documentation.extremenetworks.com\/exos_30.2.2\/GUID-9C466AC6-368E-472D-B00C-19657CFF1DC8.shtml<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000058478\">https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000058478<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_32.6.1\/GUID-DB4570E0-934F-48C0-AD6E-9B5B6E053FAD.shtml\">https:\/\/documentation.extremenetworks.com\/exos_32.6.1\/GUID-DB4570E0-934F-48C0-AD6E-9B5B6E053FAD.shtml<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000078861\">https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000078861<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/networklessons.com\/cisco\/ccie-routing-switching\/bidirectional-forwarding-detection-bfd\">https:\/\/networklessons.com\/cisco\/ccie-routing-switching\/bidirectional-forwarding-detection-bfd<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_31.5\/GUID-9C466AC6-368E-472D-B00C-19657CFF1DC8.shtml\">https:\/\/documentation.extremenetworks.com\/exos_31.5\/GUID-9C466AC6-368E-472D-B00C-19657CFF1DC8.shtml<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In previous articles, we have mentioned the use of BFD &#8211; Bidirectional Forwarding Detection. RFC 5880. Essentially BGP failure detection is slow by design and for good reason when you are dealing with truly massive networks. BFD exists to make it fast, but also while being safe too. As was discussed in previous articles BGP &#8230; <a title=\"BGP Test Lab &#8211; Part 17 &#8211; BGP with Bidirectional Forwarding Detection (BFD)\" class=\"read-more\" href=\"https:\/\/geekmungus.co.uk\/?p=5091\" aria-label=\"Read more about BGP Test Lab &#8211; Part 17 &#8211; BGP with Bidirectional Forwarding Detection (BFD)\">Read more<\/a><\/p>\n","protected":false},"author":4,"featured_media":4783,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,41,17],"tags":[],"class_list":["post-5091","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bgp","category-extreme-networks","category-networking"],"_links":{"self":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5091"}],"version-history":[{"count":1,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5091\/revisions"}],"predecessor-version":[{"id":5103,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5091\/revisions\/5103"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/media\/4783"}],"wp:attachment":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}