电子政务 网络管理 网络技术

BFD技术原理

来源:网络部撰稿人:网络部发布时间:2015-08-13 字体:[] [][关闭][打印]

  一、BFD简介

  1. BFD(Bidirectional Forwarding Detection,双向转发检测)是一套全网统一的检测机制,用于快速检测、监控网络中链路或者IP 路由的转发连通状况。

  2. 为了提升现有网络性能,邻居之间必须能快速检测到通信故障,从而更快的建立起备用通道恢复通信。

  二、常用的故障检测方法

  1. 硬件检测:例如通过SDH(Synchronous Digital Hierarchy,同步数字体系)告警检测链路故障。硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。

  2. 慢Hello机制:通常采用路由协议中的Hello 报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输(例如吉比特速率级)超过1 秒的检测时间将导致大量数据丢失;对于时延敏感的业务(例如语音业务)超过1 秒的延迟也是不能接受的。并且,这种机制依赖于路由协议。

  3. 其他检测机制:不同的协议有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。

  三、BFD的工作机制

  1. 概述:

  ① BFD 提供了一个通用的、标准化的、介质无关、协议无关的快速故障检测机制,可以为各上层协议如路由协议、MPLS 等统一地快速检测两台路由器间双向转发路径的故障。

  ② BFD 在两台路由器上建立会话,用来监测两台路由器间的双向转发路径,为上层协议服务。

  ③ BFD本身并没有发现机制,而是靠被服务的上层协议通知其与谁建立会话,会话建立后如果在检测时间内没有收到对端的BFD 控制报文则认为发生故障,通知被服务的上层协议,上层协议进行相应的处理。

  2. BFD的工作流程

  ① 流程图

  

  

  图1:BFD工作流程图

  ② BFD的建立过程

  1> 上层协议通过自己的 Hello 机制发现邻居并建立连接。

  2> 上层协议在建立了新的邻居关系时,将邻居的参数及检测参数都(包括目的地址和源地址等)通告给BFD。

  3> BFD根据收到的参数进行计算并建立邻居

  ③ 故障出现时的处理方式

  

  

  图2:BFD故障发现处理流程图

  1> BFD 检测到链路/网络故障

  2> 拆除 BFD 邻居会话

  3> BFD 通知本地上层协议进程BFD 邻居不可达

  4> 本地上层协议中止上层协议邻居关系

  5> 如果网络中存在备用路径,路由器将选择备用路径

  3. BFD的检测方式

  ① 单跳检测:BFD 单跳检测是指对两个直连系统进行IP 连通性检测,这里所说的“单跳”是IP的一跳。

  ② 多跳检测:BFD 可以检测两个系统间的任意路径,这些路径可能跨越很多跳,也可能在某些部分发生重叠。

  ③ 双向检测:BFD 通过在双向链路两端同时发送检测报文,检测两个方向上的链路状态,实现毫秒级的链路故障检测。(BFD 检测LSP 是一种特殊情况,只需在一个方向发送BFD 控制报文,对端通过其他路径报告链路状况。)

  4. BFD会话的工作方式

  ① 控制报文方式:链路两端会话通过控制报文交互监测链路状态。

  ② Echo报文方式:链路某一端通过发送Echo 报文由另一端转发回来,实现对链路的双向监测。

  5. BFD的运行模式

  ① 主动模式:在建立会话前不管是否收到对端发来的BFD 控制报文,都会主动发送BFD 控制报文。

  ② 被动模式:在建立会话前不会主动发送 BFD 控制报文,直到收到对端发送来的控制报文。

  注:

  1> 在会话初始化过程中,通信双方至少要有一个运行在主动模式才能成功建立会话

  2> BFD会话建立后有两种模式:异步模式和查询模式

  3> 通信双方要求运行在相同的模式【目前仅支持异步模式】

  A 异步模式:以异步模式运行的设备周期性地发送BFD控制报文,如果在检测时间内对端没有收到BFD 控制报文,则认为会话down。

  B 查询模式:假定有一个独立的方法,确认自己和对端系统的连通性。这样,BFD 会话建立后,会停止周期发送BFD 控制报文,除非需要显式地验证连接性。

  6. BFD的认证方法

  ① Simple:简单字符认证

  ② MD5:MD5 认证

  ③ SHA1:SHA1 认证(Secure Hash Algorithm 1)

  7. BFD的报文格式

  ① BFD控制报文封装在UDP报文中传送,其UDP端口号为3784。

  ② 报文格式

  

  

  图3:BFD报文格式

  ③ 主要字段释义

  1> Vers:协议的版本号,协议版本为1。

  2> Diag:本地协议最后一次从up状态转换到其他状态的原因。

  3> State(Sta):BFD 会话当前状态,取值为:0 代表AdminDown,1 代表Down,2 代表Init,3 代表Up。

  4> Demand(D):设置为1,表示发送协议希望操作在查询模式;设置为0,表示发送协议不区分操作在查询模式,或者表示发送协议不能操作在查询模式。

  5> Poll(P):设置为1,表示发送协议请求进行连接确认,或者发送请求参数改变的确认;设置为0,表示发送协议不请求确认。

  6> Final(F):设置为1,表示发送协议响应一个接收到P 比特为1 的BFD 控制报文;设置为0,表示发送协议不响应一个P 比特为1 的BFD 控制报文。