02、BFD原理描述

BFD原理描述

介绍BFD的实现原理。

原理简介

BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。下面以OSPF与BFD联动为例,简单介绍会话工作流程。

图1 BFD会话建立流程图

上图所示是一个简单的网络组网,两台设备上同时配置了OSPF与BFD,BFD会话建立过程如下所示:

  1. OSPF通过自己的Hello机制发现邻居并建立连接。

  2. OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD。

  3. BFD根据收到的邻居信息建立会话。

  4. 会话建立以后,BFD开始检测链路故障,并做出快速反应。

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

如上图所示:

  1. 被检测链路出现故障。

  2. BFD快速检测到链路故障,BFD会话状态变为Down。

  3. BFD通知本地OSPF进程BFD邻居不可达。

  4. 本地OSPF进程中断OSPF邻居关系。

BFD会话建立方式

BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的配置方式不同。BFD通过控制报文中的Local Discriminator和Remote Discriminator区分不同的会话。

  • 静态建立BFD会话

    静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。

  • 动态建立BFD会话

    动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:

    • 动态分配本地标识符

      当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。

    • 自学习远端标识符

      当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。

BFD检测机制

BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。

BFD提供异步检测模式。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down。

BFD会话管理

BFD会话有四种状态:Down、Init、Up和AdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。以BFD会话建立为例,简单介绍状态机的迁移过程。

图3 BFD会话建立流程图

  1. SwitchA和SwitchB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的Remote Discriminator的值是用户指定的;对于动态创建BFD会话,Remote Discriminator的值是0。

  2. SwitchB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。

  3. SwitchB本地BFD状态为Init后,不再处理接收到的状态为Down的报文。

  4. SwitchA的BFD状态变化同SwitchB。

  5. SwitchB收到状态为Init的BFD报文后,本地状态切换至Up。

  6. SwitchA的BFD状态变化同SwitchB。

BFD协议报文

BFD协议报文的格式如图4所示。

图4 BFD协议报文的格式

字段

长度

含义

Vers (Version)

3 bits

BFD协议版本号,目前为1。

Diag (Diagnostic)

5 bits

诊断字,标明本地BFD系统最近一次会话状态发生变化的原因。

  • 0:表示无诊断信息。

  • 1:表示检测时间超时。
  • 2:表示Echo功能失效。
  • 3:表示邻居会话Down。
  • 4:表示转发面复位。
  • 5:表示路径Down。
  • 6:表示级联路径Down。
  • 7:表示AdminDown。
  • 8:表示反向级联路径Down。
  • 9-31:表示预留后续使用。

Sta (State)

2 bits

BFD本地状态:

  • 0:表示管理状态Down。
  • 1:表示运行状态Down。
  • 2:表示初始状态。
  • 3:表示正常UP状态。

P (Poll)

1 bit

参数发生改变时,发送方在BFD报文中置位该标志,接收方必须立即响应该报文。

  • 0:表示发送系统不请求确认。

  • 1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。

F (Final)

1 bit

是否发送响应P标志置位的回应报文由F标志的置位状态决定。

  • 0:表示发送系统不响应一个P比特为1的包。

  • 1:表示发送系统响应一个接收到P比特为1的BFD包。

C (Control Plane Independent)

1 bit

转发/控制分离标志,一旦置1,控制平面的业务状态变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS平滑重启(GR)时,BFD可以继续监测链路状态。

  • 0:通过对比本端与对端的C bit位,二者不都为1,表示BFD报文在控制平面传输。这种情况下,GR期间BFD检测往往会误down,其结果是不可信的,业务不需要进行响应。

  • 1:通过对比本端与对端的C bit位,二者都为1,表示发送系统的BFD实现不依赖于控制平面,BFD报文在转发平面传输,即使控制平面失效,BFD仍然能够起作用。这种情况下,GR期间BFD检测down是可信的,业务将响应down消息并改变拓扑和路由,避免流量丢失。

A (Authentication Present)

1 bit

认证标识。

  • 0:表示会话不需要进行验证。
  • 1:表示会话需要进行验证。

D (Demand)

1 bit

查询请求,置位代表发送方期望采用查询模式对链路进行监测。

  • 0:表示发送系统不希望、或不能工作在查询模式。

  • 1:表示发送系统希望工作在查询模式。

M (Multipoint)

1 bit

为BFD将来支持点对多点扩展而设的预留位。

Detect Mult

8 bits

检测超时倍数,用于检测方计算检测超时时间。

  • 查询模式:采用本地检测倍数。

  • 异步模式:采用对端检测倍数。

Length

8 bits

报文长度,单位为字节。

My Discriminator

32 bits

BFD会话连接本地标识符。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。

Your Discriminator

32 bits

BFD会话连接远端标识符。

  • 0:未知。
  • Non-0:从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”。

Desired Min TX Interval

32 bits

本地支持的最小BFD报文发送间隔,单位为毫秒。

Required Min RX Interval

32 bits

本地支持的最小BFD报文接收间隔,单位为毫秒。

Required Min Echo RX Interval

32 bits

本地支持的最小Echo报文接收间隔,单位为毫秒(如果本地不支持Echo功能,则设置0)。

posted @ 2024-04-15 17:34  博雅塔之客  阅读(14)  评论(0编辑  收藏  举报