前面我们学习了二层交换机、三层路由的配置,包括静态路由、动态路由、OSPF、BGP等,大部分都会有超时机制与定时器,但是大部分是以秒级为单位进行检测,在当前大规模网络部署情况下,1秒可以造成大范围的网络故障了,因此需要更加精确的网络联通检测机制。
![故障检测机制](https://img-blog.csdnimg.cn/img_convert/2a057ba3880568f473c202508138e9ae.png)
就是在非直连的邻居无法感知到邻居状态,或者需要等待动态路由协议超时机制才会断开连接,而如果在大型网络中可能是致命的缺陷,静态路由也无法感知网关是否可用以及执行相应的线路切换,因此出现了相关的检测机制。
一、BFD概念
1.1 BFD基本概念
BFD(Bidirectional Forwarding Detection,双向转发检测),提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态,拥有以下两大优点:
-
对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 -
用单一的机制对任何介质、任何协议层进行实时检测。
BFD是一个简单的"Hello"协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障。
![BFD检测](https://img-blog.csdnimg.cn/img_convert/c6714981e9804cd6af691c77535a7112.png)
1.2 BFD报文结构
BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话。BFD控制报文根据场景不同封装不同,报文结构由强制部分和可选的认证字段组成。
![BFD报文](https://img-blog.csdnimg.cn/img_convert/ce3fce2631551cd92ad84a7586a741bc.png)
![报文示例](https://img-blog.csdnimg.cn/img_convert/9f2ed7bf159e24e65bf1047c92abfb0d.png)
相关字段说明:
-
Sta:BFD本地状态。 -
Detect Mult:检测超时倍数,用于检测方计算检测超时时间。 -
My Discriminator:BFD会话连接本地标识符(Local Discriminator) 。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。 -
Your Discriminator:BFD会话连接远端标识符(Remote Discriminator) 。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。 -
Desired Min TX Interval:本地支持的最小BFD报文发送间隔。 -
Required Min RX Interval:本地支持的最小BFD报文接收间隔。 -
Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。
1.3 BFD会话建立
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。
BFD通过控制报文中的本地标识符和远端标识符区分不同的会话。静态和动态创建BFD会话的主要区别在于Local Discriminator和Remote Discriminator的配置方式不同。
![BFD建立方式](https://img-blog.csdnimg.cn/img_convert/adef0b476aabd3e69053fdee3fd27ece.png)
静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
动态建立BFD会话的本地标识符由触发创建BFD会话的系统动态分配,远端标识符从收到对端BFD消息的Local Discriminator的值学习而来。
1.4 BFD会话状态
BFD会话有四种状态:Down、Init、Up和AdminDown。
会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变,如左下图所示。BFD状态机的建立和拆除都采用三次握手机制,如右下图所示,以确保两端系统都能知道状态的变化。
![BFD会话状态](https://img-blog.csdnimg.cn/img_convert/3492f94f008502744c1d976748fc923a.png)
每个系统通过报文中的sta域发送本端状态,接收报文中的sta域了解对端状态,综合起来决定状态机的跳转。
-
Down状态说明会话down。一个会话会维持在down状态直到收到对端的报文并且该报文的sta字段标志着对端状态不是up。如果收到的是down包,状态机将从down状态跳转到init状态,如果收到的是init包,状态机将从down状态跳转到up状态,如果收到的是up包,状态机维持down状态。 -
Init状态说明与远端正在通信,并且本地会话期望进入up状态,但是远端还没回应。一个init状态的会话会维持init状态直到收到对端的init包或者up包,就会跳转到up状态,否则等到检测时间超时以后,便会跳转到down状态,意味着与远端的通信丢失。 -
Up状态说明BFD会话成功建立,并且正在确认链路的联通性,会话会一直保持在up状态直到链路故障或者管理down操作。如果收到远端的down包或者检测时间超时会话就会从up状态跳转到down状态。
![状态变化](https://img-blog.csdnimg.cn/img_convert/42fc0ca53f1635756b48d36edc64025d.png)
大致就是A先发送Down报文,然后B回复init,然后A发送up,然后A发送一个P置位的flag报文,B回复F置位flag报文,B也发送确认报文,确保双方状态都变为up状态,然后保持在up状态,直到收到down报文,BFD会话状态还可以管理员手动关闭。
1.5 BFD检测模式
BFD的检测机制:两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。BFD的检测模式有异步模式和查询模式两种。
异步模式:系统之间相互周期性地发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为Down。
查询模式:在需要验证连接性的情况下,系统连续发送多个BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down。
异步模式和查询模式的本质区别:检测的位置不同,异步模式下本端按一定的发送周期发送BFD控制报文,检测位置为远端,远端检测本端是否周期性发送BFD控制报文;查询模式下本端检测自身发送的BFD控制报文是否得到了回应。
异步模式就是一直问一直回复,查询模式就是有需要再问,等待回复,如果没有回复则会话down。
1.6 BFD检测时间
BFD会话检测时长由TX(本地最小发送间隔),RX(本地最小接收间隔),DM(检测倍数)三个参数决定。BFD报文的实际发送时间间隔,实际接受时间间隔由BFD会话协商决定。简单说就是按照双方最大的检测间隔来进行。
本地BFD报文实际发送时间间隔=MAX { 本地配置的发送时间间隔,对端配置的接收时间间隔 }
本地BFD报文实际接收时间间隔=MAX { 对端配置的发送时间间隔,本地配置的接收时间间隔 }
本地BFD报文实际检测时间:
-
异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数 -
查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数
![BFD检测时间](https://img-blog.csdnimg.cn/img_convert/68918e8fced44f1b86a6de55197817dc.png)
BFD缺省时间参数
-
BFD报文发送间隔默认1000毫秒,接受间隔默认1000毫秒,本地检测倍数3次。 -
BFD会话等待恢复时间0秒,会话延迟Up时间0秒。
也就是说默认情况下在异步模式下每隔1秒发送一个bfd报文,每隔1秒接收一个报文,如果超过3秒没有接收到报文则状态变更。
检测超时倍数,用于检测方计算检测超时时间。
-
查询模式:采用本地检测倍数。 -
异步模式:采用对端检测倍数。
![配置](https://img-blog.csdnimg.cn/img_convert/a1ee3890d3428cc21208c2dd7d75569e.png)
可以通过修改TX、RX和DM来修改BFD检测间隔与失效检测时间。
1.7 BFD Echo功能
BFD Echo功能也称为BFD回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制。
在两台直接相连的设备中,其中一台设备支持BFD功能(R1);另一台设备不支持BFD功能(R2),只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
![BFD Echo功能](https://img-blog.csdnimg.cn/img_convert/46182aba5ad4938e12cf46d3565ae19e.png)
简单说就是在不支持BFD的设备或者不方便配置BFD的场景中可以使用。
1.8 联动功能简介
联动功能由检测模块、Track和应用模块三部分组成。
-
监测模块负责对链路状态、网络性能等进行监测,并将探测结果通知给Track模块 。 -
Track模块收到监测模块的探测结果后,及时改变Track项的状态,并通知应用模块。 -
应用模块根据Track项的状态,进行相应的处理,从而实现联动。
简单理解就是将BFD状态与静态路由、动态路由或者其它应用功能进行关联,BFD状态down则进行路由切换或者关闭端口,BFD状态up则恢复,而且BFD检测支持毫秒级检测,比原有的路由协议超时机制更加灵活。
![BFD与静态路由联动](https://img-blog.csdnimg.cn/img_convert/d5147af84545d8ceb86f39f96c2b143d.png)
![BFD与OSPF联动1](https://img-blog.csdnimg.cn/img_convert/b0d7eb8ee0bbb632e89f2e51d8c05621.png)
![BFD与OSPF联动1](https://img-blog.csdnimg.cn/img_convert/e4b67e65dc266389a349a60781374e64.png)
总结:BFD是一直简单的状态检测机制,通过互相发送BFD报文以及回复进行链路间状态确认。BFD状态有:Down、Init、Up、AdminDown,BFD可以设置本地发送与接收报文间隔以及检测超时倍数,通过调整3个参数控制报文发送间隔。BFD还支持单臂回声功能,与不支持BFD功能的设备间进行检测。通过BFD状态检测功能与路由协议等进行联动可以实现毫秒级切换。
本文由 mdnice 多平台发布