概念
BFD (Bidirectional Forwarding Detection) 双向转发检测。BFD能够尽快检测到与相邻设备间的通信故障,以便能够及时采取措施,要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度,从而保证业务继续进行,减小设备故障或链路故障对业务的影响、提高网络的可用性。BFD报文分为控制报文(control packets)和回复报文(echo packets)。
MAC header |
IP | IPv6 header |
UDP header |
BFD message |
Data ::: |
BFD(basic file directory)基本文件目录。
功能简介
现有的故障检测方法主要包括以下几种:
硬件检测:例如通过SDH(Synchronous Digital Hierarchy,
同步数字体系)告警检测链路
故障。硬件检测的优点是可以很快发现
故障,但并不是所有介质都能提供硬件检测。
慢Hello机制:通常采用
路由协议中的Hello
报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,例如吉比特速率级,超过1秒的检测时间将导致大量数据丢失;对于时延敏感的业务,例如语音业务,超过1秒的延迟也是不能接受的。并且,这种机制依赖于
路由协议。
其他检测机制:不同的协议有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。
双向转发检测(BFD)的新协议将帮助解决这个问题,提高
故障检测与恢复速度。作为一项IETF草案标准,BFD提供一种检测链路或系统转发传输流能力的简单方法。
BFD是从基础传输技术中经过逐步发展而来的,因此它可以检测网络各层的故障。它可以用以太网、多协议标记交换(MPLS)
路径、普通路由
封装以及IPSec隧道在内的多种类型的传输正确性。
从本质上讲,BFD是一种高速的独立HELLO协议(类似于那些在
路由协议中使用的协议,如
开放最短路径优先协议(OSPF),或可以与链路、接口、隧道、路由或其他网络转发部件建立联系的中间系统到中间系统协议)。
BFD能够与相邻系统建立对等关系,然后,每个系统以协商的速率监测来自其他系统的BFD速率。监测速率能够以毫秒级增量设定。当对等系统没有接到预先设定数量的
数据包时,它推断BFD保护的
软件或硬件基础设施发生故障,不管基础设施是标记交换路径、其他类型的隧道还是交换以太网络。BFD部署在
路由器和其他系统的控制平面上。BFD检测到的网络故障可以由转发平面恢复或由控制平面恢复
BFD库(Binary File Descriptor library)
BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件。BFD这个项目本身是binutils项目的一个子项目。BFD把
目标文件抽象成一个统一的模型,比如在这个抽象的目标文件模型中,最开始有一个描述整个目标文件总体信息的"文件头",就跟我们实际的ELF文件一样,文件头后面是一系列的段,每个段都有名字、属性和段的内容,同时还抽象了
符号表、定位表、
字符串表等类似的概念,使得BFD库的程序只要通过这个抽象的目标文件模型就可以实现操作所有BFD支持的目标
文件格式。
现在GCC(更具体地讲是GNU
汇编器GAS,GNU Assembler)、连接器ld、调试器GDB及binutils的其他工具都通过BFD库来处理目标文件,而不是直接操作目标文件。这样做的最大的好处是将
编译器和连接器本身同具体的目标文件格式隔离开来,一旦我们需要支持一种新的目标文件格式,只须要在BFD库里面添加一种格式就可以了,而不需要修改编译器和连接器。到目前为止,BFD库支持大约25种处理平台,将近50种目标文件格式。
当我们安装了BFD开发库以后(在我的ubuntu下,包括BFD开发库的
软件包的名字叫binutils-dev),我们就可以在程序中使用它。